Snort-Protokolle erfassen
In diesem Dokument wird beschrieben, wie Sie mit Bindplane Snort-Logs in Google Security Operations erfassen. Der Parser versucht, zwei verschiedene Snort-Protokollformate (SYSLOG + JSON) zu verarbeiten, indem er mithilfe von grok
-Mustern relevante Felder extrahiert. Je nach identifiziertem Format werden die Daten weiter verarbeitet, extrahierte Felder dem UDM-Schema (Unified Data Model) zugeordnet, Werte normalisiert und die Ausgabe mit zusätzlichem Kontext angereichert.
Hinweise
- Sie benötigen eine Google Security Operations-Instanz.
- Sie müssen Windows 2016 oder höher oder einen Linux-Host mit
systemd
verwenden. - Wenn die Ausführung hinter einem Proxy erfolgt, müssen die Firewallports geöffnet sein.
- Sie benötigen erhöhte Zugriffsrechte für Snort.
Authentifizierungsdatei für die Aufnahme in Google SecOps abrufen
- Melden Sie sich in der Google SecOps Console an.
- Gehen Sie zu SIEM-Einstellungen > Erfassungsagenten.
- Lade die Datei zur Authentifizierung der Datenaufnahme 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 Console an.
- Gehen Sie zu SIEM-Einstellungen > Profil.
- Kopieren und speichern Sie die Kundennummer aus dem Bereich Organisationsdetails.
Bindplane-Agent installieren
Windows-Installation
- Öffnen Sie die Eingabeaufforderung oder die 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" /quiet
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.sh
Weitere Installationsressourcen
- Weitere Installationsoptionen finden Sie in diesem Installationsleitfaden.
Bindplane-Agent so konfigurieren, dass er Syslog-Daten aufnimmt und an Google SecOps sendet
Rufen Sie die Konfigurationsdatei auf:
- Suchen Sie die Datei
config.yaml
. Normalerweise befindet es sich unter Linux im Verzeichnis/etc/bindplane-agent/
oder unter Windows im Installationsverzeichnis. - Öffnen Sie die Datei mit einem Texteditor, z. B.
nano
,vi
oder Notepad.
- Suchen Sie die Datei
Bearbeiten Sie die Datei
config.yaml
so:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: SNORT_IDS raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
Ersetzen Sie den Port und die IP-Adresse nach Bedarf in Ihrer Infrastruktur.
Ersetzen Sie
<customer_id>
durch die tatsächliche Kundennummer.Aktualisieren Sie
/path/to/ingestion-authentication-file.json
im Abschnitt Authentifizierungsdatei für die Datenaufnahme von Google SecOps abrufen auf den Pfad, unter dem die Authentifizierungsdatei gespeichert wurde.
Starten Sie den Bindplane-Agent neu, um die Änderungen anzuwenden
Führen Sie den folgenden Befehl aus, um den Bindplane-Agenten unter Linux neu zu starten:
sudo systemctl restart bindplane-agent
Sie können den Bindplane-Agenten unter Windows entweder über die Dienste-Konsole oder mit dem folgenden Befehl neu starten:
net stop BindPlaneAgent && net start BindPlaneAgent
Syslog-Export in Snort v2.x konfigurieren
- Melden Sie sich über das Terminal auf dem Snort-Gerät an.
- Bearbeiten Sie die folgende Datei:
/etc/snort/snort.conf
- Öffnen Sie
6) Configure output plugins
. Fügen Sie den folgenden Eintrag hinzu:
# syslog output alert_syslog: host=BINDPLANE_IP_ADDRESS:PORT_NUMBER, LOG_AUTH LOG_ALERT
Ersetzen Sie Folgendes:
- BINDPLANE_IP_ADDRESS: Bindplane Agent IP address.
- PORT_NUMBER: Bindplane Agent port number.
Speichern Sie die Datei.
Starten Sie den Dienst snort.
Beenden Sie den Dienst rsyslog.
Bearbeiten Sie die folgende Datei:
/etc/rsyslogd.conf
# remote host is: name/ip:port *.* @@BINDPLANE_IP_ADDRESS:PORT_NUMBER
Ersetzen Sie Folgendes:
- BINDPLANE_IP_ADDRESS: Bindplane Agent IP address.
- PORT_NUMBER: Bindplane Agent port number.
Starten Sie den Dienst rsyslog.
Syslog-Export unter Snort v3.1.53 konfigurieren
- Melden Sie sich über das Terminal auf dem Snort-Gerät an.
- Beenden Sie die Dienste rsyslog und snort.
- Rufen Sie das folgende Snort-Installationsverzeichnis auf:
/usr/local/etc/snort/
Bearbeiten Sie die folgende Snort-Konfigurationsdatei:
snort.lua
Füge unter Ausgaben konfigurieren den folgenden Code hinzu. Du kannst eine beliebige Einrichtung und Ebene verwenden:
alert_syslog = { facility = 'local3', level = 'info', }
Speichern Sie die Snort-Konfigurationsdatei.
Rufen Sie das Verzeichnis mit den Standardkonfigurationsdateien des Dienstes rsyslog auf:
/etc/rsyslog.d
So erstellen Sie eine neue Datei:
3-snort.conf
:# cd /etc/rsyslog.d # vi 3-snort.conf
Wenn Sie Protokolle über TCP oder UDP senden möchten, fügen Sie die folgende Konfiguration hinzu:
local3.* @@BINDPLANE_IP_ADDRESS:PORT_NUMBER
Ersetzen Sie Folgendes:
- BINDPLANE_IP_ADDRESS: Bindplane agent IP address.
- PORT_NUMBER: Bindplane agent port number.
Speichern Sie die Datei.
Starten Sie rsyslog und dann den Dienst snort.
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
agent.hostname | observer.hostname | Wert aus dem Feld agent.hostname im Rohprotokoll. |
agent.id | observer.asset_id | Wert aus dem Feld agent.id im Rohprotokoll, der mit agent.type wie folgt zusammengefügt wird: agent.type:agent.id . |
agent.type | observer.application | Wert aus dem Feld agent.type im Rohprotokoll. |
agent.version | observer.platform_version | Wert aus dem Feld agent.version im Rohprotokoll. |
alert.category | security_result.category_details | Wert aus dem Feld alert.category im Rohprotokoll. |
alert.rev | security_result.rule_version | Wert aus dem Feld alert.rev im Rohprotokoll. |
alert.rule | security_result.summary | Wert aus dem Feld alert.rule im Rohprotokoll, ohne doppelte Anführungszeichen. |
alert.severity | security_result.severity | Wenn alert.severity größer oder gleich 4 ist, setzen Sie LOW . Wenn alert.severity 2 oder 3 ist, setzen Sie es auf MEDIUM . Wenn alert.severity = 1 ist, setzen Sie HIGH . Andernfalls setzen Sie UNKNOWN_SEVERITY . |
alert.signature | security_result.rule_name | Wert aus dem Feld alert.signature im Rohprotokoll. |
alert.signature_id | security_result.rule_id | Wert aus dem Feld alert.signature_id im Rohprotokoll. |
app_proto | network.application_protocol | Wenn app_proto den Wert dns , smb oder http hat, wandeln Sie ihn in Großbuchstaben um und verwenden Sie diesen Wert. Andernfalls setzen Sie UNKNOWN_APPLICATION_PROTOCOL . |
Kategorie | security_result.category | Wenn category trojan-activity ist, setzen Sie NETWORK_MALICIOUS . Wenn category policy-violation ist, setzen Sie POLICY_VIOLATION . Andernfalls setzen Sie UNKNOWN_CATEGORY . |
classtype | security_result.rule_type | Wert aus dem Feld classtype im Rohprotokoll, sofern es nicht leer oder unknown ist. |
community_id | network.community_id | Wert aus dem Feld community_id im Rohprotokoll. |
date_log | Wird verwendet, um den Ereigniszeitstempel festzulegen, wenn das Feld time leer ist. |
|
Ab | metadata.description | Wert aus dem Feld desc im Rohprotokoll. |
dest_ip | target.ip | Wert aus dem Feld dest_ip im Rohprotokoll. |
dest_port | target.port | Wert aus dem Feld dest_port im Rohprotokoll, der in eine Ganzzahl konvertiert wurde. |
dstport | target.port | Wert aus dem Feld dstport im Rohprotokoll, der in eine Ganzzahl konvertiert wurde. |
file.filename | security_result.about.file.full_path | Wert aus dem Feld file.filename im Rohprotokoll, sofern es nicht leer oder / ist. |
file.size | security_result.about.file.size | Wert aus dem Feld file.size im Rohprotokoll, der in eine positive Ganzzahl umgewandelt wurde. |
host.name | principal.hostname | Wert aus dem Feld host.name im Rohprotokoll. |
Hostname | principal.hostname | Wert aus dem Feld hostname im Rohprotokoll. |
inter_host | intermediary.hostname | Wert aus dem Feld inter_host im Rohprotokoll. |
log.file.path | principal.process.file.full_path | Wert aus dem Feld log.file.path im Rohprotokoll. |
metadata.version | metadata.product_version | Wert aus dem Feld metadata.version im Rohprotokoll. |
Proto | network.ip_protocol | Wert aus dem Feld proto im Rohprotokoll. Wenn es sich um eine Zahl handelt, wird sie mithilfe einer Suchtabelle in den entsprechenden IP‑Protokollnamen umgewandelt. |
rule_name | security_result.rule_name | Wert aus dem Feld rule_name im Rohprotokoll. |
signature_id | security_result.rule_id | Wert aus dem Feld signature_id im Rohprotokoll. |
signature_rev | security_result.rule_version | Wert aus dem Feld signature_rev im Rohprotokoll. |
src_ip | principal.ip | Wert aus dem Feld src_ip im Rohprotokoll. |
src_port | principal.port | Wert aus dem Feld src_port im Rohprotokoll, der in eine Ganzzahl konvertiert wurde. |
srcport | principal.port | Wert aus dem Feld srcport im Rohprotokoll, der in eine Ganzzahl konvertiert wurde. |
Zeit | Wird verwendet, um den Ereigniszeitstempel festzulegen. | |
is_alert | Wird auf true gesetzt, wenn alert.severity = 1 ist, andernfalls nicht zugeordnet. |
|
is_significant | Wird auf true gesetzt, wenn alert.severity = 1 ist, andernfalls nicht zugeordnet. |
|
metadata.event_type | Immer auf SCAN_NETWORK gesetzt. |
|
metadata.log_type | Hartcodiert auf SNORT_IDS . |
|
metadata.product_name | Hartcodiert auf SNORT_IDS . |
|
metadata.vendor_name | Hartcodiert auf SNORT . |
|
security_result.action | Wird auf ALLOW gesetzt, wenn alert.action gleich allowed ist, andernfalls auf UNKNOWN_ACTION . |
Änderungen
2024-12-04
Optimierung:
- Grok-Muster zum Umgang mit SYSLOG-Formatprotokollen wurden hinzugefügt.
- Wenn der Wert von
net_proto
Tcp
ist, setzen Sie den Wert vonnetwork.ip_protocol
aufTCP
.
2024-11-21
Optimierung:
- Ein Grok-Muster zum Verarbeiten von SYSLOG-Format-Protokollen wurde hinzugefügt.
2022-09-22
Optimierung:
- Die Bedingung „on_error“ wurde für das Feld „agent.hostname“ hinzugefügt, um die nicht geparsten Protokolle zu analysieren.
2022-07-05
Optimierung:
- Ein Grok-Muster zum Verarbeiten von Protokollen im syslog-Format wurde hinzugefügt.
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten