arrow_back

Security Command Center を使用してアプリケーションの脆弱性を特定する

ログイン 参加
知識をテストして、コミュニティで共有しましょう

Security Command Center を使用してアプリケーションの脆弱性を特定する

ラボ 1時間 15分 universal_currency_alt クレジット: 1 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
知識をテストして、コミュニティで共有しましょう

GSP1262

概要

Security Command Center の組み込みサービスの一つである Web Security Scanner(WSS)を使用すると、App Engine、Google Kubernetes Engine(GKE)、Compute Engine の各ウェブ アプリケーションにおけるセキュリティの脆弱性を特定できます。

このサービスは、アプリケーションをクロールして、開始 URL の範囲内にあるすべてのリンクをたどり、できる限り多くのユーザー入力とイベント ハンドラを実行します。クロスサイト スクリプティング(XSS)、Flash インジェクション、混合コンテンツ(HTTPS 内の HTTP)、古い / 安全ではないライブラリなど、4 つのよくある脆弱性を自動的にスキャンし検出します。

偽陽性率は非常に低く、早期に脆弱性を特定できます。セキュリティ スキャンの設定、実行、スケジュール、管理を簡単に行うことができます。

このラボでは、Web Security Scanner を使用して Python Flask アプリケーションをスキャンし、脆弱性の有無を確認します。

目標

このラボでは、次のタスクを行う方法について学びます。

  • Compute Engine インスタンス上で、脆弱性のある Python Flask アプリケーションを起動する
  • Web Security Scanner でアプリケーションをスキャンして脆弱性を検出する
  • アプリケーションの脆弱性を修復する
  • アプリケーションを再度スキャンして、脆弱性が修復されたことを確認する

設定と要件

各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。

  1. Qwiklabs にシークレット ウィンドウでログインします。

  2. ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
    一時停止機能はありません。必要な場合はやり直せますが、最初からになります。

  3. 準備ができたら、[ラボを開始] をクリックします。

  4. ラボの認証情報(ユーザー名パスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。

  5. [Google Console を開く] をクリックします。

  6. [別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
    他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。

  7. 利用規約に同意し、再設定用のリソースページをスキップします。

シナリオ

Cymbal Bank は、米国のリテールバンクで、全米 50 州に 2,000 以上の支店があります。堅牢な支払いプラットフォームを基盤とした包括的なデビットおよびクレジット サービスを提供しています。従来の金融サービス機関からの変革を目指し、デジタル トランスフォーメーションを推進しています。

Cymbal Bank は、1920 年に Troxler という名前で設立されました。Cymbal Group 独自の ATM への積極的な投資を行っていた Cymbal Group は、Troxler を 1975 年に買収しました。Cymbal Bank は、全米をリードする銀行に成長するにつれ、支店での対面サービスと 2014 年にリリースしたアプリを通じオンラインにおいても、カスタマー エクスペリエンスを近代化させることに注力しました。Cymbal Bank は、全国で 42,000 人を雇用し、2019 年には 240 億ドルの収益をあげました。

Cymbal Bank は、Google Cloud 技術を使った法人顧客向けの新しいバンキング アプリケーションの開発に関心を持っています。アプリケーションのセキュリティは、非常に重要であり、CTO は Google Cloud により、セキュリティの脆弱性をどのように特定し、軽減できるのかを知りたいと考えています。あなたは Cloud Security Engineer として、Security Command Center 最新のアプリケーション脆弱性スキャンのデモンストレーションを任されました。

タスク 1. 仮想マシンを起動し、WSS のファイアウォール ルールを作成する

このタスクでは、Cymbal Bank の CTO にアプリケーションの脆弱性をデモンストレーションするためのインフラストラクチャを設定します。具体的には、仮想マシンをデプロイし、デプロイしようとしている脆弱性のあるアプリケーションに Web Security Scanner がアクセスできるようにするためのファイアウォール ルールを開きます。

  1. Google Cloud コンソールのタイトルバーで、「Cloud Shell をアクティブにする」アイコン)をクリックします。プロンプトが表示されたら、[続行] をクリックします。

  2. 次のコマンドを実行して、静的 IP アドレスを作成します。この静的 IP アドレスを使用して、脆弱性のあるウェブ アプリケーションをスキャンできます。

gcloud compute addresses create xss-test-ip-address --region={{{project_0.default_region|lab region}}}
  1. 次のコマンドを実行して、生成した静的 IP アドレスを出力します。
gcloud compute addresses describe xss-test-ip-address \ --region={{{project_0.default_region|lab region}}} --format="value(address)"
  1. IP アドレス(出力結果に 1 行で表示)をコピーし、メモ帳に保存します。

  2. 次のコマンドを実行し、脆弱性のあるアプリケーションを起動するための VM インスタンスを作成します。

gcloud compute instances create xss-test-vm-instance \ --address=xss-test-ip-address --no-service-account \ --no-scopes --machine-type=e2-micro --zone={{{project_0.default_zone|lab zone}}} \ --metadata=startup-script='apt-get update; apt-get install -y python3-flask'

この起動スクリプトにより、Python Flask というウェブ アプリケーション フレームワークがインストールされます。この Python Flask を使用して、シンプルな Python アプリケーションを実行し、ウェブ アプリケーション セキュリティ脆弱性として一般的なクロスサイト スクリプティング(XSS)をデモンストレーションします。

  1. 次のコマンドを実行して、Web Security Scanner が脆弱性のあるアプリケーションにアクセスできるようにするためのファイアウォール ルールを開きます。Web Security Scanner がアプリケーションをスキャンするソースの範囲に注意してください。
gcloud compute firewall-rules create enable-wss-scan \ --direction=INGRESS --priority=1000 \ --network=default --action=ALLOW \ --rules=tcp:8080 --source-ranges=0.0.0.0/0

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 所要の構成で、VM を作成する

タスク 2. XSS 脆弱性をトリガーするために、脆弱性のあるアプリケーションをデプロイする

このタスクでは、アプリケーション コードを取得して、Web Security Scanner で検出する脆弱性を取り込みます。この脆弱性は、ユーザーの入力を受け取って変更せずに出力する、シンプルなフォームのアプリケーション形式になっています。

  1. Cloud コンソールのナビゲーション メニュー)で、[Compute Engine] > [VM インスタンス] の順にクリックします。

    最初に初期化する際は 1 分ほどかかることがあります。

  2. 次に、インスタンスの隣にある [SSH] ボタンをクリックします。

  1. ブラウザで SSH による VM への接続を許可するよう求めるポップアップが表示されることがあります。その場合は、[承認] をクリックします。

