Web Security Scanner の知見の修正

>

Web Security Scanner の検出結果を解釈、再現、修正します。

脆弱性クラス

Web Security Scanner によって、次のクラスの脆弱性が検出されます。

  • クロスサイト スクリプティング(XSS)
  • Flash インジェクション
  • 混合コンテンツ
  • クリアテキストのパスワード
  • 安全でない JavaScript ライブラリの使用

こうした脆弱性が検出された場合は、結果がハイライト表示され、詳しい情報を確認できます。

ログへの影響

Web Security Scanner スキャンのトレースは、ログファイルに記録されます。たとえば、Web Security Scanner は ~sfi9876/sfi9876 などの一見意味のない文字列のリクエストを生成します。このプロセスより、スキャンによるアプリケーションのエラーページを調査が可能になります。ログにはこうした意図的に無効なページ リクエストが記録されます。

Web Security Scanner の知見の修正

以降では、Web Security Scanner のさまざまな種類の検出結果を修復する方法について説明します。

XSS

Web Security Scanner のクロスサイト スクリプティング(XSS)インジェクション テストでは、悪意のないテスト文字列をユーザーによる編集が可能なフィールドに挿入し、さまざまなユーザー アクションを行うことで、インジェクション攻撃をシミュレートします。このテストを実行すると、カスタムの検知機能がブラウザと DOM を監視して、インジェクションの成否を判断し、悪用の危険性を評価します。

テスト文字列内に含まれている JavaScript が正常に実行された場合は、Chrome デバッガが起動します。テスト文字列を実行できたため、このページに JavaScript を挿入して実行できます。この問題を攻撃者に知られた場合、攻撃者は悪意のあるリンクをクリックしたユーザー(被害者)として、任意の JavaScript を実行できるようになります。

状況によっては、ブラウザでテスト文字列が解析される前に、テスト対象アプリケーションによってテスト文字列が変更されることがあります。たとえば、アプリケーションによる入力の検証や、フィールドのサイズ制限が行われる可能性があります。ブラウザがこの変更されたテスト文字列を実行しようとすると、ブラウザの動作が中断し、JavaScript 実行エラーがスローされる可能性があります。これはインジェクションの問題が発生したことを示します。ただし、これは必ずしも悪用可能とは限りません。

この問題に対応するには、テスト文字列の変更を回避できるかどうかを手動で検証して、この問題が XSS の脆弱性であるかどうかを確認する必要があります。この脆弱性の検証方法について詳しくは、クロスサイト スクリプティングをご覧ください。

この問題を修正するにはさまざまな方法があります。すべての出力をエスケープし、状況に応じた自動エスケープをサポートするテンプレート生成システムを使用することをおすすめします。

XSS_ANGULAR_CALLBACK

ユーザー指定の文字列が Angular によって補間されている場合は、AngularJS モジュールのクロスサイト スクリプティング(XSS)の脆弱性が発生する可能性があります。ユーザー指定の値を AngularJS の補間に挿入すると、次のような攻撃を招くおそれがあります。

  • 攻撃者が、ブラウザによってレンダリングされたページに任意のコードを挿入する。
  • 攻撃者が、攻撃対象のブラウザに代わってページの送信元でアクションを実行する。

この潜在的な脆弱性を再現するには、スキャンを実行した後に、Google Cloud Console で再現 URL のリンクを使用してください。このリンクはアラート ダイアログを直接開くか、文字列 XSSDETECTED を挿入して、攻撃でコードを実行できることを証明します。文字列が挿入される場合、ブラウザのデベロッパー ツールを開き、XSSDETECTED を検索して挿入の正確な位置を見つけることが可能です。

XSS_ERROR

XSS_ERROR の検出は、JavaScript の破損が原因による XSS バグの可能性があります。状況によっては、ブラウザで解析される前に、テスト対象アプリケーションがテスト文字列を変更してしまうこともあります。ブラウザがこの変更されたテスト文字列を実行しようとすると、ブラウザの動作が中断し、JavaScript 実行エラーがスローされる可能性があります。このエラーはインジェクションの問題が発生したことを示します。ただし、これは必ずしも悪用可能とは限りません。

