איסוף יומנים של DNS פסיבי

נתמך ב:

במאמר הזה מוסבר איך להטמיע יומני DNS פסיביים ב-Google Security Operations באמצעות Google Cloud Storage V2.

‫Passive DNS הוא מקור נתונים של מודיעין DNS שמתעד רשומות היסטוריות של פתרון DNS לצורך ניתוח איומים וחקר דומיינים. מכיוון שהנתונים נאספים בדרך כלל ומאוחסנים כקבצים, צריך להעלות את הקבצים האלה לקטגוריה של Google Cloud Storage‏ (GCS), ואז להגדיר פיד של Google SecOps כדי להטמיע אותם.

לפני שמתחילים

חשוב לוודא שמתקיימות הדרישות המוקדמות הבאות:

  • מופע של Google SecOps.
  • פרויקט ב-Google Cloud שמופעל בו Cloud Storage API.
  • הרשאות ליצירה ולניהול של קטגוריות GCS.
  • הרשאות לניהול מדיניות IAM בקטגוריות GCS.
  • גישה לקובצי נתונים של DNS פסיבי (לדוגמה, DNSDB,‏ Farsight או ספק DNS פסיבי אחר).
  • נתוני DNS פסיביים שמיוצאים בפורמט נתמך (לדוגמה, JSON או CSV).

יצירת קטגוריה של Google Cloud Storage

  1. נכנסים אל מסוף Google Cloud.
  2. בוחרים פרויקט או יוצרים פרויקט חדש.
  3. בתפריט הניווט, עוברים אל Cloud Storage > Buckets.
  4. לוחצים על Create bucket.
  5. מספקים את פרטי ההגדרה הבאים:

    הגדרה ערך
    Name your bucket (שם הקטגוריה) מזינים שם ייחודי גלובלית (לדוגמה, passive-dns-logs)
    סוג המיקום בוחרים לפי הצרכים (אזור, שני אזורים, מספר אזורים)
    Location בוחרים את המיקום הכי קרוב למופע של Google SecOps (לדוגמה, us-central1)
    סוג אחסון (storage class) רגיל (מומלץ ליומנים שמתבצעת אליהם גישה לעיתים קרובות)
    בקרת גישה אחיד (מומלץ)
    כלים להגנה אופציונלי: הפעלת ניהול גרסאות של אובייקטים או מדיניות שמירת נתונים
  6. לוחצים על יצירה.

הגדרת ייצוא אוטומטי של נתוני DNS פסיבי ל-GCS

נתוני DNS פסיביים זמינים בדרך כלל כקבצים מיוצאים מספק מודיעין DNS (לדוגמה, Farsight DNSDB,‏ DomainTools או Cisco Umbrella Investigate). כדי שהנתונים ב-GCS יהיו עדכניים, צריך להגדיר צינור לייצוא אוטומטי באמצעות אחת מהשיטות הבאות.

משתמשים ב-Cloud Build שמופעל על ידי Cloud Scheduler כדי להריץ משימה בקונטיינר שמביאה נתוני DNS פסיבי מהספק שלכם וכותבת אותם ל-GCS.

  1. יוצרים חשבון שירות למשימת הייצוא:

    1. במסוף GCP, עוברים אל IAM & Admin > Service Accounts.
    2. לוחצים על יצירת חשבון שירות.
    3. מספקים את פרטי ההגדרה הבאים:
      • שם חשבון השירות: מזינים passive-dns-export-sa
      • תיאור חשבון השירות: מזינים Service account for automated Passive DNS data export to GCS
    4. לוחצים על יצירה והמשך.
    5. מוסיפים את התפקידים הבאים:
      • אדמין של אובייקט אחסון (לכתיבת קבצים ב-GCS)
      • עריכה ב-Cloud Build (להרצת משימות של Cloud Build)
    6. לוחצים על סיום.
  2. יוצרים קובץ תצורת build של Cloud Build‏ (cloudbuild.yaml):

    steps:
      - name: 'gcr.io/cloud-builders/gcloud'
        entrypoint: 'bash'
        args:
          - '-c'
          - |
            apt-get update && apt-get install -y curl jq
            # Fetch Passive DNS data from your provider
            # Replace with the actual API call for your provider
            # Example for Farsight DNSDB:
            TIMESTAMP=$(date -u +%Y%m%d_%H%M%S)
            curl -s -H "X-API-Key: $${PDNS_API_KEY}" \
              "https://api.dnsdb.info/dnsdb/v2/lookup/rrset/name/*.example.com" \
              -o /workspace/passive_dns_$${TIMESTAMP}.json
            # Upload to GCS
            gcloud storage cp /workspace/passive_dns_$${TIMESTAMP}.json \
              gs://${_BUCKET_NAME}/passive-dns/
    substitutions:
      _BUCKET_NAME: 'passive-dns-logs'
    
  3. אחסון מפתח ה-API כסוד ב-Secret Manager:

    1. במסוף GCP, עוברים אל Security > Secret Manager (אבטחה > ניהול סודות).
    2. לוחצים על Create Secret (יצירת סוד).
    3. מזינים את pdns-api-key כשם הסוד.
    4. מזינים את מפתח ה-API של ספק ה-DNS הפסיבי בתור ערך הסוד.
    5. לוחצים על יצירה.
  4. יוצרים משימה של Cloud Scheduler כדי להפעיל את הבנייה:

    1. במסוף GCP, עוברים אל Cloud Scheduler.
    2. לוחצים על Create Job (יצירת משימה).
    3. מספקים את פרטי ההגדרה הבאים:

      הגדרה ערך
      שם passive-dns-export-daily
      אזור בוחרים את אותו אזור שבו נמצא מאגר GCS
      תדירות 0 3 * * * (יומי בשעה 03:00 לפי שעון UTC)
      אזור זמן UTC (מומלץ)
      סוג הטירגוט HTTP
      כתובת URL https://cloudbuild.googleapis.com/v1/projects/YOUR_PROJECT_ID/builds
      שיטת HTTP POST
      כותרת אימות הוספת טוקן OAuth
      חשבון שירות passive-dns-export-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com
    4. לוחצים על יצירה.

