この数年来,Webアプリケーションのぜい弱性を狙った攻撃により,個人情報が漏洩したり,Webページが改ざんされる被害がたびたび発生しています。このような被害に遭わないように,Webサイト開発者には今,セキュアなWebアプリケーションを開発することが求められています。

 セキュアなWebアプリケーションを開発するために一番重要なことは,そもそもセキュアに設計・コーディングすることです。そのためには開発者の教育や開発ガイドラインなどが必要になります。同時に,開発者が作ったものが本当にセキュアであるかを確認するプロセスが必要です。確認の対象となるのは,設計書,ソースコード,実際に稼働するアプリケーションなどですが,一般にWebアプリケーションにおいて広く行なわれているのは,実際に稼働しているアプリケーションを対象とする検査ではないかと思います。

 この種の検査では,Webアプリケーションに対して様々な攻撃リクエストを送信し,その反応を見ることでアプリケーションがセキュアであるかを検証します。例えば,SQLインジェクションのぜい弱性を検出するために,シングルクォート(')やバックスラッシュ(\)文字を含むリクエストを,検査対象のアプリケーションに送信します。

 こうした検査には,何らかの自動化ツールを使う方法と,手動で行なう方法とがあります。ツールによる検査は手動での検査を完全に代替するものではありませんが,作業効率の点から,ツールが使われる場面が多くあります。

 この記事で紹介するratproxyは,実際に稼働しているWebアプリケーションに対してセキュリティ検査を行なうためのツールです。2008年7月に,Googleがオープンソースのソフトウエアとしてリリースしました。自らが開発するWebアプリケーションのセキュリティ向上に,ratproxyを利用できないかと考えている開発者やテスターの方もいるかと思います。この記事では,そのような方たちに参考になるよう,ratproxyの特徴・位置付けなどについて説明しています。なお,本記事のratproxyに関する記述は,執筆時点での最新バージョンであるベータ0.51版を基にしています。

Web 2.0的なアプリの検査に向く

 まず最初に言ってしまうと,ratproxyは決して万能の検査ツールではありません。ソースコードの分量でいうと,わずか3000行ほどの簡単なプログラムであり,それほど多くのことをしてくれるわけではありません。

 詳細は後述しますが,検査パターンの特色としては,クロスサイト・スクリプティング(XSS)のうち,比較的最近発見された手法や,Web2.0的なアプリケーションの検査の領域に強みがあります。一方で,SQLインジェクションがほとんど検出できない,誤検出が多い(ratproxyはあくまでもぜい弱の「疑い」があるものを検出するだけで,検出するものの中には実際にはぜい弱性でないものも多く含まれている)といった弱みもあります。

 このため,ratproxyがあれば,一般的なセキュリティ検査で使われる商用のツールや,手動での検査が不要になるかといえば,そうではありません。ratproxyのドキュメント(http://code.google.com/p/ratproxy/wiki/RatproxyDoc)にも書かれているように,ratproxyはあくまでも,他の検査ツールや手動検査を補うものと位置付けられます。

●基本的な使用方法

 ratproxyは,その名前の通りプロキシとして動作します。テストを実行するマシン上で,プロキシとして待ち受けるポート番号を指定して起動します。次に,ブラウザのプロキシ設定でratproxyが稼働するホスト・ポート番号を指定します。あとは,ごく普通に検査対象のサイトを巡回するだけです。こうすることでratproxyに検査対象のWebサイトに対するHTTPリクエスト・レスポンスの情報が蓄積され,ratproxyは蓄積されたHTTPリクエストやレスポンスの情報を分析して,ぜい弱性を探し出します。検査対象の巡回が終わったら,レポート出力用のshellスクリプトを実行することで,HTML形式のレポートが出力されます。

 ratproxyの最大の特徴は,ratproxyのドキュメントに書かれているように,「受動的(passive)な検査ツール」であることです。受動的であることの意味は,ratproxy以外の多くの検査ツール(能動的なツール)の挙動と比較すると理解しやすいかもしれません。

 一般に能動的な検査ツールは,パラメータに様々な細工を施してHTTPリクエストを発行します。SQLインジェクションやXSSなど数多くの種類のぜい弱性の存在を確認するためには,大量の細工したHTTPリクエストを検査対象アプリケーションに対して発行しなければなりません。

 これに対して受動的ツールのratproxyでは,一般的な検査ツールとは違って,基本的にパラメータに細工を施してHTTPリクエストを送ることはしません。“プロキシ”として検査対象のWebサイトに対する正常なHTTP通信をウォッチし,それだけで得られる情報の範囲でぜい弱性を探そうとします。厳密に言うと細工したHTTPリクエストを全く送らないわけではないのですが,そのようなHTTPリクエストの発行は最小限にするというポリシーで作られています。

 受動的な検査のメリットは,検査対象のアプリケーション/システムに与える影響が小さいことです。能動的な検査ツールは,大量の検査リクエストによりサーバーに過大な負荷をかけたり,大量のゴミ・データが登録されたりといった影響を検査対象サイトに与えます。ratproxyでは,そのような影響を最小限に抑えられます。

寺田 健(てらだ たけし)
三井物産セキュアディレクション
技術部 セキュリティアセスメントグループ
シニアテクニカルコンサルタント
ポータル・サイトなどでのWebアプリケーションのシステム開発・運用経験を活かし,セキュリティ・コンサルタントとして,主にWebアプリケーションのぜい弱性検査に従事している。ECサイトや金融機関などのWebサイト検査の実績を持つ。CISSP,情報セキュリティアドミニストレータ。