Web Security Scanner を使用したカスタム スキャンの設定

>

Google Cloud Console の Web Security Scanner を使用して、デプロイされたアプリケーションでカスタム スキャンのスケジュールを設定して実行します。Web Security Scanner は、ファイアウォールの背後にない公開 URL と IP のスキャンをサポートしています。

次の動画では、Web Security Scanner の設定手順と、ダッシュボードの使用方法を示しています。設定手順については、このページの後半で説明します。

始める前に

Web Security Scanner を使用してカスタム スキャンを設定するには:

  • パブリック URL または IP にアプリケーションがデプロイされている必要がある。
  • 組織で Security Command Center が有効になっている必要がある。

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

Web Security Scanner を使用すると、フィールドに値が入力される、ボタンがされる、リンクがクリックされるなどの操作が行われるため、注意して使用してください。Web Security Scanner により、データやシステムの状態が変更される機能が有効になり、望ましくない結果がもたらされる場合があります。例:

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

リスクを最小限に抑える方法のヒントについては、意図しない結果を避けるためのベスト プラクティスをご覧ください。

Web Security Scanner を有効にする

Web Security Scanner を有効にして、カスタム スキャンの作成と実行を行います。Security Command Center を組織で有効にする必要があります。

手順 1: テスト プロジェクトをデプロイする

カスタム スキャン用に Web Security Scanner の設定を完了するには、Compute Engine、Google Kubernetes Engine、またはすでにデプロイ済みの App Engine アプリケーションの URL が必要です。デプロイ済みアプリケーションがない場合、またはテスト アプリケーションで Web Security Scanner を試す場合は、選択した言語でテストの App Engine アプリケーションをデプロイします。

手順 2: IAM のロールを割り当てる

Web Security Scanner のスキャンを実行するには、スキャンするプロジェクトに対して、次のいずれかの Identity and Access Management(IAM)ロールが必要です。

  • 編集者
  • オーナー

これらのロールのいずれかを追加するには:

  1. Cloud Console の [IAM と管理] ページに移動します。
    [IAM と管理] ページに移動
  2. [プロジェクト セレクタ] のプルダウン リストをクリックします。
  3. 表示される [選択元] ダイアログで、Web Security Scanner を使用してスキャンするプロジェクトを選択します。
  4. [IAM] ページで、ユーザー名の横にある [編集] をクリックします。
  5. 表示された [権限の編集] パネルで、[別のロールを追加] をクリックして、以下のいずれかの役割を選択します。
    • プロジェクト > オーナー
    • プロジェクト > 編集者
  6. 役割の追加が完了したら、[保存] をクリックします。

詳しくは、Web Security Scanner のロールをご覧ください。

手順 3: スキャンを実行する

スキャンを設定すると、後で実行するようにキューに追加されます。現在の負荷によっては、スキャンが実行されるまでに数時間かかることがあります。スキャンを作成、保存、実行するには:

  1. Cloud Console の [Web Security Scanner] ページに移動します。
    [Web Security Scanner] ページに移動
  2. スキャンするデプロイ済みアプリケーションを含むプロジェクトを選択します。
  3. 新しいスキャンを設定するには、[新しいスキャン] をクリックします。
  4. [新しいスキャンの作成] ページで、次の値を設定します。

    1. [開始 URL] に、スキャンするアプリケーションの URL を入力します。
    2. [スケジュール] で [毎週] を選択します。
    3. [次回の実行] で日付を選択します。

    [Security Command Center へのエクスポート] ボックスが自動的にオンになります。Web Security Scanner のセキュリティ ソースとして Web Security Scanner を有効にしていると、Web Security Scanner ダッシュボードにスキャン結果が表示されるようになります。

    この最初のスキャンでは、[新しいスキャンの作成] ページの他の値を変更せずにデフォルトのスキャンを使用します。スキャン設定の詳細については、アプリのスキャンをご覧ください。

  5. スキャンを作成するには、[保存] をクリックします。

  6. [Web Security Scanner] ページで、スキャン名をクリックして概要ページを読み込み、[スキャンを実行] をクリックします。

    スキャンがキューに追加され、その後のある時点でスキャンが実行されます。スキャンの実行までに数時間かかることがあります。

  7. スキャンが完了すると、スキャンの概要ページに結果のセクションが表示されます。次の画像は、脆弱性が検出されない場合のスキャン結果の例を示しています。

    Web Security Scanner のセキュリティ ソースとして Web Security Scanner を有効にしていると、Web Security Scanner ダッシュボードにもスキャン結果が表示されるようになります。

    特定の検出結果の詳細を表示するには、スキャン結果で検出名をクリックします。

これで、Web Security Scanner の基本的なスキャンは完了です。独自のアプリケーションをスキャンした場合は、このページのアプリのスキャンのセクションで、スキャンをカスタマイズする方法をご確認ください。

