1. BurpSuite
1.1. BurpSuiteの基本知識
1.1.1. BurpSuiteとは
Burp SuiteはWebアプリケーション侵入テストを実施するために機能するように設計されたJavaベースのフレームワーク。 Burp SuiteはブラウザとWebサーバ間のすべての HTTP/HTTPS トラフィックをキャプチャして操作できるようにする。 Webリクエストがターゲットサーバーに到達する前に傍受、表示、変更したり、ブラウザが受信する前に応答を操作したりできる機能がシステムのコアとなる。
1.1.2. BurpSuite Community Editionで提供される機能
Burp Suiteの主な機能を提示する。
- Proxy
- Burpプロキシにより、Web アプリケーションとの対話中に、リクエストと応答の傍受と変更が可能となる
- Repeater
- リピーターを使用すると、同じリクエストを複数回キャプチャ、変更、再送信できる。この機能は、試行錯誤を通じてペイロードを作成する場合 (SQLi - 構造化照会言語インジェクションなど)、またはエンドポイントの機能の脆弱性をテストする場合に役立つ
- Intruder
- Burp Suite Community にはレート制限があるが、intruderではエンドポイントにリクエストをスプレーすることができる。これは、ブルートフォース攻撃やエンドポイントのファジングによく利用される
- Decoder
- Decoderはキャプチャした情報をデコードしたり、ペイロードをターゲットに送信する前にエンコードしたりできます。この目的のために代替サービスが存在しますが、Burp Suite 内で Decoder を活用すると非常に効率的になる。
- Comparer
- Comparer を使用すると、ワード レベルまたはバイトレベルで2つのデータを比較できる。Burp Suiteに限定されたものではないが、単一のキーボード ショートカットを使用して、潜在的に大規模なデータ セグメントを比較ツールに直接送信できる機能により、プロセスが大幅に高速化される。
- Sequencer
- シーケンサは通常、セッションCookie値やその他のランダムに生成されたとされるデータなどのトークンのランダム性を評価するときに使用されます。これらの値の生成に使用されるアルゴリズムに安全なランダム性が欠けている場合、壊滅的な攻撃が行える可能性がある。
Burp Suiteには拡張機能がありBurp Suite Extenderモジュールと呼ばれ、それらを使用するとフレームワークへの拡張機能の迅速かつ簡単なロードが可能になり、BApp Storeとして知られるマーケットプレイスではサードパーティ モジュールのダウンロードが可能となっている。
1.1.3. BurpSuiteのUI
ダッシュボード
Burpダッシュボードは4つの象限に分割されており、左上から反時計回りにラベルが付けられている。
- Tasks ... アプリケーションの使用中にBurp Suiteが実行するバックグラウンドタスクを定義することができる。Burp Suite Community では、アクセスしたページを自動的に記録するデフォルトの「ライブ パッシブ クロール」タスクがあり、このモジュールの目的には十分となる。Burp Suite Professional では、オンデマンド スキャンなどの追加機能が提供されている。
- Event Log ... イベントログにはプロキシの開始など、Burp Suiteによって実行されたアクションに関する情報や、Burp を介して行われた接続に関する詳細が表示される。
- Issue Activity ... このセクションは Burp Suite Professional に固有のものである。自動スキャナーによって識別された脆弱性が表示され、重大度によってランク付けされ、脆弱性の確実性に基づいてフィルタリングすることができる。
- Adiversary ... アドバイザリ セクションでは、参照情報や推奨される修復策など、特定された脆弱性に関する詳細情報が提供される。この情報はレポートにエクスポートできます。Burp Suite Couumnityでは、このセクションに脆弱性が表示されない場合がある。
ナビゲーションとショートカット
デフォルトのナビゲーションは主に上部のメニューバーで行うことができ、モジュール間を切り替えたり、各モジュール内のさまざまなサブタブにアクセスしたりできる。サブタブはメイン メニュー バーのすぐ下の2番目のメニューバーに表示される。
- モジュールの選択 ... メニューバーの一番上の行には、Burp Suite で利用可能なモジュールが表示される
- サブタブ ... 選択したモジュールに複数のサブタブがある場合メインメニューバーのすぐ下に表示される2番目のメニュー バーからアクセスできる
またTab移動のためのショートカットキーは以下の通り。
ショートカット | タブ |
---|---|
Ctrl + Shift + D | ダッシュボード |
Ctrl + Shift + T | Targetタブ |
Ctrl + Shift + P | Proxyタブ |
Ctrl + Shift + I | Intruderタブ |
Ctrl + Shift + R | Repeaterタブ |
Burpプロキシ
Burpプロキシによりユーザーとターゲット Web サーバー間のリクエストと応答のキャプチャが可能となる。 傍受したトラフィックは、操作したり、さらなる処理のために他のツールに送信したり、宛先への継続を設定することができる。
- intercept
- リクエストはインターセプトされるためターゲット サーバーへの到達が阻止される。
- リクエストは「Proxy」タブに表示され、転送(Forward)、ドロップ(Drop)、編集(Edit)、他のBurpモジュールへの送信などのさらなるアクションが可能
スコープとターゲティング
Burp プロキシを使用する際の最も重要な機能の 1 つはスコープである。 すべてのトラフィックをキャプチャしてログに記録することは、特に特定のWebアプリケーションのみに焦点を当てたい場合に使用できる。
プロジェクトのスコープを設定することで何がプロキシされBurp Suiteに記録されるかを定義できる。 設定方法は以下の通り。
Target
タブに切り替え- 左側のリストから対象を右クリックして
Add To Scope
を選択 - Burp はスコープ内にないもののログ記録を停止するかどうかを選択する用に求めるため
yes
を選択
スコープを確認するには「traget」タブ内の「Scope Settings」サブタブに切り替える。
1.2. Repeaterの使い方
1.2.1. Repeaterの概念
Repeater はエンドポイントの手動での探索とテストに非常に役立つ仕組みである。 これは傍受したリクエストを変更して、選択したターゲットに再送信したり、リクエストを複数回編集して再送信することができるものである。
1.2.2. 基本的な使い方
- リクエストがProxy moduleでキャプチャされたら、リクエストを右クリックして [ Send to Repeater ] を選択
- キャプチャされたリクエストが Repeater ビューでアクセスできる
- [ Send ]ボタンを押すと Responseを確認できる
- リクエスト内容を変更する場合は Request ビューで変更して送信を押す
- 例:
Connection: Open
にするとConnection: keep-alive
でレスポンスが返る
- 例:
1.2.3. Repeaterの詳細項目
メッセージの分析
Repeater ビューでは以下内容それぞれで表示できる。
- Pretty ... デフォルトのオプションで、生の応答を受け取り、読みやすさを向上させるためにわずかな書式設定の拡張を適用する
- Raw ... 追加のフォーマットを行わずに、サーバーから直接受信した未変更の応答を表示する
- Hex ... 選択すると、Byte レベルの表現で応答を調べることができる。バイナリファイルを扱う場合に特に便利
- Render ... レンダリング オプションを使用すると、Web ブラウザに表示されるようにページを視覚化できる
[Show non-printable]
ボタンではPrettyまたはRawオプションでは表示できない文字の表示が可能となる。
例えば、\r\n
などの改行文字などが見れる。
Inspector
InspectorではRepeater モジュールの Request ビューと Response ビューの補足機能を提供する。 リクエストとレスポンスの視覚的に整理された情報を取得したり、上位レベルのインスペクターを使用して行われた変更が同等の生のバージョンにどのような影響を与えるかを実験するためにも使用される。
リクエストに関係するセクションは通常、変更でき、項目の追加、編集、削除が可能となる。 表示および/または編集に使用できるその他のセクションは以下の通り。
- Request Query Parameters .... URL 経由でサーバーに送信されるデータを指す(
?redirect=true
など) - Request Body Parameters ... POST リクエストの一部として送信されたデータはすべてこのセクションに表示され、再送信する前にパラメータを変更できるようになる
- Request Cookies ... 各リクエストで送信される Cookie の変更可能なリストが含まれる
- Request Headers ... リクエストとともに送信されたヘッダーを表示、アクセス、変更 (追加または削除を含む) できるようになる。これらのヘッダーの編集は、Webサーバーが予期しないヘッダーにどのように応答するかを調べるときに役立つ。
- Response Headers ... リクエストに応答してサーバーから返されたヘッダーが表示する。サーバーから返されるヘッダーを制御できないため、これを変更することはできない。このセクションはリクエストを送信してレスポンスを受信した後にのみ表示される。
1.3. Intruderの使い方
Burp Suite の Intruder モジュールは、自動化されたカスタマイズ可能な攻撃を可能にする。 リクエストの特定の部分を変更し、さまざまな入力データを使用して反復テストを実行する機能がある。
このモジュールはファジングやブルートフォースなどのタスクに特に役立つ。
1.3.1. Intruderの概念
Intruderは自動化されたリクエストの変更と入力値の変化による反復テストが行えるツール。 キャプチャされたリクエストを使用することにより、ユーザー定義の設定に基づいて値をわずかに変更した複数のリクエストを送信できる。
キャプチャされたリクエストを使用することにより、Intruder はユーザー定義の設定に基づいて値をわずかに変更した複数のリクエストを送信できる。 この機能はWfuzz やffufなどのコマンドラインツールに相当する。
ただしIntruderには Burp Community Edition の場合はレート制限がある。
1.3.2. Intruderのビュー
Intruderの項目は以下の通り。
- Positions ... 攻撃タイプを選択し、リクエストテンプレート内のペイロードを挿入する場所を構成できる
- Payloads ... ここでは [Postitons]タブで定義された位置に挿入する値を選択できる。ワードリストから項目をロードするなど、さまざまなオプションがある。これらのペイロードがテンプレートに挿入される方法は[ Postitons ]タブで選択した攻撃タイプによって異なる
- Resource pool ... このタブはBurp Community Edition では特に役に立たない。このタブでは Burp Professional のさまざまな自動化タスク間でリソースを割り当てることができる
- Settings ... 攻撃動作を構成できる。特定のテキストを含むリクエストにフラグを立てたり、リダイレクト (3xx) レスポンスへの Burp のレスポンスを定義したりできる
Positions
Positionsではペイロードを挿入する場所を設定できる。
また自動敵に可能性が最も高い位置を自動的に識別し、§
を挿入しようとするが、手動でも設定できる。
Add §
やClear §
、Auto §
により、ポジションの追加、クリア、および自動的な再選択のプロセスが可能。
Payloads
Payloadsでは攻撃用のペイロードを作成、割り当て、構成できる。 またPayloadsは4つのセクションに分かれている。
- Payload sets
- ペイロードセットを設定する位置を選択し、使用するペイロードのタイプを選択できる
- Payload settings
- 現在のペイロードセットに対して選択されたペイロードタイプに固有のオプションを提供する
- ファイルからのペイロードのロードを使用して、セットにペイロードを手動で追加またはセットから削除できる
- Payload processing
- セット内の各ペイロードがターゲットに送信される前に適用されるルールを定義できる
- すべての単語を大文字にしたり、正規表現パターンに一致するペイロードをスキップしたり、他の変換やフィルタリングを適用したりできる
- Payload encoding
- ペイロードのエンコードオプションをカスタマイズできる
1.3.3. Intruderの攻撃タイプ
Burp Suite Intruder の[Positions]タブには、攻撃タイプを選択するためのドロップダウンメニューがある。 Intruder は 4 つの攻撃タイプを提供する。
- スナイパー攻撃タイプ
- ペイロードを循環して、リクエストで定義された各位置に一度に 1 つのペイロードを挿入する
- ハンマー攻撃タイプ
- すべてのペイロードを同時に送信し、各ペイロードをそれぞれの位置に挿入する
- ピッチフォーク攻撃タイプ
- 異なるペイロードで複数の位置を同時にテストできる
- クラスター爆弾タイプ
- スナイパーとピッチフォークのアプローチを組み合わせたもの
スナイパー攻撃タイプ
スナイパー攻撃タイプはBurp Suite Intruder でデフォルトで最も一般的に使用される攻撃タイプ。 パスワードの総当たり攻撃やAPI エンドポイントのファジングなどの単一位置攻撃に特に効果的な攻撃となる。
これはusername
やpassword
のPOSTする文字をPostitons
で設定し、単語リストで総当たり攻撃する例がそれにあたる。
POST /support/login/ HTTP/1.1
Host: MACHINE_IP
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 37
Origin: http://MACHINE_IP
Connection: close
Referer: http://MACHINE_IP/support/login/
Upgrade-Insecure-Requests: 1
username=§pentester§&password=§Expl01ted§
ハンマー攻撃タイプ
ハンマー攻撃タイプはスナイパー攻撃タイプのように各ペイロードを各位置に順番に置き換えるのではなく、同じペイロードをすべての位置に同時に配置する攻撃タイプ。 ハンマー攻撃タイプは連続した置換を必要とせずに、複数の位置に対して同じペイロードを一度にテストしたい場合に便利となる。
ピッチフォーク攻撃タイプ
ピッチフォーク攻撃タイプではポジションごとに1つのペイロードセット(最大 20)を利用し、すべてを同時に反復処理して総当たり攻撃を行う。 つまりそれぞれのパラメータに対して単語リストを用いてリクエストを行える。ただし単語リストの全通りを試行するわけではない(全試行を行うのはクラスター爆弾タイプ)
ピッチフォーク攻撃タイプは資格情報スタッフィング攻撃を実行する場合 や複数のポジションで個別のペイロード セットが必要な場合に特に役立つといえる。
クラスター爆弾攻撃タイプ
クラスター爆弾攻撃タイプはピッチフォーク攻撃タイプに単語リストの組み合わせ全通りを試行できるようにした攻撃タイプ。 しかし、すべての試行を送信するため大量のトラフィックを生成する可能性があるので注意することが重要となる。
クラスター爆弾攻撃タイプは、ユーザー名とパスワード間のマッピングが不明な資格情報のブルートフォースシナリオに特に役立つといえる。
1.4. Decoderの使い方
Decoder モジュールはユーザー データ操作機能を提供する。 攻撃中に傍受されたデータをデコードするだけでなく、自分のマシン上のデータをエンコードして、ターゲットへの送信の準備をする機能もある。
Decoder を使用すると、データのハッシュサムを作成したり、提供されたデータを平文に戻るまで再帰的にデコードしようとする提供も提供する。
1.4.1. Decoderによるエンコードとデコード
手動エンコードとデコードのオプションには以下のようなものがある。
- Plain
- 平文を指す
- URI
- ASCII 文字コードの文字を 16 進形式で置き換え、その前にパーセント記号 (%) を付ける
- HTML
- 特殊文字が
&
や;
で置き換えられる。
- 特殊文字が
- Base64
- 一般的に使用されるエンコード方式
- ASCII Hex
- ASCII 表現と 16 進数表現の間でデータを変換する
- Hex, Octal, Binary
- 16進数、8進数、2進数への変換
- Gzip
- データを圧縮しブラウザ送信前にファイルとページのサイズを削減する
16進数形式
ASCII 形式でデータを入力することもできるが、バイト単位の入力編集が必要な場合もある。
この場合、デコード オプションの上で選択できるHex View
が役立つ。
スマートデコード
エンコードされたテキストの自動デコードを試みる。
1.4.2. Decoderにおけるハッシュ
Decoderでは Burp Suite 内でデータのハッシュサムを直接作成できる。
Hash
オプションでアルゴリズムを選択できる。
1.5. Compareの使い方
Comparer は ASCII ワードまたは Byte ごとに 2 つのデータを比較する機能を提供する。
例として、ログイン ブルートフォース攻撃またはクレデンシャル スタッフィング攻撃を実行する場合、長さの異なる 2 つの応答を比較して、違いがどこにあるのか、その違いがログインの成功を示しているかどうかを確認したい時などに使用する。
1.6. Sequencer
Sequencerはトークンのランダム性を比較できる。 トークンは、フォーム送信を保護するために使用されるセッション Cookie またはクロスサイトリクエストフォージェリ( CSRF ) トークンである可能性がある。
そのためトークンが安全に生成されない場合、理論的には、今後のトークンの値を予測できるということになる。
1.6.1. トークン分析の手法
Sequencer でトークン分析を実行するには主に2つの方法がある。
Live Capture
一般的な方法であり、シーケンサーのデフォルトのサブタブ。 Live Captureを使用すると、分析のためにトークンを生成するリクエストをシーケンサーに渡すことができる。
例としてサーバーが Cookie で応答することがわかっていて、ログイン エンドポイントへの POST リクエストを Sequencer に渡したい場合がある。
このときリクエストが渡されると、シーケンサーにライブキャプチャを開始するように指示できる。その後、同じリクエストを何千回も自動的に実行し、生成されたトークン サンプルを分析用に保存します。十分なサンプルを収集した後、シーケンサーを停止し、キャプチャされたトークンを分析できるようにできる。
Manual Load
事前に生成されたトークン サンプルのリストを分析のためにシーケンサーに直接ロードできる方法。
1.7. BurpSuiteの拡張機能
Burp Suiteの拡張機能インターフェースはExtentions
メニューで提供される。
1.7.1. BApp Store
BApp Storeでは公式拡張機能を簡単に見つけてツールにシームレスに統合できる。
拡張機能はさまざまな言語で作成できますが、Java と Python が最も一般的な選択肢となる。