SSTエンジニアブログ

SSTのエンジニアによるWebセキュリティの技術を中心としたエンジニアブログです。

Burp Suite Community Editionのインストール~Interceptまで

はじめに

こんにちは。この春からSSTに入社致しました、小野里と申します。今回は新人研修の一環+古い記事のアップデートとして、Burp Suite Community Edition最新版(2021/06/02時点)のインストール~簡単な使い方について書きます。Ver1.6時代の記事はこちらです。
どうせ誰にも見られていない快適な在宅勤務、朝ごはんのハッシュドポテトをつまみながら書いていきたいと思います。

環境

この記事は以下の環境を前提としています。

Windows10 Pro 20H2
Google Chrome 90.0.4430.212
Burp Suite Community Edition v2021.5.1

Burp Suite Community Editionについて

Burp Suiteは、弊社を含めWebアプリケーション脆弱性診断の現場で広く使われているソフトウェアです。今回は無料版であるCommunity Edition(2021年6月現在 v2021.5.1)を使用してみます。以前の無料版はFree Editionという名前でしたが、現在はCommunity Editionに変更され、バージョン表記方法も変わっています。無料版以外に、有料版としてProfessionalとEnterpriseの2種類があります。HTTP通信を確認し改ざんするProxy機能は無料版でも利用可能です。

Burpのインストール

まずはBurpをインストールします。開発兼販売元であるPortSwigger社のサイトより、「Burp Suite Community Edition」「Windows(64-bit)」を選択してダウンロード、インストールしてください。

portswigger.net

インストール時はインストールフォルダとスタートメニューへのアイコン追加の可否を聞かれますが、特に難しい部分は無いと思います。
インストールが完了したら、スタートメニューよりBurp Suite Community Editionを起動してみましょう。

Burpの起動~プロキシの設定

さて、Burpを起動すると、最初にProject選択画面が表示されます。
Community Editionの場合、最上段の「Temporary Project」しか選べませんので、そのまま「Next」をクリックしてください。

f:id:cococig:20210604142056j:plain
Project選択画面

次に、Burpの設定を選択する画面が表示されます。
外部に保存したコンフィグファイルを読み込むこともできますが、今回は初回起動想定なので、最上段の「Use Burp defaults」を選択して「Start Burp」をクリックします。

f:id:cococig:20210604142257j:plain
Config選択画面

無事Startできたら、以下のような画面が表示されます。 f:id:cococig:20210604142407j:plain
まずは画面左下、Event log欄を見てみてください。正常にプロキシが起動できていた場合、現在プロキシが起動されているIPアドレスとポート番号が表示されていると思います。デフォルトでは127.0.0.1:8080です。これを変更することもできます*1が、今回はそのままプロキシに繋いでみましょう。

プロキシを通したブラウザを用意する方法としては2種類あります。1つ目がBurpのビルトインブラウザを使用する方法、2つ目が手動でプロキシ設定を変更する方法です。

BurpのビルトインブラウザはProxy→Interceptタブより「Open Browser」をクリックすると起動します。このブラウザは既にプロキシ設定と証明書設定が済んでいるので、そのまま使い始めることができます。こちらを使用する場合、この後のプロキシ設定と証明書設定は飛ばしてください。

f:id:cococig:20210608171524j:plain
Proxy→Intercept→Open Browserをクリック

次に、手動でプロキシ設定を変更する場合です。Windowsの設定画面より手動プロキシセットアップでプロキシ設定を変更してもよいですが、Google Chrome・Firefoxを利用している場合、拡張機能のProxy Switchy Omega等を利用すると「ブラウザの通信のみをプロキシに通すことができる(他の通信の邪魔にならない)」「簡単にプロキシ設定を変更できる」等のメリットがあり便利です*2。詳しい使い方については解説されているページがたくさんありますので「Proxy Switchy Omega 使い方」などのワードで調べてみてください。
筆者の場合はChromeのプロフィール作成機能からBurp用のプロフィールを作成し、そこにProxy Switchy Omegaを入れています。

chrome.google.com

addons.mozilla.org

f:id:cococig:20210608145200j:plain
Proxy Switchy Omegaのプロキシ設定例

プロキシの設定が完了したら、次に証明書のインストールを行います*3。ブラウザでBurpのプロキシサーバにアクセスしてください。デフォルトの場合、アドレスバーに127.0.0.1:8080と入力すればOKです。正しくプロキシサーバにアクセスできた場合、下図のような画面が表示されます。

f:id:cococig:20210604143123j:plain

画面右上の「CA Certificate」をクリックして、Burpの証明書をダウンロードしてください。ダウンロードできたら、証明書をインストールします。この時、「証明書ストアの選択」では「信頼されたルート証明機関」を選択するようにしてください。証明書のインストール後、一度ブラウザを再起動しておくとトラブルが少ないかと思います。

f:id:cococig:20210604143440j:plain
「信頼されたルート証明機関」を選択

最後に、Burpのプロキシを通して通信を行ってみます。まずはBurpのProxy→Interceptタブより、Intercept is onをクリックし、Intercept is offに変更してください。

f:id:cococig:20210604143835j:plain
青くなっている「Intercept is on」をクリックするとoffに変わります

その後、HTTP historyタブに移動してから、プロキシを通したブラウザで何らかのWebサイトにアクセスすると、Burpの方に通信の履歴が表示されます。第一段階クリアです。

通信の取得

