ratproxy――Webアプリケーションのセキュリティレベルを検証するGoogle提供ツール

 Webアプリケーション開発者によるセキュリティレベルの検証作業をサポートすることを目的として、 ratproxy と呼ばれるオープンソース型ツールが先日Googleからリリースされた。これはWeb 2.0およびAJAXアプリケーションを対象に構築された非破壊型の検査ツールであり、セキュリティ上の問題点が可読性に優れた形式にてレポートされるようになっている。

 ratproxyの実体は、手元のWebブラウザと試験対象のアプリケーションとの間に介在する形で動作するローカルプログラムである。その動作原理は、アプリケーションから出されるリクエストと返されるレスポンスを追跡し、それを基に独自に変換したトランザクションを適用することで、一般的な攻撃に対して当該アプリケーションがどのような反応をするかを検証するというシステムになっている。例えばローレベルテストでは、下記のものを含めた包括的な試験が実施される。

  • 潜在的な危険性を有すJSON風のレスポンス
  • 秘匿性の高いコンテンツに対して有害なキャッシングヘッダ
  • 疑わしいクロスドメインの信頼関係
  • 不充分なXSRF対策に関係するクエリ
  • 疑惑ないし確証のあるXSSおよびデータ注入ベクタ

 その他にも多数の試験が実施されるが、そのすべてはパッケージに同梱されたmessages.listに一覧されるようになっている。

 ratproxyのパッケージはソースコードと関連ドキュメントで構成されているが、その他にflare-distと呼ばれるAdobe Flashコンテンツ試験用のオプションコンポーネントが1つ含まれている。また標準的なMakeファイルも同梱されているが、設定スクリプトは用意されていない。このプログラムをビルドするには、通常の手順に従ってmakeを実行すればいい。

   $ make cc ratproxy.c -o ratproxy -Wall -O3 -Wno-pointer-sign -D_GNU_SOURCE http.c mime.c ssl.c -lcrypto -lssl
   *** WARNING: flare-dist/flare bianry is not operational.
   *** Please see flare-dist/README and update it for your OS.

 ここでの実行例では警告メッセージが出されているが、これはMac OS X上でコンパイルを試みたのに、パッケージ中に用意されるFlash試験用コンポーネントのflash-distがLinuxバージョンとなっているためである。実際、今回私が行うテストには不要ではあったが、OS X対応版のflash-distも入手できるようにされている。こうしたコンパイル結果として生成されるのが、ratproxyという単一のバイナリファイルである。

 ratproxyを最初に使用する場合は、スタートアップ用に推奨されたパラメータ群をそのまま使用するのが一番お手軽である。このうち-dパラメータは特定ドメインのURL群に対してのみ試験を実行させる指定であり、これにより画像や広告サイトについてのリンク先は試験の範囲外とされる。同じく-vパラメータはトレースファイルの書き込み先を指定し、-wパラメータはログレコードの書き込み先を指定する際に使用する。後者のログレコードは、詳細レポートの作成時に使用されるものである。

   $ ./ratproxy -v /tmp/ -w ratlog.txt -d mydomain.com -lfscm
   ratproxy version 1.51-beta by <lcamtuf@google.com>
   [*] Proxy configured successfully. Have fun, and please do not be evil.
   [+] Accepting connections on port 8080/tcp (local only)...

 ratproxyには非破壊モード以外の試験オプションも用意されているが、スタートアップ用の推奨パラメータ設定を利用した場合この機能は有効化されない。なお先の出力例にも出されている“Accepting connections”はratproxyがローカルにて実行中であることを示すメッセージで、その場合はデフォルトポートの8080を使用したWebブラウザ接続に対するリスニングが実施される。

 次にWebブラウザを起動して、127.0.0.1:8080を介したratproxyとの接続設定を施す。そして各自の開発したアプリケーションを呼び出し、通常行うはずの操作手順を実施することになるが、その際にはすべての構成ページにアクセスして、すべての機能を実行しなければならない。ratproxyはこうした当該アプリケーションの操作中に、必要な試験を実施していく。アプリケーションに対するすべての操作が完了したらブラウザを閉じればいいが、ratproxyを停止させるにはCtrl-Cのキー操作が必要である。

