Logs für den sicheren Remotezugriff von BeyondTrust erfassen
In diesem Dokument wird beschrieben, wie Sie mit Bindplane Logs für den sicheren Remotezugriff von BeyondTrust erfassen. Der Parser unterstützt zwei syslog-Formate. Das erste Format verwendet Schlüssel/Wert-Paare in einer strukturierten Nachricht, während das zweite Format durch Pipes getrennte Felder verwendet. Der Parser extrahiert relevante Felder aus beiden Formaten und ordnet sie dem UDM zu. Außerdem werden Ereignistypen anhand von extrahierten Keywords kategorisiert und eine spezielle Logik für Anmelde-/Abmeldeereignisse und Authentifizierungstypen angewendet.
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 Berechtigungen für den sicheren Remotezugriff von BeyondTrust.
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: BEYONDTRUST_REMOTE_ACCESS 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
Remote-Support von BeyondTrust konfigurieren
- Melden Sie sich in der BeyondTrust-Web-UI an.
- Wählen Sie Appliance > Sicherheit > Appliance-Verwaltung aus.
- Führen Sie im Abschnitt Syslog folgende Schritte aus:
- Nachrichtenformat: Wählen Sie Legacy BSD-Format aus.
- Remote-Syslog-Server: Geben Sie die IP-Adresse und den Port von Bindplane ein.
- Klicken Sie auf Senden.
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
datetime |
metadata.event_timestamp |
Wenn das Feld when nicht vorhanden ist, wird der Zeitstempel aus dem Feld datetime im RFC 3339-Format geparst. |
deviceHost |
target.hostname |
Der Wert von deviceHost wird direkt auf target.hostname zugeordnet. |
dstHost |
target.ip |
Der Wert von dstHost wird direkt auf target.ip zugeordnet, nachdem er als gültige IP-Adresse bestätigt wurde. |
dstPriv |
additional.fields.[key=dstPriv].value.string_value |
Der Wert von dstPriv wird in das Feld additional mit dem Schlüssel dstPriv eingefügt. |
dstUid |
target.user.userid |
Der Wert von dstUid wird direkt auf target.user.userid zugeordnet. |
dstUser |
target.user.user_display_name |
Der Wert von dstUser wird direkt auf target.user.user_display_name zugeordnet. |
eventName |
metadata.event_type |
Wenn eventName login ist (ohne Berücksichtigung der Groß- und Kleinschreibung), wird metadata.event_type auf USER_LOGIN gesetzt. Wenn eventName logout ist (ohne Berücksichtigung der Groß- und Kleinschreibung), wird metadata.event_type auf USER_LOGOUT gesetzt. Andernfalls, wenn eventName nicht leer ist, wird metadata.event_type auf USER_UNCATEGORIZED gesetzt. Wenn eventName leer ist und die Nachricht mit dem zweiten Grok-Muster übereinstimmt, wird metadata.event_type auf GENERIC_EVENT gesetzt. Wenn eventName leer ist und die Nachricht mit dem ersten Grok-Muster übereinstimmt, wird metadata.event_type auf GENERIC_EVENT gesetzt. Wenn srcUid , userid oder who nicht leer sind, wird metadata.event_type auf USER_CHANGE_PERMISSIONS festgelegt. Wenn deviceHost oder site nicht leer sind, wird metadata.event_type auf USER_UNCATEGORIZED gesetzt. Andernfalls wird metadata.event_type auf GENERIC_EVENT gesetzt. |
event_name |
additional.fields.[key=event_name].value.string_value |
Der Wert von event_name wird in das Feld additional mit dem Schlüssel event_name eingefügt. |
event_name |
metadata.product_event_type |
Der Wert von event_name wird in Verbindung mit dem Feld id verwendet, um metadata.product_event_type im Format „[ id] - event_name“ auszufüllen. |
externalKeyLabel |
additional.fields.[key=externalKeyLabel].value.string_value |
Der Wert von externalKeyLabel wird in das Feld additional mit dem Schlüssel externalKeyLabel eingefügt. |
id |
metadata.product_event_type |
Der Wert von id wird in Verbindung mit dem Feld event_name verwendet, um metadata.product_event_type im Format „[ id] - event_name“ auszufüllen. |
jumpGroupId |
additional.fields.[key=jumpGroupId].value.string_value |
Der Wert von jumpGroupId wird in das Feld additional mit dem Schlüssel jumpGroupId eingefügt. |
jumpGroupName |
additional.fields.[key=jumpGroupName].value.string_value |
Der Wert von jumpGroupName wird in das Feld additional mit dem Schlüssel jumpGroupName eingefügt. |
jumpGroupType |
additional.fields.[key=jumpGroupType].value.string_value |
Der Wert von jumpGroupType wird in das Feld additional mit dem Schlüssel jumpGroupType eingefügt. |
jumpointId |
additional.fields.[key=jumpointId].value.string_value |
Der Wert von jumpointId wird in das Feld additional mit dem Schlüssel jumpointId eingefügt. |
jumpointName |
additional.fields.[key=jumpointName].value.string_value |
Der Wert von jumpointName wird in das Feld additional mit dem Schlüssel jumpointName eingefügt. |
kv_data |
Verschiedene UDM-Felder | Das Feld kv_data wird in Schlüssel/Wert-Paare zerlegt, die dann basierend auf ihren Schlüsseln verschiedenen UDM-Feldern zugeordnet werden (z.B. eventName , when , who , who_ip , site , target , status , reason ). |
kvdata |
Verschiedene UDM-Felder | Das Feld kvdata wird in Schlüssel/Wert-Paare zerlegt, die dann basierend auf ihren Schlüsseln verschiedenen UDM-Feldern zugeordnet werden (z.B. msg , srcUser , srcUid , srcHost , dstUser , dstUid , dstHost , sessionId , jumpointId , jumpointName , jumpGroupId , jumpGroupName , jumpGroupType , externalKeyLabel , dstPriv ). |
message |
Verschiedene UDM-Felder | Das Feld message wird mit Grok-Mustern analysiert, um verschiedene Felder zu extrahieren, die dann UDM-Feldern zugeordnet werden. |
msg |
metadata.description |
Der Wert von msg wird direkt auf metadata.description zugeordnet. |
product_event_type |
metadata.product_event_type |
Der Wert von product_event_type wird direkt auf metadata.product_event_type zugeordnet. |
product_log_id |
metadata.product_log_id |
Der Wert von product_log_id wird direkt auf metadata.product_log_id zugeordnet. |
process_id |
principal.process.pid |
Der Wert von process_id wird direkt auf principal.process.pid zugeordnet. |
reason |
security_result.description |
Der Wert von reason wird direkt auf security_result.description zugeordnet. |
segment_number |
additional.fields.[key=segment_number].value.string_value |
Der Wert von segment_number wird in das Feld additional mit dem Schlüssel segment_number eingefügt. |
sessionId |
network.session_id |
Der Wert von sessionId wird direkt auf network.session_id zugeordnet. |
site |
target.hostname |
Der Wert von site wird direkt auf target.hostname zugeordnet. |
site_id |
additional.fields.[key=site_id].value.string_value |
Der Wert von site_id wird in das Feld additional mit dem Schlüssel site_id eingefügt. |
srcHost |
principal.ip |
Der Wert von srcHost wird direkt auf principal.ip zugeordnet, nachdem er als gültige IP-Adresse bestätigt wurde. |
srcUid |
principal.user.userid |
Der Wert von srcUid wird direkt auf principal.user.userid zugeordnet. |
srcUser |
principal.user.user_display_name |
Der Wert von srcUser wird direkt auf principal.user.user_display_name zugeordnet. |
status |
security_result.action |
Wenn status failure ist (ohne Berücksichtigung der Groß- und Kleinschreibung), wird security_result.action auf BLOCK gesetzt. Andernfalls wird security_result.action auf ALLOW gesetzt. |
status |
security_result.action_details |
Der Wert von status wird direkt auf security_result.action_details zugeordnet. |
target |
target.application |
Der Wert von target wird direkt auf target.application zugeordnet. rep_client wird durch Representative Console und web/login durch Web/Login ersetzt. |
target |
extensions.auth.type |
Wenn target = rep_client ist, wird extensions.auth.type auf MACHINE gesetzt. Wenn target = web/login ist, wird extensions.auth.type auf SSO gesetzt. Andernfalls wird extensions.auth.type auf AUTHTYPE_UNSPECIFIED gesetzt. |
timestamp |
metadata.event_timestamp |
timestamp aus dem Rohprotokoll wird als Fallback verwendet, wenn weder datetime noch when vorhanden sind. |
total_segments |
additional.fields.[key=total_segments].value.string_value |
Der Wert von total_segments wird in das Feld additional mit dem Schlüssel total_segments eingefügt. |
device_product |
additional.fields.[key=device_product].value.string_value |
Der Wert von device_product wird in das Feld additional mit dem Schlüssel device_product eingefügt. |
device_vendor |
additional.fields.[key=device_vendor].value.string_value |
Der Wert von device_vendor wird in das Feld additional mit dem Schlüssel device_vendor eingefügt. |
device_version |
metadata.product_version |
Der Wert von device_version wird direkt auf metadata.product_version zugeordnet. |
when |
metadata.event_timestamp |
Der Zeitstempel wird aus dem Feld when im UNIX-Format geparst, sofern vorhanden. |
who |
principal.user.userid |
Wenn das Feld who mit dem Regex-Muster übereinstimmt, wird die extrahierte userid principal.user.userid zugeordnet. Andernfalls wird das gesamte Feld who auf principal.user.userid zugeordnet. |
who |
principal.user.user_display_name |
Wenn das Feld who mit dem Regex-Muster übereinstimmt, wird der extrahierte Wert user_display_name principal.user.user_display_name zugeordnet. |
who_ip |
principal.ip |
Der Wert von who_ip wird direkt auf principal.ip zugeordnet. |
(Parser Logic) | metadata.log_type |
Der Protokolltyp ist auf BEYONDTRUST_REMOTE_ACCESS festgelegt. |
(Parser Logic) | metadata.product_name |
Der Produktname ist auf BeyondTrust Secure Remote Access festgelegt. |
(Parser Logic) | metadata.vendor_name |
Der Name des Anbieters ist auf BeyondTrust festgelegt. |
(Parser Logic) | security_result.summary |
Der Wert wird im Format User %{eventName} abgeleitet. |
(Parser Logic) | extensions.auth.mechanism |
Wenn method using password enthält, wird der Mechanismus auf USERNAME_PASSWORD festgelegt. Wenn method using elevate enthält, wird der Mechanismus auf REMOTE festgelegt. |
Änderungen
2022-09-30
Optimierung:
- Grok wurde geschrieben, um unparse syslogs zu analysieren.
device_vendor
wurdeadditional.fields
zugeordnet.event_name
wurdeadditional.fields
zugeordnet.device_product
wurdeadditional.fields
zugeordnet.externalKeyLabel
wurdeadditional.fields
zugeordnet.dstPriv
wurdeadditional.fields
zugeordnet.filePath
wurdetarget.file.full_path
zugeordnet.fsize
wurdetarget.file.size
zugeordnet.
2022-07-14
- Neu erstellter Parser.
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten