Microsoft Defender for IoT-Protokolle (CyberX) erfassen
In diesem Dokument wird beschrieben, wie Sie Microsoft Defender for IoT-Logs (CyberX) mit Bindplane in Google Security Operations aufnehmen.
Microsoft Defender for IoT (früher CyberX) ist eine agentenlose IoT-/OT-Sicherheitsplattform, die Asset-Erkennung, Schwachstellenmanagement und kontinuierliche Bedrohungsüberwachung für industrielle Steuerungssysteme (Industrial Control Systems, ICS) und Betriebstechnologieumgebungen (Operational Technology, OT) bietet. Es erkennt anomales Verhalten und bekannte Bedrohungen in IoT-/OT-Netzwerken, ohne die Betriebsprozesse zu beeinträchtigen. Der Parser extrahiert Felder aus CyberX-Syslog und Schlüssel/Wert-formatierten Logs. Sie verwendet „grok“ und/oder „kv“, um die Log-Nachricht zu parsen, und ordnet diese Werte dann dem Unified Data Model (UDM) zu. Außerdem werden Standardmetadatenwerte für die Ereignisquelle und den Ereignistyp festgelegt.
Hinweise
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Eine Google SecOps-Instanz
- Windows Server 2016 oder höher oder Linux-Host mit
systemd - Wenn Sie den Agent hinter einem Proxy ausführen, müssen die Firewallports gemäß den Anforderungen des Bindplane-Agents geöffnet sein.
- Privilegierter Zugriff auf die Microsoft Defender for IoT-Sensorkonsole
Authentifizierungsdatei für die Aufnahme in Google SecOps abrufen
- Melden Sie sich in der Google SecOps-Konsole an.
- Rufen Sie die SIEM-Einstellungen > Collection Agents auf.
- Laden Sie die Authentifizierungsdatei für die Aufnahme herunter. Speichern Sie die Datei sicher auf dem System, auf dem BindPlane installiert wird.
Google SecOps-Kundennummer abrufen
- Melden Sie sich in der Google SecOps-Konsole an.
- Rufen Sie die SIEM-Einstellungen > Profile auf.
- Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.
BindPlane-Agent installieren
Installieren Sie den Bindplane-Agent auf Ihrem Windows- oder Linux-Betriebssystem gemäß der folgenden Anleitung.
Fenstereinbau
- Öffnen Sie die Eingabeaufforderung oder PowerShell als Administrator.
Führen Sie dazu diesen Befehl aus:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietWarten Sie, bis die Installation abgeschlossen ist.
Überprüfen Sie die Installation mit folgendem Befehl:
sc query observiq-otel-collector
Der Dienst sollte als RUNNING (Wird ausgeführt) angezeigt werden.
Linux-Installation
- Öffnen Sie ein Terminal mit Root- oder Sudo-Berechtigungen.
Führen Sie dazu diesen Befehl aus:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shWarten Sie, bis die Installation abgeschlossen ist.
Überprüfen Sie die Installation mit folgendem Befehl:
sudo systemctl status observiq-otel-collector
Der Dienst sollte als aktiv (wird ausgeführt) angezeigt werden.
Zusätzliche Installationsressourcen
Weitere Installationsoptionen und Informationen zur Fehlerbehebung finden Sie in der Installationsanleitung für den Bindplane-Agent.
BindPlane-Agent zum Erfassen von Syslog-Daten und Senden an Google SecOps konfigurieren
Konfigurationsdatei suchen
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Konfigurationsdatei bearbeiten
Ersetzen Sie den gesamten Inhalt von
config.yamldurch die folgende Konfiguration:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: 'CYBERX' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
Konfigurationsparameter
Ersetzen Sie die folgenden Platzhalter:
Empfängerkonfiguration:
udplog: Verwenden Sieudplogfür UDP-Syslog odertcplogfür TCP-Syslog.0.0.0.0: IP-Adresse, an der gelauscht werden soll (0.0.0.0, um an allen Schnittstellen zu lauschen)514: Portnummer, die überwacht werden soll (Standard-Syslog-Port)
Exporter-Konfiguration:
creds_file_path: Vollständiger Pfad zur Datei für die Authentifizierung bei der Aufnahme:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
YOUR_CUSTOMER_ID: Kunden-ID aus dem Abschnitt „Kunden-ID abrufen“endpoint: Regionale Endpunkt-URL:- USA:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Asien:
asia-southeast1-malachiteingestion-pa.googleapis.com - Eine vollständige Liste finden Sie unter Regionale Endpunkte.
- USA:
log_type: Logtyp genau wie in Chronicle (CYBERX)
Konfigurationsdatei speichern
- Speichern Sie die Datei nach der Bearbeitung:
- Linux: Drücken Sie
Ctrl+O, dannEnterund dannCtrl+X. - Windows: Klicken Sie auf Datei > Speichern.
- Linux: Drücken Sie
Bindplane-Agent neu starten, um die Änderungen zu übernehmen
Führen Sie den folgenden Befehl aus, um den Bindplane-Agent unter Linux neu zu starten:
sudo systemctl restart observiq-otel-collectorPrüfen Sie, ob der Dienst ausgeführt wird:
sudo systemctl status observiq-otel-collectorLogs auf Fehler prüfen:
sudo journalctl -u observiq-otel-collector -f
Wählen Sie eine der folgenden Optionen aus, um den Bindplane-Agent unter Windows neu zu starten:
Eingabeaufforderung oder PowerShell als Administrator:
net stop observiq-otel-collector && net start observiq-otel-collectorServices-Konsole:
- Drücken Sie
Win+R, geben Sieservices.mscein und drücken Sie die Eingabetaste. - Suchen Sie nach observIQ OpenTelemetry Collector.
Klicken Sie mit der rechten Maustaste und wählen Sie Neu starten aus.
Prüfen Sie, ob der Dienst ausgeführt wird:
sc query observiq-otel-collectorLogs auf Fehler prüfen:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Drücken Sie
Syslog-Weiterleitung in Microsoft Defender for IoT (CyberX) konfigurieren
- Melden Sie sich in der Microsoft Defender for IoT-Sensorkonsole (früher CyberX) an.
- Gehen Sie zu den Systemeinstellungen > Weiterleitung.
- Klicken Sie auf Hinzufügen (oder +), um eine neue Weiterleitungsregel zu erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Regelname: Geben Sie einen aussagekräftigen Namen ein, z. B.
Google-SecOps-Bindplane. - Schweregrad: Wählen Sie Alle aus oder bestimmte Schweregrade: „Geringfügig“, „Schwerwiegend“, „Kritisch“.
- Protokoll: Wählen Sie Alle aus (oder bestimmte Protokolle, die überwacht werden sollen).
- Engine: Wählen Sie Alle oder bestimmte Erkennungs-Engines aus.
- Aktion: Wählen Sie Syslog senden aus.
- Regelname: Geben Sie einen aussagekräftigen Namen ein, z. B.
- In der Konfiguration des Syslog-Servers:
- Host: Geben Sie die IP-Adresse des BindPlane-Agent-Hosts ein.
- Port: Geben Sie
514ein. - Protokoll: Wählen Sie UDP aus.
- Format: Wählen Sie CEF (Common Event Format) aus.
- Zeitzone: Wählen Sie UTC aus (empfohlen).
- Klicken Sie auf Speichern.
- Aktivieren Sie die Weiterleitungsregel, indem Sie sie auf Aktiv setzen.
- Prüfen Sie die Bindplane-Agent-Logs, um zu sehen, ob Syslog-Nachrichten gesendet werden.
UDM-Zuordnungstabelle
| Logfeld | UDM-Zuordnung | Logik |
|---|---|---|
| Zugriffsmaske | security_result.detection_fields.value | Wert von access_mask aus geparsten access_request_kvdata |
| Kontodomain | principal.administrative_domain | Wert von „principal_domain“ aus geparsten „principal_kvdata“ |
| Kontodomain | target.administrative_domain | Wert von „target_domain“ aus den geparsten „target_kvdata“ |
| Kontoname | principal.user.userid | Wert von „principal_account_name“ aus geparsten „principal_kvdata“ |
| Kontoname | target.user.userid | Wert von „target_account_name“ aus den geparsten „target_kvdata“ |
| Aktion | security_result.action_details | Wert der Aktion |
| Aktion | security_result.action | Abgeleitet. Wenn die Aktion „accept“, „passthrough“, „pass“, „permit“, „detected“ oder „close“ lautet, ordnen Sie sie „ALLOW“ zu. Wenn die Aktion „deny“, „dropped“ oder „blocked“ ist, ordnen Sie sie „BLOCK“ zu. Wenn die Aktion „timeout“ ist, ordnen Sie sie „FAIL“ zu. Andernfalls ordnen Sie sie „UNKNOWN_ACTION“ zu. |
| Algorithmusname | security_result.detection_fields.value | Wert von „algorithm_name“ aus den geparsten „cryptographic_kvdata“ |
| App | target.application | Wert des Dienstes, wenn „app_protocol_output“ leer ist |
| appcat | security_result.detection_fields.value | Wert von „appcat“ |
| Name der Anwendung | principal.application | Wert von „application_name“ |
| Authentifizierungspaket | security_result.about.resource.name | Wert von „authentication_package“ |
| Azure Defender für IoT-Warnung | security_result.detection_fields.value | Wert von „azure_defender_for_iot_alert“ |
| channel | security_result.detection_fields.value | Wert des Channels |
| Clientadresse | principal.ip, principal.asset.ip | Wert von „source_ip“ |
| Clientport | principal.port | Wert von „source_port“ |
| craction | security_result.detection_fields.value | Wert von „craction“ |
| Anmeldedaten des Anmeldedaten-Managers wurden gesichert | security_result.description | Wert der Beschreibung |
| Anmeldedaten des Anmeldedaten-Managers wurden gelesen. | security_result.description | Wert der Beschreibung |
| crscore | security_result.severity_details | Wert von „crscore“ |
| crlevel | security_result.severity, security_result.severity_details | Wert von „crlevel“. Wenn „crlevel“ „HIGH“, „MEDIUM“, „LOW“ oder „CRITICAL“ ist, ordnen Sie es dem entsprechenden UDM-Schweregrad zu. |
| Kryptografischer Vorgang | metadata.description | Wert von „product_desc“ |
| CyberX-Plattformname | security_result.detection_fields.value | Wert von cyberx_platform_name |
| Beschreibung | security_result.description | Wert der Beschreibung, wenn „Message“ leer ist |
| Ziel | target.ip, target.asset.ip oder target.hostname | Wenn das Ziel eine IP-Adresse ist, ordnen Sie es target.ip und target.asset.ip zu. Andernfalls wird „target.hostname“ zugeordnet. |
| Zieladresse | target.ip, target.asset.ip | Wert von „destination_ip“ aus den geparsten „network_information“ |
| Ziel-DRA | target.resource.name | Wert von „destination_dra“ |
| Ziel-IP | target.ip, target.asset.ip | Wert von „destination_ip“ |
| Zielport | target.port | Wert von „destination_port“ aus den geparsten „network_information“ |
| devid | principal.resource.product_object_id | Wert von „devid“ |
| devname | principal.resource.name | Wert von „devname“ |
| Richtung | network.direction | Wenn „Direction“ (Richtung) „incoming“ (eingehend), „inbound“ (eingehend) oder „response“ (Antwort) ist, ordnen Sie „INBOUND“ zu. Wenn „Direction“ (Richtung) „outgoing“ (ausgehend), „outbound“ (ausgehend) oder „request“ (Anfrage) ist, ordnen Sie „OUTBOUND“ (AUSGEHEND) zu. |
| dstip | target.ip, target.asset.ip | Wert von „dstip“, wenn „destination_ip“ leer ist |
| dstcountry | target.location.country_or_region | Wert von „dstcountry“ |
| dstintf | security_result.detection_fields.value | Wert von „dstintf“ |
| dstintfrole | security_result.detection_fields.value | Wert von „dstintfrole“ |
| dstosname | target.platform | Wert von „dstosname“, wenn er „WINDOWS“, „LINUX“ oder „MAC“ ist. |
| dstport | target.port | Wert von „dstport“, wenn „destination_port“ leer ist |
| dstswversion | target.platform_version | Wert von „dstswversion“ |
| Dauer | network.session_duration.seconds | Wert der Dauer |
| event_id | security_result.rule_name | Wird verwendet, um den Regelnamen als „EventID: %{event_id}“ zu erstellen. |
| event_in_sequence | security_result.detection_fields.value | Wert von „event_in_sequence“ |
| Filter-Laufzeit-ID | security_result.detection_fields.value | Wert von „filter_run_time_id“ aus den geparsten Filterinformationen |
| Gruppenmitgliedschaft | security_result.detection_fields.value | Wert von „group_membership“, wenn „event_id“ nicht 4627 ist |
| Gruppenmitgliedschaft | target.user.group_identifiers | Werte aus der geparsten group_membership, wenn event_id = 4627 |
| handle_id | security_result.detection_fields.value | Wert von „handle_id“ aus geparsten „object_kvdata“ |
| Handle-ID | security_result.detection_fields.value | Wert von „handle_id“ aus geparsten „object_kvdata“ |
| impersonation_level | security_result.detection_fields.value | Wert von „impersonation_level“ aus geparsten „logon_information_kvdata“ |
| Schlüssellänge | security_result.detection_fields.value | Wert von „key_length“ aus den geparsten „auth_kvdata“ |
| Schlüsselname | security_result.detection_fields.value | Wert von „key_name“ aus den geparsten „cryptographic_kvdata“ |
| Schlüsseltyp | security_result.detection_fields.value | Wert von „key_type“ aus den geparsten „cryptographic_kvdata“ |
| Keywords | security_result.detection_fields.value | Wert von Keywords |
| Name der Ebene | security_result.detection_fields.value | Wert von „layer_name“ aus den geparsten „filter_information“ |
| Laufzeit-ID des Layers | security_result.detection_fields.value | Wert von „layer_run_time_id“ aus den geparsten „filter_information“ |
| logid | metadata.product_log_id | Wert von „logid“ |
| Anmelde-GUID | principal.resource.product_object_id | Wert von „logon_guid“ |
| Anmelde-ID | security_result.detection_fields.value | Wert von „logon_id“ |
| logon_type | event.idm.read_only_udm.extensions.auth.mechanism | Abgeleitet. Wenn „logon_type“ = „3“, dann „NETWORK“ zuordnen. Wenn „4“, dann „BATCH“. Wenn „5“, dann „SERVICE“. Wenn „8“, dann „NETWORK_CLEAR_TEXT“. Wenn „9“, dann „NEW_CREDENTIALS“. Wenn „10“, dann „REMOTE_INTERACTIVE“. Wenn „11“, dann „CACHED_INTERACTIVE“ zuordnen. Andernfalls, falls nicht leer, ordnen Sie „MECHANISM_OTHER“ zu. |
| Anmeldekonto | security_result.detection_fields.value | Wert von „logon_id“ aus der Grok-Analyse |
| Anmeldevorgang | security_result.detection_fields.value | Wert von „logon_process“ aus geparsten „auth_kvdata“ |
| Pflichtlabel | security_result.detection_fields.value | Wert von „mandatory_label“ |
| mastersrcmac | principal.mac | Wert von „mastersrcmac“ |
| Nachricht | security_result.description | Wert der Mitteilung |
| new_process_id | target.process.pid | Wert von „new_process_id“ aus geparsten „process_kvdata“ |
| new_process_name | target.process.file.full_path | Wert von „new_process_name“ aus geparsten „process_kvdata“ |
| Objektname | security_result.detection_fields.value | Wert von „object_name“ aus geparsten „object_kvdata“ |
| Objektserver | security_result.detection_fields.value | Wert von „object_server“ aus den geparsten „object_kvdata“ |
| Objektart | security_result.detection_fields.value | Wert von „object_type“ aus geparsten „object_kvdata“ |
| osname | principal.platform | Wert von „osname“, wenn er „WINDOWS“, „LINUX“ oder „MAC“ ist. |
| Paketname (nur NTLM) | security_result.detection_fields.value | Wert von „package_name“ aus den geparsten „auth_kvdata“ |
| policyid | security_result.rule_id | Wert von „policyid“ |
| policyname | security_result.rule_name | Wert von „policyname“ |
| policytype | security_result.rule_type | Wert von „policytype“ |
| Prozess-ID | principal.process.pid | Wert von „process_id“ |
| Prozessname | principal.process.file.full_path | Wert von „creator_process_name“ aus geparsten „process_kvdata“ |
| profile_changed | security_result.detection_fields.value | Wert von „profile_changed“ |
| Profil geändert | security_result.detection_fields.value | Wert von „profile_changed“ aus Grok-Analyse |
| Proto | network.ip_protocol | Wenn „proto“ „17“ ist, wird „UDP“ zugeordnet. Wenn „6“ oder der Untertyp „wad“ ist, ordnen Sie „TCP“ zu. Wenn „41“, dann „IP6IN4“ zuordnen. Wenn der Dienst „PING“ ist oder das Protokoll „1“ ist oder der Dienst „ICMP“ enthält, ordnen Sie ihn „ICMP“ zu. |
| Protokoll | network.application_protocol | Wert von „app_protocol_output“, der aus dem Protokoll abgeleitet wurde |
| Name des Anbieters | security_result.detection_fields.value | Wert von „provider_name“ aus geparsten „provider_kvdata“ oder „cryptographic_kvdata“ |
| rcvdbyte | network.received_bytes | Wert von „rcvdbyte“ |
| rcvdpkt | security_result.detection_fields.value | Wert von rcvdpkt |
| restricted_admin_mode | security_result.detection_fields.value | Wert von „restricted_admin_mode“ aus geparsten „logon_information_kvdata“ |
| Rückgabecode | security_result.detection_fields.value | Wert von „return_code“ aus den geparsten „cryptographic_kvdata“ |
| Antwort | security_result.detection_fields.value | Wert der Antwort |
| rule_id | security_result.rule_id | Wert von „rule_id“ |
| Sicherheits-ID | principal.user.windows_sid | Wert von „principal_security_id“ aus geparsten „principal_kvdata“ |
| Sicherheits-ID | target.user.windows_sid | Wert von „target_security_id“ aus den geparsten „target_kvdata“ |
| sentbyte | network.sent_bytes | Wert von „sentbyte“ |
| sentpkt | security_result.detection_fields.value | Wert von „sentpkt“ |
| Dienst | network.application_protocol oder target.application | Wert von „app_protocol_output“, der vom Dienst abgeleitet wird. Wenn „app_protocol_output“ leer ist, ordnen Sie „target.application“ zu. |
| Dienst-ID | security_result.detection_fields.value | Wert von „service_id“ aus geparsten „service_kvdata“ |
| Dienstname | security_result.detection_fields.value | Wert von „service_name“ aus den geparsten „service_kvdata“ |
| sessionid | network.session_id | Wert von „sessionid“ |
| Schweregrad | security_result.severity, security_result.severity_details | Wenn der Schweregrad „ERROR“ oder „CRITICAL“ ist, ordnen Sie ihn dem entsprechenden UDM-Schweregrad zu. Wenn „INFO“, dann „INFORMATIONAL“ zuordnen. Wenn „MINOR“, ordnen Sie „LOW“ zu. Wenn „WARNING“, ordnen Sie „MEDIUM“ zu. Wenn „MAJOR“, dann „HIGH“. Ordnen Sie den Rohwert auch severity_details zu. |
| die Ausprägung | security_result.severity, security_result.severity_details | Wenn der Schweregrad „1“, „2“ oder „3“ ist, ordnen Sie ihn „LOW“ zu. Wenn „4“, „5“ oder „6“, dann „MEDIUM“. Wenn „7“, „8“ oder „9“, dann „HIGH“. Ordnen Sie den Rohwert auch severity_details zu. |
| Freigabename | security_result.detection_fields.value | Wert von „share_name“ aus den geparsten „share_information_kvdata“ |
| Pfad teilen | security_result.detection_fields.value | Wert von „share_path“ aus den geparsten „share_information_kvdata“ |
| Quelle | principal.ip, principal.asset.ip oder principal.hostname, principal.asset.hostname | Wenn „Source“ eine IP-Adresse ist, ordnen Sie sie „principal.ip“ und „principal.asset.ip“ zu. Andernfalls ordnen Sie sie principal.hostname und principal.asset.hostname zu. |
| Quelladresse | principal.ip, principal.asset.ip | Wert von „source_ip“ aus den geparsten „network_information“ |
| Quell-DRA | principal.resource.name | Wert von „source_dra“ |
| Quell-IP-Adresse | principal.ip | Wert von „source_ip“ |
| Quellnetzwerkadresse | principal.ip, principal.asset.ip | Wert von „source_ip“ |
| Quellport | principal.port | Wert von „source_port“ aus den geparsten „network_information“ |
| Quellworkstation | workstation_name | Wert von „source_workstation_name“ |
| srcip | source_ip | Wert von „srcip“, wenn „source_ip“ leer ist |
| srccountry | principal.location.country_or_region | Wert von „srccountry“ |
| srcmac | principal.mac | Wert von „srcmac“ |
| srcname | hauptkonto.hostname, hauptkonto.asset.hostname | Wert von „srcname“ |
| srcport | source_port | Wert von „srcport“, wenn „source_port“ leer ist |
| srcswversion | principal.platform_version | Wert von „srcswversion“ |
| Statuscode | network.http.response_code | Wert von „status_code“ |
| Token-Erhebungstyp | security_result.detection_fields.value | Wert von „token_elevation_type“ |
| transited_services | security_result.detection_fields.value | Wert von „transited_services“ aus geparsten „auth_kvdata“ |
| transip | principal.nat_ip | Wert von transip |
| transport | principal.nat_port | Wert des Transports |
| Typ | metadata.product_event_type | Wird mit „subtype“ verwendet, um „metadata.product_event_type“ zu erstellen. |
| Typ | security_result.detection_fields.value | Wert des Typs |
| UUID | metadata.product_log_id | Wert der UUID |
| vd | principal.administrative_domain | Wert von „vd“ |
| virtual_account | security_result.detection_fields.value | Wert von „virtual_account“ aus geparsten „logon_information_kvdata“ |
| Name der Workstation | hauptkonto.hostname, hauptkonto.asset.hostname | Wert von „workstation_name“, wenn keine andere Hauptkonto-ID vorhanden ist |
| metadata.event_type | metadata.event_type | Abgeleitet. Wenn sowohl „principal_present“ als auch „target_present“ „true“ sind, ordnen Sie „NETWORK_CONNECTION“ zu. Wenn „user_present“ auf „true“ gesetzt ist, ordnen Sie „USER_RESOURCE_ACCESS“ zu. Wenn „principal_present“ auf „true“ gesetzt ist, ordnen Sie „STATUS_UPDATE“ zu. Andernfalls ordnen Sie das Ereignis „GENERIC_EVENT“ zu. |
| metadata.log_type | metadata.log_type | Fest codiert auf „CYBERX“ |
| metadata.product_name | metadata.product_name | Fest codiert auf „CYBERX“ |
| metadata.vendor_name | metadata.vendor_name | Fest codiert auf „CYBERX“ |
| metadata.event_timestamp | metadata.event_timestamp | Wird aus dem Zeitstempelfeld auf oberster Ebene kopiert oder aus den Feldern „eventtime“ oder „date and time“ abgeleitet. |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten