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 は、人によるセキュリティ レビューに置き換わるものではなく、アプリケーションにセキュリティの欠陥がないことを保証するものでもありません。

スキャンタイプ

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

マネージド スキャン

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

マネージド スキャンはカスタム スキャンとは別に実行されます。

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

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

マネージド スキャンは、デフォルト ポート(HTTP 接続の場合は 80、HTTPS 接続の場合は 443)を使用するアプリケーションのみをサポートします。アプリケーションがデフォルト以外のポートを使用している場合は、代わりにカスタム スキャンを行います。

カスタム スキャン

Web Security Scanner のカスタム スキャンは、古いライブラリ、クロスサイト スクリプティング、混合コンテンツの使用など、アプリケーションの脆弱性の検出に関する詳細な情報を提供します。

カスタム スキャンはプロジェクト レベルで定義します。

Web Security Scanner のカスタム スキャンを設定するためのガイドを完了すると、Security Command Center でカスタム スキャンによる検出が可能になります。

スキャンの検出結果

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

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

Web Security Scanner は OWASP トップ 10 のカテゴリに対応しています。OWASP トップ 10 は、Open Web Application Security Project(OWASP)で決定される、ウェブ アプリケーションで最も重大な 10 個のウェブ アプリケーション セキュリティ リスクをランク付けして、対処のためのガイダンスを提供するドキュメントです。

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

コンプライアンスの詳細については、セキュリティ ベンチマークのコンプライアンスを評価して報告するをご覧ください。

検出結果のタイプ

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

カテゴリ 検出の説明 OWASP 2017 Top 10 OWASP 2021 Top 10

Accessible Git repository

API のカテゴリ名: ACCESSIBLE_GIT_REPOSITORY

Git リポジトリが一般公開されている。この問題を解決するには、GIT リポジトリへの意図しない公開アクセスを削除します。

料金ティア: プレミアムまたはスタンダード

この問題を修正する

A5 A01

Accessible SVN repository

API のカテゴリ名: ACCESSIBLE_SVN_REPOSITORY

SVN リポジトリが一般公開されている。この問題を解決するには、SVN リポジトリへの意図しない公開アクセスを削除します。

料金ティア: プレミアムまたはスタンダード

この問題を修正する

A5 A01

Cacheable password input

API のカテゴリ名: CACHEABLE_PASSWORD_INPUT

ウェブ アプリケーションに入力したパスワードは、安全なパスワード ストレージではなく、通常のブラウザ キャッシュに保存できます。

料金ティア: Premium

この問題を修正する

A3 A04

Clear text password

API のカテゴリ名: CLEAR_TEXT_PASSWORD

パスワードがクリアテキストで送信されているため、傍受される可能性がある。この問題を解決するには、ネットワーク経由で送信されたパスワードを暗号化します。

料金ティア: プレミアムまたはスタンダード

この問題を修正する

A3 A02

Insecure allow origin ends with validation

API のカテゴリ名: INSECURE_ALLOW_ORIGIN_ENDS_WITH_VALIDATION

クロスサイト HTTP または HTTPS エンドポイントは、Origin リクエスト ヘッダーのサフィックスのみを検査してから、Access-Control-Allow-Origin レスポンス ヘッダー内に反映されます。この検出結果を解決するには、想定どおりのルートドメインが Access-Control-Allow-Origin レスポンス ヘッダーに反映される前に、Origin ヘッダー値の一部になっていることを確認します。サブドメインのワイルドカードの場合は、ルートドメインに先頭にドットを追加します(例: .endsWith(".google.com"))。

料金ティア: Premium

この問題を修正する

A5 A01

Insecure allow origin starts with validation

API のカテゴリ名: INSECURE_ALLOW_ORIGIN_STARTS_WITH_VALIDATION

クロスサイト HTTP または HTTPS エンドポイントは、Access-Control-Allow-Origin レスポンス ヘッダー内に反映する前に、Origin リクエスト ヘッダーのプレフィックスのみを検証します。この検出結果を解決するには、想定どおりのドメインが Access-Control-Allow-Origin レスポンス ヘッダーに反映される前に、Origin ヘッダー値に完全に一致しているかどうか確認します(例: .equals(".google.com"))。

料金ティア: Premium

この問題を修正する

A5 A01

Invalid content type

API のカテゴリ名: INVALID_CONTENT_TYPE

レスポンスの Content-Type HTTP ヘッダーに一致しないリソースが読み込まれた。この検出結果を解決するには、X-Content-Type-Options HTTP ヘッダーに正しい値を設定します。

料金ティア: プレミアムまたはスタンダード

この問題を修正する

A6 A05

Invalid header

API のカテゴリ名: INVALID_HEADER

セキュリティ ヘッダーに構文エラーがあり、ブラウザで無視される。この問題を解決するには、HTTP セキュリティ ヘッダーを正しく設定します。

料金ティア: プレミアムまたはスタンダード

この問題を修正する

A6 A05

Mismatching security header values

API のカテゴリ名: MISMATCHING_SECURITY_HEADER_VALUES

セキュリティ ヘッダーが重複し、値が一致しないため、未定義の動作が起こる。 この問題を解決するには、HTTP セキュリティ ヘッダーを正しく設定します。

料金ティア: プレミアムまたはスタンダード

この問題を修正する

