アメーバでは日々、新しいサービスを開発しています。セキュリティチームのお仕事には、それらのサービスにセキュリティ上の問題が存在していないかどうかを調査する(以下、監査)という事も含まれます。※監査専門のベンダに調査を依頼することもあります。
今回は、私たちセキュリティチームが、どのようにWebアプリケーションの監査をしているのか、その一部を簡単に紹介しようと思います。
※本エントリで紹介している手法は自分の管理しているサイト以外に適用しないでください
![!!](https://stat.ameba.jp/blog/ucs/img/char/char2/176.gif)
■Webアプリケーションの監査とは何を見ているのか
簡単にいうと、ブラウザ等から、Webアプリケーションサーバに対して送られるリクエストを変更して、サーバからの応答がどのように変わるのかを見ています。※ほかにもいろいろやっています。
■具体的にはどうしているのか
Webアプリケーションを利用する際、ブラウザは下記のようなリクエストを対象サーバに送ります。
GET /sample?param1=cyberagen¶m2=Ameba HTTP/1.1上記に含まれているparam1の値「cyberagent」や「param2」というパラメータ名、User-Agentの値「Ameba Browser/1.1」などに、セキュリティ上問題の発生しそうな文字列を挿入して、サーバにリクエストを送ります。そして、サーバからのレスポンスが通常時とどう異なるのかをみています。
Host: example.com
User-Agent: Ameba Browser/1.1
例えば、リフレクトタイプのクロスサイトスクリプティングの脆弱性が存在しているかどうかの調査は、下記のようなリクエストを送ります。サーバからのレスポンスボディに「<script>alert(1)</script>」という文字列が含まれていればparam1にクロスサイトスクリプティングの脆弱性あり、という感じで判断しています。
GET /sample?param1=<script>alert(1)</script>¶m2=Ameba HTTP/1.1
Host: example.com
User-Agent: Ameba Browser/1.1
■どうやって送るリクエストを変更しているのか
セキュリティチームではLocal Proxyをたてて作業を行っています。※他にも、ブラウザの拡張機能を利用したり、telnetコマンドで接続したり、方法は様々です。
ここからは、セキュリティチームで使用しているLocal Proxyと、その使い方を少しだけ紹介します。
■Local Proxy をたてる
ブラウザからWebサーバに送られるリクエストを傍受・改ざんするためにLocal Proxyを使用します。Local Proxyにはいろいろなものがありますが、セキュリティチームではPortSwiggerのburp suite の proxy機能 を使用しています。
・Port Swigger Web Security
http://portswigger.net/
burp suite を使用するには Java の実行環境(JRE)が必要ですが、JREのインストール方法は割愛します。
まず、ダウンロードしたburpsuite_v1.4.01.zipを解凍し、ターミナル(windowsの場合はコマンドプロンプト)を使用して解凍先のディレクトリに移動します。そこにreadmeがありますので、とりあえず読みましょう。
readmeにも記載がありますが、下記のコマンドでburp suite を起動します。
java –jar burpsuite_v1.4.01.jar
burp suite を初めて使用する場合は、Licence agreement が出ますので、よく読んで、問題がなければ I accept を選択してください。I decline を選択した場合はburp suiteは利用できません。
画像1. Licence agreement の画面
I accept を選択すると、burp suite が起動します。
画像2. burp suite が起動した画面
これでburp suite が起動しました。
次はburp proxyと ブラウザのProxy設定 を確認します。
■burp proxy の設定を確認する
burp proxy がTCPの何番ポートで待ち受けをしているのかを確認します。
まずはproxy タブを選択します。
画像3. proxy タブを選択した画面
次に、proxy タブの下にある、options タブを選択します。
画像4. proxy -> optionsタブを選択した画面
proxy -> options タブを選択すると、一番上にproxy listeners という、proxy の待ち受けポートや 起動しているかどうか等の設定・確認画面が表示されます。[画像4]の場合は、8080/TCPで待ち受けている状態です。runningにチェックが入っていない場合は、使用ポートを変更するなどして対応してください。
■ブラウザの設定を変更する
次に、ブラウザのproxy設定を変更します。詳細な設定方法はここでは割愛します。ブラウザのproxy設定に必要な情報は下記のとおりです。
・Proxy サーバのアドレス:127.0.0.1 (ループバックアドレスを指定する)
・ポート番号:8080(上記で確認したburp suite の待ち受けポート)
■burp proxy を使用する
burp proxy の設定と、ブラウザの proxyの設定が終わったら、ブラウザからどこか適当なサーバに接続してみます。すると、proxy -> intercept タブが赤くなると思いますので、proxy -> intercept タブを選択してみます。
画像5. ブラウザからWebサイトにアクセスしようとした直後にproxy -> interceptタブを選択した画面
[画像5]は、ブラウザからhttp://www.ameba.jp/にアクセスしようとした時のリクエストをintercept したものです。この状態でブラウザからのリクエストを改ざんすることが可能です。そして、この画面に有る[forward]ボタンを選択することで、改ざんしたリクエストを対象のサーバに送ることができます。なお、リクエストを送りたくないときは[drop]ボタンを、intercept 自体をしたくなければ[intercept is on]ボタンを、burp suite の proxy以外の機能に送りたい場合は[action]ボタンを選択します。
セキュリティチームでは、このProxy 機能を利用して監査を行っています。
burp suiteの紹介は以上とさせていただきますが、セキュリティチームではburp suite の他の機能(intruderやrepeater)をよく利用しています。興味がありましたら他の機能も利用してみてください。※Free Edition には機能制限があります。
※くれぐれも、本エントリで紹介している手法は絶対に自分の管理しているサイト以外に適用しないでください
![!!](https://stat.ameba.jp/blog/ucs/img/char/char2/176.gif)