診断オプション
診断スキャン中のBurp Scannerの挙動を設定する多数のオプションがあります。これらはスキャン開始時にその場で設定でき、またBurpの設定ライブラリでも管理できます。
注
Burp Suiteの設定ライブラリには組み込み設定が用意されているので、これらのオプションを素早く設定できます。
診断の最適化
診断の目的や対象アプリケーションの性質に応じて、診断ロジックの挙動を調整できます。
次のオプションがあります:
-
診断スピード - 脆弱性をチェックする際に、診断チェックをどの程度徹底的に行うかを設定します。Fast(高速)設定は、リクエストが少なくなり、一部の脆弱性でチェックパターンが少なくなります。Thorough(徹底的)設定は、より多くのリクエストを発行し、脆弱性のより多くのパターンをチェックします。Normal(標準)設定は2つの中間で、多くのアプリケーションにとって適切な、速度と網羅性のバランスがとれた設定です。
-
診断精度 - 特定タイプの脆弱性を報告する場合にScannerが必要とする、証拠の量を設定します。一部の問題は"ブラインド"手法でのみ検出でき、時間遅延やレスポンス差分のような、観測された挙動を元に脆弱性が存在するか推測します。対象の脆弱性が存在しない場合でも、このような挙動はいつでも発生し観測される可能性があるため、エラーメッセージの観測などのような他の手法に比べて、この手法は本質的に過剰検知する傾向にあります。Burpは過剰検知を減らすために、問題を推定したときに何度かテストを繰り返し、送信した入力値と観測した挙動の間に信頼できる相関があるか確認しようとします。精度設定は、Burpがこれらのテストを何回再試行するか制御します。検知漏れを最小化設定は、再試行回数が少なくなり、過剰検知が報告される可能性が高くなりますが、アプリケーションの挙動が安定しない場合でも、存在する脆弱性の見逃しが減ります。過剰検知を最小化設定は、再試行回数が多くなり、問題の過剰検知が報告される可能性が低くなりますが、一部のテストリクエストに結果が返ってこないことがあると、存在する問題を誤って見逃す可能性があります。標準(Normal)設定は2つの中間で、多くのアプリケーションにとって適切な、過剰検知と検知漏れのバランスが取れた設定です。
-
クロールと診断の合計時間の最大 - このオプションは、スキャンごとの最大合計時間を分単位で定義します。診断のみのスキャンや、現在進行中のスキャンでは利用できません。設定されたクロールと診断の合計時間に達した場合、スキャンは一時停止し、イベントログにログが追加されます。
-
影響がなさそうな挿入ポイントの元値のチェックをスキップする - 各挿入ポイントのパラメータの元値を考慮し、無関係と思われるチェックを省略して、スキャンの効率を向上させます。たとえば、通常はファイル名に使われない文字がパラメータ値に含まれている場合、このパラメータのファイルパストラバーサルチェックを省略します。このオプションを使用すると、本当は存在する脆弱性を見逃すリスクを比較的低く抑えながら、スキャンの速度を上げられます。
-
頻繁に発生するパッシブ問題を統合する - 頻繁に発生するパッシブ問題を統合するかどうかコントロールします。このオプションを使用すると、同じ問題(クリックジャッキングなど)が多くの箇所やアプリケーション全体に表示されるノイズを大幅に軽減します。
-
自動的にセッションを維持する - スキャンの診断フェーズ中に自動的にセッションを維持するかどうか制御します。クロールフェーズで発見されたナビゲーション経路を使用して診断フェーズでセッションを維持できる、クロール駆動の診断にのみ適用できます。最近のアプリケーションでは通常、網羅的に診断を行うにはセッションの維持が不可欠です。ただし、セッションの維持に多くのリクエストが必要で負荷があり、必要でないことがわかっている場合には、このオプションを無効にできます。
-
必要な箇所でリダイレクトをたどる - 一部の脆弱性(たとえば、リダイレクトをたどった後に返されるエラーメッセージ内のクロスサイトスクリプティング)は、リダイレクトをたどった場合のみ検出できます。一部のアプリケーションは、送信したパラメータをURLに含む外部のURLへのリダイレクトを発行する場合がありますが、外部アプリケーションへの攻撃を防ぐため、Burpは受信したリダイレクトをすべてたどるわけではありません。スキャンされているリクエストが定義済みのターゲットスコープ内の場合(つまり、スキャンされる対象を制御するためターゲットスコープを使用している場合)、同じスコープ内の場合にのみリダイレクトをたどります。スキャンされているリクエストがスコープ外の場合(つまり、スコープ外リクエストのスキャンを手動で開始した場合)は、(a)スキャンしているリクエストと同じホスト/ポートである場合; かつ(b)全体のスコープ除外ルール(たとえば"logout.aspx")で明示的に指定されていない場合にのみ、Burpはリダイレクトをたどります。
報告される問題
Burpがチェックする項目を制御します。
個別、または検出したアイテムに関連する診断アクティビティの性質に従って、問題タイプを選択できます。個々の項目を選択する場合、使用する検出方法も一部の項目では選択できます。関連する項目のコンテキストメニューから、検出手法を編集を選択してください。
各チェックを実行すると、生成されるリクエストが増え、各診断に時間がかかります。アプリケーションの技術に関する知見を元に、個々の項目のオン/オフを切り替えられます。たとえば、アプリケーションがLDAPを使用していないと分かっている場合、LDAPインジェクションをオフにできます。または、アプリケーションが使用しているバックエンドデータベースが分かっている場合、他のデータベースタイプに固有のSQLインジェクション検出手法をオフにできます。
注
アクティブにラベルされた項目が有効な場合、これらの問題を発見するよう設計されたリクエストをアプリケーションに送信します。選択された項目によっては、これらのリクエストは悪意のあるものと見なされたり、アプリケーションやそのデータに損害を与える可能性があります。
診断中のアプリケーションエラーの処理
スキャンの診断フェーズで発生するアプリケーションエラー(接続エラーや送信タイムアウトなど)の処理方法を制御します。
次のオプションを設定できます:
-
その挿入ポイントの残りのチェックをスキップするまでの、連続して診断チェックが失敗した回数。
-
残りの挿入ポイントをスキップし、診断アイテムを失敗としてフラグを立てるまでの、失敗した挿入ポイントの数。
-
タスクを停止するまでの、連続して失敗した診断項目数、または失敗した診断項目全体の割合。
-
失敗した操作を再試行するために、各診断フェーズの終了時に追加確認する回数。
空白のままにしておくと、無効にできます。
挿入ポイントタイプ
診断する各HTTPリクエストのどこに、Scannerが挿入ポイントを配置するかを制御します。
挿入ポイントの配置位置はきめ細かく設定でき、注意深く設定すれば対象のアプリケーションの性質に合わせた診断を調整できます。挿入ポイントの設定は、スキャンの速度と網羅性のトレードオフになります。
次のカテゴリの挿入ポイントを選択できます:
-
URLパラメータ値 - URLクエリーストリング内の標準的なパラメータ値
-
ボディのパラメータ値 - メッセージボディのパラメータ値。標準的なフォーム送信パラメータ、アップロードするファイル名などマルチパートエンコードされたパラメータの属性、XMLパラメータ値と属性、JSONの値があります。
-
cookieの値 - HTTP cookieの値
-
パラメータ名 - 任意の追加パラメータ名。URLパラメータは常に追加され、POSTリクエストではボディパラメータも追加されます。パラメータ値のみテストしている場合に見逃されているバグを、パラメータ名のテストでよく見つけられます。
-
HTTPヘッダ - RefererとUser-Agentヘッダの値。これらの挿入ポイントのテストによって、ログ出力機能のSQLインジェクションや永続的なXSSの問題をよく見つけられます。
-
ボディ全体 - リクエストボディ全体。リクエストボディがXMLまたはJSONのリクエストに適用されます。
-
URLパスのファイル名 - URLパスのファイル名の部分(最後のフォルダパスの後ろでクエリーストリングの前)
-
URLパスのフォルダ - URLパスのすべてのフォルダトークンの値(ファイル名部分の前)。
注
Burpに自動的に挿入ポイントを割り当てさせるだけではなく、すべてカスタマイズが可能で、リクエスト内の任意の位置を攻撃対象として指定できます。この機能を使うには、リクエストをIntruderに送信し、ペイロードポジションタブで通常の方法で挿入ポイントを定義し、Intruderメニューオプションから定義した挿入ポイントを診断を選択します。または拡張を使って、プログラムでカスタムの挿入ポイントも指定できます。
パラメータ位置の変更オプション
これらの設定は、パラメータの元の位置でのテストに加え、リクエスト内の別の場所にパラメータを移動する設定です。たとえば、各URLパラメータをメッセージボディに移動し再テストできます。または、各ボディパラメータをcookieに移動し、再テストできます。
この方法でパラメータを移動すると、防御フィルタをバイパスできることがよくあります。多くのアプリケーションやアプリケーションファイアウォールは、パラメータがリクエスト内の期待している場所にあると仮定してパラメータごとに入力検証をします。パラメータを別の場所に移動すると、この検証が回避できます。アプリケーションがその後、メインロジックの実装でそのパラメータを取得する場合、パラメータの場所に依存しないAPIを使用している可能性があります。よって、通常は処理される前にフィルタされてしまう入力を、脆弱なコードパスに到達させるのにパラメータの移動は有効です。
パラメータ位置の変更は、次のオプションがあります:
-
URLからボディ
-
URLからcookie
-
ボディからURL
-
ボディからcookie
-
cookieからURL
-
cookieからボディ
パラメータ位置を変更すると、各リクエストパラメータが複数回スキャンされることになるため、スキャンリクストがより多くなります。
挿入ポイントの無視
Burpが特定の診断を省略するリクエストパラメータを指定します。サーバ側インジェクションチェック(SQLインジェクションなど)をスキップするか、すべてのチェックをスキップする設定が別にあります。
サーバ側インジェクションチェックは、さまざまなサーバ上の脆弱性を手探りで調べるために複数のリクエストを送信するので、比較的時間がかかります。リクエスト内の特定のパラメータに脆弱性がないと考える場合(たとえば、プラットフォームやWebサーバのみが使用する組み込みパラメータなど)、Burpにこれらのテストをしないよう指示できます。(クロスサイトスクリプティングのようなクライアント側のバグのテストは、パラメータが脆弱ではない場合にスキャン中の負荷が最小限になるよう抑えられています。)
テストしたくないアプリケーションコンポーネントに処理されるパラメータや、変更するとアプリケーションが不安定になると分かっている場合は、すべてのチェックの省略が便利です。
各一覧のアイテムでは、パラメータタイプ、マッチさせるアイテム(名前または値)、マッチの種類(リテラル文字列または正規表現)、マッチさせる文字列を指定します。
URLパス内の(スラッシュで区切られた)それぞれのURLパスフォルダがパラメータになっている場合があります。これを行うには、検索アイテムのドロップダウンからURLパスのフォルダを、アイテムのドロップダウンで名前を選択し、テストから除外したいURLパスのインデックス番号(1オリジン)を指定します。URLパスのフォルダパラメータは、値でも指定できます。
頻繁に発生する挿入ポイント
頻繁に発生する挿入ポイントでBurp Scannerに重複を避けさせるかどうかを設定できます。設定された場合、Burpは意味がなさそうな(頻繁に発生するが問題が見つかっていない)ことが判明している挿入ポイントを特定し、それらの挿入ポイントにより軽量な診断をするようになります。
この最適化が適用される挿入ポイントのタイプを選択できます。
その他の挿入ポイントオプション
ネストした挿入ポイントを使用するかどうか選択できます。挿入ポイントの元の値が認識可能な形式のデータを含む場合に、ネストした挿入ポイントが使われます。たとえば、URLパラメータにBase64エンコードされたデータがあり、デコードした値にJSONやXMLデータが含まれているなどです。ネストした挿入ポイントのオプションを使うと、ネストした各レベルごとの入力アイテムをそれぞれ挿入ポイントとして作成します。このオプションを使うと、従来通りのリクエストパラメータのみが含まれるリクエストではオーバーヘッドにはならず、異なる形式でデータがカプセル化された複雑なアプリケーションでより多くの攻撃経路にたどりつけます。
膨大な数のパラメータを含むリクエストがあった場合にスキャンが停止するのを防ぐために、ベースリクエストごとに生成される挿入ポイント数の制限を設定できます。この設定により挿入ポイント数が削減されている場合、診断アイテムビューのアイテムのエントリには、省略された挿入ポイントの数が表示されるため、手動でベースリクエストをレビューし、可能なすべての挿入ポイントをフルスキャンする価値があるかどうか判断できます。
JavaScript分析オプション
これらの設定は、Burp ScannerがDOMベースの脆弱性をJavaScriptから検出する方法を制御します。次のオプションがあります:
-
不足しているサイトリソースをリクエストする - Burp ScannerがJavaScriptファイルなど欠損している依存関係に対してHTTPリクエストを行うかどうかを制御します。
-
以前に検出されなかったリソースやデータをスコープ外のホストから取得する - ページで参照されているが、クロール中にBurp Scannerによって発見されていないリソースやデータを、スキャン範囲外の場所から読み込むかどうかを制御します。次のようなものに対して診断のみのスキャンを実行すると、このシナリオが発生する可能性があります:
-
手動でサイトを探索しているときに発見したアイテム
-
以前のスキャンでサイトマップに追加されたが、実際のWebサイトで変更されたアイテム
このオプションを無効にすると、診断中にこれらのリソースを読み込まず、結果として脆弱性を見逃す可能性があります。たとえば、ページは最初は安全であったが、実行時に外部JavaScriptファイルを読み込んだ際に動的に脆弱性が引き起こされるかもしれません。
-
静的/動的分析手法を使用する - Burp Scannerが全体のJavaScript分析で、静的あるいは動的な手法、またはその両方を使用するかどうかを制御します。DOMベースの問題について検出手法の有効化を編集すると、個別の問題タイプごとに静的または動的手法を使用するかどうかも設定できます。
-
アイテムごとの最大静的/動的分析時間 - スキャンされる個々のアイテムごとに静的または動的分析に費やす最大時間を設定できます。非常に大きく複雑なスクリプトを含むアイテムに遭遇した場合、静的分析エンジンが過剰なシステムリソースを消費する可能性があるため、この設定が有用です。最大時間に達したため分析を中断した場合、その影響を受けたアイテムが特定できる警告を表示します。ゼロまたは空白値を指定すると、無制限が適用されます。
注
JavaScript分析は大量のメモリと計算能力を消費する可能性があるため、重要で主要な対象のみに制限した方が望ましい場合があります。さらに、JavaScript分析を実行する場合は、より多くのメモリを割り当ててBurpを起動する必要があります。そのためには、Burpをコマンドラインから起動する必要があります。
プロジェクトの診断オプション上書き
これらの設定で、診断タスク用に設定されている次のグローバル設定を上書きできます。
-
タイムアウト - 値は秒単位です。オプションが0に設定されている場合、Burpはタイムアウトしません。このオプションが空白になっている場合、Burpは設定ダイアログで定義された設定を使用することに注意してください。