この問題に対応するには、テスト文字列の変更を回避できるかどうかを手動で検証して、この問題が XSS の脆弱性であるかどうかを確認する必要があります。この脆弱性の検証方法について詳しくは、クロスサイト スクリプティングをご覧ください。

ROSETTA_FLASH

Web Security Scanner により、リクエスト パラメータの値が、レスポンスの先頭で表される(たとえば、JSONP を使用するリクエスト)と認識される場合があります。この脆弱性はフラッシュ インジェクションとも呼ばれます。攻撃者は、ブラウザでレスポンスを実行するときに、そのレスポンスを脆弱性があるウェブ アプリケーションから提供された Flash ファイルであるかのように見せかける場合があります。

この問題を修正するには、HTTP レスポンスの先頭にユーザーが制御可能なデータを含めないようにします。

MIXED_CONTENT

Web Security Scanner は HTTP トラフィックをパッシブに監視し、JavaScript や CSS ファイルに対するリクエストが HTTPS ページのコンテキストであるにもかかわらず、HTTP を介して実行された場合に検出します。このシナリオでは、中間者攻撃によって HTTP リソースが改ざんされ、リソースを読み込んでいるウェブサイトへの完全なアクセス権が取得されるか、ユーザーの操作をモニタリングされるおそれがあります。

これを修正するには、HTTP の相対リンクを使用します。たとえば、http://// に置き換えます。

OUTDATED_LIBRARY

Web Security Scanner により、含まれているライブラリのバージョンにセキュリティの問題があることが知られていると判断される場合があります。Web Security Scanner は、シグネチャベースのスキャナと呼ばれるもので、使用中のライブラリのバージョンを特定し、そのバージョンを脆弱性があるライブラリの既知のリストと照合します。バージョンの検出に失敗した場合やライブラリに手動でパッチを適用したことがある場合は、誤検出の可能性もあります。

この問題を修正するには、組み込みのライブラリを既知の安全なバージョンに更新します。

CLEAR_TEXT_PASSWORD

Web Security Scanner により、アプリケーションがパスワード フィールドをクリアテキスト形式で送信しているように見えると判断される場合があります。攻撃者によってネットワーク トラフィックが傍受されて、パスワード フィールドが盗聴される可能性があります。

クライアントとサーバー間で渡される機密情報を保護するには、常に次の予防措置を講じます。

  • TLS 証明書または SSL 証明書を使用します。
  • パスワード フィールドを含むページでは常に HTTPS を使用します。
  • フォーム アクションの属性では常に HTTPS URL を指定します。

INVALID_CONTENT_TYPE

Web Security Scanner により、レスポンスの Content-Type HTTP ヘッダーと一致しないリソースが読み込まれたと判断される場合があります。このシナリオでは、アプリケーションは無効なコンテンツ タイプを含む機密コンテンツ、または X-Content-Type-Options: nosniff ヘッダーのない機密コンテンツを返します。

この脆弱性を修正するには、以下を確認してください。

  • JSON レスポンスが Content-Type ヘッダー application/json で返される
  • その他の機密情報を含むレスポンスが適切な MIME タイプで返される
  • コンテンツ提供に HTTP ヘッダー X-Content-Type-Options: nosniff が使用されている

INVALID_HEADER

Web Security Scanner でセキュリティ ヘッダーに構文エラーが見つかった場合に、不正なヘッダーや無効な値のヘッダーが返されることがあります。その結果、ブラウザはこれらのヘッダーを無視します。

以降のセクションでは、有効なヘッダーについて説明します。

Referrer-Policy ヘッダー

有効なリファラー ポリシーには、次のいずれかの値が含まれます。

  • 空の文字列
  • no-referrer
  • no-referrer-when-downgrade
  • same-origin
  • origin
  • strict-origin
  • origin-when-cross-origin
  • strict-origin-when-cross-origin
  • unsafe-url

X-Frame-Options ヘッダー

