איסוף יומנים של מודיעין איומי סייבר בפורמט STIX

נתמך ב:

במאמר הזה מוסבר איך להטמיע יומני STIX מודיעין איומי סייבר ב-Google Security Operations באמצעות סוכן Bindplane.

‫STIX (ראשי תיבות של Structured Threat Information Expression) היא שפה ופורמט סטנדרטיים לשיתוף סימנים מחשידים (IoC) ונתוני מודיעין איומי סייבר בין ארגונים. נתוני STIX מתקבלים בדרך כלל כקובצי JSON או XML משרתי TAXII או מפלטפורמות מודיעין איומי סייבר. הסוכן של Bindplane אוסף קובצי נתונים של STIX ישירות ממערכת הקבצים המקומית.

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

חשוב לוודא שיש לכם את הדברים הבאים:

  • מכונה של Google SecOps
  • ‫Windows Server 2016 ואילך, או מארח Linux עם systemd
  • אם השרת פועל מאחורי שרת proxy, צריך לוודא שהיציאות של חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane.
  • לקוח TAXII או פלטפורמת מודיעין איומי סייבר ששומרת קבצים בפורמט STIX‏ (JSON או XML) בספרייה מקומית

קבלת פרטי כניסה ל-Google SecOps בשביל סוכן Bindplane

כדי לאמת את סוכן Bindplane ב-Google SecOps, בוחרים באחת מהשיטות הבאות:

  • פריסות חדשות: משתמשים ב-Chronicle API (אפשרות 1).
  • פריסות מדור קודם: אפשר להמשיך להשתמש בקובץ האימות של ה-API להעברת נתונים (אפשרות 2) עד שה-API להעברת נתונים יפסיק לפעול ב-20 ביולי 2027.
  1. נכנסים אל Google Cloud המסוף ובוחרים את Google Cloud הפרויקט שמקושר למופע של Google SecOps.
  2. נכנסים לדף IAM & Admin > Service Accounts.
  3. לוחצים על יצירת חשבון שירות.
  4. מזינים את פרטי ההגדרה הבאים:
    • Service account name: מזינים שם לחשבון (לדוגמה, bindplane-ingest).
    • תיאור חשבון השירות: מזינים תיאור (לדוגמה, Bindplane agent log ingestion).
  5. לוחצים על Create and continue.
  6. בקטע Grant this service account access to project לוחצים על Select a role ובוחרים באפשרות Chronicle Editor.
  7. לוחצים על המשך ואז על סיום.
  8. לוחצים על חשבון השירות שיצרתם ועוברים לכרטיסייה Keys.
  9. לוחצים על Add key > Create new key.
  10. בוחרים באפשרות JSON ולוחצים על Create. קובץ המפתח יורד למחשב.
  11. שומרים את קובץ המפתח בתור ingestion-auth.json בספריית ה-collector של Bindplane (/opt/observiq-otel-collector/ingestion-auth.json ב-Linux או C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json ב-Windows), או מעדכנים את creds_file_path ב-config.yaml כך שיתאים לנתיב שבו שמרתם אותו.
  12. עוברים אל IAM & Admin > Settings ומעתיקים את הערך של Project number. תצטרכו אותו כדי להגדיר את כלי הייצוא.

אפשרות 2: הורדה של קובץ האימות להטמעת נתונים (מדור קודם)

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל SIEM Settings > Collection Agents (הגדרות SIEM > סוכני איסוף).
  3. מורידים את קובץ האימות להטמעת נתונים.
  4. שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן הסוכן של Bindplane.

איך מוצאים את מספר הלקוח ב-Google SecOps

  1. נכנסים למסוף Google SecOps.
  2. עוברים אל SIEM Settings > Profile.
  3. מעתיקים את מספר הלקוח מהקטע פרטי הארגון ושומרים אותו.

התקנת הסוכן של Bindplane

מתקינים את הסוכן של Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.

התקנה ב-Windows

  1. פותחים את שורת הפקודה או את PowerShell כאדמין.
  2. מריצים את הפקודה הבאה:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. מחכים שההתקנה תסתיים.

  4. מאמתים את ההתקנה על ידי הרצת:

    sc query observiq-otel-collector
    

    השירות אמור להופיע כ-RUNNING.

