Webアプリケーションのセキュリティテストを行うための代表的なツールとしてBurp Suiteがあります。このBurp SuiteはWindows、MacOSやLinuxで利用できますが、例えば以下のような理由により自身のPCにインストールできない/したくないといったこともあると思います。
・セキュリティテストを行うための独立した環境が欲しい
・スペックが足りない
・業務用PCへのインストールが難しい
今回はLinodeでBurp Suiteを動かしてみました。Linodeを使うと推奨の環境でも月額 $20 です。この中には 4TB のネットワークトランスフィーが含まれていますので、予算の上振れもなく安心して使うことができます。また、Linode の Marketplaceを使うと環境設定もとても楽なのですぐに利用できるのもメリットです。
本記事ではBurp Suite Community Editionを対象とします
LinodeでKali Linuxを準備する
Kali Linuxはペネトレーションテスト、セキュリティ脆弱性診断、セキュリティの学習などのために利用されているDebian系列のOSであり、Burp Suite以外にも多くのペネトレーションテスト用のツールが用意されています。LinodeでKali Linuxを構築する手順については以下を参考にしてみてください。
Burp Suiteの初期セットアップと証明書のインポート
Kali Linuxにログオンしたら、画面左上のApplications -> 03-Web Application Analysis -> burpsuiteからBurp Suiteを立ち上げます。
Burp Suiteを立ち上げた際には以下のような利用規約が表示されますので、「I Accept」をクリックします。
Community Editionでは「Temporary project」しか選択できないので、そのまま「Next」をクリックします。
この画面は設定を選択する項目になります。今回は初回のセットアップなので「Use Burp defaults」を選択し「Start Burp」をクリックします。
続いて、Burp Suiteはプロキシとして動作するのですが、このプロキシに接続するための設定をしていきます。
Burp Suiteに接続するための宛先をProxy -> Optionから確認します。
次にBurp Suiteに接続するためにブラウザでプロキシの設定を行います。
今回はKali LinuxにデフォルトでインストールされているFirefoxブラウザでFoxyProxyという拡張機能を使ってプロキシの設定を行います。FoxyProxyで先程確認したプロキシのIPアドレスとポート(127.0.0.1:8080)を設定して保存します。
この状態でブラウザから任意のサイトにアクセスしてもエラーもしくは警告画面が出てしまうので、Burp Suiteの証明書をブラウザにインポートします。
Burp Suite証明書をダウンロードするために、http://127.0.0.1:8080 にアクセスし画面右上のCA Certificateから証明書を保存します。
保存した証明書をブラウザにインポートします。
Firefoxのメニューから設定を開いて、「Privacy & Security」を選択し、Certificatesの項目から「View Certicates」をクリックします。
「Import」から先ほど保存した証明書をインポートします。
ここまでで初期セットアップが完了し、Burp Suite経由で任意のサイトにブラウジングができるようになります。
Burpsuiteを使ってみる
本記事ではよく使われる機能をいくつか試してみます。
脆弱性診断や本記事で記載するテストは「自身で管理するサイト」もしくは「診断を許可されたサイト」以外にしてはいけません
Burp Suiteでキャプチャされた通信を確認する
上記のセットアップが完了した状態で、Firefoxで任意のサイトにアクセスしてみます。
その後、Burp SuiteでProxy -> HTTP historyを選択するとキャプチャされた通信が確認できます。
リクエストの内容を書き換える
Proxy -> Interceptを選択し「Intercept is on」の箇所をクリックし、画像のように"Intercept is on"の状態にする。
この状態で例えば以下のようなログインサイトでログインを試みてみます。
ここでLog inボタンをクリックしてもBurp Suiteでインターセプトされている状態であるため、リクエストはWebサイトへはまだ送信されません。
Burp Suiteにて以下のようにインターセプトされているリクエストが確認できます。
リクエスト内容の中から書き換えを行いたい箇所をクリックし、以下のようにemailのパラメタ値を変えてみます。
書き換えが完了したら「Forward」ボタンからリクエストをWebサイトに送信します。
Proxy -> HTTP historyからEditedにチェックの入ったリクエストを選択すると書き換えて送信したリクエストの内容を確認できます。
Intruder機能を使って入力値検証の不備をみつけてみる
脆弱性の診断はある入力値をリクエストし、それに対するレスポンスをみて脆弱性の有無を確認しますが、Intruder機能はこの入力値のリクエストを自動化することができます。
パラメタ"email"の値に様々な入力をし、ログイン箇所の入力検証のチェックをしてみます。
以下のようなEmail/Passwordでログインを試してみます。
ログインとしては当然失敗となりますが、Proxy -> HTTP historyからBurp Suiteでキャプチャされたリクエストを指定し、右クリックから「Send to Intruder」を選択します。
Intruder -> Positionsに移動すると、上記でIntruderに送ったリクエストを確認することができます。
Intruderの機能では”§”文字が自動的に挿入され、”§”文字で囲われた箇所にペイロードが挿入されます。
本記事ではemailパラメタの値にペイロードを挿入するので、それ以外のペイロード箇所は「Clear §」でクリアしておきます。(ペイロード箇所を範囲選択して「Clear §」をクリックする)
ペイロードを挿入する箇所の設定が終わった後は、Attack Typeとして「Sniper」を選択します。
Intruder -> Payloadsに移動し、ペイロードとして挿入する値を指定します。
アプリケーションに対する標準的な攻撃や調査をするための文字列はこちらのテキストファイルでまとめられています。
https://github.com/fuzzdb-project/fuzzdb/blob/master/attack/sql-injection/detect/xplatform.txt
ペイロードの文字列の指定が完了したら、必要に応じてURLエンコードを無効にして「Start attacks」を実行します。
「Start attacks」を実行すると下記のようなアタックウィンドウが出てきます。
各ペイロード値でリクエストをした際のStatus codeの確認や、特定のリクエストを選択するとリクエストとレスポンスの確認ができます。
今回例としたログインサイトではStatus code 200はログイン成功を意味するため、この結果からSQLインジェクションの脆弱性が存在することがわかります。
まとめ
今回はLinode上にインストールしたKali Linuxで、Burp Suiteのセットアップから簡単な使い方までを紹介しました。何かしらの理由により自身のPCでセキュリティテストができない、ツールのインストールが難しいなどの場合には今回紹介した方法を参考にしてみてください。Linode のマーケットプレイスから容易に Burp Suite を利用できる環境を整えることができます。また、決められた月額を超えることもほぼ無いと思いますので安心してご利用いただけます。
関連記事
アカマイ・テクノロジーズ合同会社のQiitaではLinode関連など開発者向けの記事を記載しております。