新しいウィンドウに VM インスタンスへの SSH 接続が表示されます。

  1. この SSH ウィンドウで(Cloud Shell ではありません)、次のコマンドを実行して、脆弱性のあるウェブ アプリケーションのファイルをダウンロードし、展開します。
gsutil cp gs://cloud-training/GCPSEC-ScannerAppEngine/flask_code.tar . && tar xvf flask_code.tar
  1. 次のコマンドを実行して、アプリケーションをデプロイします。
python3 app.py
  1. すぐに、アプリケーションが稼働中になったことを伝えるメッセージが表示されます。

出力:

* Serving Flask app "app" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
  1. 先ほどメモ帳にコピーした VM の静的 IP アドレスを準備します。

  2. 以下の URL フィールドの YOUR_EXTERNAL_IP をその IP アドレスに置き換え、新しいブラウザタブでその URL を開きます。

http://<YOUR_EXTERNAL_IP>:8080 注: 外部 IP アドレスは、Google Cloud コンソールでも確認できます。コンソールでは、VM インスタンスに関連付けられているフィールドとして外部 IP アドレスが表示されます。

ウェブフォームを備えた Cymbal Bank の法人向けバンキング ポータルが表示されます。

  1. ウェブフォームに、次の文字列を入力します。
<script>alert('This is an XSS Injection')</script>
  1. 入力したら、[POST] ボタンをクリックします。

次の警告ウィンドウが表示されます。

これはウェブ アプリケーションによくある脆弱性、クロスサイト スクリプティングの脆弱性です。クロスサイト スクリプティング(XSS)は、攻撃者がアプリケーションの環境を利用して、ユーザーのブラウザで、悪意のあるスクリプトを実行することを可能にする脆弱性です。ブラウザは、文字列を正当な JavaScript として解釈し、実行してしまいます。

XSS のバグを悪用する攻撃者は、HTML ページに JavaScript を注入することで、そのページを訪れたユーザーのログイン セッションに事実上無制限にアクセスできるようになります。ユーザーデータを盗んだり、改ざんしたり、プライバシーやセキュリティ設定を変更したり、あるいはプロダクトの見た目や動作を完全に変えてしまうこともあります。アプリケーション内の XSS 脆弱性は、どんなに些細なものであれ、同じドメイン内の他のコンテンツを危険にさらす可能性があります。

これは、Web Security Scanner により特定できる、アプリケーションの脆弱性の一つです。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 VM 上で、脆弱性のあるウェブ アプリケーションのファイルをダウンロードする

タスク 3. Web Security Scanner API を有効にする

