תחילת העבודה עם זיהוי איומים מתקדם ב-DNS Armor

1. מבוא וסקירה כללית

‫DNS Armor, שמופעל על ידי Infoblox, הוא שירות מנוהל מלא שמספק אבטחה ברמת ה-DNS לעומסי העבודה שלכם ב-Google Cloud. גלאי האיומים המתקדם שלו נועד לזהות פעילות זדונית בשלב המוקדם ביותר בשרשרת התקיפה – שאילתת ה-DNS – בלי להוסיף מורכבות תפעולית או עומס יתר על הביצועים.

בשיעור הזה אנחנו מסבירים בפירוט איך מגדירים ובודקים את שירות DNS Armor. תגדירו את תשתית הרשת הנדרשת, תיצרו את הכלי לזיהוי איומים, תבדקו את השירות על ידי הדמיה של איומי DNS ולבסוף תנתחו את יומני האיומים באמצעות Logs Explorer.

מה תפַתחו

ב-codelab הזה תספקו את המשאבים הבאים:

  • שתי רשתות VPC: ‏ network-a ו-network-b
  • network-a יכלול רשתות משנה ומכונות וירטואליות באזורים us-east4 ו-us-central1.
  • network-b יכלול רשת משנה ומכונה וירטואלית רק ב-us-east4.
  • גלאי איומים מתקדם של DNS Armor שהוגדר לבדיקת שאילתות DNS.

75d6eeb807735645.png

מה תלמדו

  • איך להקצות את משאבי הרשת הנדרשים, כולל רשתות VPC ומכונות וירטואליות.
  • איך פורסים כלי מתקדם לזיהוי איומים ומחריגים רשתות ספציפיות.
  • איך מאמתים את הגדרת זיהוי האיומים באמצעות סקריפט לסימולציית איומים.
  • איך מנתחים יומני איומים ב-Logs Explorer.

הדרישות

  • פרויקט ב-Google Cloud.
  • גישה לכלי שורת הפקודה gcloud.

2. דרישות מוקדמות

בקטע הזה תבצעו את המשימות הבאות:

  • מוודאים שהפרויקט ב-Google Cloud עומד באילוצים הנדרשים של מדיניות הארגון.
  • מוודאים שלחשבון המשתמש שלכם יש את התפקידים וההרשאות הנדרשים ב-IAM.
  • מפעילים את ממשקי ה-API של Google Cloud שנדרשים ל-codelab הזה.
  • מקצים את התפקיד roles/logging.viewer ב-IAM לחשבון השירות של Compute Engine.

מגבלות שקשורות למדיניות הארגון

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

  • constraints/gcp.resourceLocations: הגבלת האזורים שבהם אפשר ליצור משאבים. ב-codelab נדרשים us-east4 ו-us-central1.
  • constraints/compute.vmExternalIpAccess: מונע יצירה של מכונות וירטואליות עם כתובות IP ציבוריות, שיכולות להפריע להגדרה אם לא משתמשים בדגל --no-address כמו במעבדת הקוד .
  • constraints/compute.shieldedVm: אוכף את היצירה של מכונות וירטואליות מוגנות, שלא מצוינות בפקודות ליצירת מכונות וירטואליות ב-codelab, ולכן עלולות לגרום לשגיאה.
  • constraints/gcp.restrictServiceUsage: מגביל את האפשרות להפעיל ממשקי Google Cloud API, ויכול לחסום את ה-codelab אם הוא לא מאפשר את compute.googleapis.com,‏ networksecurity.googleapis.com,‏ logging.googleapis.com ו-monitoring.googleapis.com.

תפקידים והרשאות של IAM

