前回,ratproxyは受動的なぜい弱性検査ツールだと紹介しました。では,ratproxyを使ってどのようなぜい弱性を検出できるのでしょうか。これは,ratproxyがぜい弱性を検出した際にレポートに出力するメッセージから分かります。このメッセージは42種類あって,ダウンロードしたratproxyのファイル群の一つ,messages.listファイルに記載されています。42種類のメッセージの中には「Adobe Flashファイルの一覧」のような単なるINFOレベルのメッセージも含まれていますが,基本的に42種類のぜい弱性を検出できると考えて良いでしょう。

42種類の多くはクロスサイト・スクリプティング

 このうち,主要なものを大まかに分類すると,次のようになります。
(1)Content-TypeやCharset指定の誤り(XSSの危険性)
(2)write()などのJavaScript関数(DOM Based XSSの危険性)
(3)JavaScript Hijack/JSON Hijack
(4)通常のXSS
(5)クロスサイト・リクエスト・フォージェリ(CSRF)
(6)詳細な検査が必要なパラメータ
 ファイル名やSQL文などに類似したパラメータなど

 全体的には,(1)~(3)の比較的最近発見された新しいタイプのぜい弱性やWeb2.0的なアプリケーションに比較的多く見られるぜい弱性が含まれている点,そしてXSSが多い点が特徴です。このうち(1),(2),(3)のぜい弱性の詳細については後述します。

 (1)~(3)のぜい弱性は,現場の検査で実際に検出される頻度はそれほど高くはありません。どちらかというとマイナーなぜい弱性といえるものです。ただ,(1)~(3)のぜい弱性は他のツールでは検出できないことが多く,これらを検出できるところにratproxyの強みがあると言えます。

 逆に,多くのツールで検出できて,ratproxyでは検出できないぜい弱性もあります。例えば,前述のようにratproxyはSQLインジェクションのぜい弱性を検出できません。厳密には,ratproxyにもSQLインジェクション用の検査パターンはあるのですが,パラメータの値にSQL文がまるごと含まれるような,非常にあからさまなSQLインジェクションしか検出できません。

 そもそもSQLインジェクションのようなぜい弱性は,パラメータにシングルクォート文字を挿入してHTTPリクエストを送るなど,少なからず能動的なテストをしなければ発見できません。そういう意味では,受動的なツールであるratproxyにSQLインジェクションを探せという方がおかしいのかもしれません。それでも,多くのWebサイトにとって重大な問題であるSQLインジェクションを全くといっていいほど検出できないのは少々残念に思います。

候補を指摘する“受動型”だから誤検出も多い

 既にratproxyを試した方はわかると思いますが,ratproxyを動かすとかなり多くの量の「問題個所」が検出されます。中には,実際にはぜい弱性ではないものも含まれています。見方によっては,「誤検出」に映るかもしれません。

 実はratproxyは,ぜい弱性そのものではなく,ぜい弱“かもしれない”個所をリストアップするように作られています。わかりやすい例を挙げると,「foo.txt」のような,ファイル名と類似した値を持つパラメータがリクエストに含まれている場合,それだけでディレクトリ・トラバーサルの候補としてリストアップするといった具合です。あくまでも,ratproxyを動作させた後に手動での検査を行なうことを前提として,手動での検査を重点的に行うべき怪しい個所をリストアップするのです。

 注)ディレクトリ・トラバーサル:公開されているディレクトリから,Webサーバーの管理者が公開(許可)していないディレクトリのファイルにアクセスする攻撃手法。トラバーサル(トラバース)は「横断する」という意味。

 誤検出が発生する点はratproxy以外の検査ツールも同じです。ただ,通常の検査ツールは様々なやり方でHTTPリクエストに含めるパラメータを操作して送ることで,極力本当のぜい弱性以外を検出しないようにしています。しかしratproxyは受動的なツールであるため,基本的にそのようなことをしません。ratproxyのドキュメントには,誤検出を減らす工夫を施してあると書かれています。確かに,ratproxyはHTTPリクエストを分析して誤検出を減らそうとしますが,他のツールと比べるとぜい弱性ではないものが多く出力される傾向があります。

 ratproxyには,HTMLレポート出力用のshellスクリプトが同梱されています。実際に出力されるレポートは次のようなものです。

写真●ratproxyの画面
[画像のクリックで拡大表示]

 レポートには,検出したぜい弱性の一覧が,それぞれの緊急度の指標とともに記載されます。
緊急性度はHIGH/MEDIUM/LOWの3段階であり,ぜい弱性そのものの重大さと,検出の確度によって決定されます。

 さらに個々のぜい弱性の種類ごとに簡単な説明(英語)も添えられています。ただし商用の検査ツールのレポートに含まれている詳細な対策方法などは含まれていません。

ratproxyの使い道

 既に説明したように,ratproxyはそれ単体を動作させるだけで検査を完了させるものではなく,一般的な検査ツールによる検査や手動検査を補うためのツールです。ですから使い方は,手動での検査を行なう前にratproxyを使って,念入りに手動検査を行なうべきポイントを洗い出す,という形になるケースが多いでしょう。つまり本格的な検査の前の予備調査のために使うわけです。ratproxyの作者が想定しているのも,そのような使い方のようです。

 もちろん,Webサイトのセキュリティ評価においてはratproxyが洗い出すぜい弱性の候補だけを,手動で検査するだけでは十分ではありません。上述したように,ratproxyではカバーできないぜい弱性があるからです。筆者は,他のツールや手動で一通り検査した後にratproxyを使って,他のツールや手動検査で抜け漏れがなかったかをチェックするという使い方がよいと思っています。

 なお,ratproxyの利用者には,一定のセキュリティに関する知識が求められます。ratproxyの利用者は,ratproxyが検出したものが本当にぜい弱性であるかを切り分けなければなりません。商用のツールとは違って,ratproxyの出力するレポートはそれほど親切丁寧なものではないからです。

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