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

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

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

ב-Codelab הזה אנחנו מסבירים בפירוט איך מגדירים ובודקים את שירות 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. כדי לוודא שהכלי נוצר, מריצים את הפקודה הבאה:

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. כדי לחזור ל-Cloud Shell, יוצאים מסשן ה-SSH.

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.

מה השלב הבא?

מאמרי עזרה