כדי להשלים את ה-codelab הזה בהצלחה, צריך לוודא שיש למשתמש שלכם את התפקידים וההרשאות המתאימים ב-IAM. כדי להשלים את ה-Codelab הזה, נדרשים התפקידים וההרשאות הבאים ב-IAM.

  • אדמין לשימוש בשירותים (roles/serviceusage.serviceUsageAdmin): כדי להפעיל את ממשקי Google Cloud API הנדרשים ל-codelab.
  • Compute Network Admin (roles/compute.networkAdmin): כדי ליצור ולנהל רשתות VPC, רשתות משנה ו-Cloud NAT.
  • אדמין אבטחה של Compute (roles/compute.securityAdmin): כדי להגדיר את כללי חומת האש לגישת SSH למכונות הווירטואליות.
  • מנהל מכונות של Compute (גרסה 1) (roles/compute.instanceAdmin.v1): כדי ליצור ולנהל את המכונות הווירטואליות שנדרשות למעבדה.
  • משתמש מנהרה באבטחת IAP (roles/iap.tunnelResourceAccessor): כדי להתחבר למכונות הווירטואליות באמצעות SSH דרך שרת proxy לאימות זהויות (IAP).
  • אדמין אבטחת רשת (roles/networksecurity.admin): כדי ליצור ולנהל את הכלי לזיהוי איומים DNS Armor.
  • Logs Viewer (roles/logging.viewer): כדי לצפות ביומני האיומים ולנתח אותם ב-Logs Explorer.

Google Cloud APIs

צריך לוודא שממשקי Google Cloud API הנדרשים מופעלים בפרויקט.

1. מפעילים את ממשקי ה-API הנדרשים ומריצים את הפקודות הבאות של gcloud ב-Cloud Shell.

gcloud services enable compute.googleapis.com \
networksecurity.googleapis.com \
logging.googleapis.com \
monitoring.googleapis.com

2. כדי לוודא שממשקי ה-API מופעלים, מריצים את הפקודות הבאות של gcloud ב-Cloud Shell.

gcloud services list --enabled

חשבון שירות של Compute Engine

סקריפט הבדיקה דורש הרשאות לקריאת יומני איומים מ-Cloud Logging. מכיוון שהסקריפט יופעל ממכונה וירטואלית שמשתמשת בחשבון השירות שמוגדר כברירת מחדל של Compute Engine, צריך להקצות את תפקיד IAM‏ roles/logging.viewer לחשבון השירות הזה.

1. מגדירים את משתני הסביבה ומריצים את הפקודות הבאות ב-Cloud Shell.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

2. מקצים את התפקיד 'צפייה ביומנים' לחשבון השירות של Compute Engine. מריצים את הפקודות הבאות gcloud ב-Cloud Shell

gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \
--role="roles/logging.viewer"

3. הגדרה בסיסית של סביבה

בקטע הזה תבצעו את המשימות הבאות:

  • יוצרים רשתות VPC (מספר network-a ו-network-b) עם רשתות משנה מותאמות אישית.
  • מגדירים Cloud Routers ו-Cloud NAT ליציאה מהאינטרנט ב-network-a וב-network-b.
  • יוצרים כללים של חומת אש שמאפשרים גישת SSH למכונות וירטואליות מטווח כתובות ה-IP של IAP גם עבור network-a וגם עבור network-b.
  • הקצאת מכונות וירטואליות של Linux ב-network-a וב-network-b ללא כתובות IP ציבוריות.

יצירת רשתות VPC ותת-רשתות

1. יוצרים את הרשת network-a ואת רשתות המשנה שלה באזורים us-east4 ו-us-central1. מריצים את הפקודות הבאות של gcloud ב-Cloud Shell.

gcloud compute networks create network-a --subnet-mode=custom
gcloud compute networks subnets create subnet-a-use4 \
--network=network-a \
--range=10.10.0.0/24 \
--region=us-east4
gcloud compute networks subnets create subnet-a-usc1 \
--network=network-a \
--range=10.10.1.0/24 \
--region=us-central1

2. יוצרים את network-b ואת רשת המשנה שלה באזור us-east4. מריצים את הפקודות הבאות של gcloud ב-Cloud Shell.

gcloud compute networks create network-b --subnet-mode=custom
gcloud compute networks subnets create subnet-b-use4 \
--network=network-b \
--range=10.20.0.0/24 \
--region=us-east4

הגדרת תעבורת נתונים יוצאת (egress) לאינטרנט

1. יוצרים Cloud Router ו-Cloud NAT עבור network-a כדי לאפשר יציאה של מכונות וירטואליות לאינטרנט ללא כתובות IP ציבוריות.

gcloud compute routers create router-a-use4 \
--network=network-a \
--region=us-east4
gcloud compute routers nats create nat-a-use4 \
--router=router-a-use4 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-east4
gcloud compute routers create router-a-usc1 \
--network=network-a \
--region=us-central1
gcloud compute routers nats create nat-a-usc1 \
--router=router-a-usc1 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-central1