脆弱性のあるアプリケーションが起動されたので、CTO に Web Security Scanner の機能をデモンストレーションします。ただし、その前に、WSS が実行に使用する API を構成する必要があります。

  1. Cloud コンソールのブラウザタブに戻ります。

  2. ナビゲーション メニュー)から、[API とサービス] > [ライブラリ] を選択します。

  3. [API とサービスを検索] フィールドに「Web Security Scanner」と入力し、Enter キーを押します。

  4. [Web Security Scanner API] を選択します。

  5. [有効にする] をクリックして、Web Security Scanner API を有効にします。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Web Security Scanner API を有効にする

タスク 4. デプロイされたアプリケーションを WSS でスキャンする

このタスクでは、アプリケーションにセキュリティの脆弱性があるかどうかを調べるためのスキャンを構成して設定します。

  1. ナビゲーション メニュー)を開き、[セキュリティ] > [Web Security Scanner] を選択します。

  2. [+ 新しいスキャン] をクリックします。

  3. [開始 URL] セクションの [開始 URL 1] フィールドには、静的 IP アドレスが事前入力されているはずです。

  4. ポート番号 8080 を追加して、次のような開始 URL にします。

http://<EXTERNAL_IP>:8080
  1. [開始 URL 2] を削除します(ある場合)。

  2. [新しいスキャンの作成] 画面のその他のフィールドも確認します。

  • 認証: スキャン中にアプリケーションがスキャナを認証できるよう、アプリケーションに認証情報を提供するため使用するプロパティ。
  • スケジュール: スキャンを自動的に実行するようスケジュールするために使用するプロパティ。
  • Security Command Center へのエクスポート: スキャン終了後、スキャン構成とスキャン結果を Cloud Security Command Center へ自動的にエクスポートするために使用するプロパティ。
  1. [認証] が [なし] に設定されており、[スケジュール] も [なし] に設定されていることを確認します。

  2. [さらに表示] をクリックして、その他の設定も確認します。

  3. [保存] をクリックして、スキャンを作成します。

注: これでスキャンが作成されますが、まだ実行しないでください。まだスケジュールを作成していないため、手動で実行する必要があります。
  1. [実行] をクリックして、スキャンを開始します。
注: 想定される検査の数を考慮すると、スキャンには 10 分強かかる可能性があります。
  1. 別のブラウザ ウィンドウで SSH セッションに戻ります。

セッションがタイムアウトした場合は、次のコマンドを実行してアプリケーションを再起動してください。

python3 app.py

SSH ウィンドウで、以下のようなログが生成され始めます。これは、Web Security Scanner が潜在的な脆弱性がないか、すべての URL を検査していることを意味します。

出力:

34.29.3.21 - - [23/Mar/2023 23:30:41] "GET /output HTTP/1.1" 200 - 35.184.129.44 - - [23/Mar/2023 23:31:06] "GET /output HTTP/1.1" 200 - 35.184.129.44 - - [23/Mar/2023 23:31:07] "GET /favicon.ico HTTP/1.1" 404 - 34.68.231.45 - - [23/Mar/2023 23:31:09] "POST / HTTP/1.1" 302 - 34.68.231.45 - - [23/Mar/2023 23:31:09] "GET /output HTTP/1.1" 200 - 34.68.231.45 - - [23/Mar/2023 23:31:09] "GET /favicon.ico HTTP/1.1" 404 - 35.184.129.44 - - [23/Mar/2023 23:31:17] "POST / HTTP/1.1" 302 - 35.184.129.44 - - [23/Mar/2023 23:31:17] "GET /output HTTP/1.1" 200 -

次の HTTP ステータス コードを含んだ、ログ ステートメントが表示される場合があります。

  • 200: HTTP サーバーが OK のレスポンスを返し、リクエストが成功したことを示します。
  • 302: Location ヘッダーに基づき、リソースが一時的に別の場所にあることを示します。
  • 404: 1 つ以上のリソースが見つからなかったことを示します。

詳細については、HTTP ステータスとエラーコードのドキュメントをご覧ください。

スキャンが実行されている間、[結果]、[クロールした URL]、[詳細] のタブを自由に確認いただけます。また、Web Security Scanner の詳細については、スタートガイドの動画または脆弱性スキャンの動画をご覧ください。

  1. スキャンの実行が完了すると、[結果] タブにクロスサイトの脆弱性が表示されます。

Web Security Scanner は、すべての開始 URL をスキャンし、Cymbal Bank アプリケーションの XSS 脆弱性を検出することができました。このような重要な脆弱性の検出を自動化できることは、Cymbal Bank のようなセキュリティを重視する組織にとって大きな利点です。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 Web Security Scanner のスキャンを実行し、アプリケーションの脆弱性を検出する

タスク 5. 脆弱性を修正してスキャンを再度実行する

