Google の 脆弱性検査ツール Ratproxy 調査報告

はじめまして。品質保証部のテストツールチームです。

テストツールチームは、これまで製品ごとにばらつきのあったツールによる検証方法の統一を目指し、
テストの自動化・性能検証・脆弱性検査を行っています。
今後国内外の拠点にスムーズに技術移管できるよう、資料の準備を進めてもいます。

今年アルバイトで品質保証に来てくださった方は、このチームに配属されています。
今回ご報告するのは、そのうちの一人が中心となって調べてくれた、
7月初めにGoogleから公開されたWebアプリケーションの脆弱性検査ツールRatproxyの調査結果です。

Ratproxyは、ブラウザから操作した際のクライアント/サーバー間の通信を分析して脆弱性の検査を行います。
検査結果はhtmlで出力されるためブラウザで開いて確認しますが、検出された脆弱性の説明が
簡潔にわかりやすく示されています。

RatProxy

公式サイトはこちらです。
http://code.google.com/p/ratproxy/

こちらからRatproxyを入手したりWikiを見ることができます。 WikiにはRatproxyの機能や使用方法が紹介されています。
インストールと操作方法につきましては 国内のサイトで既に紹介されているため、本稿では省略させていただきます。

RatProxyで検出できる主な脆弱性

クロスドメイン
異なるドメインとの通信を検出します。
これが検出された場合、ユーザーが意図しないデータが送信される可能性があります。
機密データを含むヘッダーの、プロキシサーバー等へのキャッシュの危険性
クロスサイトスクリプティング(XSS)
これには、次のような、XSSによる攻撃を引き起こす可能性のある状態も含まれます。
  • HTTPヘッダーで示されたファイル情報が、実際に通信されたファイルと一致していない
  • 文字コードの指定が適切ではない
クロスサイトリクエストフォージェリ(XSRF/CSRF)
※RatproxyではXSRFと略されますが、本稿ではCSRFとします。
攻撃を防ぐためのトークンが、データのPOST時に用いられているかを検査します。
その他の検出可能な攻撃は、RatProxyインストール先に作成されるmessages.listで確認できます。

サイボウズ製品の検査

現在サイボウズで開発中の製品をRatproxyで検査しました。
コマンド実行時の引数にはWikiで案内されている「-lextifscgjm」を使用しています。
その結果、多数の脆弱性が検出されました。

ところでどのようなツールであっても、検査結果が対象製品の脆弱性に相当するかという判断は
人が行わなくてはなりません。
筆者の知る限り、実際に機密データを入手したりシステムにダメージを与えることが可能であるかまでを
ツールに完璧に判断させることはできないようです。
一例として、クライアントリクエストに埋め込んだ攻撃コードがサーバーレスポンスに残っている場合に、
実行不可能な状態に無効化されていても脆弱性と報告されることがあります。

以下にRatproxyにより検出された報告の一部と、それを人手で分析した結果をご報告します。

次の脆弱性が「HIGH」で検出されました。

Bad or no charset declared for renderable file
文字コードの指定が適切ではないという報告です。
ここで懸念されている文字コードによる脆弱性とは、UTF-7エンコーディングによる
クロスサイトスクリプティングのようです。

製品ではShift-JISが指定されていますが、Ratproxyの設定ファイルにはShift-JISが載っていないため
報告されたようです。
Shift-JISであることの製品の脆弱性有無は別途調査が必要でしょう。
POST query with no XSRF protection
ログイン画面で検出されました。
CSRF攻撃が問題となるのはユーザーが意図しないデータをPOSTすることであるため、
この画面におけるCSRF攻撃のリスクは非常に低いと判断しました。

また、次のような脆弱性が「MIDIUM」で検出されました。

Inline PNG image
サーバーレスポンスのHTTPヘッダーにPNG画像のContent-Dispositionが指定されていないという報告です。
問題となった画像がユーザーにより添付されたものである場合はXSSの脆弱性となりえますが、
製品の提供する画像であるため問題ないと判断しました。
Cross-domain POST requests
今回検査した製品は情報提供サイトと定期的に通信を行ってるため検出されました。
通信可能な内容が適切に制限されていれば、問題なしと判断してよいでしょう。
「LOW」では、JavascriptやAjaxを使用している箇所が多数検出されました。
ここでの報告だけでは攻撃が可能であるかまでは判断できないため、
他の手段により脆弱性検査を実施する際の参考情報としました。

他のツールとの比較

普段サイボウズで使用しているツールで検出可能なXSS脆弱性を、Ratproxyが検出するか試しました。
XSSはサイボウズ製品にとって大問題となりうる脆弱性です。

確認したXSS脆弱性は次の4タイプです。いずれも攻撃コードはURLエンコードされています。

  1. URLパラメーターに攻撃コードを挿入して画面を開くとXSSが実行される
  2. URLパラメーターに攻撃コードを挿入して開いた画面で項目をクリックするとXSSが実行される
  3. hiddenパラメーターに攻撃コードを挿入してPOSTするとXSSが実行される
  4. マルチパートで送信されるhiddenパラメーターに、攻撃コードを挿入してPOSTするとXSSが実行される
Ratproxyが検出できたのは 3. のみであり、しかもLOWレベルでした。
そこで Parosというフリーのツールでも試したところ、 3. と 4. が高レベルの脆弱性として検出されました。

サイボウズ品質保証部でのRatproxyの位置づけ

Ratproxyで検出される脆弱性の種類は、
不特定多数がアクセスするサービスを提供されているGoogle社ならではという印象を受けました。
既存のツールでは未対応の脆弱性を検出できるように、開発されたのであろうと想像されます。

以上の特性を踏まえますと、XSS等の脆弱性は他のツールで検査し、
さらにRatproxyを併用することがWebアプリケーションの脆弱性検査には効果的でしょう。

関連するエントリー