認証トークン取得・置換エクステンダー
はじめに
Webセキュリティテストの世界では、自動化が鍵となり、Burp Suiteが第一選択肢です。しかし、Burpを自動スキャンに真に活用するには、適切なプラグインが必要です。そこで登場するのがATORです。このオープンソースのBurpプラグインは、以下のようなさまざまなシナリオにおけるトークン管理と置換を簡素化することで、スキャン機能に革命をもたらすように設計されています。
- アクセストークンとリフレッシュトークンの管理
- XMLおよびJSONリクエストボディ内のトークン置換
- URLおよびCookie内のトークン置換
従来、これらのタスクを達成するには、特にJSONやXMLデータを扱う場合、複雑なマクロ、セッションルール、カスタムエクステンダーが必要でした。当プラグインはこのプロセスを簡素化し、いくつかの重要な利点を提供します。
主な利点:
- メモリ内トークン置換:トークンをメモリ内でシームレスに置換することで重複ログインリクエストを排除し、スキャン効率を向上。
- ユーザーフレンドリーなUX:正規表現を使用して応答メッセージからデータを簡単に抽出し、リクエストに置換。この柔軟性は、JSON、XML、フォームデータなどを含む多様なシナリオで非常に役立ちます。
- スキャン速度の向上:不要なログインリクエストを回避することで、より高速なスキャン速度を実現。プラグインは「トリガーリクエスト」メカニズムを使用して、応答コード401でボディに「Unauthorized request」が含まれるなどのエラー状態を識別します。
プラグインの着想はExtendedMacroプラグインから得ています:https://github.com/FrUh/ExtendedMacro
はじめに(使用開始)
このプラグインを使用するには、以下の手順に従ってください。
- JavaとMavenをインストールします。
- このリポジトリをクローンします。
- pom.xmlがあるクローンしたリポジトリのディレクトリで「mvn clean install」コマンドを実行します。
- 「target」フォルダから依存関係を含む生成されたJARファイルを取得します。
前提条件
プラグインを使用する前に、以下を確認してください。
- マシンにJava環境がセットアップされていることを確認します。
- Burp Suiteを設定してプロキシトラフィックをリッスンします。
- BURPのエクステンダータブからJava環境を設定します。
テストアプリケーションでの使用について(テストアプリケーション(Tiredfulアプリケーション)を https://github.com/payatu/Tiredful-API からインストールしてください)
手順
- エラーを発生させるリクエストを特定します。
- エラーパターンを特定します(詳細は以下のセクション)。
- 正規表現を使用して応答からデータを取得します(サンプルの正規表現値を参照)。
- このデータをリクエストに置換します(ステップ3と同じ正規表現と変数名を使用)。
エラーパターン:
エラー条件を指定する方法は全部で4つあります。
- ステータスコード:401, 400
- ボディ内エラー:ボディコンテンツから任意のテキストを指定(例:Access token expired)
- ヘッダー内エラー:ヘッダーから任意のテキストを指定(例:Unauthorized)
- 自由形式:複数条件を指定するために使用(st=400 && bd=Access token expired || hd=Unauthorized)
エンドツーエンドテストの内訳
- 無効なリクエストの特定:
- 無効なBearerトークンを使用した http://HOST:PORT/api/v1/exams/MQ==/
- エラーパターンの特定:
- 上記のリクエストは401を返します。ここでのエラー条件はステータスコード=401です。
- リクエストデータとの正規表現マッチング
- Authorization: Bearer \w* - この正規表現は渡されたアクセストークンにマッチします。
- 置換 - 置換方法
- マッチしたテキスト(ステップ3の正規表現)を抽出値で置換します(抽出設定は後述。変数名を「token」とします)。
- Authorization: Bearer token - 抽出されたトークンが置換されます。
テストアプリケーションでの使用
アイデア:BURPでTiredfulアプリケーションのリクエストを記録し、ATORエクステンダーを設定し、トークンがATORによって置換されるか確認します。
- BURPで設定したブラウザでテストアプリケーションを開きます。
- http://HOST:PORT/handle-user-token/ からトークンを生成します。
- 上記の手順で取得したAuthorization Bearerトークンを渡して http://HOST:PORT/api/v1/exams/MQ==/ リクエストを送信します。
- ATOR jarファイルをBURPのエクステンダーとして追加します。
- プロキシ履歴のリクエスト(/handle-user-token)を右クリックし、「Authentication Token Obtain and Replace Extender」に送信します。
- 「access_token」の値を選択し、名前を「token」(任意の名前で可)として抽出設定に新しいエントリを追加します。
注:このアプリケーションでは、1回のリクエストでトークンを生成できますが、複数のリクエスト後に生成されることもあります。
- トリガー条件:
- 条件が一致した場合、マクロステップが実行されます。
- ステップ実行後、「Pattern」と「Replacement Area」で指定された値を使用して、受信リクエストを置換します。
- 今回のテストでは、
- エラー条件は401(ステータスコード)
- Patternは「Authorization: Bearer \w*」(抽出値でどのように置換するかを指定する正規表現パターン)
- Replacement Areaは「Authentication: Bearer <ステップ4で指定した名前>」
- 「Add」ボタンをクリックします。
- この例では、1回の置換で受信リクエストを有効にできますが、単一の条件に対して複数の置換を追加することもできます。
- Repeaterから無効なリクエストを送信し、FLOWまたはLogger++でリクエスト/レスポンスの流れを確認します。
- Repeaterからの無効なBearerトークン(http://HOST:PORT/api/v1/exams/MQ==/)は401レスポンスを返します。
- エクステンダーはこの条件にマッチし、記録されたステップを実行開始し、「access_token」を抽出します。
- (手順iiで)抽出したアクセストークンを実際のレスポンス(Repeaterからのもの)に置換し、この無効なリクエストを有効にします。
- Repeaterコンソールに200 OKレスポンスが表示されます。
- 再度ステップ7を実行し、フローを確認します。
- 今回は既存のトークンが有効なため、エクステンダーはステップを呼び出さず、そのトークンを使用します。
使用技術
コントリビューション
行動規範とプルリクエストの提出プロセスの詳細については、CONTRIBUTING.mdをお読みください。
バージョニング
v2.3.0
著者
Synopsys
ライセンス
このソフトウェアはSynopsysによってMITライセンスのもとで公開されています。
謝辞