2. יוצרים Cloud Router ו-Cloud NAT עבור network-b כדי לאפשר יציאה של מכונות וירטואליות לאינטרנט ללא כתובות IP ציבוריות.

gcloud compute routers create router-b-use4 \
--network=network-b \
--region=us-east4
gcloud compute routers nats create nat-b-use4 \
--router=router-b-use4 \
--auto-allocate-nat-external-ips \
--nat-all-subnet-ip-ranges \
--region=us-east4

הגדרת כללים לחומת אש

1. יוצרים כללי חומת אש עבור network-a כדי לאפשר גישת SSH מטווח כתובות ה-IP של IAP. מריצים את הפקודות הבאות של gcloud ב-Cloud Shell.

gcloud compute firewall-rules create allow-ssh-iap-a \
--network=network-a \
--allow=tcp:22 \
--source-ranges=35.235.240.0/20

2. יוצרים כללי חומת אש עבור network-b כדי לאפשר גישת SSH מטווח כתובות ה-IP של IAP. מריצים את הפקודות הבאות של gcloud ב-Cloud Shell.

gcloud compute firewall-rules create allow-ssh-iap-b \
--network=network-b \
--allow=tcp:22 \
--source-ranges=35.235.240.0/20

יצירת מכונות וירטואליות

1. יצירת מכונות וירטואליות של Linux ב-network-a

gcloud compute instances create vm-a-use4 \
--zone=us-east4-c \
--network=network-a \
--subnet=subnet-a-use4 \
--no-address \
--scopes=cloud-platform
gcloud compute instances create vm-a-usc1 \
--zone=us-central1-a \
--network=network-a \
--subnet=subnet-a-usc1 \
--no-address \
--scopes=cloud-platform

2. יצירת מכונה וירטואלית של Linux ב-network-b

gcloud compute instances create vm-b-use4 \
--zone=us-east4-c \
--network=network-b \
--subnet=subnet-b-use4 \
--no-address \
--scopes=cloud-platform

4. יצירת הכלי לזיהוי איומים ב-DNS

בקטע הזה תבצעו את המשימות הבאות:

  • יוצרים את הכלי לזיהוי איומים.
  • מציגים את רשימת גלאי האיומים.
  • מתארים את המשאב.

אחרי שהקציתם את ה-VPC, רשתות המשנה והמכונות הווירטואליות, השלב הבא הוא ליצור את הכלי לזיהוי איומים ב-DNS.

1. יוצרים את הכלי לזיהוי איומים באמצעות הפקודה gcloud beta network-security dns-threat-detectors create. משתמשים בדגל --excluded-networks כדי לא לכלול את network-b.

gcloud beta network-security dns-threat-detectors create my-dns-threat-detector \
--location=global \
--provider=infoblox \
--excluded-networks=projects/$PROJECT_ID/global/networks/network-b

2. מריצים את הפקודה list the threat detector כדי לוודא שהגלאי נוצר.

gcloud beta network-security dns-threat-detectors list --location=global

3. מתארים את המשאב כדי לוודא ש-network-b מופיע בצורה נכונה בקטע excludedNetworks.

gcloud beta network-security dns-threat-detectors describe my-dns-threat-detector --location=global

פלט לדוגמה:

createTime: '2025-08-06T17:06:30.297586089Z'
excludedNetworks:
- projects/dns-armor-demo-project/global/networks/network-b
name: projects/dns-armor-demo-project/locations/global/dnsThreatDetectors/my-dns-threat-detector
provider: INFOBLOX
updateTime: '2025-08-27T01:14:09.666357239Z'

5. בדיקת ההגדרה

בקטע הזה תבצעו את המשימות הבאות:

  • מתחברים למכונות הווירטואליות באמצעות SSH.
  • מתקינים את Git במכונות הווירטואליות.
  • משכפלים את מאגר הסימולטור של Infoblox לזיהוי איומים.
  • מריצים את הסקריפט ומנתחים את הפלט שנוצר.

כדי לאמת את ההגדרה, צריך ליצור שאילתות DNS זדוניות מדומה מהמכונות הווירטואליות. אפשר לראות רשומות ביומן של שאילתות שמקורן ב-network-a, אבל לא ייווצרו יומנים מ-network-b.

