TOUCH THE SECURITY Powered by Security Service G

ナレッジ

2022.08.25

Burp Suiteとは?Proxy機能からRepeater機能、Intruder機能まで

こんにちは、セキュリティサービス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 Suite」というプロキシツールです。
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」ボタンを押します。

次に「Start Burp」ボタンを押します。
これで、Burpを起動することができます。
BurpのProxy機能は、Webアプリケーションの通信で、サーバにリクエストを送信する際にBurpがHTTPS通信をキャプチャして、通信内容の閲覧や通信内容の書き換えができる機能です。

ブラウザ上から、入力フォームやGETパラメータに脆弱性を判定する診断データを入力して、脆弱性が存在するかどうかをチェックすることもできますが、Cookieやhiddenパラメータなどは、画面上からでは診断値を挿入できません。

また脆弱性の有無は、レスポンスヘッダやレスポンスボディ(HTMLソースなど)を見て判定するため、ブラウザ上からでは効率よくチェックが行えません。そのためWebアプリケーションセキュリティ診断では、多くの場合プロキシツールを使用して作業を行います。

では、実際に操作してみましょう。

Burpの初期設定(1) Proxy Listeners

まずBurpプロキシにて初期設定を行います。「Proxy」タブのなかにある「Options」タブ内の「Proxy Listeners」の一行目を選択し「Edit」ボタンを押してください。

Bind to Port に適当なポート番号を入力してOKを押します。ここでは8080を指定します。

※デフォルトは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」ボタンを押します。

Proxy hostとProxy portに、外部プロキシのアドレスとポート番号を入力して、OKボタンを押します。

ブラウザのプロキシサーバの設定

次にブラウザを開き、プロキシサーバ設定を変更します。※Microsoft Edge 使用時 ブラウザのツール→インターネットオプション→「接続」タブ→LAN の設定ボタンからプロキシサーバを以下に変更します。

  • IP アドレス:localhost
  • ポート番号:8080
  • ※Burpで設定したアドレスとポートを指定します。

ここまで完了したら、サイトにアクセスしてProxy機能を操作してみましょう。

【注意】これからの操作を実施する場合は、必ず実施許可されたサイトまたは自身で作成したローカル環境にあるサイトのみで実施してください。無断でインターネットに公開されているサイトに対して行った場合、不正アクセスとみなされる場合があります。ご注意ください。

インターセプト

Burpの「Proxy」タブの中の「Intercept」タブ内の画面にある「Intercept is on」を「Intercept is off」の状態にします。(Interceptボタンは押すことでON/OFF を切り替えることが出来ます。)

次に先ほどプロキシ設定したブラウザから、通信をキャプチャしたい前画面まで遷移してから、「Intercept is off」を「Intercept is on」に切り替えます。「Intercept is on」にすることでHTTPS通信がキャプチャできる状態になります。
ボタン、またはリンクを押します。ここでは、筆者が作成したサイトの新規登録の確認ボタンを押し、HTTPS通信をキャプチャします。
BurpがHTTPS通信をキャプチャして、リクエストの通信内容が表示されます。

HTTPS通信内容の書き換え

キャプチャした状態で「Intercept」内の「Params」タブの中にCookieやGET、POSTのリクエストパラメータ一覧が表示されます。Valueの値を直接書き換えることで、書き換えしたデータがサーバに送信されます。ここではnameパラメータの値を「SecurityTest」から「SecurityTestTest」に書き換えてみます。

書き換えが完了したら「Forward」ボタンを押します。Webサーバへ送信され、レスポンスがBurpにキャプチャされます。
セキュリティ診断では、この時のレスポンスの内容を見て、脆弱性の有無をチェックしていきます。

文字列の検索

調べたい文字列がレスポンスのどこにあるか瞬時に確認したい場合は、Burp画面の一番下に調べたい文字列を入力できる入力テキストが使えます。入力すると、右下に「match数」が表示されます。また、入力した文字の背景が黄色い網掛けになります。

次に、また「Forward」ボタンを押します。書き換えた内容がブラウザに表示されます。
Proxy機能の一連の流れはこれで終了となります。

操作ログ

書き換えた内容は「Proxy」→「HTTPS history」に表示され、通信はEditedにチェックが入ります。

Repeater機能とは

次に、Burpで使用できるRepeater機能について説明します。Repeater機能とはブラウザ上から何度もHTTPSS通信をBurpでキャプチャせずに、効率よくHTTPSリクエストを繰り返し送信できる機能です。

    Proxy機能の場合
  1. ブラウザから操作し、対象画面をBurpに向けてHTTPSリクエストを送信
  2. Burpで通信をキャプチャして、通信内容を改ざんし、HTTPSリクエストを送信
  3. WebサーバからのHTTPSレスポンスが、Burpに受信される
  4. 通信を改竄した結果がブラウザに表示される
    Repeater機能の場合
  1. HTTPSリクエストをBurpから直接送信
  2. WebサーバからのHTTPSレスポンスが、Burpに受信される
Repeater機能は、ブラウザを操作しなくても効率よくHTTPSリクエストを送信することができます。次に、Repeater機能を実際に操作してみましょう。

