Railsで作った脆弱性をBurp Suiteで診断してみる

こんにちは、GMOアドマーケティングのR.Yです。

今回はBurp Suiteによる脆弱性診断をしていきます。前回OWASP ZAPを使って自動でテスト用のサイトを診断し、複数の脆弱性を確認することができました。そして、今回はそこで検出された「SQLインジェクション」の脆弱性についてBurp Suiteを使って詳しく確認していきます。

このブログは前回投稿したこちら↓の続きになります。

この記事は GMOアドマーケティング Advent Calendar 2020 14日目の記事です。はじめにこんにちは、GMOアドマーケティングのR.Yです。今回はタイトルの通り、Railsで作った脆弱性をOWASP ZAPで診断してみたいと思います。自分は主にRailsを使ったWebアプリの開発やWebアプリの脆弱性診断を行うことが多いので、この記事を書くことによってRailsのセキュリティ周りや脆弱性診断を行うツールについての理解をより深められたら良いなと思います。1.用意するものRuby On Rails 5.2.3OWASP ZAP 2.9.02.調べる脆弱性SQLインジェクション2-1.SQ...

ご覧になっていない方はこちらを見てから読むことをお勧めします!

1. Burp Suiteとは

Burp SuiteはローカルプロキシツールでWebサーバとブラウザ間の通信内容を確認することができます。また、ブラウザからのリクエストを一旦キャプチャして、内容を変更した上でWebサーバへリクエストすることもできます。

これを利用することで、任意のパラメータ値を手動で簡単に指定することができ、OWASP ZAPによる脆弱性診断より正確な診断を行うことができます。とはいえWebアプリ上で行われるであろう全てのリクエストに対して手動で診断するのは大変なので、OWASP ZAPである程度目星をつけてからBurp Suiteで詳しく調べるといった使い方をします。

※Burp Suiteのインストール手順は省略します。
Burp Suiteのダウンロード

2.準備

Burp Suiteによる診断を行うためにはプロキシの設定をする必要があります。
プロキシ設定は「Proxy」→「Options」から行います。Optionsを開けたらProxy Listenersの「Edit」をクリックしましょう。

※本記事の画像はすべて当社が作成したものです

Edit proxy listenerのウィンドウが開けたら、

Burp Suiteのポートを8085に設定後OKを押します。Firefoxもプロキシ設定からポートを8085に変更する必要がありますが前回のブログに記したので省略します。「6-2-2.Webブラウザのプロキシ設定」を参考に変更しましょう。

これでBurp Suiteのプロキシ設定完了です!

3.Burp Suiteで仮攻撃を行う

それでは早速テスト用サイトのSQLインジェクションに対して仮攻撃を行なっていきます。今回使用するテスト用のサイトは前回の記事で作成したものになります。(4.脆弱性診断を行うWebアプリをRailsで開発する より)

具体的な方法は、ユーザ一覧画面の検索時に実行されるリクエストをBurp Suiteで意図的に操作しSQLインジェクションを誘発します。そして、これにより返ってくるレスポンスを確認しSQLインジェクションの存在を明確にしていきます。

まずBurp Suiteを開いたら「Proxy」→「Intercept」をクリックし以下の画面を開きます。

そしてサーバを起動後、Firefoxでlocalhost:3000/を開き一覧画面が見えていることを確認します。

ここで操作をBurp Suiteに戻し、「Intercept is off」をクリックします。

表示が「Intercept is on」に変わっていたらOKです。

ここまで終わったら再び画面に操作を戻し、

実際に入力フォームに検索ワードを入力しsearchボタンを押します。そうするとページが読み込み状態になり、Burp Suiteの方も変化があるはずです。

Interceptをオンにしたことにより、サーバに送られるリクエストをキャッチしてその通信内容を確認することができました!これによって、本来ブラウザからサーバに送られる通信をBurp Suiteがせき止めている状態になりました。

今回はSQLインジェクションの脆弱性を確認したいので、右側のQuery paramatersのnameにSQLインジェクションを誘発するための値を入れます。

今回は ‘ OR id = 3) — を入れました。Apply changesを押すと反映されます。

これで通信の内容を書き換えることができました。そして、forwardボタンを押すことでせき止めていたリクエストをサーバへ送信します。


本来実行されるSQLが SELECT “users”.* FROM “users” WHERE (name = ‘ユーザー1’)に対して、
リクエストを書き換えたことでSELECT “users”.* FROM “users” WHERE (name = ‘ ‘ OR id = 3) –‘)が実行され、id=3のユーザー3が一覧に表示されました。これによりSQLインジェクションが成功しました!

まとめ

今回はBurp Suiteを使用した脆弱性診断について書いてみました。前回書けなかった部分について今回記事にすることができたので良かったです。

今回行った診断は画面上からも行えますが、hidden属性のついた隠れたパラメータだったり、HTMLソースを見なければ判断がつかないような脆弱性の場合にもBurp Suiteは有効です。そのような診断を行いたい時はぜひBurp Suiteを使ってみてはいかがでしょうか!

最近社内のサービスを脆弱性診断することが多いので、脆弱性などセキュリティ関連の記事も増やしていけたらと思います。ここまで読んでいただきありがとうございました!