1. מתחברים ב-SSH אל vm-a-use4. מריצים את הפקודות הבאות של gcloud ב-Cloud Shell.

gcloud compute ssh vm-a-use4 --zone=us-east4-c

2. מתקינים את Git במכונה הווירטואלית.

sudo apt-get install git -y

3. משכפלים את מאגר הסימולטור של Infoblox לזיהוי איומים.

git clone https://github.com/infobloxopen/ib-threat-detection-simulator

4. משנים את הספרייה לספרייה של הסימולטור.

cd ib-threat-detection-simulator/threat_detection_simulator/

5. מריצים את הסקריפט ומנתחים את הפלט שנוצר.

הופכים את הסקריפט לניתן להרצה.

chmod +x run.sh

מריצים את הסקריפט.

./run.sh info basic

6. פלט לדוגמה

צילום המסך שלמטה מציג חלק מהפלט של הסקריפט ממכונה וירטואלית ברשת-א. מהפלט אפשר לראות ש-100% מהאיומים זוהו.

a66c1757f8c74da6.png

צילום המסך שלמטה מציג חלק מהפלט של הסקריפט ממכונה וירטואלית ברשת b. הפלט מראה ש-0% מהאיומים זוהו. זה צפוי כי הרשת network-b נכללה בהחרגה במהלך יצירת הכלי לזיהוי איומים.

c12d130c95c04e84.png

7. יוצאים מסשן ה-SSH כדי לחזור ל-Cloud Shell.

exit

6. צפייה ביומני איומים ב-Logs Explorer

אחרי שמריצים את סקריפט הבדיקה, אפשר לראות את יומני האיומים שנוצרו ב-Logs Explorer, כי הם נכתבים ב-Cloud Logging.

דוגמה לרשומה ביומן

בקטע הזה מופיעה דוגמה לרשומת יומן של איום DNS שזוהה. הדוגמה ממחישה את המידע המפורט שנאסף על ידי DNS Armor, כולל כתובת ה-IP של המקור, הדומיין שנשלחה לגביו שאילתה וקטגוריית האיום. הוא משמש כנקודת התייחסות להבנת המבנה והתוכן של היומנים שתנתחו.

{
  "insertId": "1izjkneb44",
  "jsonPayload": {
    "partnerId": "Infoblox",
    "detectionTime": "2025-08-08T01:49:54.092250101Z",
    "dnsQuery": {
      "authAnswer": false,
      "rdata": "random.malicious-domain.com.\t300\tIN\ta\t196.251.118.39",
      "protocol": "UDP",
      "projectNumber": "1234567890",
      "responseCode": "NOERROR",
      "queryType": "A",
      "location": "us-east4",
      "sourceIp": "10.10.0.2",
      "queryName": "random.malicious-domain.com.",
      "vmProjectNumber": "1234567890",
      "vmInstanceId": "01234567899876543210",
      "destinationIp": "",
      "queryTime": "2025-08-08T01:49:53.712692495Z"
    },
    "threatInfo": {
      "severity": "HIGH",
      "confidence": "HIGH",
      "threatDescription": "",
      "category": "EmergentDomain",
      "threatId": "Suspicious_EmergentDomain",
      "type": "Suspicious",
      "threatIndicator": "izumisv1.cc",
      "threatIndicatorType": "FQDN",
      "threat": "Suspicious",
      "threatFeed": "suspicious-noed"
    }
  },
  "resource": {
    "type": "networksecurity.googleapis.com/DnsThreatDetector",
    "labels": {
      "resource_container": "projects/1234567890",
      "id": "",
      "location": "us-east4"
    }
  },
  "timestamp": "2025-08-08T01:49:54.092250101Z",
  "severity": "INFO",
  "logName": "projects/dns-armor-demo-project/logs/networksecurity.googleapis.com%2Fdns_threat_events",
  "receiveTimestamp": "2025-08-08T01:49:55.290965780Z"
}

צפייה ביומנים ב-Logs Explorer

1. עוברים אל הקטע Monitoring במסוף Google Cloud ולוחצים על Logs explorer.

4a90c593d7e339d8.png