出力されるレポート

 HTML形式のセキュリティレポートはログファイルを処理することで作成されるが、この操作については同梱されているシェルスクリプトを用いて、下記のようなコマンドを実行すればいい。

   $ ./ratproxy-report.sh ratlog.txt > report.html

 この実行例の場合、検出された問題点は、種類と重要度に応じて並べ替えられた状態でreport.htmlファイルに出力される。今回私が最初に試験したのは、拠出金管理用に作成したRuby on Railsアプリケーションであった。このアプリケーションについてratproxyが検出した最大の脅威は“POST query with no XSRF protection”という問題点であり、これは当該アプリケーションにて特定情報のアップデート時にクロスサイトでのリクエスト偽造が行われる危険性を指摘したものである。この問題については私自身がいろいろ検討した結果、当該情報のアップデートはHTTP POSTを介してのみ実行可能とできるため、その脅威度はそれほど高くないと判断した。それでもアップデート後の情報については、第三者による確認と検討を必須とするようにしておくべきだろう。

 またAJAXフォームを使用するページについてratproxyは“MIME type mismatch on renderable file”という中程度の脅威を検出している。その他にレポートされたのは、当該アプリケーション内部にて処理されるため、外部からは確認しづらい問題点についての各種メッセージである。

 セキュリティ関連の各レポートには、当該トランザクションに関する生データを収録したトレースファイルへのリンクが設けられており、各トレースファイルにはHTTPのリクエストとレスポンスに関係する、クッキー、ヘッダ情報、パラメータ、ペイロードなどの詳細情報がプレインテキスト形式で収められている。こうしたトレースファイルの情報は、ブラウザとサーバ間で具体的に何が行われているかを確認する際に便利だ。特にこの情報は、TCPダンプ並の詳細な内容が可読性に優れた形で出力されるようになっている。

GeeklogおよびGoogleに対する試験結果

 2つ目の試験対象としたのはPHPベースの Geeklog コンテンツ管理システムである。Geeklogはセキュリティに関する定評を確保していたことが今回の選定理由の1つだが、私自身が自分のサイトで使用していたのでターゲットにし易かったという理由も存在する。具体的な操作手順としては、自分のサイトにてGeeklogにてログインした後、いくつかの管理作業を実行してみた。そしてその結果、脅威度の高い“POST query with no XSRF protection”が1件および“Suspicious parameter passing scheme”など中程度の脅威が何件かレポートされたのである。なお興味深いことに今回のレポートでは、脅威度の低い問題点として“References to external active content”というフラグがGoogle広告に付けられていたものの、特に危険視すべき問題点は検出されなかった。

 今回の最終試験としては、ratproxyにてgoogle.comをポイントさせた後、自分のiGoogleホームページにログインしてウィジェットをいくつか追加するという作業を行ってみた。その際にはテーマの切り替えその他の設定変更も行ったが、これだけの操作で実に43個ものトレースファイルが生成され、それに伴い大量のレポートが報告されたのである。このレポートについては、その一部を抜き出したスクリーンショットを掲載しておいた。

142675.gif
ratproxyが報告するレポート

 このiGoogle試験に関するセキュリティレポートを見ると、脅威度の高い問題が3件と、中程度の問題点が数件指摘されていた。なお今回の試験結果については、ratproxyでは提供企業の関連サイトであっても手心を加えない包括的な解析が実行されることに満足できたので、レポートの報告内容の解析も、各問題点の実際の脅威度も検討していない。

 現行のratproxyはベータ版段階に止まっており、実際そのREADMEファイルにはいくつかの問題点が誤検出される可能性に言及されている。とは言うものの、高度に複雑化した最近のWebアプリケーションに対してセキュリティ試験を施すのは簡単な話ではない。しかしながらratproxyを利用すれば最小限の手間と時間でそうした試験が実施でき、操作に必要な情報も分かりやすいドキュメントにまとめられている上、そこにはアプリケーションの安全度判定に役立つ各種Web監査ツールへのリンクも紹介されているのだ。これは私の個人的評価であるが、ratproxyは操作性に優れ安定して動作する有用なツールと評していいだろう。

Linux.com 原文