Web Security Scanner の概要

このページでは、Web Security Scanner の概要について説明します。

はじめに

Web Security Scanner は、App Engine、Google Kubernetes Engine(GKE)、Compute Engine の各ウェブ アプリケーションにおけるセキュリティの脆弱性を特定します。アプリケーションをクロールして、開始 URL の範囲内にあるすべてのリンクをたどり、できる限り多くのユーザー入力とイベント ハンドラの処理を試みます。現在、Web Security Scanner は、ファイアウォールの背後にない、公開 URL と IP のみをサポートしています。

Web Security Scanner は、現時点で App Engine スタンダード環境と App Engine フレキシブル環境、Compute Engine インスタンス、GKE リソースをサポートしています。

Web Security Scanner は、既存の安全な設計プロセスと開発プロセスを補完することを目的に設計されています。誤検出があると注意がそがれるため、Web Security Scanner はあまり多くの情報が報告されないようになっています。また信頼度が低いアラートは表示されません。Cloud Security Scanner は、人によるセキュリティ レビューに置き換わるものではなく、アプリケーションにセキュリティの欠陥がないことを保証するものでもありません。ウェブ セキュリティについて詳しくは、OWASP 上位 10 件のプロジェクトをご覧ください。

詳細については、Google Cloud のセキュリティをご覧ください。

スキャンタイプ

Web Security Scanner は、一般公開された App Engine、GKE、Compute Engine のサービス対象ウェブ アプリケーションにマネージドおよびカスタムウェブ脆弱性スキャンを実行します。

マネージド スキャン

Web Security Scanner のマネージド スキャンは Security Command Center によって構成され、管理されます。マネージド スキャンは、週に 1 回自動的に実行され、一般公開のウェブ エンドポイントを検出してスキャンします。このスキャンは認証を使用せず、公開ウェブサイトにはフォームを送信しないので、GET のみのリクエストを送信します。

マネージド スキャンは、プロジェクト レベルで定義したカスタム スキャンとは別に実行されます。マネージド スキャンを使用すると、個々のプロジェクト チームを関与させることなく、組織内のプロジェクトでウェブ アプリケーションの基本的な脆弱性の検出を一元管理できます。検出が見つかったら、それらのチームと協力してより包括的なカスタム スキャンを設定できます。

Web Security Scanner をサービスとして有効にする場合、マネージド スキャンの検出結果は、Security Command Center の [脆弱性] タブと関連レポートで自動的に利用可能になります。Web Security Scanner のマネージド スキャンを有効にする方法については、Security Command Center の構成をご覧ください。

カスタム スキャン

Web Security Scanner のカスタム スキャンは、古いライブラリ、クロスサイト スクリプティング、混合コンテンツの使用など、アプリケーションの脆弱性の検出に関する詳細な情報を提供します。Web Security Scanner のカスタム スキャンを設定するためのガイドを完了すると、Security Command Center でカスタム スキャンによる検出が可能になります。

スキャンの検出結果

このセクションでは、Web Security Scanner の検出結果のタイプと関連するコンプライアンス標準について説明します。

検出機能とコンプライアンス

Web Security Scanner は OWASP Top Ten のカテゴリのサブセットをサポートしています。これは、Open Web Application Security Project(OWASP)で決定されたウェブ アプリケーションのセキュリティ リスクの上位 10 項目についてランク付けし、ガイダンスを提供するドキュメントです。

コンプライアンス マッピングは参照用として含まれており、OWASP Foundation による提供や審査は行われません。

この機能は、コンプライアンス制御違反をモニタリングするためのものです。このマッピングは、規制、業界ベンチマーク、標準に準拠した製品またはサービスの監査、認定、コンプライアンス報告の基礎として使用できるものでも、これらの代用として使用できるものでもありません。

検出結果のタイプ

Web Security Scanner のカスタム スキャンとマネージド スキャンでは、次のタイプの検出結果が識別されます。スタンダード ティアの Web Security Scanner は、ファイアウォールの背後にない公開 URL と IP でデプロイされたアプリケーションのカスタム スキャンをサポートしています。