התקנה ב-Linux

  1. פותחים טרמינל עם הרשאות root או sudo.
  2. מריצים את הפקודה הבאה:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. מחכים שההתקנה תסתיים.

  4. מאמתים את ההתקנה על ידי הרצת:

    sudo systemctl status observiq-otel-collector
    

    השירות אמור להופיע כ-active (running).

מקורות מידע נוספים להתקנה

אפשרויות התקנה נוספות ופתרון בעיות מפורטים במדריך להתקנת סוכן Bindplane.

הגדרה של סוכן Bindplane להטמעה של יומנים ושליחה שלהם אל Google SecOps

מאתרים את קובץ התצורה

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

עריכת קובץ התצורה

  • מחליפים את כל התוכן של config.yaml בהגדרות הבאות:

    receivers:
      filelog:
        include:
          - /var/log/stix/*.json
        start_at: beginning
    
    exporters:
      chronicle/stix:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: chronicle.googleapis.com
        log_type: STIX
        raw_log_field: body
        ingestion_labels:
          env: production
    
    service:
      pipelines:
        logs/stix_to_chronicle:
          receivers:
            - filelog
          exporters:
            - chronicle/stix
    

פרמטרים להגדרה

מחליפים את ה-placeholders הבאים:

  • הגדרת מקלט:

    • filelog: סוג המקלט לאיסוף קובצי יומן מהדיסק
    • ‫include: רשימה של נתיבי קבצים למעקב. מגדירים את הספרייה שבה נשמרים קובצי STIX:
      • Linux: /var/log/stix/*.json
      • Windows: C:\Logs\stix\*.json
    • ‫start_at: מגדירים את הערך beginning כדי לקרוא יומנים קיימים, או את הערך end כדי לקרוא רק רשומות חדשות
  • הגדרת הייצוא:

    • ‫stix: שם תיאורי של הכלי לייצוא
    • ‫creds_file_path: הנתיב המלא לקובץ המפתח של חשבון השירות בפורמט JSON (אפשרות 1):
      • Linux: /opt/observiq-otel-collector/ingestion-auth.json
      • ‫Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • ‫<customer_id>: מספר הלקוח מהשלב הקודם
    • ‫location: מחליפים את <LOCATION> באזור של מופע Google SecOps (לדוגמה, us,‏ europe או asia-southeast1). ערך זה מתווסף לתחילית chronicle.googleapis.com של הכלי לייצוא. רשימה מלאה של נקודות הקצה האזוריות מופיעה במאמר Regional Endpoints.
    • ‫project: מחליפים את <PROJECT_NUMBER> במספר הפרויקט שמופיע בקטע IAM & Admin > Settings.
    • ‫endpoint: צריך להשאיר את ההגדרה chronicle.googleapis.com.
    • ‫STIX: סוג היומן בדיוק כמו שהוא מופיע ב-Chronicle
    • ‫ingestion_labels: תוויות אופציונליות בפורמט YAML (לדוגמה, env: production)
  • הגדרת צינור עיבוד נתונים:

    • ‫stix_to_chronicle: שם תיאורי לצינור עיבוד הנתונים

מייצא API להטמעה מדור קודם

  • אם אתם משתמשים בקובץ האימות להטמעת נתונים מאפשרות 2, החליפו את הבלוק exporters בקוד הבא. מגדירים את creds_file_path לנתיב לקובץ האימות של ההעברה, ואם המופע שלכם נמצא מחוץ לארה"ב, מחליפים את malachiteingestion-pa.googleapis.com בנקודת הקצה האזורית (לדוגמה, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/stix:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: STIX
        raw_log_field: body
        ingestion_labels:
          env: production
    

שמירת קובץ התצורה

  • אחרי שמסיימים לערוך, שומרים את הקובץ:
    • Linux: מקישים על Ctrl+O, אחר כך על Enter ואז על Ctrl+X
    • ‫Windows: לוחצים על קובץ > שמירה.

מפעילים מחדש את סוכן Bindplane כדי להחיל את השינויים.

  • כדי להפעיל מחדש את הסוכן של Bindplane ב-Linux, מריצים את הפקודה הבאה:

    sudo systemctl restart observiq-otel-collector
    
    1. מוודאים שהשירות פועל:

      sudo systemctl status observiq-otel-collector
      
    2. בודקים אם יש שגיאות ביומנים:

      sudo journalctl -u observiq-otel-collector -f
      
  • כדי להפעיל מחדש את סוכן Bindplane ב-Windows, בוחרים באחת מהאפשרויות הבאות:

    • שורת הפקודה או PowerShell כאדמין:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • מסוף השירותים:

      1. לוחצים על Win+R, מקלידים services.msc ולוחצים על Enter.
      2. מאתרים את observIQ OpenTelemetry Collector.
      3. לוחצים לחיצה ימנית ובוחרים באפשרות הפעלה מחדש.
      4. מוודאים שהשירות פועל:

        sc query observiq-otel-collector
        
      5. בודקים אם יש שגיאות ביומנים:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

הגדרת איסוף של קובץ נתונים בפורמט STIX

‫STIX הוא פורמט נתונים, לא מוצר. נתוני מודיעין איומי סייבר בפורמט STIX מתקבלים בדרך כלל כקובצי JSON או קובץ XML מלקוחות TAXII, מפלטפורמות של מודיעין איומי סייבר או מהורדות ידניות. אתם צריכים לוודא שהקבצים האלה נמצאים בספרייה שסוכן Bindplane עוקב אחריה.

Linux

  1. יוצרים ספרייה לאחסון קובצי נתונים של STIX:

    sudo mkdir -p /var/log/stix
    
  2. מגדירים את לקוח ה-TAXII או את פלטפורמת מודיעין איומי הסייבר כך שישמרו קובצי STIX ב-/var/log/stix/.

  3. מוודאים שלחשבון השירות של סוכן Bindplane יש גישת קריאה לספרייה:

    sudo chmod 755 /var/log/stix
    

Windows

  1. יוצרים ספרייה לאחסון קובצי נתונים של STIX:

    mkdir C:\Logs\stix
    
  2. מגדירים את לקוח TAXII או את פלטפורמת המודיעין על איומים לשמירת קובצי STIX בתיקייה ‎ `C:\Logs\stix`‎.

  3. מעדכנים את הנתיב include של סוכן Bindplane ב-config.yaml כך שיתאים ל:

    include:
      - C:\Logs\stix\*.json
    

טבלת מיפוי UDM

שדה ביומן מיפוי UDM היגיון
entity.administrative_domain הוגדר כ-'TEST'
assetid_value entity.asset.asset_id ערך מ-assetid_value אם הוא לא ריק
condition_label, related_indicators_relationship_label, related_indicators_scope, indicator_types_label, valid_start_time_label, controlled_structure_label, marking_structure_label entity.asset.attribute.labels מוזגו מתוויות שונות
name entity.file.full_path הערך הועתק ישירות
val, hash.simple_hash_value, MD5_val, hash_value entity.file.md5 הערך מ-val אם הוא תואם לביטוי הרגולרי md5, אחרת hash.simple_hash_value אם הסוג הוא MD5, אחרת MD5_val, אחרת hash_value
value entity.file.names הערך הועתק ישירות
val, hash.simple_hash_value, sha1_val, hash_value entity.file.sha1 ערך מ-val אם הוא תואם לביטוי הרגולרי של sha1, אחרת hash.simple_hash_value אם הסוג הוא SHA1, אחרת sha1_val, אחרת hash_value
val, hash.simple_hash_value, sha256val, sha_value, sha_value entity.file.sha256 הערך מ-val אם הוא תואם לביטוי הרגולרי sha256, אחרת hash.simple_hash_value אם הסוג הוא SHA256, אחרת sha256val, אחרת sha_value
observable.object.properties.value, dom, value, host, name, external_references.0.source_name entity.hostname ערך מ-observable.object.properties.value אם הסוג הוא FQDN, אחרת dom מ-grok, אחרת ערך אם הסוג הוא domain-name, אחרת מארח, אחרת שם אם main_observable_type הוא domain/hostname, אחרת external_references.0.source_name
ip_val, ipval, ip, source_ip, value, src_ip entity.ip הערך מ-ip_val אם grok התאים, אחרת ipval אם הקטגוריה היא ipv4-addr, אחרת ip מהתבנית grok, אחרת source_ip, אחרת value אם הסוג הוא ipv4, אחרת src_ip מ-grok
source_port, src_port entity.port ערך מ-source_port או מ-src_port
indicator_label, extension_value1, extension_value2, extension_value3, extension_value4, revoked_value, spec_version_value, object_marking_ref_value, label_value entity.resource.attribute.labels מוזגו מתוויות שונות
observable.object.properties.value, url_val, value, observable_properties_value entity.url הערך מ-observable.object.properties.value אם הסוג הוא URL, אחרת url_val מ-grok, אחרת הערך אם הסוג הוא url, אחרת observable_properties_value אם הוא לא ריק
email_val, mail, value entity.user.email_addresses ערך מ-email_val אם grok התאים, אחרת mail מ-grok, אחרת ערך אם הסוג הוא email-addr
חותמת זמן metadata.collected_timestamp ההמרה בוצעה באמצעות התאמת תאריך ISO8601/RFC 3339
כותרת, תיאור metadata.description ערך מהשם או מהתיאור
entity_type metadata.entity_type הערך הועתק ישירות
timestamp, valid_until metadata.interval.end_time ההמרה בוצעה מחותמת זמן או מ-valid_until באמצעות התאמת תאריך ISO8601/RFC 3339
timestamp, valid_from, created metadata.interval.start_time הערך הומר מחותמת זמן, valid_from,‏ created או timestamp באמצעות התאמת תאריך ISO8601/RFC 3339
id metadata.product_entity_id הערך הועתק ישירות
גרסה metadata.product_version הערך הועתק ישירות
threat_detail metadata.threat Merged from threat_detail
threat_detail_category threat.category הערך הועתק ישירות
confidence_value, confidence, x_stix_confidence, x_ctix_confidence_score threat.confidence_details הערך מתוך confidence_value, אחרת confidence אם no_value, אחרת x_stix_confidence, אחרת x_ctix_confidence_score
value, confidence, x_ctix_confidence_score threat.confidence_score הערך מתוך הערך אם השם הוא Confidence Score, אחרת confidence, אחרת x_ctix_confidence_score, שהומר לערך מסוג float
property_label, sha512_value, observable_id, observable_object_id, keyword_label threat.detection_fields מוזגו מתוויות שונות
description threat.description הערך הועתק ישירות
value, extensions.extension-definition--ea279b3e-5c71-4632-ac08-831c66a786ba.score threat.risk_score הערך מתוך הערך אם השם הוא Risk, אחרת הציון של התוספים, מומר ל-float
metadata.product_name מוגדר כ-"STIX"
metadata.vendor_name מוגדר כ-"STIX"
dom event.idm.entity.entity.hostname מופה מיומן השינויים
name event.idm.entity.entity.url מופה מיומן השינויים
valid_from event.idm.entity.entity.resource.attribute.labels מופה מיומן השינויים
valid_until event.idm.entity.entity.resource.attribute.labels מופה מיומן השינויים
pattern_version event.idm.entity.entity.resource.attribute.labels מופה מיומן השינויים
observable.object.properties.value.condition event.idm.entity.entity.asset.attribute.labels מופה מיומן השינויים
handling.controlled_structure event.idm.entity.entity.asset.attribute.labels מופה מיומן השינויים
handling.marking_structures.color event.idm.entity.entity.asset.attribute.labels מופה מיומן השינויים
related_indicators.related_indicators event.idm.entity.entity.asset.attribute.labels מופה מיומן השינויים
related_indicators.scope event.idm.entity.entity.asset.attribute.labels מופה מיומן השינויים
indicator_types event.idm.entity.entity.asset.attribute.labels מופה מיומן השינויים
valid_time_positions event.idm.entity.entity.asset.attribute.labels מופה מיומן השינויים
observable.object.properties.custom_properties event.idm.entity.metadata.threat.detection_fields מופה מיומן השינויים
observable.object.properties.value event.ioc.domain_and_ports.domain מופה מיומן השינויים
mitre-extension-definition.extension_type entity.resource.attribute.labels.value מופה מיומן השינויים
sco-extension-definition.extension_type entity.resource.attribute.labels.value מופה מיומן השינויים
x_ctix_confidence_score threat_detail.confidence_score מופה מיומן השינויים
modified timestamp מופה מיומן השינויים
valid_from entity_event.metadata.interval.start_time מופה מיומן השינויים
confidence threat_detail.confidence_score מופה מיומן השינויים
name entity.entity.file.full_path מופה מיומן השינויים
description threat_detail.description מופה מיומן השינויים
external_references.0.source_name entity_event.entity.hostname מופה מיומן השינויים
entity_type IP_ADDRESS מופה מיומן השינויים
entity_type USER מופה מיומן השינויים
entity_type FILE מופה מיומן השינויים
entity_type DOMAIN_NAME מופה מיומן השינויים

יומן שינויים

צפייה ביומן השינויים של המנתח הזה

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