Forcepoint-Proxy-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie mit Bindplane Forcepoint-Proxy-Logs in Google Security Operations aufnehmen. Der Parser bereinigt zuerst die Eingabeprotokollnachricht und extrahiert Schlüssel/Wert-Paare mithilfe von Grok-Mustern und regulären Ausdrücken. Anschließend werden die extrahierten Felder basierend auf bestimmten Bedingungen und Feldwerten dem einheitlichen Datenmodell (Unified Data Model, UDM) zugeordnet. Dabei werden verschiedene Protokollformate und Grenzfälle berücksichtigt, um eine einheitliche Datendarstellung zu gewährleisten.
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 den Forcepoint-Proxy.
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: FORCEPOINT_WEBPROXY 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
Forcepoint Web Security Suite konfigurieren
- Melden Sie sich in der Forcepoint-Konsole an.
- Gehen Sie zu Web > Einstellungen > Allgemein.
- Klicken Sie auf SIEM-Integration.
- Klicken Sie auf das Kästchen SIEM-Integration für diesen Richtlinienserver aktivieren.
- Geben Sie die folgenden Konfigurationsdetails an:
- IP-Adresse oder Hostname: Geben Sie die IP-Adresse des Bindplane-Agents ein.
- Portnummer: Geben Sie die Portnummer ein, die auf dem Bindplane-Agenten konfiguriert ist, z. B.
514
. - Transportprotokoll: Wählen Sie das Protokoll UDP aus.
- SIEM-Format: Wählen Sie Syslog/CEF (Arcsight) aus.
- Klicken Sie auf OK.
- Klicken Sie auf Speichern und bereitstellen.
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
Aktion | security_result.summary | Wenn „action_msg“ nicht leer ist, wird es „security_result.summary“ zugeordnet. Andernfalls, wenn „action“ nicht leer ist, wird es security_result.summary zugeordnet. Andernfalls, wenn „act“ nicht leer ist, wird es security_result.summary zugeordnet. |
action_msg | security_result.summary | Wenn „action_msg“ nicht leer ist, wird es auf „security_result.summary“ zugeordnet. Andernfalls, wenn „action“ nicht leer ist, wird es security_result.summary zugeordnet. Andernfalls, wenn „act“ nicht leer ist, wird es security_result.summary zugeordnet. |
App | target.application | Wenn „destinationServiceName“ nicht leer ist, wird es „app_name“ zugeordnet. Andernfalls, wenn „app“ nicht leer ist und weder http noch HTTP enthält, wird es auf „app_name“ zugeordnet. Schließlich wird „app_name“ mit „target.application“ abgeglichen. |
bytes_in | network.received_bytes | Wenn „in“ nicht leer ist, wird es auf „bytes_in“ zugeordnet. Schließlich wird „bytes_in“ auf „network.received_bytes“ zugeordnet. |
bytes_out | network.sent_bytes | Wenn „out“ nicht leer ist, wird es „bytes_out“ zugeordnet. Schließlich wird „bytes_out“ zu „network.sent_bytes“ zugeordnet. |
Katze | security_result.category_details | Wenn „cat“ nicht leer ist, wird es „category“ zugeordnet. Schließlich wird „category“ auf „security_result.category_details“ zugeordnet. |
cn1 | security_result.detection_fields.value | Wenn cn1 nicht leer ist, wird es mit dem Schlüssel Disposition Number security_result.detection_fields.value zugeordnet. |
ContentType | target.file.mime_type | Wenn „contentType“ nicht leer ist, wird es „ContentType“ zugeordnet. Schließlich wird „ContentType“ auf „target.file.mime_type“ zugeordnet. |
cs1 | target_role.description | cs1 ist target_role.description zugeordnet. |
cs2 | security_result.category_details | Wenn „cs2“ nicht leer und nicht „0 “ ist, wird es mit dem Präfix „Dynamic Category: “ zu „security_result.category_details“ zugeordnet. |
cs3 | target.file.mime_type | cs3 wird target.file.mime_type zugeordnet. |
description | metadata.description | Wenn „description“ nicht leer ist, wird es mit „metadata.description“ abgeglichen. |
destinationServiceName | target.application | Wenn „destinationServiceName“ nicht leer ist, wird es „app_name“ zugeordnet. Schließlich wird „app_name“ mit „target.application“ verknüpft. |
deviceFacility | metadata.product_event_type | Wenn „product_event“ und „deviceFacility“ nicht leer sind, werden sie mit - zusammengeführt und metadata.product_event_type zugeordnet. Andernfalls wird „product_event“ mit „metadata.product_event_type“ abgeglichen. |
disposition | security_result.detection_fields.value | Wenn „disposition“ nicht leer ist, wird es dem Schlüssel „security_result.detection_fields.value“ mit dem Schlüssel „Disposition Number “ zugeordnet. |
dst | target.ip | Wenn „dst“ nicht leer ist und „dvchost“ leer ist, wird es auf „dst_ip“ zugeordnet. Schließlich wird „dst_ip“ mit „target.ip“ abgeglichen. |
dst_host | target.hostname | Wenn „dst“ nicht leer ist und „dvchost“ leer ist, wird es „dst_host“ zugeordnet. Schließlich wird „dst_host“ mit „target.hostname“ abgeglichen. |
dst_ip | target.ip | Wenn „dst“ nicht leer ist und „dvchost“ leer ist, wird es auf „dst_ip“ zugeordnet. Schließlich wird „dst_ip“ mit „target.ip“ abgeglichen. |
dst_port | target.port | Wenn „dst“ nicht leer ist und „dvchost“ leer ist, wird es dst_port zugeordnet. Schließlich wird „dst_port“ dem „target.port“ zugeordnet. |
Dauer | network.session_duration.seconds | Wenn „Dauer“ nicht leer und nicht 0 ist, wird es auf „network.session_duration.seconds“ zugeordnet. |
dvchost | intermediary.ip | Wenn „dvchost“ nicht leer ist, wird es auf „int_ip“ zugeordnet. Schließlich wird „int_ip“ der Variablen „intermediary.ip“ zugeordnet, wenn es sich um eine gültige IP-Adresse handelt. Andernfalls wird „intermediary.hostname“ verwendet. |
file_path | target.file.full_path | Wenn „file_path“ nicht leer ist, wird es auf „target.file.full_path“ zugeordnet. |
Host | principal.ip | Wenn „host“ nicht leer ist, wird es „src“ zugeordnet. Schließlich wird „src“ mit „principal.ip“ abgeglichen. |
http_method | network.http.method | Wenn „requestMethod“ nicht leer ist, wird es „http_method“ zugeordnet. Andernfalls, wenn „method“ nicht leer ist, wird es „http_method“ zugeordnet. Schließlich wird „http_method“ mit „network.http.method“ abgeglichen. |
http_proxy_status_code | network.http.response_code | Wenn „http_response“ leer oder „0 “ oder „- “ ist und „http_proxy_status_code“ nicht leer ist, wird es „network.http.response_code“ zugeordnet. |
http_response | network.http.response_code | Wenn „http_response“ nicht leer ist und weder „0 “ noch „- “ ist, wird es „network.http.response_code“ zugeordnet. |
http_user_agent | network.http.user_agent | Wenn „http_user_agent“ nicht leer und nicht „- “ ist, wird es auf „network.http.user_agent“ zugeordnet. |
in | network.received_bytes | Wenn „in“ nicht leer ist, wird es auf „bytes_in“ zugeordnet. Schließlich wird „bytes_in“ auf „network.received_bytes“ zugeordnet. |
int_host | intermediary.hostname | Wenn „int_ip“ nicht leer ist und „int_host“ nicht leer ist und sich von „int_ip“ unterscheidet, wird es mit „intermediary.hostname“ abgeglichen. |
int_ip | intermediary.ip | Wenn „dvchost“ nicht leer ist, wird es auf „int_ip“ zugeordnet. Schließlich wird „int_ip“ mit „intermediary.ip“ verknüpft, wenn es sich um eine gültige IP-Adresse handelt, andernfalls mit „intermediary.hostname“. |
level | target_role.name | Wenn „Ebene“ nicht leer ist und „Rolle“ leer ist, wird „Ebene“ der Rolle zugeordnet. Schließlich wird „role“ mit „target_role.name“ abgeglichen. |
log_level | security_result.severity | Wenn „severity“ den Wert „1 “ hat oder „log_level“ den Wert „info “ oder „message“ den Wert „notice “ enthält, wird „security_result.severity“ auf „INFORMATIONAL “ festgelegt. Wenn „severity“ 7 ist, wird „security_result.severity“ auf HIGH gesetzt. |
loginID | principal.user.userid | Wenn „loginID“ nicht leer ist, wird sie dem Nutzer zugeordnet. Wenn „user“ nicht leer ist und nicht „- “ lautet und auch keine „LDAP “ enthält, wird es „principal.user.userid“ zugeordnet. |
Methode | network.http.method | Wenn „requestMethod“ nicht leer ist, wird es „http_method“ zugeordnet. Andernfalls, wenn „method“ nicht leer ist, wird es „http_method“ zugeordnet. Schließlich wird „http_method“ mit „network.http.method“ abgeglichen. |
NatRuleId | security_result.detection_fields.value | Wenn „NatRuleId“ nicht leer ist, wird es dem Schlüssel „NatRuleId “ von „security_result.detection_fields.value“ zugeordnet. |
out | network.sent_bytes | Wenn „out“ nicht leer ist, wird es „bytes_out“ zugeordnet. Schließlich wird „bytes_out“ zu „network.sent_bytes“ zugeordnet. |
pid | target.process.pid | Wenn „pid“ nicht leer ist, wird sie auf „target.process.pid“ zugeordnet. |
Richtlinie | target_role.description | Wenn „Richtlinie“ nicht leer ist, wird es der Richtlinie zugeordnet. Wenn „Richtlinie“ nicht leer und nicht „- “ ist, wird sie „target_role.description“ zugeordnet. |
Richtlinie | target_role.description | Wenn „Richtlinie“ nicht leer ist, wird es der Richtlinie zugeordnet. Wenn „Richtlinie“ nicht leer und nicht „- “ ist, wird sie „target_role.description“ zugeordnet. |
product_event | metadata.product_event_type | Wenn „product“ nicht leer ist, wird es „product_event“ zugeordnet. Wenn „product_event“ und „deviceFacility“ nicht leer sind, werden sie mit - zusammengeführt und „metadata.product_event_type“ zugeordnet. Andernfalls wird „product_event“ mit „metadata.product_event_type“ abgeglichen. |
proxyStatus-Code | network.http.response_code | Wenn „http_response“ leer ist oder „0 “ oder „- “ enthält und „http_proxy_status_code“ leer ist und „proxyStatus-code“ nicht leer ist, wird es „network.http.response_code“ zugeordnet. |
refererUrl | network.http.referral_url | Wenn „referer_url“ nicht leer und nicht „- “ ist, wird es „network.http.referral_url“ zugeordnet. |
requestClientApplication | network.http.user_agent | Wenn „requestMethod“ nicht leer ist, wird es „http_user_agent“ zugeordnet. Schließlich wird „http_user_agent“ auf „network.http.user_agent“ zugeordnet. |
requestMethod | network.http.method | Wenn „requestMethod“ nicht leer ist, wird es „http_method“ zugeordnet. Schließlich wird „http_method“ mit „network.http.method“ abgeglichen. |
Rolle | target_role.name | Wenn „Ebene“ nicht leer ist und „Rolle“ leer ist, wird „Ebene“ der Rolle zugeordnet. Schließlich wird „role“ mit „target_role.name“ abgeglichen. |
RuleID | security_result.rule_id | Wenn „RuleID“ nicht leer ist, wird sie auf „security_result.rule_id“ zugeordnet. |
serverStatus-code | network.http.response_code | Wenn „http_response“ leer ist oder „0 “ oder „- “ enthält und „http_proxy_status_code“ leer ist und „proxyStatus-code“ nicht leer ist, wird es „network.http.response_code“ zugeordnet. |
die Ausprägung | security_result.severity | Wenn „severity“ den Wert „1 “ hat oder „log_level“ den Wert „info “ oder „message“ den Wert „notice “ enthält, wird „security_result.severity“ auf „INFORMATIONAL “ festgelegt. Wenn „severity“ 7 ist, wird „security_result.severity“ auf HIGH gesetzt. |
spt | principal.port | Wenn „spt“ nicht leer ist, wird es „src_port“ zugeordnet. Schließlich wird „src_port“ mit „principal.port“ abgeglichen. |
src | principal.ip | Wenn „src_host“ nicht leer ist, wird es „source_ip_temp“ zugeordnet. Wenn „source_ip_temp“ eine gültige IP-Adresse ist und „src“ leer ist, wird sie dieser zugeordnet. Wenn „host“ nicht leer ist, wird es „src“ zugeordnet. Schließlich wird „src“ mit „principal.ip“ abgeglichen. |
src_host | principal.hostname | Wenn „src_host“ nicht leer ist, wird es „source_ip_temp“ zugeordnet. Wenn „source_ip_temp“ keine gültige IP-Adresse ist, wird sie „principal.hostname“ zugeordnet. Wenn „source_ip_temp“ eine gültige IP-Adresse ist und „src“ leer ist, wird sie dieser zugeordnet. Schließlich wird „src“ mit „principal.ip“ abgeglichen. |
src_port | principal.port | Wenn „src_port“ nicht leer ist, wird es „principal.port“ zugeordnet. |
Nutzer | principal.user.userid | Wenn „loginID“ nicht leer ist, wird sie dem Nutzer zugeordnet. Wenn „suser“ nicht leer ist, wird es „user“ zugeordnet. Wenn „user“ nicht leer ist und nicht „- “ lautet und auch keine „LDAP “ enthält, wird es „principal.user.userid“ zugeordnet. |
URL | target.url | Wenn „url“ nicht leer ist, wird es „target.url“ zugeordnet. |
Nutzer | principal.user.userid | Wenn „loginID“ nicht leer ist, wird sie dem Nutzer zugeordnet. Wenn „suser“ nicht leer ist, wird es „user“ zugeordnet. Andernfalls, wenn „usrName“ nicht leer ist, wird es „user“ zugeordnet. Wenn „user“ nicht leer ist und nicht „- “ lautet und auch keine „LDAP “ enthält, wird es „principal.user.userid“ zugeordnet. |
usrName | principal.user.userid | Wenn „loginID“ nicht leer ist, wird sie dem Nutzer zugeordnet. Wenn „suser“ nicht leer ist, wird es „user“ zugeordnet. Andernfalls, wenn „usrName“ nicht leer ist, wird es „user“ zugeordnet. Wenn „user“ nicht leer ist und nicht „- “ lautet und auch keine „LDAP “ enthält, wird es „principal.user.userid“ zugeordnet. |
Wann? | metadata.event_timestamp | Wenn „when“ nicht leer ist, wird es analysiert und metadata.event_timestamp zugeordnet. |
metadata.log_type | Der Wert FORCEPOINT_WEBPROXY ist in „metadata.log_type“ hartcodiert. |
|
metadata.product_name | Der Wert Forcepoint Webproxy ist in „metadata.product_name“ hartcodiert. |
|
metadata.vendor_name | Der Wert Forcepoint ist in „metadata.vendor_name“ hartcodiert. |
|
network.application_protocol | Wenn dst_port 80 ist, wird „network.application_protocol“ auf HTTP festgelegt. Wenn dst_port 443 ist, wird „network.application_protocol“ auf HTTPS festgelegt. |
|
principal.user.group_identifiers | Wenn „user“ nicht leer ist und nicht „- “ und „LDAP “ enthält, wird der OU-Teil des Nutzerstrings extrahiert und „principal.user.group_identifiers“ zugeordnet. |
|
principal.user.user_display_name | Wenn „user“ nicht leer und nicht „- “ ist und „LDAP “ enthält, wird der Teil „username“ des Nutzerstrings extrahiert und „principal.user.user_display_name“ zugeordnet. |
|
security_result.action | Wenn „action_msg“, „action“ oder „act“ nicht leer sind, wird „sec_action“ basierend auf ihren Werten auf „ALLOW “ oder „BLOCK “ gesetzt. Schließlich wird „sec_action“ auf „security_result.action“ zugeordnet. |
|
security_result.category_details | Wenn „cat“ nicht leer ist, wird es „category“ zugeordnet. Schließlich wird „category“ auf „security_result.category_details“ zugeordnet. Wenn „cs2“ nicht leer und nicht „0 “ ist, wird es mit dem Präfix „Dynamic Category: “ zu „security_result.category_details“ zugeordnet. |
|
security_result.detection_fields.key | Der Wert Disposition Number ist in security_result.detection_fields.key hartcodiert, wenn „disposition“ oder „cn1“ zugeordnet wird. Der Wert NatRuleId ist bei der Zuordnung von NatRuleId hartcodiert in security_result.detection_fields.key. Der Wert Category Number ist bei der Zuordnung von „category_no“ in „security_result.detection_fields.key“ hartcodiert. |
|
security_result.severity | Wenn „severity“ den Wert „1 “ hat oder „log_level“ den Wert „info “ oder „message“ den Wert „notice “ enthält, wird „security_result.severity“ auf „INFORMATIONAL “ festgelegt. Wenn „severity“ 7 ist, wird „security_result.severity“ auf HIGH gesetzt. |
|
target_role.description | Wenn „Richtlinie“ nicht leer ist, wird es dieser zugeordnet. Wenn „Richtlinie“ nicht leer und nicht „- “ ist, wird sie „target_role.description“ zugeordnet. |
|
target_role.name | Wenn „Ebene“ nicht leer ist und „Rolle“ leer ist, wird „Ebene“ der Rolle zugeordnet. Schließlich wird „role“ mit „target_role.name“ abgeglichen. | |
category_no | security_result.detection_fields.value | Wenn „category_no“ nicht leer ist, wird es dem Schlüssel „security_result.detection_fields.value“ mit dem Schlüssel „Category Number “ zugeordnet. |
Änderungen
2025-01-16
Optimierung:
security_result.action
wurdeBLOCK
zugeordnet, wenns-action
=TCP_DENIED
.
2024-10-18
Optimierung:
- Unterstützung für das Parsen nicht geparster CSV-Protokolle hinzugefügt.
- Unterstützung für das Löschen ungültiger CSV-Protokolle hinzugefügt
host-url
wurdeprincipal.url
zugeordnet.
2024-07-10
Optimierung:
- Grok-Muster für neue Protokolle im KV-Format hinzugefügt.
username
wurdeprincipal.user.userid
zugeordnet.cs-uri
wurdetarget.url
zugeordnet.cs-uri-query
,time-taken
,filter-category
,cs-uri-path
,cs-uri-extension
undrs_content_type
wurdenadditional.fields
zugeordnet.- Wenn
sc-filter-result
=OBSERVED
ist , setzen Siesecurity_result.action
aufALLOW
. Istsc-filter-result
=DENIED
, setzen Siesecurity_result.action
aufBLOCK
. Andernfalls setzen Siesecurity_result.action
aufALLOW
. cs-auth-group
wurdeprincipal.user_group_identifiers
zugeordnet.cs-method
wurdenetwork.http.method
zugeordnet.sc-status
wurderesponse_code
zugeordnet.s-action
wurdesecurity_result.detection_fields
zugeordnet.srcport
wurdeprincipal.port
zugeordnet.dstport
wurdetarget.port
zugeordnet.sc-bytes
wurdenetwork.received_bytes
zugeordnet.cs-bytes
wurdenetwork.sent_bytes
zugeordnet.cs
wurdesecurity_result.summary
zugeordnet.cs_referer
wurdenetwork.http.referral_url
zugeordnet.cs-host
wurdetarget.hostname
zugeordnet.
2024-06-10
Optimierung:
- Unterstützung für Protokolle im CSV-Format hinzugefügt.
2023-06-12
Optimierung:
- Das Grok-Muster wurde geändert, um fehlgeschlagene Protokolle zu parsen, in denen einige Werte als „-“ vorliegen.
- Bedingungsüberprüfung für das Feld „http_response“ vor der Zuordnung hinzugefügt.
2022-08-11
Optimierung:
- Grok wurde so geändert, dass CEF-Logs ohne syslog-Header geparst werden.
2022-05-16
Optimierung:
- Zugeordnete Kategorienummer zu „security_result.detection_fields“
2022-05-05
Optimierung:
- Zuordnung für Felder hinzugefügt:
requestClientApplication
zu http.user_agent,proxyStatus-code
zu http.response_code,disposition
undcn1
zu security_result.detection_fields. - Das Feld „cs2“ wurde „security_result.category_details“ zugeordnet, wenn der Wert von „cs2Label“ „DynCat“ ist.
- Das Feld „cs2“ wurde dem Feld „security_result.detection_fields“ zugeordnet, wenn der Wert von „cs2Label“ „NatRuleId“ ist.
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten