SST連載・解説記事

  1. HOMEHOME
  2. SSTコラムSSTコラム
  3. SSTtechlog
  4. 09 Burp拡張の作成に挑戦!

(2018年1月10日公開)

SSTtechlog

はじめに

2017年9月頃に、Burp拡張の作成について勉強する機会がありました。 その時に調査した内容や、どんな拡張を作ったのかを紹介したいと思います。

前提環境:

  • OS : Windows10Pro 64bit 日本語版
  • Burp Suite 1.7 系 (free/professional両方対応)
  • Java(JRE/JDK) 1.8系

Burp拡張とは

Burp拡張とは、ローカルHTTPプロキシツールである Burp Suite(以下 Burp) に独自の機能を追加できるプラグインのことです。 Java/Python/Rubyのプログラミング言語で作成できます。 PortSwigger(Burp開発元) の方で “BApp Store” としてburp拡張の一覧を公開していて、他の人達が作成したBurp拡張をそこからダウンロード/インストールすることもできます。

参考資料:

Burp拡張を作るには

  1. Burpを起動してインターフェイス用のソースファイルを取得し、ソースに組み込む。(“Extender” -> “APIs” -> “Save interface files”)
  2. burp.BurpExtender というクラスを作る。IBurpExtenderインターフェイスを実装し、registerExtenderCallbacks()メソッドの中に処理を書いていく。
    • ProxyやScannerなどの機能に対して、さまざまなhook/plugin処理用のインターフェイスが提供されている。
    • インターフェイスの実装クラスを作成して独自の処理を組み込んでいく。

参考資料:

Burp拡張でどんな機能が作れるか

APIドキュメントやサンプルコードを見ると、どんな機能が作れるかイメージが湧いてきます。

例:

  • I(Proxy|Http|Scanner)Listener API
    • ProxyなどのHTTP通信やScannerで検出した問題を取得できる。独自ロガーなど作れる。
  • IContextMenu~, IMenuItemHandler API
    • 右クリックメニューを拡張できる。
  • IMessageEditor~ API
    • HTTPの編集画面をカスタマイズできる。
  • IIntruderPayload~ API
    • Intruderで使うペイロード生成を独自に作れる。

他にもActive/Passive Scan機能に独自の攻撃/検出パターンを追加したり、セッション維持のためのMacro機能を拡張することができるようです。

実際にBurp拡張を作ってみた

実際に、練習としてBurp拡張を作ってみました。 Proxy History の通信ログを独自のログに保存し、WebUIで表示できるようになります。

ソースコードは以下に公開しています。

どんなBurp拡張にしようか考えたポイント:

  • 練習なので、あまり難しく無いのが良い。
    • Proxy通信をロギングするだけなら簡単そう。
  • 普段の業務でも便利に使えると良い。
    • Proxy History や Repeater の画面で、HTTP通信内容をコピペする際に日本語で途切れてしまう不便さを解消したい。
    • (他のBurp拡張でカバーされている問題ではありますが、自分だったらこんな風に解決してみる、というのを試してみたい)
  • 他のBurp拡張がやってないようなことをしたい。
  • SSTの診断サービスの向上につながるような、プロトタイプを作ってみたい。
    • Proxy History のログを簡単に持ち運んで、Burp をインストールしていなくても表示できると便利そう。

以下に、実際に動かしたときの画面や機能、工夫したポイントなど紹介していきます。

設定画面

Burpの”Extender”タブからjarをロードすると、以下の画面のように “ProxyHistoryWebUI” タブが追加されます。

作成したBurp拡張の設定画面

“ProxyHistoryWebUI” タブからはログ保存するHTTP通信のターゲットホスト名と、除外拡張子を設定できます。またログ保存するDB名も設定できます。

独自のWebUIによる文字化け解決

“Start Web UI & Logging” ボタンをクリックすると Proxy History からのログ保存が開始され、同時に保存されたログを表示するための独自WebUIが起動します。 OSのデフォルトブラウザでWebUIが開き、以下のように独自にログ保存されたHTTP通信の一覧が表示されます。

HTTP通信一覧画面

HTTP通信一覧のURLリンクをクリックすると、HTTPリクエスト/レスポンスが表示されます。

HTTP通信詳細画面

ここでHTTPリクエスト/レスポンスの文字コードを選択することができます。 これにより、マルチバイト文字を含んだHTTPリクエスト/レスポンスの文字化けを解消し、通信内容全体をコピー・ペーストすることができます。

単体起動

今回作成したBurp拡張のjarファイルは、ダブルクリックすれば単体で起動させることもできます。 プロキシのロギング機能は使えませんが、「Burpがインストールされていない環境で、他の人からもらった独自ログDBを閲覧だけしたい」ようなユースケースを想定しています。

単体起動画面

つまづいたポイントなど

  • 設定画面など独自UIを作るために、JavaのGUIプログラミング(Swing)が必要だった。
    • Swingは昔からあるので、ググれば大体解決できた。
  • maven-shade-plugin でjarを生成したが、その中に含まれるclassをBurp拡張中からロードできない問題が多発した。
    • classloaderの問題で、SwingUIからのイベント処理中は、Burp拡張のjarに含まれたclassを見つけられない。
    • classloaderを設定できるところは、可能な限り BurpExtender クラスをロードしたclassloaderを設定するようにして、解決できた。
  • IProxyListenerで取得できるのは接続先ホスト名/ポート番号/スキームとHTTP通信のリクエスト/レスポンスまで。
    • 低レイヤーの情報(実際に接続したIPアドレスや、SSL/TLSでのプロトコルバージョンやCipherSuiteなど)は取得できない。
    • 通信エラーが発生したケースも取得できない。
    • (IHttpListenerでもAPIドキュメントを確認した限りでは同様)

まとめと日本語参考記事

以上、簡単ですがBurp拡張の作成に挑戦し、どのような拡張を作ったのかを紹介しました。

今後もBurp拡張を活用し、診断作業の効率化や品質向上に努めていきたいと思います。

最後にBurp拡張の作成や解説に関する日本語記事を紹介します。


文責 : 坂本 昌彦 (研究開発部所属, 社内で使用するWebアプリケーション診断ツールの開発などに従事)

本記事に関するご意見・お問い合わせは坂本までお願いします。

今までのコラム

Webセキュリティをざっくり理解するための3つのMAP

Page Top