それでは、実際にBurpを通した通信の履歴を見てみましょう。

f:id:cococig:20210604144043j:plain
HTTP Historyタブ

Proxy→HTTP historyタブでは、Burpのプロキシを通した通信の履歴が一覧となって表示されます。各履歴をクリックすると、詳細な内容が確認できます。上の例はGoogleのトップページにアクセスしたときの履歴です。
画面下段、向かって左側にリクエスト、真ん中にレスポンス、右側にINSPECTOR画面が表示されています。リクエストとレスポンス画面では、表示形式の変更(生データか成形されたデータか、改行コードは表示するかなど)や、指定文言の検索などが行えます*4。INSPECTOR画面では、リクエストのcookieやヘッダ、レスポンスのヘッダの一覧が確認できます。

Interceptによる通信の改ざん

通信が確認できたところで、今度は通信内容の改ざんを行ってみたいと思います。

※注意
HTTP通信(リクエスト・レスポンス共に)を改ざんするのは、必ず自分の管理下にあるサーバとの通信に限ってください。自分の管理下に無いサーバに対しての通信を改ざんすると攻撃と見做される可能性があり、場合によっては法的に処罰されることもあります。また、改ざんする内容によってはサーバ上のデータを破壊してしまうこともあり得ますので、実験する際は予めバックアップを取っておくことを推奨します。

今回は例として、テスト用に作ったサイトのリクエストを改ざんしてみます。 このフォームはHTMLのformタグでメールアドレス、お問い合わせ内容、「確認する」ボタンの3つを実装しただけの簡単なものです。メールアドレス・お問い合わせ内容の欄に入力した内容は、URLのクエリとしてGETで次のページに送られます。 次のような内容を入力して「確認する」ボタンをクリックしてみます。
f:id:cococig:20210604160034j:plain
正常に遷移した場合は、次のような画面が表示されます。 f:id:cococig:20210604160200p:plain

それでは、同じ内容のままBurp上でリクエストを改ざんしてみます。 BurpのProxy→Interceptタブ、Intercept is offを再びIntercept is onに切り替えます。この状態で、再び「確認する」ボタンをクリックします。すると、ブラウザの方は読み込み中のまま遷移せず、BurpのIntercept画面上にリクエストが表示されます*5。この画面上に表示されたリクエストは通常のテキストエディタのように自由に書き換えることができます。今回はリクエストURLを存在しない別のページに指定することで、404エラーを起こしてみたいと思います*6

f:id:cococig:20210604180915j:plain
Intercept画面での改ざんの様子

改ざんが完了したら、Burp上で「Forward」ボタンをクリックします。

f:id:cococig:20210604181117j:plain
404エラー画面

無事に(?)エラー画面に遷移しました。
それでは、この時の改ざんされたリクエストを見てみましょう。
BurpのHTTP history画面より、先ほど送ったリクエストを探します。リクエストをクリックして詳細を表示すると、下段のRequest欄が「Original request」に変わっていると思います。この横にある下矢印をクリックして「Edited request」に変更してください。改ざん後のリクエストが表示されます。

f:id:cococig:20210604181712j:plain
「Edited request」を選択

先ほど入力したリクエストに変わっているのが分かるでしょうか。このように、BurpではIntercept機能を利用してリクエストをせき止めることで、リクエストを改ざんしてテストすることができます。

まとめ

今回説明した内容は以下の通りです。

  • Burp Suite Community Editionのインストール
  • プロキシ・証明書の設定
  • BurpでHTTP通信を確認する
  • BurpでHTTPリクエストを改ざんする

これらができるようになれば、脆弱性に対する攻撃を手元で再現可能になります。
初めての記事になりますが、Burpの使い方の参考になれば幸いです。

*1:Proxy→Options→Proxy Listeners で変更可能です

*2:ただし、Firefox版はしばらく更新されていないようです

*3:HTTPS通信を行わない場合、証明書の設定は必要ありません。が、最近はどこもHTTPSなので、特に理由がなければやっておいた方がトラブルが少なく済みます。

*4:IntruderやRepeaterなど、Burpのその他の機能にリクエストやレスポンスを転送することもできますが、ここでは割愛します。

*5:想定と異なるURLへのリクエストが表示された場合は、「Forward」ボタンをクリックしてみてください。最近のブラウザによっては、実際にリクエストを送る前に外部のセキュリティ評価サイトのAPIを叩いてフィッシングサイトでないか確認したり、ブラウザ自身が定期的にブラウザのアップデートがないか確認しています。あるいは、Ajaxを多用したWebサイトですと非同期にいろいろなAjaxリクエストが送信され、このようなHTTPリクエストもInterceptで表示されます。「Forward」ボタンを何回かクリックしていくと、本来改ざんしたかったリクエストが表示されるはずです。

*6:本当はクエリのパラメータを改ざんして表示内容を変更したかったのですが、急遽内容を変更しました。Burpで改ざんしたリクエストはあくまでもサーバ側に送信されるもので、ブラウザ上のURLには反映されません。今回例に挙げたWebサイトはブラウザ上のURLからパラメータを取得・表示していました(window.location.href)。そのため、Burpによる改ざん結果が反映されませんでした。今回はデモとして分かりやすいよう、URLのpathを改ざんする流れにしていますが、例えば受け取ったパラメータからサーバ側で処理を行うようなWebアプリであれば、Burpの改ざん結果がブラウザにも表示されます。