スキャンを実行するテスト アプリケーションをデプロイした場合は、このページの次のクリーンアップの手順を完了して、アプリケーションに対する App Engine 料金が発生しないようにします。

手順 4: クリーンアップ

  1. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

アプリのスキャン

テスト アカウントを使用して、アプリのカスタム スキャンを設定します。

手順 1: テスト アカウントを作成する

アプリをスキャンする際は、機密データや有害な操作にアクセスできないテスト アカウントを使用することをおすすめします。アプリにログインできるテスト アカウントを作成し、スキャンの作成時に認証用に提供するログイン認証情報をメモします。これにより、テスト アカウントを使用してデータをスキャンできます。

手順 2: スキャンの作成

  1. Cloud Console の [Web Security Scanner] ページに移動します。
    [Web Security Scanner] ページに移動
  2. [選択] をクリックし、すでにデプロイ済みの App Engine、Compute Engine、または GKE のアプリケーションがあるプロジェクトを選択します。
  3. 新規スキャン フォームを表示するには、[スキャンを作成] または [新しいスキャン] をクリックします。
  4. 新規スキャン フォームに値を追加するにあたっては、次の表をガイドとして使用します。
    項目 説明
    開始 URL

    シンプルなサイトでは通常、開始 URL は 1 つだけです(サイトのホームページ、メインページ、ランディング ページなど)。この URL から、Web Security Scanner によって、他のすべてのサイトページが検出されます。ただし、次のようなサイトの場合、Web Security Scanner はすべてのページを検出しない場合があります。

    • 大量のページがあるサイト
    • 接続されていない孤立したページがあるサイト
    • マウスオーバーによるマルチレベル メニューのような複雑な JavaScript を必要とするナビゲーションがあるサイト

    このような場合は、開始 URL を追加してスキャン対象範囲を広げます。

    除外 URL 複雑さを軽減するため、スキャンから除外する対象の定義には有効な正規表現を必要とせず、1 つ以上の * ワイルドカードを使用する簡略化されたプロトタイプ言語で行います。詳細と有効なパターン例については、このページで後述の URL の除外をご覧ください。
    認証 > Google アカウント

    Gmail でテスト アカウントを作成し、そのアカウントを使用してプロダクトをスキャンできます。G Suite をお使いの場合は、ドメイン内にテスト アカウントを作成できます(例: test-account@yourdomain.com)。Web Security Scanner では、こうしたアカウントが Gmail アカウントと同じように機能します。2 要素認証はサポートされていません。

    Google アカウントには実名ポリシーが適用されます。テスト アカウント名が実名のように見えない場合、アカウントはブロックされる可能性があります。

    [認証] > [Identity-Aware Proxy アルファ版]

    Identity-Aware Proxy でリソースを保護するには、IAP ガイドをご覧ください。

    IAP で保護されたリソースで Web Security Scanner を使用するには、まず Web Security Scanner サービス アカウントを IAP メンバーとして追加します。

    1. Cloud Console で [IAP ページ] に移動します。
    2. Web Security Scanner で使用するプロジェクトを選択します。
    3. スキャンするアプリケーション リソースを選択し、[情報パネル] で [メンバーを追加] をクリックします。
    4. [メンバーを追加] パネルの [新しいメンバー] ボックスに、Web Security Scanner のサービス アカウントを次の形式で入力します。

      service-project-number@gcp-sa-websecurityscanner.iam.gserviceaccount.com です。

    5. [ロールを選択] プルダウン リストで、[Cloud IAP] > [IAP で保護されたウェブアプリ ユーザー] を選択します。
    6. 役割の追加が完了したら、[保存] をクリックします。

    次に、OAuth クライアント ID をスキャンに追加します。Web Security Scanner は、単一の OAuth クライアント ID で保護されているアプリケーションのみスキャンできます。OAuth クライアント ID を追加するには:

    1. Cloud Console で [IAP ページ] に移動します。
    2. Web Security Scanner で使用するプロジェクトを選択します。
    3. [オーバーフロー メニュー] で [OAuth クライアントを編集] を選択します。
    4. 表示された [ウェブ アプリケーションのクライアント ID] ウィンドウで、[クライアント ID] をコピーします。
    5. Cloud Console の [Web Security Scanner] ページに移動します。
    6. [認証] で [Identity-Aware Proxy アルファ版] を選択します。
    7. [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 で新たなバグタイプが見つかることもあるため、スケジュールされたスキャンを実行することで、手動で作業しなくても、スキャン対象範囲が広がります。
  5. 値の追加が完了したら、[作成] をクリックします。これで、新しいスキャンを行えます。

Web Security Scanner は実行するたびに、割り当てられた IP アドレスをランダム使用します。スキャナを通過させるように、ファイアウォールに追加するための予測可能な IP アドレスはありません。

デフォルトでは、Web Security Scanner は実行するたびにランダムに割り当てられた IP アドレスを使用するため、ファイアウォール構成で使用するための予測可能な IP アドレスはありません。Web Security Scanner の IP アドレスを予測可能にするには、このページで後述する静的 IP からのスキャンを有効にする手順を行います。

手順 3: スキャンを実行する

スキャンを実行するには:

  1. スキャンの作成に使用したテスト アカウントにログインします。
  2. Cloud Console の [Web Security Scanner] ページに移動します。
    [Web Security Scanner] ページに移動
  3. [選択] をクリックし、スキャンを作成したプロジェクトを選択します。
  4. [スキャンの構成] で、実行するスキャンの名前をクリックします。
  5. [スキャンの詳細] ページで [実行] をクリックします。

スキャンがキューに配置され、実行されるまでに時間がかかる場合があります。実行に数分の場合もあれば、何時間もかかる場合もあります。これは、システムの負荷と次のような特徴に応じて変わります。

  • サイトの複雑さ
  • 1 ページあたりの使用可能な要素の数
  • リンクの数
  • ナビゲーションを含むサイト上の JavaScript の量

最大 10 個のスキャンを設定して実行できます。この数を超える場合は以前に保存した結果を削除またはクリーンアップする必要があります。

カスタム スキャン結果の表示

カスタム スキャンのステータスと結果は、Cloud Console のスキャンの詳細ページに表示されます。スキャン結果を表示するには:

  1. スキャンの作成に使用したテスト アカウントにログインします。
  2. Cloud Console の [Web Security Scanner] ページに移動します。
    [Web Security Scanner] ページに移動
  3. [選択] をクリックして、表示するスキャンが含まれているプロジェクトを選択します。
  4. [スキャンの構成] で、表示するスキャンの名前をクリックします。

スキャンの詳細ページが読み込まれ、最新のスキャンの結果が表示されます。スキャンが進行中の場合は、[結果] タブに現在の完了率が表示されます。前のスキャンの結果を表示するには、プルダウン リストからスキャンの日時を選択します。

完了したカスタム スキャンの詳細には、次の情報が含まれています。

  • スキャンで脆弱性が発見された場合は、[結果] タブに発見された脆弱性のリストが表示されます。
  • [クロールされた URL] タブには、スキャンで確認された URL のリストが表示されます。
  • [詳細] タブには、次の情報が含まれます。
    • 開始 URL
    • 認証
    • ユーザー エージェント
    • 秒間クエリ数(QPS)として表示される最大スキャン速度

スキャンについての詳細情報は、プロジェクトのログページで確認できます。

カスタム スキャンの編集

カスタム スキャンを編集するには:

  1. スキャンの作成に使用したテスト アカウントにログインします。
  2. Cloud Console の [Web Security Scanner] ページに移動します。
    [Web Security Scanner] ページに移動
  3. [選択] をクリックし、編集するスキャンが含まれているプロジェクトを選択します。
  4. [スキャンの構成] で、編集するスキャンの名前をクリックします。
  5. 表示される [スキャンの詳細] ページで、[編集] をクリックします。
  6. [[スキャン名] の編集] ページが表示されたら、必要な変更を加え、[保存] をクリックします。

編集されたカスタム スキャンが、次にスケジュールされた日時に実行されます。また、手動で実行して更新された結果を取得することもできます。

カスタム スキャンの削除

1 つ以上のカスタム スキャンを削除するには:

  1. スキャンの作成に使用したテスト アカウントにログインします。
  2. Cloud Console の [Web Security Scanner] ページに移動します。
    [Web Security Scanner] ページに移動
  3. [選択] をクリックし、編集するスキャンが含まれているプロジェクトを選択します。
  4. [スキャンの構成] で、削除するスキャンの横にあるチェックボックスをオンにします(複数選択可)。
  5. [削除] をクリックし、[OK] をクリックします。

選択したすべてのスキャンが削除されます。

静的 IP からのスキャンの設定

このセクションでは、静的 IP 機能から Web Security Scanner のカスタム スキャンを有効にする方法について説明します。この機能を有効にすると、Web Security Scanner は予測可能な IP アドレスを使用して、一般公開の Compute Engine アプリケーションと Google Kubernetes Engine(GKE)アプリケーションをスキャンします。この機能は現在アルファ版であり、今後のリリースで Web Security Scanner の IP アドレスが変更される可能性があります。

始める前に

静的 IP からの Web Security Scanner カスタム スキャン機能を使用するには、次のものが必要です。

  • 一般公開された Compute Engine または GKE アプリケーション。この機能は現在、App Engine アプリケーションをサポートしていません。
  • 認証なしで作成されたスキャン、または Google アカウント認証で作成されたスキャン。この機能は現在、Google 以外のアカウント認証を使用するスキャンをサポートしていません。

手順 1: ファイアウォールを構成する

「静的 IP からのスキャン」アルファ版に登録したら、Web Security Scanner の IP アドレスを許可するようにファイアウォールを構成します。

  1. Cloud Console の [ファイアウォール ルール] ページに移動します。
    [ファイアウォール ルール] ページに移動
  2. [選択] をクリックして、プロジェクトを選択します。
  3. 表示された [ファイアウォール ルール] ページで、[ファイアウォール ルールを作成] をクリックします。
  4. [ファイアウォール ルールの作成] ページで、次の値を設定します。
    1. [名前]: web-security-scanner または同様の名前を入力します。
    2. [優先度]: アプリケーションへの下り(外向き)トラフィックを拒否するすべてのルールよりも高い優先度(小さい値)を選択します。
    3. [ソース IP の範囲]: 34.66.18.0/2634.66.114.64/26 を入力します。
    4. [プロトコルとポート]: [すべて許可] を選択するか、アプリケーションのプロトコルとポートを指定します。ほとんどの場合では、[tcp] チェックボックスをオンにして、ポートに 80443 を入力します。
  5. 値の設定が完了したら、[作成] をクリックします。

手順 2: スキャンを構成する

Web Security Scanner が予測可能な IP アドレスを許可するようにファイアウォールを構成したら、事前定義された IP を使用するようにスキャンを構成します。

  1. Cloud Console の [Web Security Scanner] ページに移動します。
    [Web Security Scanner] ページに移動
  2. [選択] をクリックして、プロジェクトを選択します。
  3. 新しいスキャンを作成するか、既存のスキャンを編集します。
  4. [事前定義されたソース IP のセットからスキャンを実行する] のチェックボックスをオンにします。
  5. スキャンを保存します。

次回のスキャンを実行すると、ファイアウォールの内側にある一般公開の Compute Engine アプリケーションおよび GKE アプリケーションをスキャンします。

URL の除外

1 つ以上の除外 URL パターンを指定して、カスタム スキャン中にサイトの一部をテストしないようにすることができます。Web Security Scanner は、除外内容のいずれかに一致するリソースをリクエストしません。以下のセクションでは、Web Security Scanner で使用されるパターン マッチングについて説明します。

URL パターン マッチング

除外 URL のマッチングは、一致パターンで定義された URL のセットに基づきます。一致パターンは、次の 3 つの部分からなる URL です。

  • scheme: たとえば、http または *
  • host: たとえば、www.google.com*.google.com または *
  • path: たとえば、/*/foo* または /foo/bar. *

基本的な構文は次のとおりです。

<exclude-pattern> := <scheme>://<host><path>
<scheme> := '*' | 'http' | 'https'
<host> := '*' | '*.' <any char except '/' and '*'>+
<path> := '/' <any chars>

各部の * には次の機能があります。

  • scheme: *は、HTTP または HTTPS に一致します。
  • host:
    • * は、任意のホストに一致します。
    • *.hostname は、指定されたホストとその任意のサブドメインに一致します。
  • path: * は、0 個以上の文字に一致します。

有効なパターン一致

次の表は、有効なパターンの例を示したものです。

パターン 動作 URL 一致例
http://*/* HTTP スキームを使用する URL に一致します。

http://www.google.com/

http://example.org/foo/bar.html

http://*/foo* いかなるホスト上でも、パスが /foo で始まれば、HTTP スキームを使用するすべての URL に一致します。

http://example.com/foo/bar.html

http://www.google.com/foo

https://*.google.com/foo*bar パスが /foo で始まり、bar で終わる場合に、HTTPS スキームを使用し、google.com ホスト(www.google.comdocs.google.comgoogle.com など)にある URL に一致します。

http://www.google.com/foo/baz/bar

http://docs.google.com/foobar

http://example.org/foo/bar.html 指定された URL に一致します。 http://example.org/foo/bar.html
http://127.0.0.1/* HTTP スキームを使用し、ホスト 127.0.0.1 にあるすべての URL に一致します。

http://127.0.0.1/

http://127.0.0.1/foo/bar.html

*://mail.google.com/* http://mail.google.com または https://mail.google.com で始まる URL に一致します。

http://mail.google.com/foo/baz/bar

https://mail.google.com/foobar

無効なパターン一致

次の表は、無効なパターンの例を示したものです。

パターン 理由
http://www.google.com URL にパスが含まれていません。
http://*foo/bar ホストにある * の後には ./ のみを続けることができます。
http://foo.*.bar/baz * がホストにある場合は、最初の文字である必要があります。
http:/bar URL のスキームの区切り文字の形式が正しくありません。"/""//" になっているはずです。
foo://* URL のスキームが無効です。

次のステップ