TOUCH THE SECURITY Powered by Security Service G
こんにちは、セキュリティサービスGの「シン」です。このブログではWebアプリケーションのセキュリティに興味がある方向けの記事を発信していきます。
プロキシツールにも色々ありますが、フリーのツールでこれほど機能が充実しているツールはないと思います。
今回はBurpのProxy機能、Repeater機能、Intruder機能について説明します。
※本記事で使用されているBurpのバージョンは現在のバージョン(最新はv2022.8)と異なりますので、一部操作が異なる可能性があります。ご了承ください。
目次
Burpとは?
Burp Suite (バープ スイート)は、PortSwigger Ltdが開発したJava アプリケーションである。Web アプリケーションのセキュリティや侵入テストに使用されている。プロキシサーバ(Burp Proxy)、Webクローラ(Burp Spider)、侵入ツール(Burp Intruder)、脆弱性スキャナ(Burp Scanner)、HTTPSリピータ(Burp Repeater)などのツールから構成されている。
(出典: フリー百科事典『ウィキペディア(Wikipedia)』Burp Suite)
ローカルプロキシツールのBurp Proxyは、アプリケーションの異常動作をあえて誘発させ、バグや脆弱性を特定することが可能で、不適合なデータを注入することができます。
Burp Intruderは、ウェブアプリケーションに対するパラメータ化された攻撃を自動化できます。アプリケーションにとって、有害なHTTPSリクエストを作成するツールです。
Burp Repeaterは、Webアプリケーションの挙動から脆弱性を特定します。定義されたパラメータ化に従って、HTTPSリクエストを返すことができます。
Webアプリケーションセキュリティ診断について
Burpで行えるWebアプリケーションセキュリティ診断は、自動診断ツール、およびセキュリティ診断技術者が手動でリクエストを送信するパラメータに診断値を挿入し、そのレスポンスの挙動から脆弱性の有無を判定します。
弊社現場でのWebアプリケーションセキュリティ診断は、商用の自動診断ツールを使用して診断を行っています。脆弱性の性質上、自動診断ツールでは検出できないものは診断技術者自らが手動でプロキシツールを用いて診断します。プロキシツールとは、ブラウザとサーバ間のHTTPS通信をキャプチャし、通信内容を閲覧するだけでなく改ざんも可能なツールです。
- Webアプリケーションセキュリティ診断
- Webアプリケーション開発者が開発時のセキュリティ対策の自己チェックする場合
- Webアプリケーションセキュリティ診断結果の再現
- Burp Suite
- OWASP Zap
- Fiddler
Burpは様々な機能を兼ね備えていて、無料版のBurpでもWebアプリケーションセキュリティ診断で活用できる便利な機能が利用できます。では無料版のBurpではどんなことができるのかを紹介していきたいと思います。
まずは、Proxy機能について説明します。
Burp Suiteのインストール
まずは、Burpをインストールします。下記のサイトから、Burp Site(FreeEdition)をダウンロードしましょう。
https://portswigger.net/burp/freedownload
※BurpはJavaアプリのため、Javaの実行環境(JRE)をインストールしておく必要があります。インストールは下記から行えます。
https://java.com/ja/download/
インストールの後、Burpを起動しましょう。まずは「Next」ボタンを押します。
ブラウザ上から、入力フォームやGETパラメータに脆弱性を判定する診断データを入力して、脆弱性が存在するかどうかをチェックすることもできますが、Cookieやhiddenパラメータなどは、画面上からでは診断値を挿入できません。
また脆弱性の有無は、レスポンスヘッダやレスポンスボディ(HTMLソースなど)を見て判定するため、ブラウザ上からでは効率よくチェックが行えません。そのためWebアプリケーションセキュリティ診断では、多くの場合プロキシツールを使用して作業を行います。
では、実際に操作してみましょう。
Burpの初期設定(1) Proxy Listeners
まずBurpプロキシにて初期設定を行います。「Proxy」タブのなかにある「Options」タブ内の「Proxy Listeners」の一行目を選択し「Edit」ボタンを押してください。
※デフォルトは8080 です。競合するポートが設定されている場合はその他の空いているポートを割り当ててください
Burpの初期設定(2) Intercept Server Responses
次に、Burpでレスポンス内容をキャプチャするための設定を行います。
「Proxy」タブ内にある「Options」タブの中に「Intercept Server Responses」があります。「Intercept responses based on the following rules」のチェックボックスにチェックを入れましょう。
Burpの初期設定(3) Upstream Proxy Servers
※こちらは必要な場合のみ行っていただく設定になります。
対象サイトにアクセスするのに外部Proxyサーバの設定が必要な場合は、Burpに下記の設定を行います。必要無い場合は、ブラウザのプロキシサーバ設定へ進んでください。
「User options」タブから「Connections」タブ内にある「Upstream Proxy Servers」の「Add」ボタンを押します。
ブラウザのプロキシサーバの設定
次にブラウザを開き、プロキシサーバ設定を変更します。※Microsoft Edge 使用時 ブラウザのツール→インターネットオプション→「接続」タブ→LAN の設定ボタンからプロキシサーバを以下に変更します。
- IP アドレス:localhost
- ポート番号:8080
※Burpで設定したアドレスとポートを指定します。
ここまで完了したら、サイトにアクセスしてProxy機能を操作してみましょう。
【注意】これからの操作を実施する場合は、必ず実施許可されたサイトまたは自身で作成したローカル環境にあるサイトのみで実施してください。無断でインターネットに公開されているサイトに対して行った場合、不正アクセスとみなされる場合があります。ご注意ください。
インターセプト
Burpの「Proxy」タブの中の「Intercept」タブ内の画面にある「Intercept is on」を「Intercept is off」の状態にします。(Interceptボタンは押すことでON/OFF を切り替えることが出来ます。)
HTTPS通信内容の書き換え
キャプチャした状態で「Intercept」内の「Params」タブの中にCookieやGET、POSTのリクエストパラメータ一覧が表示されます。Valueの値を直接書き換えることで、書き換えしたデータがサーバに送信されます。ここではnameパラメータの値を「SecurityTest」から「SecurityTestTest」に書き換えてみます。
文字列の検索
調べたい文字列がレスポンスのどこにあるか瞬時に確認したい場合は、Burp画面の一番下に調べたい文字列を入力できる入力テキストが使えます。入力すると、右下に「match数」が表示されます。また、入力した文字の背景が黄色い網掛けになります。
操作ログ
書き換えた内容は「Proxy」→「HTTPS history」に表示され、通信はEditedにチェックが入ります。
Repeater機能とは
次に、Burpで使用できるRepeater機能について説明します。Repeater機能とはブラウザ上から何度もHTTPSS通信をBurpでキャプチャせずに、効率よくHTTPSリクエストを繰り返し送信できる機能です。
-
Proxy機能の場合
- ブラウザから操作し、対象画面をBurpに向けてHTTPSリクエストを送信
- Burpで通信をキャプチャして、通信内容を改ざんし、HTTPSリクエストを送信
- WebサーバからのHTTPSレスポンスが、Burpに受信される
- 通信を改竄した結果がブラウザに表示される
-
Repeater機能の場合
- HTTPSリクエストをBurpから直接送信
- WebサーバからのHTTPSレスポンスが、Burpに受信される
Proxy機能のHTTPS historyからRepeater機能を利用する
まずBurpを起動します。Burpのプロキシを設定したブラウザから、対象URLにアクセスしましょう。
※事前準備は「ブラウザのプロキシサーバの設定」を実施してください。
[Proxy]→[HTTPS history]にアクセスしたHTTPS通信が記録されます。[HTTPS history]からRepeater機能を利用したい通信を選択し、右クリックから[Send to Repeater]を選択します。
Repeater機能から直接利用する
Proxy機能のHTTPS historyからでなく、HTTPSリクエストの内容がわかっていれば、コピーしたリクエスト内容を貼り付けて実行することもできます。 HTTPSリクエストの内容をコピーした状態で、[Repeater]タブの[Request]タブ→[Raw]内のテキストエリアに、キーボード操作の貼付または右クリックから[Paste]します。
Repeater機能を利用すれば、Proxy機能よりも効率よくセキュリティチェックを行うことができます。
Intruder機能とは
次に、Burp内で使用可能なIntruder機能について説明していきます。
機能については、主に下記となります。
- 診断値の挿入を自動で行なってくれる
- 検出トリガー(脆弱性有りとする判定方法)を設定可能
- マクロ機能のCookieの引継ぎやトークンの引継ぎも利用可能
ただし自動とはいえ、自分自身でパラメータに診断値を挿入する箇所や、検出トリガーを設定する必要はあります。 筆者は現場で商用のWebアプリケーション診断ツールを利用しているのですが、一部の通信形式でツールが対応していないものがあるため、その場合この機能を利用しています。
Intruderの設定
実際にIntruder機能の利用方法を説明していきます。
Burpを起動してProxyタブから診断したいリクエストをキャプチャしてください。診断するログを選択して、右クリックから[Send to Intruder]を選択します。
Targetを設定する
Targetタブには、診断対象のHost情報を入力します。
Positionsを設定する
まず、[Positions]タブを選択します。ここでは、診断したいパラメータを指定します。
デフォルトでは、Cookieリクエストパラメータ値が「§」で囲まれています。画面右側にある「Auto § ボタン」を押しても、同じ状態になります。マルチパートのパラメータやXMLやJSONパラメータも自動的に認識してくれます。
手動で指定する場合は、(図では見切れてますが)画面右側「Clear § ボタン」を押し、診断値を挿入したい箇所にカーソルを合わせて、画面右側「Add § ボタン」を押して指定します。
-
手動での設定例
- parameter1=test§§ パラメータ値の末尾に診断値を挿入
- parameter2=§testtest§ パラメータ値ごと診断値を置換
- parameter3=§testtesttest§§§ 上記を両方やりたい場合
Payloadsを設定する
[Payloads]タブでは診断値を設定します。
[Payload Options]のテキストボックスに入力し、[Add]ボタンで設定可能です。手打ちでは時間がかかるため、テキストファイルに診断値のリストを作成しておき、[Load]ボタンで読み込む、またはテキストファイル内容を全コピーから[Paste]ボタンで一括挿入できます。
Optionsを設定する
次に、[Options]タブで検出トリガーを設定します。これは、脆弱性が検出されたことを判定するためのものです。
[Grep Match]のテキストボックスに入力して[Add]ボタンで設定できます。手打ちでは時間がかかるため、先ほどと同様にテキストファイルに検出トリガーのリストを作成しておき、[Load]ボタンで読み込むか、テキストファイル内容を全コピーから[Paste]ボタンで一括挿入できます。
特定の文字列を検出トリガーとする場合は、[MatchType]に[Simple string]を選択します。正規表現を利用する場合は、[MatchType]に[Regex]を選択します。
Intruderを利用する
基本的な設定は以上です。右上に[Start attack]のボタンがあるので押すと診断が開始されます。
診断結果のカラムについて説明
診断結果のカラムについての解説です。
Request | 診断した順番を表します |
---|---|
Position | Targetで指定した挿入箇所をNoで表したもの |
Payload | 挿入した診断値 |
Status | 応答したステータスコード |
Error | リクエスト時のエラー有無 |
Redirects followed | リダイレクトが発生した数 |
Timeout | レスポンスのタイムアウト有無 |
Length | レスポンスのbyte数 |
Payload PositionsのAttack typeについて
先ほどの[Payload Positions]の[Attack type]についてもまとめておきます。
Sniper | positionで指定した箇所を、Payload Optionsで設定した値に1つずつ変更して送信 |
---|---|
Battering ram | positionで指定した箇所を、Payload Optionsで設定した値に全て変更して送信 |
Pitchfork | positionで指定した箇所ごとに、Payload Optionsで値を設定して送信。 name=§shin§&age=§36§&address=§chiba§があった場合、name、age、addressごとに変更するものをPayload Optionsで設定します。 |
Cluster bomb | positionの一つを固定しながら他を変えるのを順繰り設定していきます。 position1のPayload Optionsの値を「aaa、bbb」position2のPayload Optionsの値を「ccc, ddd」と設定した場合、始めにposition1の「aaa」が固定され、position2が「ccc, ddd」となって送信。続いてposition1が「bbb」で固定され、position2の「ccc, ddd」が送信されます。 |
まとめ
今回はBurp Suiteについて、インストールから設定、Burpで便利な機能のRepeater機能、Intruder機能まで一挙に説明しました。
ただし、現時点で説明した方法は、”同じHTTPSリクエストを繰り返し送信しても正しい結果が得られるリクエスト”である場合です。サイトの作りによっては、正しく利用できない場合があります。例えば下記のような場合です。
- 一定時間の無操作でセッション状態が破棄される。
- 不正操作によりセッション状態が破棄される。
- 正しい画面遷移でアクセスしないとセッション状態が破棄される。
あまりBurpに詳しくなかった方もかなり使いこなせるようになったのではないでしょうか。
以上、Burp SuiteのBurpのProxy機能、Repeater機能、Intruder機能の説明でした。