אפשרות 2: Storage Transfer Service (למאגרי נתונים מקומיים)

אם נתוני DNS פסיביים מאוחסנים במערכת קבצים מקומית, צריך להשתמש ב-Storage Transfer Service עם Transfer Agent.

  1. ב-GCP Console, עוברים אל Storage Transfer Service.
  2. לוחצים על Transfer.
  3. בוחרים באפשרות POSIX filesystem כמקור.
  4. פועלים לפי ההוראות להתקנת הסוכן להעברת נתונים במחשב עם גישה לקובצי הנתונים של ה-DNS הפסיבי.
  5. מגדירים את עבודת ההעברה:

    הגדרה ערך
    ספריית קובצי המקור הנתיב לספרייה שמכילה את קובצי הנתונים של DNS פסיבי
    קטגוריית יעד passive-dns-logs
    נתיב ליעד passive-dns/
    תזמון הגדרת לוח זמנים חוזר (לדוגמה, יומי)
  6. לוחצים על יצירה.

אחזור חשבון השירות של Google SecOps

  1. עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
  2. לוחצים על הוספת פיד חדש.
  3. לוחצים על Configure a single feed (הגדרת פיד יחיד).
  4. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, Passive DNS Logs).
  5. בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
  6. בוחרים באפשרות Passive DNS (DNS פסיבי) בתור סוג היומן.
  7. לוחצים על קבלת חשבון שירות.
  8. תוצג כתובת האימייל בחשבון שירות ייחודי, לדוגמה:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. מעתיקים את כתובת האימייל הזו לשימוש בשלב הבא.

הענקת הרשאות IAM לחשבון השירות של Google SecOps

לחשבון השירות של Google SecOps צריך להיות התפקיד צפייה באובייקט אחסון בקטגוריה של GCS.

  1. עוברים אל Cloud Storage > Buckets (קטגוריות).
  2. לוחצים על שם הקטגוריה (לדוגמה, passive-dns-logs).
  3. עוברים לכרטיסייה Permissions.
  4. לוחצים על הענקת גישה.
  5. מספקים את פרטי ההגדרה הבאים:
    • Add principals (הוספת ישויות מורשות): מדביקים את כתובת האימייל בחשבון של חשבון השירות של Google SecOps (לדוגמה, chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com).
    • הקצאת תפקידים: בוחרים באפשרות צפייה באובייקט אחסון.
  6. לוחצים על Save.

הגדרת הפיד של Google SecOps

  1. עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
  2. לוחצים על הוספת פיד חדש.
  3. לוחצים על Configure a single feed (הגדרת פיד יחיד).
  4. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, Passive DNS Logs).
  5. בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
  6. בוחרים באפשרות Passive DNS (DNS פסיבי) בתור סוג היומן.
  7. לוחצים על הבא.
  8. מציינים ערכים לפרמטרים הבאים של הקלט:

    • כתובת ה-URL של קטגוריית האחסון: מזינים את ה-URI של קטגוריית GCS:

      gs://passive-dns-logs/passive-dns/
      
      • מחליפים את passive-dns-logs בשם של קטגוריית GCS.
      • מחליפים את passive-dns בנתיב הקידומת שהגדרתם.
    • אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:

      • אף פעם: לא נמחקים קבצים אחרי ההעברה (מומלץ לבדיקות).
      • מחיקת קבצים שהועברו: הקבצים נמחקים אחרי שההעברה מסתיימת.
      • מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.

    • הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 180 ימים).

    • מרחב השמות של הנכס: מרחב השמות של הנכס.

    • תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה.

  9. לוחצים על הבא.

  10. בודקים את ההגדרות של הפיד החדש במסך סיום ולוחצים על שליחה.

טבלת מיפוי UDM

שדה ביומן מיפוי UDM היגיון
שם המארח intermediary.hostname הערך הועתק ישירות
timestamp_s metadata.event_timestamp הניתוח מתבצע כחותמת זמן של מערכת Unix
metadata.event_type ההגדרה היא NETWORK_DNS
network.application_protocol הגדרה כ-DNS
תשובה network.dns.answers.data ערך מהתשובה אחרי הסרת נקודה בסוף
ttl network.dns.answers.ttl הומר למספר שלם
מחלקה network.dns.questions.class ממופה לערך מספרי (1 ל-IN, ‏ 3 ל-CH, ‏ 4 ל-HS)
שאילתה network.dns.questions.name ערך מהשאילתה אחרי הסרת הנקודה בסוף
סוג network.dns.questions.type ממופה מסוג (באותיות רישיות) לערך מספרי באמצעות מיפוי סוג DNS
לקוח principal.ip הערך הועתק ישירות
שרת target.ip הערך הועתק ישירות
metadata.product_name הגדרה של 'DNS פסיבי'

הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.