2. כדי לסנן את כל יומני האיומים של DNS Armor, משתמשים בשאילתה הבאה. המסנן הזה מאפשר לסנן את היומנים לפי סוג המשאב של הכלי לזיהוי איומים ב-DNS.

resource.type="networksecurity.googleapis.com/DnsThreatDetector"

3. מסננים את היומנים לאזור us-east4, מוסיפים מסנן למיקום. השאילתה הזו תציג רק את האיומים שזוהו באזור us-east4.

resource.type="networksecurity.googleapis.com/DnsThreatDetector"
resource.labels.location="us-east4"

4. סינון יומנים לפי רשת מקור: סינון היומנים על סמך כתובת ה-IP של המקור של שאילתת ה-DNS, כדי לראות איומים שמקורם ברשת VPC ספציפית.

כדי להציג יומנים מ-network-a (רשתות משנה 10.10.0.0/24 ו-10.10.1.0/24):

resource.type="networksecurity.googleapis.com/DnsThreatDetector"
(jsonPayload.dnsQuery.sourceIp:"10.10.0." OR jsonPayload.dnsQuery.sourceIp:"10.10.1.")

כדי להציג יומנים מ-network-b (תת-רשתות 10.20.0.0/24):

resource.type="networksecurity.googleapis.com/DnsThreatDetector"
jsonPayload.dnsQuery.sourceIp:"10.20.0."

7. הסרת המשאבים

כדי להימנע מחיובים עתידיים, מוחקים את המשאבים שנוצרו ב-codelab הזה. חשוב לצאת מהמעטפת של המכונה הווירטואלית ולחזור אל Cloud Shell כשמריצים את פקודות הניקוי.

1. מוחקים את המכונות הווירטואליות.

gcloud compute instances delete vm-a-use4 --zone=us-east4-c --quiet
gcloud compute instances delete vm-a-usc1 --zone=us-central1-a --quiet
gcloud compute instances delete vm-b-use4 --zone=us-east4-c --quiet

2. מוחקים את הכללים של חומת האש.

gcloud compute firewall-rules delete allow-ssh-iap-a --quiet
gcloud compute firewall-rules delete allow-ssh-iap-b --quiet

3. מוחקים את שערי Cloud NAT.

gcloud compute routers nats delete nat-a-use4 --router=router-a-use4 --region=us-east4 --quiet
gcloud compute routers nats delete nat-a-usc1 --router=router-a-usc1 --region=us-central1 --quiet
gcloud compute routers nats delete nat-b-use4 --router=router-b-use4 --region=us-east4 --quiet

4. מחיקת Cloud Routers

gcloud compute routers delete router-a-use4 --region=us-east4 --quiet
gcloud compute routers delete router-a-usc1 --region=us-central1 --quiet
gcloud compute routers delete router-b-use4 --region=us-east4 --quiet

5. מוחקים את תת-הרשתות.

gcloud compute networks subnets delete subnet-a-use4 --region=us-east4 --quiet
gcloud compute networks subnets delete subnet-a-usc1 --region=us-central1 --quiet
gcloud compute networks subnets delete subnet-b-use4 --region=us-east4 --quiet

6. מחיקת הכלי לזיהוי איומים ב-DNS.

gcloud beta network-security dns-threat-detectors delete my-dns-threat-detector --location=global --quiet

7. מוחקים את רשתות ה-VPC.

gcloud compute networks delete network-a --quiet
gcloud compute networks delete network-b --quiet

8. מזל טוב

מעולה! הצלחתם להגדיר, לפרוס ולבדוק את הכלי לזיהוי איומים DNS Armor. רכשתם ניסיון מעשי בהגנה על סביבת Google Cloud מפני איומים שמבוססים על DNS.

ב-Codelab הזה יש:

  • הקצאת סביבת רשת עם כמה רשתות VPC, רשתות משנה ומכונות וירטואליות.
  • הגדרת יציאה לאינטרנט למכונות וירטואליות פרטיות באמצעות Cloud NAT.
  • הטמעתם גלאי איומים של DNS Armor ולמדתם איך להחריג רשתות ספציפיות.
  • הדמיה של איומי DNS ואימות של הגדרת זיהוי האיומים.
  • ניתוח יומני איומים בכלי Logs Explorer כדי לזהות ולהבין פעילות זדונית של DNS.

מה השלב הבא?

מאמרי עזרה