表 20. Web Security Scanner の検出
カテゴリ 検出の説明 OWASP 2017 Top 10 OWASP 2021 Top 10
ACCESSIBLE_GIT_REPOSITORY Git リポジトリが一般公開されている。この問題を解決するには、GIT リポジトリへの意図しない公開アクセスを削除します。 A5 A01
ACCESSIBLE_SVN_REPOSITORY SVN リポジトリが一般公開されている。この問題を解決するには、SVN リポジトリへの意図しない公開アクセスを削除します。 A5 A01
CLEAR_TEXT_PASSWORD パスワードがクリアテキストで送信されているため、傍受される可能性がある。この問題を解決するには、ネットワーク経由で送信されたパスワードを暗号化します。 A3 A02
INVALID_CONTENT_TYPE レスポンスの Content-Type HTTP ヘッダーに一致しないリソースが読み込まれた。この問題を解決するには、「X-Content-Type-Options」HTTP ヘッダーに正しい値を設定します。 A6 A05
INVALID_HEADER セキュリティ ヘッダーに構文エラーがあり、ブラウザで無視される。この問題を解決するには、HTTP セキュリティ ヘッダーを正しく設定します。 A6 A05
MISMATCHING_SECURITY_HEADER_VALUES セキュリティ ヘッダーが重複し、値が一致しないため、未定義の動作が起こる。この問題を解決するには、HTTP セキュリティ ヘッダーを正しく設定します。 A6 A05
MISSPELLED_SECURITY_HEADER_NAME セキュリティ ヘッダーにスペルミスがあるため、無視される。この問題を解決するには、HTTP セキュリティ ヘッダーを正しく設定します。 A6 A05
MIXED_CONTENT HTTPS ページ上で HTTP を介してリソースが提供されている。この問題を解決するには、すべてのリソースが HTTPS を介して提供されるようにします。 A6 A05
OUTDATED_LIBRARY 既知の脆弱性があるライブラリが検出された。この問題を解決するには、ライブラリを新しいバージョンにアップグレードします。 A9 A06
SERVER_SIDE_REQUEST_FORGERY サーバー側のリクエスト フォージェリ(SSRF)の脆弱性が検出されました。この検出を解決するには、許可リストを使用して、ウェブ アプリケーションがリクエストできるドメインと IP アドレスを制限します。 該当なし A10
XSS このウェブ アプリケーションのフィールドは、クロスサイト スクリプティング(XSS)攻撃に対して脆弱である。この問題を解決するには、信頼されていないユーザーが提供したデータを検証してエスケープします。 A7 A03
XSS_ANGULAR_CALLBACK ユーザーが指定した文字列がエスケープされず、AngularJS によって補間される場合がある。この問題を解決するには、信頼されていないユーザーが指定し、Angular フレームワークによって処理されたデータを検証してエスケープします。 A7 A03
XSS_ERROR このウェブ アプリケーションのフィールドは、クロスサイト スクリプティング攻撃に対して脆弱である。この問題を解決するには、信頼されていないユーザーが提供したデータを検証してエスケープします。 A7 A03

使用上の注意

Security Command Center のロールは、組織レベル、フォルダレベル、またはプロジェクト レベルで付与されます。検出結果、アセット、セキュリティ ソース、セキュリティ マークを、表示、編集、作成、更新する権限は、アクセス権が付与されるレベルによって異なります。Security Command Center のロールの詳細については、アクセス制御をご覧ください。

Web Security Scanner を使用するときは、その他の重要点に留意してください。

  • Web Security Scanner は現在も継続的に改善が進められているため、現在のスキャンでは報告されない問題が今後報告される可能性があります。
  • アプリケーションの機能やセクションをすべてテストしているとは限りません。
  • Web Security Scanner は、検出するすべてのコントロールと入力の有効化と試みます。
  • テスト アカウントが権限を持つ状態変更アクションを公開した場合、Web Security Scanner はそのアクションを有効にすることがあります。これは望ましくない結果につながる可能性があります。

セキュリティ スキャンを実行できるユーザー

Web Security Scanner で使用できる Identity and Access Management(IAM)のロールについては、アクセス制御をご覧ください。

セキュリティ スキャンにかかる時間

セキュリティ スキャンはすぐには実行されません。まずキューに追加され、後で実行されます。そのため、システム負荷によっては数時間後になる場合もあります。スキャンの実行が始まったら、その所要時間はアプリケーションのサイズによって異なります。多くの URL が含まれた大規模なアプリケーションの場合、完了するまでに数時間かかる場合があります。

