איסוף יומנים של 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
- גישה עם הרשאות ל-UI של Darktrace
קבלת קובץ אימות להטמעת נתונים ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Collection Agents.
- מורידים את קובץ האימות להטמעת נתונים.
שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן סוכן Bindplane.
איך מוצאים את מספר הלקוח ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Profile.
מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.
התקנת הסוכן של Bindplane
מתקינים את סוכן Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.
התקנת חלונות
- פותחים את שורת הפקודה או את 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השירות אמור להופיע כ-active (running).
מקורות מידע נוספים להתקנה
אפשרויות התקנה נוספות ופתרון בעיות מפורטים במדריך להתקנת סוכן 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: כתובת ה-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. |
| 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.