A6 A05

Misspelled security header name

API のカテゴリ名: MISSPELLED_SECURITY_HEADER_NAME

セキュリティ ヘッダーにスペルミスがあるため、無視される。この問題を解決するには、HTTP セキュリティ ヘッダーを正しく設定します。

料金ティア: プレミアムまたはスタンダード

この問題を修正する

A6 A05

Mixed content

API のカテゴリ名: MIXED_CONTENT

HTTPS ページ上で HTTP を介してリソースが提供されている。この問題を解決するには、すべてのリソースが HTTPS を介して提供されるようにします。

料金ティア: プレミアムまたはスタンダード

この問題を修正する

A6 A05

Outdated library

API のカテゴリ名: OUTDATED_LIBRARY

既知の脆弱性があるライブラリが検出された。この問題を解決するには、ライブラリを新しいバージョンにアップグレードします。

料金ティア: プレミアムまたはスタンダード

この問題を修正する

A9 A06

Server side request forgery

API のカテゴリ名: SERVER_SIDE_REQUEST_FORGERY

サーバー側のリクエスト フォージェリ(SSRF)の脆弱性が検出された。この問題を解決するには、許可リストを使用して、ウェブ アプリケーションがリクエストできるドメインと IP アドレスを制限します。

料金ティア: プレミアムまたはスタンダード

この問題を修正する

該当なし A10

Session ID leak

API のカテゴリ名: SESSION_ID_LEAK

クロスドメイン リクエストを行う場合は、ウェブ アプリケーションの Referer リクエスト ヘッダーにユーザーのセッション ID を含めます。この脆弱性により、受信側ドメインにセッション ID へのアクセス権が付与されます。この ID は、ユーザーになりすますことや、ユーザーを一意に識別するために使用される可能性があります。

料金ティア: Premium

この問題を修正する

A2 A07

SQL injection

API のカテゴリ名: SQL_INJECTION

潜在的な SQL インジェクション脆弱性が検出された。この問題を解決するには、パラメータ化されたクエリを使用して、ユーザー入力が SQL クエリの構造に影響を与えないようにします。

料金ティア: Premium

この問題を修正する

A1 A03

Struts insecure deserialization

API のカテゴリ名: STRUTS_INSECURE_DESERIALIZATION

脆弱なバージョンの Apache Struts の使用が検出されました。この問題を解決するには、Apache Struts を最新バージョンにアップグレードしてください。

料金ティア: Premium

この問題を修正する

A8 A08

XSS

API のカテゴリ名: XSS

このウェブ アプリケーションのフィールドは、クロスサイト スクリプティング(XSS)攻撃に対して脆弱である。この問題を解決するには、信頼されていないユーザーが提供したデータを検証してエスケープします。

料金ティア: プレミアムまたはスタンダード

この問題を修正する

A7 A03

XSS angular callback

API のカテゴリ名: XSS_ANGULAR_CALLBACK

ユーザーが指定した文字列がエスケープされず、AngularJS によって補間される場合がある。この問題を解決するには、信頼されていないユーザーが指定し、Angular フレームワークによって処理されたデータを検証してエスケープします。

料金ティア: プレミアムまたはスタンダード

この問題を修正する

A7 A03

XSS error

API のカテゴリ名: XSS_ERROR

このウェブ アプリケーションのフィールドは、クロスサイト スクリプティング攻撃に対して脆弱である。この問題を解決するには、信頼されていないユーザーが提供したデータを検証してエスケープします。

料金ティア: プレミアムまたはスタンダード

この問題を修正する

A7 A03

XXE reflected file leakage

API のカテゴリ名: XXE_REFLECTED_FILE_LEAKAGE

XML 外部エンティティ(XXE)の脆弱性が検出された。この脆弱性により、ウェブ アプリケーションによりホスト上のファイルが漏洩する可能性があります。この問題を解決するには、外部エンティティを許可しないように XML パーサーを構成します。

料金ティア: Premium

この問題を修正する

A4 A05

Prototype pollution

API のカテゴリ名: PROTOTYPE_POLLUTION

このアプリケーションはプロトタイプ汚染に対して脆弱性があります。この脆弱性は、Object.prototype オブジェクトのプロパティに攻撃者が制御可能な値が割り当てられる場合に発生します。一般的に、これらのプロトタイプに入力された値は、クロスサイト スクリプティング、類似したクライアントサイドの脆弱性、およびロジックのバグにつながると見なされています。

料金ティア: プレミアムまたはスタンダード

この問題を修正する

A1 A03

使用上の注意

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

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

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

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

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

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

セキュリティ スキャンはすぐには実行されません。まずキューに追加され、後で実行されます。そのため、システム負荷によっては数時間後になる場合もあります。スキャンの実行が始まったら、その所要時間はアプリケーションのサイズによって異なります。 URL の多い大規模なアプリケーションのスキャンには、数時間から数日かかることがあります。スキャンが 20 日以内に完了しなかった場合、スキャンは自動的に停止し、スキャン中に見つかったすべてのクロール結果と検出結果がスキャン結果として表示されます。

ターゲットの制限

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 により、すべてのブログ記事にコメントとしてテスト文字列が投稿される場合があります。
  • メール登録ページで、Web Security Scanner により多数のテストメールが生成される場合があります。

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

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

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

次のステップ