איסוף יומנים של 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 web UI
קבלת קובץ אימות להטמעת נתונים ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Collection Agents (הגדרות SIEM > סוכני איסוף).
- מורידים את קובץ האימות להטמעת נתונים.
שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן סוכן Bindplane.
איך מקבלים את מספר הלקוח ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Profile (הגדרות SIEM > פרופיל).
מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.
התקנת סוכן Bindplane
מתקינים את סוכן Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.
התקנת Windows
- פותחים את שורת הפקודה או את PowerShell כאדמין.
מריצים את הפקודה הבאה:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietמחכים שההתקנה תסתיים.
כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:
sc query observiq-otel-collectorהשירות אמור להופיע עם הערך RUNNING.
התקנה של Linux
- פותחים טרמינל עם הרשאות root או sudo.
מריצים את הפקודה הבאה:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shמחכים שההתקנה תסתיים.
כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:
sudo systemctl status observiq-otel-collectorהשירות צריך להופיע כפעיל (פועל).
מקורות מידע נוספים להתקנה
אפשרויות התקנה נוספות ופתרון בעיות מפורטים במדריך להתקנת סוכן Bindplane.
הגדרה של סוכן Bindplane להטמעה של syslog ושליחה אל Google SecOps
איתור קובץ התצורה
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
עריכת קובץ התצורה
מחליפים את כל התוכן של
config.yamlבהגדרה הבאה:receivers: tcplog: listen_address: "0.0.0.0:10282" exporters: chronicle/darktrace: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.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: הנתיב המלא לקובץ האימות להטמעת נתונים:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
-
customer_id: מספר הלקוח שהועתק ממסוף Google SecOps endpoint: Regional endpoint URL:- ארה"ב:
malachiteingestion-pa.googleapis.com - אירופה:
europe-malachiteingestion-pa.googleapis.com - אסיה:
asia-southeast1-malachiteingestion-pa.googleapis.com - רשימה מלאה מופיעה במאמר בנושא נקודות קצה אזוריות.
- ארה"ב:
-
שמירת קובץ ההגדרות
- אחרי שמסיימים לערוך, שומרים את הקובץ:
- Linux: מקישים על
Ctrl+O, אחר כך עלEnterואז עלCtrl+X - Windows: לוחצים על קובץ > שמירה.
- Linux: מקישים על
מפעילים מחדש את סוכן Bindplane כדי להחיל את השינויים.
כדי להפעיל מחדש את סוכן Bindplane ב-Linux, מריצים את הפקודה הבאה:
sudo systemctl restart observiq-otel-collectorמוודאים שהשירות פועל:
sudo systemctl status observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
sudo journalctl -u observiq-otel-collector -f
כדי להפעיל מחדש את סוכן Bindplane ב-Windows, בוחרים באחת מהאפשרויות הבאות:
שורת פקודה או PowerShell כאדמין:
net stop observiq-otel-collector && net start observiq-otel-collectorמסוף השירותים:
- מקישים על
Win+R, מקלידיםservices.mscומקישים על Enter. - מחפשים את observIQ OpenTelemetry Collector.
- לוחצים לחיצה ימנית ובוחרים באפשרות הפעלה מחדש.
מוודאים שהשירות פועל:
sc query observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- מקישים על
הגדרת syslog ב-Darktrace
- נכנסים לממשק המשתמש באינטרנט של Darktrace.
- עוברים אל Admin > System Config.
- לוחצים על אימות הגדרות ההתראות.
- מזינים את פרטי ההגדרה הבאים:
- CEF Syslog Alerts: בוחרים באפשרות True.
- שרת CEF Syslog: מזינים את כתובת ה-IP של Bindplane.
- יציאת שרת Syslog של CEF: מזינים את מספר היציאה של Bindplane (לדוגמה,
10282). - CEF Syslog TCP Alert: בוחרים באפשרות True.
- לוחצים על 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 | לוגיקה |
|---|---|---|
| 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 Then 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. |
| score | 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. |
| שוש | 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.