איסוף יומנים מ-Darktrace

גרסת המנתח: 19.0

נתמך ב:

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

‫Darktrace היא פלטפורמת אבטחת סייבר מבוססת-AI שמזהה איומים וחריגות בזמן אמת. המנתח מטפל ביומני Darktrace בפורמט CEF ו-JSON, מחלץ שדות וממפה אותם למודל הנתונים המאוחד (UDM).

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

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

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

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

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

  • פריסות חדשות: משתמשים ב-Chronicle API (אפשרות 1).
  • פריסות קודמות: ממשיכים להשתמש בקובץ האימות להטמעת נתונים (אפשרות 2) עד שה-Ingestion API יופסק ב-20 ביולי 2027.
  1. נכנסים למסוףGoogle Cloud ובוחרים את הפרויקט ב- Google Cloud שמקושר למכונה של Google SecOps.
  2. נכנסים לדף IAM & Admin > Service Accounts.
  3. לוחצים על Create service account.
  4. מזינים את פרטי ההגדרה הבאים:
    • Service account name: מזינים שם לחשבון (לדוגמה, bindplane-ingest).
    • Service account description: מזינים תיאור (לדוגמה, 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 בספריית Bindplane collector (/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 בלבד, עוברים אל הגדרות > סוכני איסוף.
  3. מורידים את קובץ האימות להטמעת נתונים.
  4. שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן הסוכן של Bindplane.

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

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

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

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

התקנת חלונות

  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
    

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

מקורות מידע נוספים בנושא התקנה

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

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

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

  • Linux:

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

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

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

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

    receivers:
      tcplog:
        listen_address: "0.0.0.0:10282"
    
    exporters:
      chronicle/darktrace:
        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: DARKTRACE
        raw_log_field: body
    
    service:
      pipelines:
        logs/darktrace_to_chronicle:
          receivers:
            - tcplog
          exporters:
            - chronicle/darktrace
    

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

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

  • הגדרת המקלט:

    • ‫listen_address: כתובת ה-IP והיציאה להאזנה:
      • ‫0.0.0.0 כדי להאזין בכל הממשקים (מומלץ)
      • יציאה 10282 היא יציאת ברירת המחדל של Darktrace CEF syslog (אפשר לשנות לפי הצורך)
  • הגדרת הייצוא:

    • ‫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: מספר הלקוח שהועתק ממסוף Google SecOps
    • ‫location: מחליפים את <LOCATION> באזור של המכונה של Google SecOps (לדוגמה, us,‏ europe או asia-southeast1). המייצא מוסיף את הערך הזה בתחילת chronicle.googleapis.com. לרשימה המלאה, ראו נקודות קצה אזוריות.
    • ‫project: מחליפים את <PROJECT_NUMBER> במספר הפרויקט שמופיע בקטע IAM & Admin > Settings.
    • ‫endpoint: משאירים את הערך chronicle.googleapis.com.

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

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

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

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

  • אחרי שמסיימים לערוך, שומרים את הקובץ:
    • 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"
        

הגדרת syslog ב-Darktrace

  1. נכנסים לממשק המשתמש של Darktrace באינטרנט.
  2. עוברים אל Admin > System Config.
  3. לוחצים על אימות הגדרות ההתראות.
  4. מזינים את פרטי ההגדרה הבאים:
    • CEF Syslog Alerts: בוחרים באפשרות True.
    • שרת CEF Syslog: מזינים את כתובת ה-IP של Bindplane.
    • ‫CEF Syslog Server Port: מזינים את מספר היציאה של Bindplane (לדוגמה, 10282).
    • ‫CEF Syslog TCP Alert: בוחרים באפשרות True.
  5. לוחצים על Save.

יומנים לדוגמה נתמכים של Darktrace

  • SYSLOG + KV (CEF)

    {
    "acknowledged": false,
    "commentCount": 0,
    "pbid": 900000001,
    "time": 1604055367000,
    "creationTime": 1604055367000,
    "model": {
        "name": "Compromise::Agent Beacon to New Endpoint",
        "uuid": "dfd6f10b-b91c-4244-9fd5-7c35caf21b33",
        "description": "A device is initiating multiple connections to a new external endpoint...",
        "priority": 2,
        "category": "Informational",
        "mitre": {
        "tactics": [
            "command-and-control"
        ],
        "techniques": [
            "T1071.001"
        ]
        }
    },
    "triggeredComponents": [
        {
        "time": 1677679818000,
        "ip": " ",
        "port": 443,
        "metric": {
            "name": "externalconnections"
        },
        "triggeredFilters": [
            {
            "filterType": "Connection hostname",
            "trigger": {
                "value": "beacon.external.io"
            }
            }
        ]
        }
    ],
    "score": 0.85,
    "device": {
        "did": 90001,
        "macaddress": " ",
        "ip": " ",
        "hostname": "user-laptop-1"
    }
    }
    
  • SYSLOG + JSON

    {
    "dpi_engine": "dt-sensor-101",
    "proto": "tcp",
    "source_ip": " ",
    "source_port": 51000,
    "dest_ip": " ",
    "dest_port": 389,
    "src": " ",
    "dst": " ",
    "details": "AP request: srealm is [TESTDOMAIN.LOCAL], service is [LDAP/DC99.testdomain.local/testdomain.local], ST cipher is [aes256-cts-hmac-sha1-96]",
    "epochdate": 1690471502.2252,
    "@host": "log-collector-host",
    "uid": "ABCDEFGHIJ1234567890",
    "note": "KERBEROS::App",
    "@type": "notice"
    }
    

טבלת מיפוי UDM

שדה ביומן מיפוי UDM Logic (פונקציה לוגית)
darktraceUrl security_result.url_back_to_product הערך נלקח מהשדה darktraceUrl.
darktrace_host observer.hostname הערך נלקח מהשדה darktrace_host אם הוא לא כתובת IP.
darktrace_ip observer.ip הערך נלקח מהשדה darktrace_ip.
darktrace_user observer.user.userid הערך נלקח מהשדה darktrace_user.
description security_result.summary, metadata.description הערך נלקח מהשדה description.
device.customFields.DT-AUTO.macaddress principal.mac הערך נלקח מהשדה device.customFields.DT-AUTO.macaddress.
device.did principal.asset.asset_id הערך נלקח מהשדה device.did, מומר למחרוזת ונוספת לו הקידומת Device ID:.
device.firstSeen principal.asset.first_seen_time הערך נלקח מהשדה device.firstSeen, מומר למחרוזת ומנותח כחותמת זמן של UNIX באלפיות השנייה.
device.hostname principal.hostname, principal.asset.hostname הערך נלקח מהשדה device.hostname.
device.ip ‫principal.ip, ‏ principal.asset.ip הערך נלקח מהשדה device.ip אם הוא תואם לפורמט של כתובת ה-IP.
device.ips.0.subnet additional.fields.subnet הערך נלקח מהשדה device.ips.0.subnet ונוספת לו הקידומת subnet.
device.ips.ip ‫principal.ip, ‏ principal.asset.ip הערך נלקח מהשדה device.ips.ip לכל כתובת IP ברשימה.
device.lastSeen principal.asset.last_discover_time הערך נלקח מהשדה device.lastSeen, מומר למחרוזת ומנותח כחותמת זמן של UNIX באלפיות השנייה.
device.macaddress principal.mac הערך נלקח מהשדה device.macaddress.
device.objecttype principal.asset.type אם הערך הוא device, שדה ה-UDM מוגדר כ-WORKSTATION.
device.sid principal.resource.attribute.labels.sid הערך נלקח מהשדה device.sid ומומר למחרוזת.
device.typelabel principal.resource.attribute.labels.typelabel הערך נלקח מהשדה device.typelabel.
device.typename principal.resource.attribute.labels.typename הערך נלקח מהשדה device.typename.
dst target.ip, target.asset.ip הערך נלקח מהשדה dst.
dpt target.port הערך נלקח מהשדה dpt ומומר למספר שלם.
dvc ‫principal.ip, ‏ principal.asset.ip אם הערך של dvc הוא כתובת IP, הוא מתווסף לשדה ה-UDM.
dvchost principal.hostname, principal.asset.hostname הערך נלקח מהשדה dvchost.
endpoint target.url הערך נלקח מהשדה endpoint.
event_time metadata.event_timestamp הערך נלקח מהשדה event_time ומנותח כחותמת זמן בפורמט ISO8601.
externalId metadata.product_log_id הערך נלקח מהשדה externalId.
incidentEventUrl principal.url הערך נלקח מהשדה incidentEventUrl.
ip ‫principal.ip, ‏ principal.asset.ip הערך נלקח מהשדה ip אם הוא תואם לפורמט של כתובת ה-IP.
issue_msg security_result.summary הערך נלקח מהשדה issue_msg.
הודעה security_result.description הערך נלקח מהשדה message.
method network.http.method הערך נלקח מהשדה method.
model.description metadata.description הערך נלקח מהשדה model.description.
model.name metadata.product_event_type הערך נלקח מהשדה model.name.
model.now.category security_result.severity אם הערך הוא critical, שדה ה-UDM מוגדר כ-CRITICAL. אם הערך הוא Informational, שדה ה-UDM מוגדר כ-INFORMATIONAL. אם הערך הוא Suspicious, שדה ה-UDM מוגדר כ-HIGH והקטגוריה מוגדרת כ-NETWORK_SUSPICIOUS.
model.now.description metadata.description הערך נלקח מהשדה model.now.description.
model.now.message security_result.description הערך נלקח מהשדה model.now.message.
model.now.name metadata.product_event_type הערך נלקח מהשדה model.now.name.
model.now.pid principal.process.pid הערך נלקח מהשדה model.now.pid ומומר למחרוזת.
model.now.uuid principal.user.userid הערך נלקח מהשדה model.now.uuid וסוג האירוע מוגדר כ-USER_UNCATEGORIZED.
model.pid principal.process.pid הערך נלקח מהשדה model.pid ומומר למחרוזת.
model.then.description ‫principal.resource.attribute.labels.Model ואז Description הערך נלקח מהשדה model.then.description.
model.then.name principal.resource.attribute.labels.Model Then Name הערך נלקח מהשדה model.then.name.
model.then.pid principal.resource.attribute.labels.Model Then Pid הערך נלקח מהשדה model.then.pid ומומר למחרוזת.
model.then.uuid principal.resource.attribute.labels.Model Then UUID הערך נלקח מהשדה model.then.uuid.
model.uuid principal.user.userid הערך נלקח מהשדה model.uuid וסוג האירוע מוגדר כ-USER_UNCATEGORIZED.
relatedBreaches.0.modelName security_result.description הערך נלקח מהשדה relatedBreaches.0.modelName.
ציון security_result.priority, security_result.priority_details אם הערך הוא בין 0.8 ל-1, העדיפות מוגדרת כ-HIGH_PRIORITY. אם הערך הוא בין 0.5 ל-0.79, העדיפות מוגדרת כ-MEDIUM_PRIORITY. אם הערך הוא בין 0 ל-0.49, העדיפות מוגדרת כ-LOW_PRIORITY. פרטי העדיפות מוגדרים ל-Score : ואחריו הערך של score שהומר למחרוזת.
severity security_result.severity אם הערך הוא 2, השדה של ה-UDM מוגדר כ-MEDIUM. אם הערך גדול מ-2, שדה ה-UDM מוגדר כ-HIGH.
shost principal.hostname, principal.asset.hostname הערך נלקח מהשדה shost.
smac principal.mac הערך נלקח מהשדה smac.
src ‫principal.ip, ‏ principal.asset.ip הערך נלקח מהשדה src.
סטטוס network.http.response_code הערך נלקח מהשדה status ומומר למחרוזת.
סיכום metadata.description הערך נלקח מהשדה summary.
פעם הערך נלקח מהשדה time, מומר למחרוזת ומנותח כחותמת זמן של UNIX באלפיות השנייה.
חותמת זמן הערך נלקח מהשדה timestamp ומנותח כחותמת זמן בפורמט ISO8601 או כחותמת זמן בפורמט UNIX באלפיות השנייה.
כותרת security_result.summary הערך נלקח מהשדה title.
triggeredComponents.ip intermediary.ip הערך נלקח מהשדה triggeredComponents.ip אם הוא תואם לפורמט של כתובת ה-IP.
triggeredComponents.port intermediary.port הערך נלקח מהשדה triggeredComponents.port ומומר למספר שלם.
שם משתמש principal.user.userid הערך נלקח מהשדה username.
metadata.vendor_name הגדרת הערך DARKTRACE.
metadata.product_name הגדרת הערך DCIP.
metadata.log_type הגדרת הערך DARKTRACE.
network.ip_protocol מגדירים את הערך TCP אם issue_msg לא מכיל את UDP. אחרת, מגדירים את הערך UDP.
security_result.action צריך להגדיר את הערך BLOCK אם הערך של status הוא 401, אחרת צריך להגדיר את הערך ALLOW.
security_result.severity הגדרת הערך INFORMATIONAL.
network.application_protocol הגדרת הערך HTTP אם התא method לא ריק.
metadata.event_type הגדרת הערך NETWORK_HTTP אם התא method לא ריק. הגדרה בתור USER_LOGIN אם description מכיל את logged into \\\\S+ over ssh. הגדרת הערך NETWORK_CONNECTION אם התא target_ip לא ריק. אחרת, מגדירים את הערך STATUS_UPDATE.
extensions.auth.type הגדרה בתור MACHINE אם description מכיל את logged into \\\\S+ over ssh.
security_result.category הגדרה בתור DATA_EXFILTRATION אם issue_msg מכיל את Exfiltration. הגדרה בתור NETWORK_MALICIOUS אם issue_msg מכיל את Compromise. אחרת, מגדירים את הערך NETWORK_SUSPICIOUS.
percentScore event.idm.read_only_udm.additional.fields מופה מיומן השינויים
device.credentials event.idm.read_only_udm.target.user.userid מופה מיומן השינויים
url event.idm.read_only_udm.principal.url מופה מיומן השינויים
username event.idm.read_only_udm.principal.user.userid מופה מיומן השינויים
iris-event-type event.idm.read_only_udm.metadata.product_event_type מופה מיומן השינויים
inhibitor event.idm.read_only_udm.target.ip מופה מיומן השינויים
inhibitor event.idm.read_only_udm.target.asset.ip מופה מיומן השינויים
inhibitor event.idm.read_only_udm.target.port מופה מיומן השינויים
device.os event.idm.read_only_udm.principal.platform מופה מיומן השינויים
device.typename event.idm.read_only_udm.principal.asset.type מופה מיומן השינויים
device.ossource event.idm.read_only_udm.additional.fields מופה מיומן השינויים
model.tags event.idm.read_only_udm.additional.fields מופה מיומן השינויים
codeid event.idm.read_only_udm.security_result.rule_id מופה מיומן השינויים
inhibitor event.idm.read_only_udm.security_result.description מופה מיומן השינויים
host_ip event.idm.read_only_udm.intermediary.ip מופה מיומן השינויים
technique_data event.idm.read_only_udm.security_result.attack_details.techniques מופה מיומן השינויים
tactics_data event.idm.read_only_udm.security_result.attack_details.tactics מופה מיומן השינויים
model.created.userid principal.user.userid מופה מיומן השינויים
model.edited.userid additional.fields מופה מיומן השינויים
direction network.direction מופה מיומן השינויים
filterType" under "triggeredFilters additional.fields מופה מיומן השינויים
trigger.value" under "triggeredFilters additional.fields מופה מיומן השינויים
from principal.user.email_addresses מופה מיומן השינויים
subject metadata.description מופה מיומן השינויים
anomaly_score", "tags", "link_hosts", and "message_id additional.fields מופה מיומן השינויים
recipients observer.user.email_addresses מופה מיומן השינויים
attachment_sha1s" and "attachment_sha256s security_result.detection_fields מופה מיומן השינויים
triggeredFilter.trigger.value target.ip מופה מיומן השינויים
from network.email.from מופה מיומן השינויים
subject network.email.subject מופה מיומן השינויים
attachment_sha1s", "attachment_sha256s", "recipients", "link_hosts", "tags", "actions", "anomaly_score", "message_id security_result.detection_fields מופה מיומן השינויים
model.name principal.user.user_display_name מופה מיומן השינויים
breachUrl security_result.url_back_to_product מופה מיומן השינויים
device.typelabel", "device.sid", "device.typename principal.resource.attribute.labels מופה מיומן השינויים
device.ips.0.subnet additional_fields מופה מיומן השינויים
device.device.lastSeen principal.asset.last_seen_time מופה מיומן השינויים
mitreTechniques security_result.attack_details.techniques מופה מיומן השינויים
details sec_result.about.resource.attribute.labels מופה מיומן השינויים
principal_port_no principal.port מופה מיומן השינויים
location principal.location.country_or_region מופה מיומן השינויים
target_host target.hostname מופה מיומן השינויים
source_ip principal.ip מופה מיומן השינויים
source_port principal.port מופה מיומן השינויים
dest_ip target.ip מופה מיומן השינויים
dest_port target.port מופה מיומן השינויים
@host principal.hostname מופה מיומן השינויים
note principal.application מופה מיומן השינויים
@type sec_result.about.resource.attribute.labels מופה מיומן השינויים
opcode sec_result.about.resource.attribute.labels מופה מיומן השינויים
trans_id sec_result.about.resource.attribute.labels מופה מיומן השינויים
query_class sec_result.about.resource.attribute.labels מופה מיומן השינויים
deviceMacAddress principal.mac מופה מיומן השינויים

יומן שינויים

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

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