ターゲットの制限

Web Security Scanner には、スキャンのターゲットをスキャンが作成される特定の App Engine インスタンスに制限するフィルタが導入されています。別の App Engine プロジェクトや外部ドメインの URL を入力すると、エラー メッセージが表示されます。

Compute Engine と GKE のスキャンは、同じプロジェクト用に予約された静的外部 IP アドレスと、同じプロジェクトに属する静的外部 IP アドレスにマッピングされるドメインに限定されます。プロジェクトの IP アドレスを予約する方法については、次のリンクをご覧ください。

App Engine には、静的 IP アドレスをアプリにマッピングする方法は用意されていません。ただし、Cloud Load Balancing とサーバーレス ネットワーク エンドポイント グループを使用すると、ロードバランサの静的 IP アドレスを予約して、トラフィックをアプリケーションに転送できます。料金については、外部 IP アドレスの料金をご覧ください。

プロジェクト内では、Web Security Scanner はログアウト URL と、スキャンに悪影響を与える可能性があるその他の汎用的な場所を自動的に回避しようとします。ただし、これを確実に行うため、スキャン設定を使用して手動で URL を除外することもできます。

検証

スキャンの構成は、作成時と各スキャンの前に検証されます。スキャンが正しく構成され、アプリケーションに正常にログインできるようにするため、Web Security Scanner は、Security Command Center の設定とアプリケーションの認証情報を確認します。サポートの範囲内に抑えるため、最大スキャン速度などの構成パラメータも確認されます。

スキャンを作成または更新する前に、エラーを解決する必要があります。初期構成後に変更されたアプリケーションでは、スキャン中にエラーが発生する可能性があります。たとえば、プロジェクトが所有する IP アドレスをドメインが参照していない場合、リソースはスキャンされず、スキャンの構成ページにエラーが報告されます。

ベスト プラクティス

Web Security Scanner を使用すると、フィールドに値が入力される、ボタンが押される、リンクがクリックされる、などのユーザー アクションが行われるため、特に本番環境のリソースをスキャンする際には注意が必要です。また、データやシステムの状態を変更する機能が有効になる可能性があり、望ましくない結果がもたらされる場合があります。

例:

  • ブログ アプリケーションで一般からのコメントを受け付けるようにしていると、Web Security Scanner がすべてのブログ記事にコメントとしてテスト文字列を投稿する場合があります。
  • メール登録ページで、Web Security Scanner によって多数のテストメールが生成される場合があります。

望ましくない結果を避けるために、個別または組み合わせて使用できる手法を以下に紹介します。

  1. テスト環境でスキャンを実行します。テスト環境を設定するには、別途 App Engine プロジェクトを作成し、このプロジェクトにアプリケーションとデータを読み込みます。gcloud コマンドライン ツールを使用する場合、アプリをアップロードするときに、対象のプロジェクトをコマンドライン オプションとして指定できます。
  2. テスト アカウントを使用します。機密データへのアクセスや有害な操作を実行できないユーザー アカウントを作成し、アプリのスキャン時に使用します。多くのアプリケーションでは、ユーザーが初めてログインしたときに、利用規約の同意やプロフィールの作成などの特別なワークフローが提示されます。ワークフローが異なるために、初期ユーザーのテスト アカウントで生成されるスキャン結果が、確立したユーザー アカウントのものとは異なる場合があります。最初のフローが完了した後、アカウントが通常のユーザー状態のときにスキャンを実行することをおすすめします。
  3. CSS クラス inq-no-click を適用して、有効にしない個々のユーザー インターフェース要素をブロックできます。この要素に関連付けられたイベント ハンドラがインラインの JavaScript か、addEventListener を使用して関連付けられているか、適切なイベント ハンドラのプロパティの設定で関連付けられているかにかかわらず、これらのハンドラはクロールやテストの間に有効になりません。
  4. バックアップ データを使用します。スキャンする前にデータのバックアップを検討してください。
  5. URL を除外します。クロールやテストを行わない URL パターンを指定できます。構文については、URL の除外をご覧ください。

スキャンする前に、スキャンしようとしている範囲を超えてデータやユーザーやシステムに影響を及ぼす可能性がある機能がないか慎重にアプリケーションを調べてください。

次のステップ