Proxy機能のHTTPS historyからRepeater機能を利用する

まずBurpを起動します。Burpのプロキシを設定したブラウザから、対象URLにアクセスしましょう。

※事前準備は「ブラウザのプロキシサーバの設定」を実施してください。

[Proxy]→[HTTPS history]にアクセスしたHTTPS通信が記録されます。[HTTPS history]からRepeater機能を利用したい通信を選択し、右クリックから[Send to Repeater]を選択します。

[Repeater]→[Request]に選択したHTTPS通信の内容が反映されます。[Raw]内を直接書き換えるかまたは、[Prams]タブを選択してリクエストパラメータ一覧が表示されるので、リクエストパラメータ一覧から内容を書き換えて[Go]ボタンを押します。
[Response]タブにHTTPSレスポンスが受信されます。[Request]タブに戻り、[Go]ボタンを押すことで繰り返して実行できます。

Repeater機能から直接利用する

Proxy機能のHTTPS historyからでなく、HTTPSリクエストの内容がわかっていれば、コピーしたリクエスト内容を貼り付けて実行することもできます。 HTTPSリクエストの内容をコピーした状態で、[Repeater]タブの[Request]タブ→[Raw]内のテキストエリアに、キーボード操作の貼付または右クリックから[Paste]します。

HTTPSリクエストの内容が反映されたら、[Go]ボタンを押すとポップアップがあがります。ポップアップが出てきたら、対象サイトのHostとPortを入力してください。HTTPSを利用している場合は、Use HTTPSにチェックを入れてください。編集したい場合は、画面右上のエンピツマークのボタンから編集できます。
[Response]タブにHTTPSレスポンスが受信されます。
Repeater機能の利用方法の説明は以上です。

Repeater機能を利用すれば、Proxy機能よりも効率よくセキュリティチェックを行うことができます。

Intruder機能とは

次に、Burp内で使用可能なIntruder機能について説明していきます。

機能については、主に下記となります。

  1. 診断値の挿入を自動で行なってくれる
  2. 検出トリガー(脆弱性有りとする判定方法)を設定可能
  3. マクロ機能のCookieの引継ぎやトークンの引継ぎも利用可能
Proxy機能やRepeater機能は自らが診断値を挿入し、レスポンスを見て脆弱性があるかを確認しますが、Intruder機能はこれらの機能を自動で行なってくれるため、入力ミスや確認ミスがなく診断を確実に実施可能です。商用のWebアプリケーション診断ツールと同じことができます。

ただし自動とはいえ、自分自身でパラメータに診断値を挿入する箇所や、検出トリガーを設定する必要はあります。 筆者は現場で商用の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§§§ 上記を両方やりたい場合
この画面内に[Attack type]というリストがありますが、今回はデフォルトの[Sniper]を選択してください。

Payloadsを設定する

[Payloads]タブでは診断値を設定します。

[Payload Options]のテキストボックスに入力し、[Add]ボタンで設定可能です。手打ちでは時間がかかるため、テキストファイルに診断値のリストを作成しておき、[Load]ボタンで読み込む、またはテキストファイル内容を全コピーから[Paste]ボタンで一括挿入できます。

Optionsを設定する

次に、[Options]タブで検出トリガーを設定します。これは、脆弱性が検出されたことを判定するためのものです。

[Grep Match]のテキストボックスに入力して[Add]ボタンで設定できます。手打ちでは時間がかかるため、先ほどと同様にテキストファイルに検出トリガーのリストを作成しておき、[Load]ボタンで読み込むか、テキストファイル内容を全コピーから[Paste]ボタンで一括挿入できます。

特定の文字列を検出トリガーとする場合は、[MatchType]に[Simple string]を選択します。正規表現を利用する場合は、[MatchType]に[Regex]を選択します。

最後に一番下の[Redirections]に[Always]を選択します。この設定をすることでリダイレクトが発生した場合にリダイレクト先も[GrepMatch]で設定した文字列が含まれているかが確認してくれます。

Intruderを利用する

基本的な設定は以上です。右上に[Start attack]のボタンがあるので押すと診断が開始されます。

今回のフリーエディションでは、リクエスト間隔に制限があるため遅めになっています。[Start Attack]は複数で実行できるので、指定パラメータを複数に分割して実施することで診断時間を軽減できます。
画面一番下が[Finished]になれば診断終了です。
詳細を確認したい場合は、任意の行を選択するとリクエスト・レスポンスの情報が確認できます。カラム名をクリックして、ソート可能です。

診断結果のカラムについて説明

診断結果のカラムについての解説です。

Request 診断した順番を表します
Position Targetで指定した挿入箇所をNoで表したもの
Payload 挿入した診断値
Status 応答したステータスコード
Error リクエスト時のエラー有無
Redirects followed リダイレクトが発生した数
Timeout レスポンスのタイムアウト有無
Length レスポンスのbyte数
なお、これより右側は[Options]の[Grep Match]で設定した文字列が含まれているかが確認できます。含まれている場合はこのようにチェックが入ります。

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機能の説明でした。

記事一覧に戻る