Google Cloud Console の Web Security Scanner を使用して、デプロイ済みのアプリケーションのカスタム スキャンのスケジュールを設定して実行します。Web Security Scanner は、ファイアウォールの背後にない公開 URL と IP のスキャンをサポートしています。
始める前に
Web Security Scanner を使用したカスタム スキャンの設定には、以下が必要です。
- パブリック URL または IP にアプリケーションがデプロイされている必要があります。
- Security Command Center を有効にする必要があります。
スキャンする前に、スキャンする範囲を超えてデータやユーザーやシステムに影響を及ぼす可能性がある機能がないか慎重にアプリケーションを調べてください。
Web Security Scanner を使用すると、フィールドに値が入力される、ボタンがされる、リンクがクリックされるなどの操作が行われるため、注意して使用してください。Web Security Scanner により、データやシステムの状態が変更される機能が有効になり、望ましくない結果がもたらされる場合があります。例:
- ブログ アプリケーションで一般からのコメントを受け付けるようにしていると、Web Security Scanner により、すべてのブログ記事にコメントとしてテスト文字列が投稿される場合があります。
- メール登録ページで、Web Security Scanner により多数のテストメールが生成される場合があります。
リスクを最小限に抑えるヒントについては、意図しない結果を避けるためのベスト プラクティスをご覧ください。
Web Security Scanner を有効にする
Security Command Center で Web Security Scanner を有効にして、カスタム スキャンを作成して実行します。
Security Command Center が有効になっている場合は、Google Cloud コンソールの Security Command Center の設定ページで Web Security Scanner を有効にできます。
手順 1: テスト アプリケーションをデプロイする
Web Security Scanner でカスタム スキャンの設定を完了するには、Compute Engine、Google Kubernetes Engine(GKE)、またはデプロイ済みの App Engine アプリケーションの URL が必要です。デプロイされたアプリケーションがない場合や、テスト アプリケーションで Web Security Scanner を試す場合は、テスト用の App Engine アプリケーションをデプロイします。任意の言語を使用します。次の言語を使用できます。
手順 2: IAM ロールを割り当てる
Web Security Scanner のスキャンを実行するには、スキャンするプロジェクトに対して、次のいずれかの Identity and Access Management(IAM)ロールが必要です。
- 編集者
- オーナー
これらのロールのいずれかを追加するには:
Google Cloud コンソールの [IAM と管理] ページに移動します。
[プロジェクト セレクタ] のプルダウン リストをクリックします。
表示される [Select from] ダイアログで、Web Security Scanner を使用してスキャンするプロジェクトを選択します。
[IAM] ページで、ユーザー名の横にある [編集] をクリックします。
表示された [権限の編集] パネルで、[別のロールを追加] をクリックして、以下のいずれかのロールを選択します。
- プロジェクト > オーナー
- プロジェクト > 編集者
役割の追加が完了したら、[保存] をクリックします。
Web Security Scanner ロールの詳細を確認してください。
手順 3: スキャンを実行する
スキャンを設定すると、後で実行されるようキューに登録されます。現在の負荷によっては、スキャンの実行までに数時間かかることがあります。スキャンを作成、保存、実行するには:
Google Cloud コンソールの [Web Security Scanner] ページに移動します。
スキャンするデプロイ済みアプリケーションが含まれるプロジェクトを選択します。
新しいスキャンを設定するには、[新しいスキャン] をクリックします。
[新しいスキャンの作成] ページで、次の値を設定します。
- [開始 URL] に、スキャンするアプリケーションの URL を入力します。
- [スケジュール] で、[毎週] を選択します。
- [次回の実行] で日付を選択します。
[Export to Security Command Center] ボックスが自動的にオンになります。Security Command Center のセキュリティ ソースとして Web Security Scanner を有効にしている場合、スキャン結果を Google Cloud コンソールに表示できます。
この最初のスキャンでは、[新しいスキャンを作成] ページで他の値を変更せずにデフォルトのスキャンを使用します。スキャン設定の詳細については、アプリのスキャンをご覧ください。
スキャンを作成するには、[保存] をクリックします。
[Web Security Scanner] ページで、スキャン名をクリックして概要ページを読み込み、[スキャンを実行] をクリックします。
スキャンがキューに追加され、その後のある時点でスキャンが実行されます。スキャンの実行までに数時間かかることがあります。
スキャンが完了すると、スキャンの概要ページに結果のセクションが表示されます。次の画像は、脆弱性が検出されない場合のスキャン結果を示しています。
Web Security Scanner のセキュリティ ソースとして Web Security Scanner を有効にしている場合、スキャン結果は Google Cloud コンソールにも表示されます。
特定の検出結果の詳細を表示するには、スキャン結果で検出名をクリックします。
これで、Web Security Scanner の基本的なスキャンは完了です。独自のアプリケーションをスキャンした場合は、このページのアプリのスキャンのセクションで、スキャンのカスタマイズ方法をご確認ください。
スキャンを実行するテスト アプリケーションをデプロイした場合は、このページの次のクリーンアップの手順を完了して、アプリケーションに対する App Engine 料金が発生しないようにします。
手順 4: クリーンアップ
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
アプリのスキャン
テスト アカウントを使用して、アプリのカスタム スキャンを設定します。
手順 1: テスト アカウントを作成する
アプリをスキャンする際は、機密データにアクセスしたり有害な操作を実行したりできないテスト アカウントを使用することをおすすめします。アプリにログインできるテスト アカウントを作成します。スキャンを作成する際は、認証のために使用するログイン認証情報に注意してください。この認証情報を使うと、テスト アカウントを使用してデータをスキャンできます。
手順 2: スキャンを作成する
Google Cloud コンソールの [Web Security Scanner] ページに移動します。
[選択] をクリックし、すでにデプロイ済みの App Engine、Compute Engine、または GKE のアプリケーションがあるプロジェクトを選択します。
新規スキャン フォームを表示するには、[スキャンを作成] または [新しいスキャン] をクリックします。
新規スキャン フォームに値を追加する際は、次の表をガイドとして使用してください。
フィールド 説明 開始 URL 基本的なサイトでは通常、開始 URL は 1 つだけです。Web Security Scanner は、サイトのホームページ、メインページ、またはランディング ページから他のすべてのサイトページを検出できます。ただし、次のようなサイトの場合、Web Security Scanner はすべてのページを検出しない場合があります。
- 多数のページ
- 接続されていない孤立ページがあるサイト
- マウスオーバーによるマルチレベル メニューのような複雑な JavaScript を必要とするナビゲーション
このような場合は、開始 URL を追加してスキャン対象範囲を広げます。
除外 URL 複雑さを軽減するため、有効な正規表現を使用しなくても、* ワイルドカードによる簡素化されたプロト言語を使用して除外対象を定義できます。詳細と有効なパターン例については、このページで後述の URL の除外をご覧ください。 [認証] > [Google アカウント] Gmail でテスト アカウントを作成し、そのアカウントを使用してプロダクトをスキャンできます。Google Workspace をご利用の場合は、ドメイン内にテスト アカウントを作成できます(
test-account@yourdomain.com
など)。Web Security Scanner では、これらのアカウントは Gmail アカウントと同様に機能します。2 要素認証はサポートされていません。Google アカウントには実名のポリシーが適用されます。テスト アカウント名が実名のように見えない場合、アカウントがブロックされる可能性があります。
[認証] > [Identity-Aware Proxy アルファ版] Identity-Aware Proxy でリソースを保護するには、IAP ガイドをご覧ください。
IAP で保護されたリソースで Web Security Scanner を使用するには、まず Web Security Scanner サービス アカウントにアクセス権を付与します。
- Google Cloud コンソールの IAP ページに移動します。
- Web Security Scanner で使用するプロジェクトを選択します。
- スキャンするアプリケーション リソースを選択し、[情報パネル] で [プリンシパルを追加] をクリックします。
-
[プリンシパルの追加] パネルの [新しいプリンシパル] ボックスに、Web Security Scanner のサービス アカウントを
service-project-number@gcp-sa-websecurityscanner.iam.gserviceaccount.com
の形式で入力します。 - [ロールを選択] プルダウン リストで、[Cloud IAP] > [IAP で保護されたウェブアプリ ユーザー] を選択します。
- 役割の追加が完了したら、[保存] をクリックします。
次に、OAuth クライアント ID をスキャンに追加します。Web Security Scanner は、単一の OAuth クライアント ID で保護されているアプリケーションのみをスキャンできます。OAuth クライアント ID を追加するには:
- Google Cloud コンソールで IAP ページに移動します。
- Web Security Scanner で使用するプロジェクトを選択します。
- オーバーフロー メニューで [OAuth クライアントを編集] を選択します。
- 表示された [ウェブ アプリケーションのクライアント ID] ウィンドウで、[クライアント ID] をコピーします。
- Google Cloud コンソールの [Web Security Scanner] ページに移動します。
- [認証] で [Identity-Aware Proxy アルファ版] を選択します。
- [OAuth2 クライアント ID] ボックスに、コピーした OAuth クライアント ID を貼り付けて、[保存] をクリックします。
[認証] > [Google 以外のアカウント] 独自の認証システムを作成し、Google アカウント サービスを使用していない場合は、このオプションを選択します。ログイン フォームの URL、ユーザー名、パスワードを指定してください。この認証情報は、アプリケーションにログインしてスキャンする場合に使用します。
Web Security Scanner は、ヒューリスティクスを試み、アプリケーションへログインし、スキャンします。具体的には、このメソッドでは
username
とpassword
の 2 つを含むフィールドのログイン フォームが検索されます。スキャンを継続するには、ログイン アクションにより認証 Cookie を生成する必要があります。カスタム ログインが失敗する一般的な原因は次のとおりです。
-
標準以外の HTML フォーム フィールドを使用する(たとえば、
password
タイプは使用しません)。 -
複雑なログイン フォームを使用する(たとえば、複数の
username
フィールドとpassword
フィールドがあるフォームなど)。 - ログイン成功時に認証 Cookie が保存されない。
- 場合によっては、ボット、DDoS、その他の攻撃から保護するための対策によってスキャナが拒否されることがあります。
アプリケーションの認証スキャンで最も一貫したエクスペリエンスを提供するため、Identity-Aware Proxy 統合を使用することをおすすめします。
スケジュール スキャンの実行を毎日、毎週、2 週間ごと、4 週間ごとに設定できます。スキャンのスケジュールを作成するときは、スキャン対象アプリケーションの今後のバージョンがテストされるようにすることをおすすめします。また、新規リリースの Cloud Security Scanner で新たなバグタイプが見つかることもあるため、スケジュールされたスキャンを実行することで、手動で作業しなくても、スキャン対象範囲が広がります。 事前に定義されたソース IP セットからスキャンを実行する(プレビュー) スキャン トラフィックを事前定義の IP アドレスのセットに限定するには、このオプションを選択します。これにより、スキャナはファイアウォールの内側にあるアプリケーションにアクセスできますが、スキャン範囲が制限される可能性があります。Web Security Scanner トラフィックを許可するようにファイアウォール ルールを変更するには、このページのファイアウォールの構成をご覧ください。 エクスポート オプション スキャンの構成と結果を Security Command Center に自動的にエクスポートするには、このオプションを選択します。 HTTP ステータス エラーを無視 このオプションは、スキャン中に HTTP ステータス エラー(**400 Bad Request** など)が大量に発生したときに、スキャンを失敗として報告するかどうかを制御します。このオプションが選択されている場合、ステータス エラーは無視されます。このオプションが選択されておらず、ステータス エラーの割合が所定のしきい値を超えると、スキャンは失敗として報告されます。 値の追加が完了したら、[保存] をクリックします。これで新しいスキャンを実行できます。
デフォルトでは、Web Security Scanner は実行するたびにランダムに割り当てられた IP アドレスを使用します。Web Security Scanner の IP アドレスを予測可能にするには、このページで後述する静的 IP からのスキャンを有効にする手順を行います。
手順 3: スキャンを実行する
スキャンを実行するには:
- スキャンの作成に使用したテスト アカウントにログインします。
Google Cloud コンソールの [Web Security Scanner] ページに移動します。
[選択] をクリックし、スキャンを作成したプロジェクトを選択します。
[スキャンの構成] で、実行するスキャンの名前をクリックします。
[スキャンの詳細] ページで [実行] をクリックします。
スキャンがキューに配置され、実行されるまでに時間がかかる場合があります。実行に数分の場合もあれば、何時間もかかる場合もあります。これは、システムの負荷と次のような特徴に応じて変わります。
- サイトの複雑さ
- 1 ページあたりの使用可能な要素の数
- リンクの数
- ナビゲーションが含まれるサイト上の JavaScript の量
最大 10 個のスキャンを設定して実行できます。この数を超える場合は以前に保存した結果を削除またはクリーンアップする必要があります。
カスタム スキャン結果の表示
カスタム スキャンのステータスと結果は、Google Cloud コンソール の [スキャンの詳細] ページに表示されます。スキャン結果を表示するには:
- スキャンの作成に使用したテスト アカウントにログインします。
Google Cloud コンソールの [Web Security Scanner] ページに移動します。
[選択] をクリックして、表示するスキャンが含まれているプロジェクトを選択します。
[スキャンの構成] で、表示するスキャンの名前をクリックします。
スキャンの詳細ページが読み込まれ、最新のスキャンの結果が表示されます。スキャンが進行中の場合は、[結果] タブに現在の完了率が表示されます。前のスキャンの結果を表示するには、プルダウン リストからスキャンの日時を選択します。
完了したカスタム スキャンの詳細には、次の情報が含まれています。
- スキャンで脆弱性が発見された場合は、[結果] タブに発見された脆弱性のリストが表示されます。
- [クロールされた URL] タブには、スキャンで確認された URL のリストが表示されます。
[詳細] タブには、次の情報が表示されます。
- 開始 URL
- 認証
- ユーザー エージェント
- 秒間クエリ数(QPS)として表示される最大スキャン速度
スキャンについての詳細情報は、プロジェクトのログページで確認できます。
カスタム スキャンの編集
カスタム スキャンを編集するには、次の手順を行います。
- スキャンの作成に使用したテスト アカウントにログインします。
Google Cloud コンソールの [Web Security Scanner] ページに移動します。
[選択] をクリックし、編集するスキャンが含まれているプロジェクトを選択します。
[スキャンの構成] で、編集するスキャンの名前をクリックします。
表示される [スキャンの詳細] ページで、[編集] をクリックします。
表示される [スキャン名] の編集ページで必要な変更を行い、[保存] をクリックします。
編集されたカスタム スキャンが、次にスケジュールされた日時に実行されます。また、手動で実行して更新された結果を取得することもできます。
カスタム スキャンの削除
1 つ以上のカスタム スキャンを削除するには、次の手順を行います。
- スキャンの作成に使用したテスト アカウントにログインします。
Google Cloud コンソールの [Web Security Scanner] ページに移動します。
[選択] をクリックし、編集するスキャンが含まれているプロジェクトを選択します。
[スキャンの構成] で、削除するスキャンの横にあるチェックボックスをオンにします(複数選択可)。
[削除] をクリックし、[OK] をクリックします。
選択したスキャンがすべて削除されます。
静的 IP からのスキャンの設定
このセクションでは、静的 IP アドレスからの Web Security Scanner カスタム スキャンを有効にする方法について説明します。この機能を有効にすると、Web Security Scanner は予測可能な IP アドレスを使用して、一般公開の Compute Engine アプリケーションと Google Kubernetes Engine アプリケーションをスキャンします。この機能はプレビュー版であり、今後のリリースで Web Security Scanner の IP アドレスが変更される可能性があります。
始める前に
静的 IP からの Web Security Scanner カスタム スキャン機能を使用するには、次のものが必要です。
- 一般公開された Compute Engine または GKE アプリケーション。この機能は App Engine アプリケーションをサポートしていません。
- 認証なしで作成されたスキャン、または Google アカウント認証で作成されたスキャン。この機能は、Google 以外のアカウント認証を使用するスキャンをサポートしていません。
手順 1: ファイアウォールを構成する
Google Cloud コンソールの [ファイアウォール ルール] ページに移動します。
[選択] をクリックして、プロジェクトを選択します。
表示される [ファイアウォール ルール] ページで、[ファイアウォール ルールを作成] をクリックします。
[ファイアウォール ルールの作成] ページで、次の値を設定します。
- [名前]:
web-security-scanner
または同様の名前を入力します。 - [優先度]: アプリケーションへの下り(外向き)トラフィックを拒否するすべてのルールよりも高い優先度(小さい値)を選択します。
- [ソース IP の範囲]:
34.66.18.0/26
と34.66.114.64/26
を入力します。 - プロトコルとポート: [すべて許可] を選択するか、アプリケーションのプロトコルとポートを指定します。通常は、[tcp] チェックボックスをオンにして、ポートに「
80
」と「443
」を入力します。
- [名前]:
値の更新が完了したら、[作成] をクリックします。
手順 2: スキャンを構成する
Web Security Scanner が予測可能な IP アドレスを許可するようにファイアウォールを構成したら、事前定義の IP を使用するようにスキャンを構成します。
Google Cloud コンソールの [Web Security Scanner] ページに移動します。
[選択] をクリックして、プロジェクトを選択します。
新しいスキャンを作成するか、既存のスキャンを編集します。
[事前定義されたソース IP のセットからスキャンを実行する] のチェックボックスをオンにします。
スキャンを保存します。
次回のスキャンを実行すると、ファイアウォールの内側にある一般公開の Compute Engine アプリケーションおよび GKE アプリケーションをスキャンします。
URL の除外
除外 URL パターンを最大 100 個まで指定して、カスタム スキャン中にサイトの一部がテストされないようにすることができます。Web Security Scanner は、除外対象のいずれかに一致するリソースをリクエストしません。以下のセクションでは、Web Security Scanner で使用されるパターン マッチングについて説明します。
URL パターン マッチング
除外 URL のマッチングは、一致パターンで定義される一連の URL に基づきます。一致パターンとは、次の 5 つのセグメントから構成される URL のことです。
scheme
: たとえば、http
または*
host
: たとえば、www.google.com
、*.google.com
または*
path
: たとえば、/*
、/foo*
または/foo/bar. *
query
: たとえば、?*
、?*foo=bar*
fragment
: たとえば、#*
、#access
基本的な構文は次のとおりです。
<exclude-pattern> := <scheme>://<host><path><query><fragment>
<scheme> := '*' | 'http' | 'https'
<host> := '*' | '*.' <any char except '/' and '*'>+
<path> := '/' <any chars except '?' or '#'>
<query> := '?' <any chars except '#'>
<fragment> := '#' <any chars>
各部の *
には次の機能があります。
scheme
:*
は、HTTP または HTTPS に一致します。host
:*
は、任意のホストに一致します。*.hostname
は、指定されたホストとその任意のサブドメインに一致します。
path
:*
は、0 個以上の文字に一致します。
除外パターンでは、すべてのセグメントが必須ではありません。
scheme
セグメントが指定されていない場合、デフォルトは*://
です。host
セグメントは必ず指定されている必要があります。path
セグメントが指定されていない場合、デフォルトは次のようになります。/*
(query
とfragment
のセグメントが指定されていない場合)。この値は、いずれかのpath
に一致するか、どのpath
とも一致しません。/
(query
かfragment
のセグメントが指定されている場合は空のpath
)。
query
セグメントが指定されていない場合、デフォルトは次のようになります。?*
(fragment
セグメントが指定されていない場合)。この値は、いずれかのquery
に一致するか、どのquery
とも一致しません。?
(fragment
が指定されている場合は空のquery
)。
fragment
セグメントが指定されていない場合、デフォルトは#*
になり、いずれかのfragment
に一致するか、どのfragment
とも一致しません。
有効なパターン一致
次の表は、有効なパターンの例を示したものです。
パターン | 動作 | URL 一致例 |
---|---|---|
http://*/* |
HTTP スキームを使用する URL に一致します。 |
|
http://*/foo* |
いかなるホスト上でも、パスが /foo で始まれば、HTTP スキームを使用するすべての URL に一致します。
|
|
https://*.google.com/foo*bar |
パスが /foo で始まり、bar で終わる場合に、HTTPS スキームを使用し、google.com ホスト(www.google.com 、docs.google.com 、google.com など)にある URL に一致します。 |
|
http://example.org/foo/bar.html |
指定された URL に一致します。 | http://example.org/foo/bar.html |
http://127.0.0.1/* |
HTTP スキームを使用し、ホスト 127.0.0.1 にあるすべての URL に一致します。 |
|
*://mail.google.com/* |
http://mail.google.com または https://mail.google.com で始まる URL に一致します。 |
|
*://*/foo*?*bar=baz* |
パスが /foo で始まり、クエリ パラメータ bar=baz を持つすべての URL と一致します。 |
https://www.google.com/foo/example?bar=baz |
google.com/app#*open* |
パスが /app で始まり、フラグメントが open の google.com ホストの URL と一致します。 |
https://www.google.com/app/example#open |
無効なパターン一致
次の表は、無効なパターンの例を示したものです。
パターン | 理由 |
---|---|
http://www.google.com |
URL にパスが含まれていません。 |
http://*foo/bar |
ホストの * の後に、. または / を指定する必要があります。 |
http://foo.*.bar/baz |
* がホストにある場合は、最初の文字である必要があります。 |
http:/bar |
URL スキーム セパレータの形式が正しくありません。"/" は "//" になっているはずです。 |
foo://* |
URL のスキームが無効です。 |
次のステップ
- Web Security Scanner の検出結果を修正する方法を学習する。