Web Security Scanner が XSS 脆弱性を検出できることを実証できたので、次は、脆弱性を修復し、アプリケーションのスキャンを再度実行します。

  1. VM インスタンスに接続している SSH ウィンドウに戻ります。
  2. Ctrl+C キーを押して、アプリケーションを停止します。
  3. 次のコマンドを実行し、nano エディタを使って app.py ファイルを編集します。
nano app.py
  1. 出力文字列を設定している 2 行を見つけます。
# output_string = "".join([html_escape_table.get(c, c) for c in input_string]) output_string = input_string
  1. 最初の行から # 記号を削除し、次の行の先頭に追加します(コードを適切にインデントしてください)。

最終的に、次のような行になります。

@app.route('/output') def output(): output_string = "".join([html_escape_table.get(c, c) for c in input_string]) # output_string = input_string return flask.render_template("output.html", output=output_string) 注: html_escape_table は、「<」などの特殊な HTML 文字とそのテキスト表現の 1 対 1 の対応関係を保持する辞書です。このテーブルを使用して、特殊な HTML 文字をエスケープすることで、送信されたデータをフォームで生のテキストとして取り込んで解釈できるようにしています。詳細については、HTML エスケープの概要のドキュメントをご覧ください。
  1. CTRL+X キー、Y キー、Enter キーの順に押して変更を保存します。

  2. アプリケーションを再実行します。

python3 app.py
  1. Google Cloud コンソールのブラウザタブに戻ります(Web Security Scanner のページがまだ開いているはずです)。

  2. ページ上部の [実行] をクリックします。

SSH ウィンドウで、ログが表示され始めます。これは、Web Security Scanner がアプリケーションの URL に潜在的な脆弱性がないかテストしていることを意味します。

出力:

34.29.3.21 - - [23/Mar/2023 23:30:41] "GET /output HTTP/1.1" 200 - 35.184.129.44 - - [23/Mar/2023 23:31:06] "GET /output HTTP/1.1" 200 - 35.184.129.44 - - [23/Mar/2023 23:31:07] "GET /favicon.ico HTTP/1.1" 404 - 34.68.231.45 - - [23/Mar/2023 23:31:09] "POST / HTTP/1.1" 302 - 34.68.231.45 - - [23/Mar/2023 23:31:09] "GET /output HTTP/1.1" 200 - 34.68.231.45 - - [23/Mar/2023 23:31:09] "GET /favicon.ico HTTP/1.1" 404 - 35.184.129.44 - - [23/Mar/2023 23:31:17] "POST / HTTP/1.1" 302 - 35.184.129.44 - - [23/Mar/2023 23:31:17] "GET /output HTTP/1.1" 200 -
  1. スキャン結果を待つ間、別タブでブラウザを使って URL、http://<EXTERNAL_IP>:8080 にログインしてください。

    ウェブフォームが再び表示されます。

  2. このウェブフォームに、以前入力したものと同じ文字列を入力します。

<script>alert('This is an XSS Injection')</script>
  1. 入力したら、[POST] ボタンをクリックします。

  2. 今回はブラウザに次の文字列が表示されていることを確認します。

注: このテクニックは、今回のような単純なシナリオでは有効ですが、ウェブ アプリケーションを適切に保護するためには、より高度なテクニックやフレームワークを使用する必要があります。それらの詳細は、このラボの範囲外となっています。

その他のリソースについては、以下のリンクをご覧ください。
  1. Google Cloud コンソールの先ほど中断した Web Security Scanner のページに戻ります。

  2. ページ上部の [実行] をクリックし、アプリケーションを再度スキャンします。

  3. 結果には、XSS 脆弱性がもう表示されないはずです。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 脆弱性を修復し、Web Security Scanner を使用してアプリケーションを再度スキャンする

お疲れさまでした

Google Cloud の強力な Web Security Scanner ソリューションを使用して、XSS 脆弱性を特定し修復する方法を Cymbal Bank の CTO にデモンストレーションすることができました。

ラボを終了する

ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。

ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。

星の数は、それぞれ次の評価を表します。

  • 星 1 つ = 非常に不満
  • 星 2 つ = 不満
  • 星 3 つ = どちらともいえない
  • 星 4 つ = 満足
  • 星 5 つ = 非常に満足

フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。

フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。クラスでは、技術スキルとベスト プラクティスを迅速に身につけ、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2025 年 2 月 10 日

ラボの最終テスト日: 2025 年 2 月 10 日

Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

Before you begin

  1. Labs create a Google Cloud project and resources for a fixed time
  2. Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
  3. On the top left of your screen, click Start lab to begin

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

One lab at a time

Confirm to end all existing labs and start this one

Use private browsing to run the lab

Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.