有効な X-Frame-Options ヘッダーには、次の値のみが含まれます。

  • DENY: すべてのフレーム処理を禁止
  • SAMEORIGIN: トップレベルの URL が同一の基点である場合にフレーム処理を許可
  • ALLOW-FROM URL

Chrome は ALLOW-FROM URL では使用できません。複数の X-Frame-Options は許可されません。

X-Content-Type-Options ヘッダー

有効な X-Content-Type-Options ヘッダーに含めることができる値は nosniff のみです。

X-XSS-Protection ヘッダー

有効な X-XSS-Protection ヘッダーは 0(「無効」)または 1(「有効」)で始まっている必要があります。そのうえで、保護を有効にする場合にのみ、最大 2 つのオプションを追加できます。

  • mode=block は、XSS をフィルタリングする代わりに、空白ページを表示する
  • report=URLURL にレポートを送信する

オプションはセミコロンで区切ります(例: 1; mode=block; report=URI)。末尾にセミコロンがないことを確認してください。

MISSPELLED_SECURITY_HEADER_NAME

Web Security Scanner により、スペルが間違っているセキュリティ ヘッダー名が検出される場合があります。スペルミスがあるとそのセキュリティ ヘッダーは無効になるので、修正する必要があります。

この脆弱性を再現するには、ブラウザのデベロッパー ツールの [ネットワーク] タブでスペルミスをチェックしてください。

MISMATCHING_SECURITY_HEADER_VALUES

Web Security Scanner により、レスポンスに重複した、値が競合するセキュリティ関連のレスポンス ヘッダーがあると判断される場合があります。一部のセキュリティ関連の HTTP ヘッダーでは、一致しない値とともにレスポンスで 2 回宣言された場合、未定義の動作が行われます。

この脆弱性を修正するには、これらの一致していないヘッダーのいずれか 1 つだけを残します。

アクセス可能なリポジトリ

Web Security Scanner により、アプリケーション内でアクセス可能な GIT または SVN リポジトリを検出する場合があります。この状態により、構成やソースコードの漏洩が発生する可能性があります。

この脆弱性を再現するには、検出結果レポートの再生用 URL をクリックしてください。

問題の確認

Web Security Scanner により問題が報告された場合は、問題の場所を確認する必要があります。このセクションでは、検出結果レポートを使用して脆弱性を再現、検証する方法について説明します。

  1. Cloud Console の [Web Security Scanner] ページに移動します。
    [Web Security Scanner] ページに移動
  2. プロジェクトを選択します。ページにマネージド スキャンとカスタム スキャンのリストが表示されます。
  3. [スキャンの構成] で、確認する検出結果が含まれるスキャンを選択します。スキャンの詳細が記載されたページが開きます。
  4. [結果] タブに移動し、カテゴリを展開し、検出結果を選択して詳細を確認します。
  5. 確認方法は、検出結果のカテゴリによって異なります。テストブラウザを使用して、次の説明に沿って確認します。
    • クロスサイト スクリプティング: [再現 URL] では、ブラウザに空のポップアップが生成され、スキャンで良性のコードがスクリプトに正常に挿入されたことが示されます。
    • 古いライブラリ: [脆弱性がある URL] では、「Exploited」というテキストを含むページが返され、スキャンで良性のコードがスクリプトに正常に挿入されたことが示されます。
    • 混合コンテンツ: [HTTPS ページの URL] では、混合コンテンツの脆弱性に関する警告が返されます。検出結果レポートでは、[HTTP で提供されるリソースの URL] で、脆弱性があるリソースが識別されます。
    • Flash インジェクション: Web Security Scanner がこのカテゴリの検出結果を返すことがありますが、最新のブラウザのほとんどは Flash インジェクションから保護されています。こうした検出結果が悪用される可能性はあまりありません。

Content Security Policy(CSP)を適用していると、JavaScript コードの実行が阻止される場合があります。この状態によって、XSS の再現が難しくなることがあります。この問題が発生した場合は、ブラウザのログコンソールを開いて、発生した CSP 違反の詳細を確認してください。