セキュリティ診断後に試してみよう! Burp Suiteのインターセプトを使って脆弱性を再現する方法
セキュリティ診断をしてみたら、脆弱性が出た! まずい。報告書に「Burp Suiteを使ったら再現できる」って書いてあるけど、なんのことやら分からないんだが……。
このように、セキュリティ診断をしてみたものの、脆弱性? 再現?? Burp Suite??? ってなってしまっている皆さん。お気持ち分かります。ブログ担当の私(もちゃじ)もそうでした。
でもご安心ください。この記事を見ながら進めれば、あなたもBurp Suiteを使って脆弱性の再現ができるようになります。
Burp Suiteのインストールから一緒にやっていきましょう!
この記事では、当社のハイブリッドWebセキュリティ診断「ABURIDA」の報告書を例に進めていきます。
Burp Suiteとは?
まずはBurp Suiteの説明から。Burp Suiteは、PortSwigger社が開発と販売をしている、Webアプリケーションの脆弱性を検出するための機能を備えているローカルプロキシツール(ソフトウェア)です。Webセキュリティ診断で広く使われているツールで、当社のハイブリッドWebセキュリティ診断「ABURIDA」の診断員も、なくてはならないツールと言っています。
ABURIDAはツールと手作業によるハイブリッドでセキュリティ診断をしていますが、手作業の診断のメインで使うのがBurp Suiteなんです。ブラウザとサーバー間のリクエストとレスポンスの中身が見れて、かつ改ざん(攻撃)できる。Burp Suiteがないと手作業の診断ができません。なので、報告書にのっとって再現するときも、Burp Suiteを使ったほうが簡単です。
え、そんなプロが本番で使うようなものを私が使うの?と思った方(もちゃじです)、Burp Suiteには無料版と有料版があるので、無料版で試していきましょう。脆弱性の再現なら無料版で問題ありません。
Burp Suiteには四つの製品があり、有料版と無料版がそれぞれ二つずつあります(2024年3月13日現在)。参考までに四つの概要をご紹介しますが、ここでは、Burp Suite Community Editionを使っていきますので、他のものはそういうものがあるんだなぁ、くらいで大丈夫です。いや、スルーしても大丈夫です。
無料版
- Burp Suite Community Edition:手作業による脆弱性検査に必要な基本機能を搭載。初心者や入門者向けの学習や練習に活用できる
- Dastardly,from Burp Suite:CI/CD 環境向けの無料かつ軽量なWebアプリケーションセキュリティスキャナー
有料版
- Burp Suite Professional:手作業での脆弱性発見に必要なあらゆる機能が揃っている。個人利用や中小企業向けに最適
- Burp Suite Enterprise Edition:エンタープライズ対応。セキュリティチームや大手企業向けにおすすめ
Burp Suiteを使って脆弱性を再現するざっくりした手順
脆弱性の再現までの流れは以下です。 具体的には次の章以降で説明しますが、こういうふうにしていくんだな、と思ってください。
▍ざっくりした手順
- Burp Suiteをインストールする
- 再現(疑似攻撃)準備
- 再現(疑似攻撃)攻撃実施
- できた!
Burp Suiteをインストールして使えるようにしよう!
さあ、ではインストールからです!
インストール
こちらのリンクhttps://portswigger.net/burp/releases にアクセスして、Professional / Community(Stable)から無料版のBurp Suite Community EditionとインストールしたいPCのOSを選び、ダウンロードをクリック。
もちゃじはWindowsを使っているので、Windowsを選びます。みなさんの環境に合わせて選んでくださいね。
タイミングによっては下のように「Early Adopter」もしくは「Stable」と二つのダウンロード画面が出てきます。
私たちはStableを選びましょう。
<Early AdopterとStableざっくりとした違い>
- Early Adopter:ソフトウェアのリリース直後で、不具合やバグの可能性あり。新しい機能をいち早く利用したい人やソフトウェア開発に協力したいユーザー向け
- Stable:ソフトウェアリリース後、一定期間に渡ってテストや検証が行われて、安定した動作が保証されている一般ユーザー向け
つづいて、メールアドレスの入力や利用規約に同意して登録します。
ダウンロード完了後の、セットアップ画面では、もし最新バージョンではなかった場合、「アップデートしたバージョンをインストールしますか?」が出てくるので、それを選びインストールしてください。
これでインストールできました。 Burp Suiteが使えるようになりました! Burp Suiteはインストールするだけなので、いろいろ設定がいやーっという人にも優しいのです。
起動〜設定
では起動してみましょう。
スタートメニューからBurp Suite Community Editionを起動。
このようなプロジェクト選択画面が出てきます。私たち無料版チームは「Temporary project」しか選べませんので、そのまま「Next」をクリック。
次に設定の選択画面が出てきます。
「Use Burp default」を選んでください。その他の選択肢は無視してかまいません。外部のコンフィグファイルを読み込むかどうか聞かれているだけなので。で、私たちはそんなもん必要ありません。
そして、「Start Burp」をクリック。
いよいよBurp Suiteを使って再現していく段階に入りました。 画面はこのままにしておいてくださいね。
Burp Suiteのチュートリアルは、タブの一番右「Learn」を押すと出てきます。気になる方はご覧ください。
Burp Suiteでブラウザを開いて該当サイトにアクセス
先ほど、Start Burpまで行ったので、そこから次に進みます。
- 左から三つ目のProxyタブをクリック
- Proxyタブの下の段、左端のInterceptをクリック
- 画面中央にIntercept is off と表示されます。
- その下のオレンジ色のボタン、「open browser」をクリック
- Burp Suiteの中にあるブラウザが開くので、このブラウザに再現したいサイトのURLを入力します
セキュリティの警告が出てくるかもしれません(出ない方もおられます)。ファイアウォールをどうするか聞かれていたら、基本的に「パブリックネットワーク」は危ないので、「プライベート」にしておきましょう。
さあ、準備ができました! あ、でも再現の前に、一つだけ。
インターセプト(Intercept)でなぜ再現ができるのか?
インターセプトはWebブラウザとWebサーバー間の通信を横取りして、中身を確認したり、変更したりする機能です。
通常WebブラウザとWebサーバーが通信するときは、その通信内容はユーザー側から見えません。しかし、インターセプト機能を使うとWebブラウザとWebサーバー間の通信内容をBurp Suiteの画面で確認することができます。
また、通信内容を変更することもできます。例えば、攻撃コードを埋め込んだリクエストを送信することで、脆弱性を再現することができるんです。
そう、再現できるんです!
インターセプトは通常オフになっていて、通信を横取りしていません。インターセプトをオン(通信を横取りする)にすると、Burp Suiteのブラウザで開いているサイトは、読み込み中で止まります。そうすると通信内容(リクエストやレスポンス)がBurp Suite上で表示されますので、何かしらを書き換えると攻撃できるんです。
で、その「何かしら」を書き換えると報告書と同じことができるので、さっそく報告書にのっとって再現してみましょう!
先にいうと、報告書には攻撃するパラメータだけが抜粋して書かれているので、そのパラメータを探し出して、そこを変えるだけで、報告書と同じことができます。
再現にあたっては、くれぐれも、あなた自身が管理していない「よそさまのサイト」では使わないでください。違法ですから。 PCの中にサーバーを立てて、そこに攻撃してくださいね。または、一般公開されていないご自身で開発したWebサイトでお試しください。
さ、やっと本丸の報告書にのっとった再現方法に入っていきます。
クロスサイトスクリプティング(XSS)の再現方法
例として、クロスサイトスクリプティングの脆弱性が発見された箇所の再現をしていきます。
【対象サイト】ABURIDAフルーツショップ (架空)
【報告書記載例/脆弱性発生状況】
【どういった脆弱性?】
レビュー投稿画面からレビューを投稿すると、罠サイトへ誘導されてしまうスクリプトが仕込んであり、不特定多数のユーザーが罠サイトへ誘導されてしまう脆弱性。
具体的には、フルーツショップのレビュー投稿画面に、不正なスクリプトを仕込んで「レビューを投稿する」ボタンを押すと、そのスクリプトが保存され、レビューを表示するときに攻撃が実行されてしまい、不正なスクリプト通りに「アンケートに回答していただけますか?」というポップアップ画面が表示され、そのポップアップの「OK」を押すと罠サイトに移動してしまう、というもの。
<通常>
<攻撃された場合>
クロスサイトスクリプティングの再現手順
報告書に記載された攻撃値を、Burp Suiteの画面上のパラメータに入力して、Burpブラウザ上の画面を確認していく流れになります。
なので、PC上に出しておくといいもの
- Burp Suite画面
- Burp Suiteのブラウザ
- 報告書
1. Burp SuiteのブラウザでABURIDAフルーツショップを開く
2. Burp Suiteのブラウザで脆弱性が発見された箇所まで進み、Burp Suite画面のインターセプトをオンにする
今回の例では、レビュー投稿画面まで進み、「レビューを投稿する」ボタンを押す前に、インターセプトをオンにします。
<Burp Suite画面>
<Burp Suite画面(左)とBurp Suiteブラウザ画面(右)>
3. インターセプトをオンにした状態で、Burp Suiteブラウザ上で「レビューを投稿する」ボタンを押す
Burp Suite画面にはこのようにリクエストが飛んできます。インターセプトをオンにしたのでBurp Suiteにリクエストが流れてきました。
<Burp Suite画面(左)とBurp Suiteブラウザ画面(右)>
通信が表示されるので、ここで通信を改ざんできます。
4. Burp Suite画面で、Commentパラメータを探す
報告書には、このように書かれています。
コメントのパラメータに攻撃値を入れたいので、Burp Suite画面の中からコメントのパラメータを探します。
たくさんの中からコメント(comment)を見つけ出すのが難しい場合は、Burp Suite画面下の検索窓から探すと早いです。
5. 報告書に赤字記載された箇所をコピーして、commentパラメータにそのまま貼り付ける
<報告書の赤字部分>
攻撃値が少しでも違うと再現できないことがあるので、報告書からコピーすることをおすすめします。
Burp Suiteの画面に□□□□と出たら文字化けです。設定がデフォルトのままだと日本語は文字化けしてしまうんです。フォントと大きさの設定は後ほどご紹介します。
<Burp Suite画面(左)とBurp Suiteブラウザ画面(右)>
これで、攻撃値が入りました。
6. Burp Suiteのインターセプトをオフにする
Intercept is on ボタンを押すと
<Burp Suite画面(左)とBurp Suiteブラウザ画面(右)>
インターセプトがオフになり、レビュー投稿がされました。 不正な攻撃値が入ったリクエストが流れます。
<Burp Suite画面(左)とBurp Suiteブラウザ画面(右)>
ちなみにもちゃじがあれ?と一瞬混乱したポイントなのですが、インターセプトが有効な状態では、ボタンの表示は「intercept is on」になっています。なので、インターセプトをオフにしたいときは「intercept is on」ボタンを押します。
7. ブラウザ側で、レビュー投稿後の詳細画面を表示する
「商品一覧ページ」に戻りマスカットのレビューボタンを押します。
ポップアップが出てくるので、攻撃が成功しました。
このポップアップの「OK」をクリックすると、
このような罠サイト(フィッシングサイト)に誘導されてしまいます。
クロスサイトスクリプティングの攻撃の再現ができました。
注意点としては、攻撃値を入れるときに攻撃値が改行されていたり、スペースが入っていたりすると、攻撃が上手くいかないことがあるので、攻撃値を報告書からコピペする際は気をつけてください。 クロスサイトスクリプティング(XSS)について知りたい方は、こちらのデモ動画をご覧ください。
SQLインジェクションの再現方法
こちらも報告書にのっとって見ていきましょう。
【対象サイト】ABURIDAフルーツショップ通販サイト(架空)
【報告書記載例/脆弱性発生状況】
【どういった脆弱性?】
通販サイトに登録されているユーザーのクレジットカード情報が抜き取られてしまう。
具体的にどうするかというと、通販サイトに登録しているクレジットカード情報は、マイページから確認できます。マイページからサーバーへ送られるHTTPリクエストをインターセプト(通信を横取り)して、リクエストの中からクレジットカード情報を取得するリクエストを探し、改ざん。ログインしているマイページに、そのサイトに登録している他のユーザーのクレジットカード情報を表示させます。
<通常>
<攻撃された場合>
SQLインジェクションの再現手順
報告書の記載通りに進めていきます。
1. Burp Suiteのブラウザで該当のサイトを開く
ここでは、「ABURIDAフルーツショップ通販サイト」を開く
2. Burp Suiteのブラウザで脆弱性が発見された箇所まで進み、Burp Suite画面のインターセプトをオンにする
Intercept is offの状態からスタートします。
通販サイトにログイン後(ユーザー「seki」)に、マイページをクリックするときに攻撃するので、マイページをクリックする前にBurp Suiteの「インターセプト」をonにします。
参考までに、ユーザー「seki」でログイン後にマイページを開くと、せきさんのマイページが表示されます。このとき、せきさんの登録クレジットカード情報は二枚です。
3. インターセプトをオンにした状態で、Burp Suiteのブラウザ上で「マイページ」ボタンを押す
Intercept is onにして、「マイページ」をクリック。
Burp Suiteの画面を見てみると、違うリクエストが飛んでいるのがわかります。
4. 報告書の「発見場所URL」の該当箇所をBurp Suiteで探す
報告書には「発見場所URL」「パラメータ名」が書かれています。
また、「マイページのクレジットカード情報を扱っているリクエスト」のパラメータuseridに対して〜と書かれています。
マイページの「クレジットカード情報を扱っているリクエスト=発見場所のURL」のことです。 報告書に記載されている発見場所URLを検索するために、URLの最後の部分をコピーします。
この場合は、get_creditcard.php です。
ここ重要です! ここを間違えると再現できません!
で、Burp Suiteに戻ると、たくさんのリクエストが飛んでいるので、たくさんURLが出てきますが、報告書の「発見場所」に記載されているこのURLだけが必要なので、Burp Suiteの一番下にある検索窓に「発見場所に書かれているURL」=「/demo/get_creditcard.php」を探すために先ほどの「get_creditcard.php」を入れて検索します。
今回のように、一つのクリックで複数リクエストが飛んでいる時は、「Intercept is off」にしてしまうと、複数のリクエストが一気に流れてしまうので、検索窓に入力したら、一つ一つリクエストを流してくれるForwardボタンを押して改ざんしたいリクエストを検索していきます。
「Intercept」は通信を止めるか再開するかの0か100なのに対して、「Forward」は通信を止めた状態から一つずつ流していくという違いがあります。
たくさんリクエストが飛んでいるときは、Forwardボタンで検索! 大事です。
「get_creditcard.php」のリクエストにヒットしました。 検索されると該当の箇所にマーカーが引かれます。
5. 発見場所が見つかったら、パラメータに攻撃値を設定する
報告書には、「マイページのクレジットカード情報を扱っているリクエストのパラメータuseridに対して、以下の値を設定して送信します。」と書かれています。
報告書の発生箇所から引用したパラメータ「userid」を検索窓に入れて攻撃するパラメータを探します。
パラメータを見つけたら、報告書に沿って攻撃値を入れます。
6. インターセプトをオフにします
インターセプトをオフにして、通信を再開させます。
7. 報告書どおりに再現できた!
ブラウザ側で確認すると、こんな感じです。
他のユーザーのクレジットカード情報が表示されました。 報告書通りに再現できました。
SQLインジェクションについて知りたい方は、こちらのデモ動画をご覧ください。
再現でよく使われるBurp Suiteの機能三つ
今回はBurp Suiteのインターセプト機能を使って再現していきました。 Burp Suiteにはよく使われる基本的な機能があるので簡単に紹介します。
インターセプト
今回の再現のメイン、インターセプト。 Webアプリケーションとブラウザ間の通信を途中でインターセプト(傍受、横取り)して、リクエストやパラメータなどの内容を確認する機能。
ヒストリー
インターセプト機能を使用して、どんなリクエストが飛んでいるのか、履歴を確認できる機能。元々のリクエストや、改ざん後の値を確認できます。
リピーター
同じリクエストを繰り返し送信することができる機能。
Burp Suiteフォントとサイズの設定
最初の方で、Burp Suiteインストール後、デフォルトの文字は小さく、日本語は文字化けしてしまうと言いました。ここでは、文字のフォントと大きさの設定方法をお伝えします。
設定からフォントとサイズを変えられます。 まず、「Settings」を開きます。フォント設定は2カ所で変更できます。
赤枠で囲った、各種タブや通信履歴のところのサイズを変更します。
Setting > User > User interface > Display > Appearance
ここからフォントサイズを変えられます。
このようにテーマカラーも変えられます。
文字サイズ変更後、戻ってみると大きくなったのが分かります。
赤枠で囲った、リクエスト・レスポンスの詳細のところのフォントとサイズを変えます。
Setting > User > User interface > Inspector and message editor > HTTP message display
ここからフォントサイズを変えられます。 (デフォルトのCourier Newは、日本語に対応していないようです)
ゴシック体や明朝体にすると日本語が表記されるようになります! フォントはお好みでどうぞ。
脆弱性発見箇所を修正してみよう
Burp Suiteで報告書どおりに進めていくと、脆弱性を再現できるようになっています。というよりも、脆弱性発見箇所の動作確認ができるようになっているんです。修正するための概要も書かれているので、報告書通りに進めていけば修正ができる!
まあここまで脆弱性を再現する方法を書いてきておいてなんですが……。ぜひ修正して、修正前後の動作確認をしてみてください。
ABURIDAでは、再現方法のお問い合わせや修正後の再診断を無料でおこなっています。気になる点やご質問がありましたら、遠慮なくお問い合わせください。修正の結果を確認して、より安全で使いやすいWebサイトやWebアプリケーションにしましょう。
まとめ
セキュリティ診断の「診断結果報告書に書かれた脆弱性を再現する」ことを目的に、ABURIDAの報告書を例に書いてきました。
流れをもう一度書きますね。
- Burp Suiteの無料版Community Editionをインストール
- Burp Suiteからブラウザを開き対象サイトにアクセス
- 報告書に脆弱性の記載があった、サイトの該当ページまで進む
- Burp Suiteでインターセプトをオンにした状態で、報告書に記載された攻撃値を該当箇所にコピペする
- インターセプトをオフにしてリクエストを流し、攻撃する
- 報告書どおりに再現できた!
PC画面に出しておくのは
- Burp Suite
- Burp Suiteのブラウザ
- 報告書
Burp Suiteのインターセプトを使えば再現できることを実感いただけると思います。
少しでも脆弱性への理解の一助になれたらうれしいです!
さ、インストールしてみましょう!
ふう書き終えた
普段ラップトップで事足りているんですが、モニター導入を真剣に考えました。Burp Suiteさん、あなた細かいよね。
ライター/もちゃじ
IT業界に縁なく秘書畑をさすらい、前職はインドで社長秘書。ほぼ日本語とパッションのみで乗り切ったずうずうしさはスキルの一つか。完全なインドア派ながらたまにふらりと旅に出る。行き場のない母性を持て余し、友人の犬を溺愛するもほえられる。体が硬く、インドでヨガティーチャーに笑われたことに深く傷つく一面も。
ITド素人の私がWebセキュリティについて学び、レベルアップしていく(予定です)様子をお届けします。学びを発信することで、少しでもWebセキュリティに関する「難しそう」というイメージが下がり、苦手意識のある方たちに届いたらうれしいです。