Fortinet FortiWeb-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie Fortinet FortiWeb-Logs mit Bindplane in Google Security Operations aufnehmen.
Der Parser extrahiert Felder aus KV-formatierten Fortinet FortiWeb-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 Fortinet FortiWeb-Weboberfläche
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: 'FORTINET_FORTIWEB' 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 (FORTINET_FORTIWEB)
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 für Fortinet FortiWeb konfigurieren
- Melden Sie sich in der Weboberfläche von FortiWeb an.
- Gehen Sie zu Log & Report > Log Config > Other Log Settings.
- Klicken Sie unter Syslog Policy (Syslog-Richtlinie) auf Create New (Neu erstellen), um eine neue Syslog-Richtlinie hinzuzufügen.
- Geben Sie die folgenden Konfigurationsdetails an:
- Richtlinienname: Geben Sie einen aussagekräftigen Namen ein, z. B.
Google-SecOps-Bindplane. - IP-Adresse: Geben Sie die IP-Adresse des Bindplane-Agent-Hosts ein.
- Port: Geben Sie
514ein. - Aktivieren: Wählen Sie Aktivieren aus.
- Einrichtung: Wählen Sie local0 oder die gewünschte Einrichtung aus.
- Log-Ebene: Wählen Sie Informationen (oder die gewünschte Ebene) aus.
- Richtlinienname: Geben Sie einen aussagekräftigen Namen ein, z. B.
- Aktivieren Sie im Abschnitt Logtyp Folgendes:
- Angriffslog
- Ereignisprotokoll
- Traffic-Log
- Klicken Sie zum Speichern auf OK.
- Prüfen Sie in den Bindplane-Agent-Logs, ob Syslog-Nachrichten gesendet werden.
UDM-Zuordnungstabelle
| Logfeld | UDM-Zuordnung | Logik |
|---|---|---|
| Aktion | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| Aktion | security_result.action_details | Wenn die Aktion „Zulassen“ oder „Akzeptieren“ lautet, wird „security_result.action_details“ auf „ALLOW“ gesetzt. Wenn die Aktion „Denied“, „deny“, „block“ oder „Block“ lautet, wird „security_result.action_details“ auf „BLOCK“ gesetzt. |
| App | network.application_protocol | Der Wert wird direkt zugeordnet, nachdem er in Großbuchstaben umgewandelt wurde. Nur wenn der Wert HTTPS, HTTP, DNS, DHCP oder SMB ist. |
| app_name | additional.fields[].key | Der Schlüssel ist auf „appName“ festgelegt. |
| app_name | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| backend_service | additional.fields[].key | Der Schlüssel ist auf „backend_service“ festgelegt. |
| backend_service | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| cat | security_result.category_details | Der Wert wird direkt zugeordnet. |
| client_level | security_result.category | Wenn „client_level“ auf „Malicious“ festgelegt ist, wird „security_result.category“ auf „NETWORK_MALICIOUS“ festgelegt. |
| cn1 | additional.fields[].value.string_value | Dem Feld „threatWeight“ zugeordnet. |
| cn1Label | additional.fields[].key | Der Schlüssel wird auf den Wert von cn1Label festgelegt. |
| cn2 | additional.fields[].value.string_value | Dem Längenfeld zugeordnet. |
| cn2Label | additional.fields[].key | Der Schlüssel wird auf den cn2Label-Wert festgelegt. |
| cn3 | additional.fields[].value.string_value | Dem Feld „signatureID“ zugeordnet. |
| cn3Label | additional.fields[].key | Der Schlüssel wird auf den cn3Label-Wert festgelegt. |
| cs1 | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| cs1Label | additional.fields[].key | Der Schlüssel ist auf den Wert von „cs1Label“ festgelegt. |
| cs1 | principal.user.product_object_id | Der Wert wird direkt zugeordnet, wenn „cs1Label“ mit „userID“ übereinstimmt (Groß-/Kleinschreibung wird nicht berücksichtigt). |
| cs2 | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| cs2Label | additional.fields[].key | Der Schlüssel ist auf den Wert von „cs2Label“ festgelegt. |
| cs2 | principal.user.userid | Der Wert wird direkt zugeordnet, wenn „cs2Label“ mit „userName“ (Groß-/Kleinschreibung wird nicht berücksichtigt) übereinstimmt und „suid“ leer ist. |
| cs3 | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| cs3Label | additional.fields[].key | Der Schlüssel ist auf den Wert von „cs3Label“ festgelegt. |
| cs3 | metadata.severity | Der Wert wird direkt zugeordnet, wenn „cs3Label“ gleich „level“ und „cs3“ nicht leer ist. |
| cs4 | additional.fields[].value.string_value | Wird dem Feld „subType“ zugeordnet. |
| cs4Label | additional.fields[].key | Der Schlüssel ist auf den Wert von „cs4Label“ festgelegt. |
| cs5 | additional.fields[].value.string_value | Dem Feld „threatLevel“ zugeordnet. |
| cs5Label | additional.fields[].key | Der Schlüssel wird auf den Wert von „cs5Label“ festgelegt. |
| cs6 | additional.fields[].value.string_value | Dem Feld „owaspTop10“ zugeordnet. |
| cs6Label | additional.fields[].key | Der Schlüssel ist auf den Wert von „cs6Label“ festgelegt. |
| Datum | metadata.event_timestamp.seconds | Wird mit der Zeit kombiniert und geparst, um Sekunden seit der Epoche zu generieren. |
| dev_id | principal.resource.id | Der Wert wird direkt zugeordnet. |
| devname | principal.resource.name | Der Wert wird direkt zugeordnet. |
| device_event_class_id | metadata.product_event_type | Wird beim CEF-Parsing verwendet. |
| device_product | metadata.product_name | Wird beim CEF-Parsing verwendet. |
| device_vendor | metadata.vendor_name | Wird beim CEF-Parsing verwendet. |
| device_version | metadata.product_version | Wird beim CEF-Parsing verwendet. |
| dhost | target.hostname | Der Wert wird direkt zugeordnet. |
| dpt | target.port | Der Wert wird direkt zugeordnet und in eine Ganzzahl konvertiert. |
| dst | target.ip | Der Wert wird direkt zugeordnet. |
| dst_port | target.port | Der Wert wird direkt zugeordnet und in eine Ganzzahl konvertiert. |
| dstepid | target.process.pid | Der Wert wird direkt zugeordnet. |
| dsteuid | target.user.userid | Der Wert wird direkt zugeordnet. |
| event_name | metadata.product_event_type | Wird beim CEF-Parsing verwendet. |
| http_agent | network.http.parsed_user_agent | Der Wert wird als User-Agent-String geparst. |
| http_method | network.http.method | Der Wert wird direkt zugeordnet. |
| http_refer | network.http.referral_url | Der Wert wird direkt zugeordnet. |
| http_session_id | network.session_id | Der Wert wird direkt zugeordnet. |
| http_url | target.url | Der Wert wird direkt zugeordnet. |
| http_version | metadata.product_version | Der Wert wird direkt zugeordnet. |
| length | additional.fields[].key | Der Schlüssel ist auf „length“ festgelegt. |
| length | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| log_type | metadata.log_type | Fest codiert auf „FORTINET_FORTIWEB“. |
| main_type | additional.fields[].key | Der Schlüssel ist auf „mainType“ festgelegt. |
| main_type | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| Nachricht | Verschiedene Felder | Mit grok- und kv-Filtern geparst, um verschiedene Felder zu extrahieren. |
| ml_allow_method | additional.fields[].key | Der Schlüssel ist auf „ml_allow_method“ gesetzt. |
| ml_allow_method | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| ml_arg_dbid | additional.fields[].key | Der Schlüssel ist auf „ml_arg_dbid“ festgelegt. |
| ml_arg_dbid | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| ml_domain_index | additional.fields[].key | Der Schlüssel ist auf „ml_domain_index“ festgelegt. |
| ml_domain_index | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| ml_log_arglen | additional.fields[].key | Der Schlüssel ist auf „ml_log_arglen“ gesetzt. |
| ml_log_arglen | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| ml_log_hmm_probability | additional.fields[].key | Der Schlüssel ist auf „ml_log_hmm_probability“ festgelegt. |
| ml_log_hmm_probability | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| ml_log_sample_arglen_mean | additional.fields[].key | Der Schlüssel ist auf „ml_log_sample_arglen_mean“ festgelegt. |
| ml_log_sample_arglen_mean | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| ml_log_sample_prob_mean | additional.fields[].key | Der Schlüssel ist auf „ml_log_sample_prob_mean“ festgelegt. |
| ml_log_sample_prob_mean | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| ml_svm_accuracy | additional.fields[].key | Der Schlüssel ist auf „ml_svm_accuracy“ festgelegt. |
| ml_svm_accuracy | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| ml_svm_log_main_types | additional.fields[].key | Der Schlüssel ist auf „ml_svm_log_main_types“ festgelegt. |
| ml_svm_log_main_types | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| ml_svm_log_match_types | additional.fields[].key | Der Schlüssel ist auf „ml_svm_log_match_types“ festgelegt. |
| ml_svm_log_match_types | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| ml_url_dbid | additional.fields[].key | Der Schlüssel ist auf „ml_url_dbid“ festgelegt. |
| ml_url_dbid | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| monitor_status | additional.fields[].key | Der Schlüssel ist auf „monitor_status“ festgelegt. |
| monitor_status | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| msg | metadata.description | Der Wert wird direkt zugeordnet. |
| owasp_top10 | additional.fields[].key | Der Schlüssel ist auf „owaspTop10“ festgelegt. |
| owasp_top10 | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| principal_app | principal.application | Der Wert wird direkt zugeordnet. |
| principal_host | principal.hostname | Der Wert wird direkt zugeordnet. |
| Proto | network.ip_protocol | Der Wert wird direkt zugeordnet, nachdem er in Großbuchstaben umgewandelt wurde. |
| Anfrage | target.url | Der Wert wird direkt zugeordnet. |
| requestMethod | network.http.method | Der Wert wird direkt zugeordnet. |
| rt | metadata.event_timestamp.seconds | Wird als Millisekunden seit der Epoche geparst und in Sekunden umgerechnet. |
| security_result.severity | security_result.severity | Abgeleitet von „severity_level“. Entspricht je nach Rohlogwert unterschiedlichen UDM-Schweregradwerten. Wenn keine Übereinstimmung gefunden wird, ist der Standardwert UNKNOWN_SEVERITY. |
| server_pool_name | additional.fields[].key | Der Schlüssel ist auf „server_pool_name“ festgelegt. |
| server_pool_name | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| Dienst | network.application_protocol | Der Wert wird direkt zugeordnet, nachdem er in Großbuchstaben umgewandelt wurde. |
| Dienst | target.application | Der Wert wird direkt zugeordnet, nachdem er in Großbuchstaben umgewandelt wurde, sofern er nicht HTTPS, HTTP, DNS, DHCP oder SMB ist. |
| die Ausprägung | security_result.severity | Wenn „severity“ leer ist und „cs3Label“ den Wert „level“ hat, wird der Wert von „cs3“ verwendet. Anschließend wird der Wert einem UDM-Schweregradwert (LOW, HIGH usw.) zugeordnet. |
| signature_id | security_result.rule_id | Der Wert wird direkt zugeordnet. |
| signature_subclass | security_result.detection_fields[].key | Der Schlüssel ist auf „signature_subclass“ festgelegt. |
| signature_subclass | security_result.detection_fields[].value | Der Wert wird direkt zugeordnet. |
| src | principal.ip | Der Wert wird direkt zugeordnet. |
| src_country | principal.location.country_or_region | Der Wert wird direkt zugeordnet. |
| src_ip | principal.ip | Der Wert wird direkt zugeordnet. |
| src_port | principal.port | Der Wert wird direkt zugeordnet und in eine Ganzzahl konvertiert. |
| srccountry | principal.location.country_or_region | Der Wert wird direkt zugeordnet. |
| sub_type | additional.fields[].key | Der Schlüssel ist auf „subType“ festgelegt. |
| sub_type | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| subtype | target.resource.resource_subtype | Der Wert wird direkt zugeordnet. |
| suid | principal.user.userid | Der Wert wird direkt zugeordnet. |
| threat_level | additional.fields[].key | Der Schlüssel ist auf „threatLevel“ festgelegt. |
| threat_level | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| threat_weight | security_result.detection_fields[].key | Der Schlüssel ist auf „threat_weight“ festgelegt. |
| threat_weight | security_result.detection_fields[].value | Der Wert wird direkt zugeordnet. |
| Zeit | metadata.event_timestamp.seconds | Wird mit dem Datum kombiniert und geparst, um Epochensekunden zu generieren. |
| user_id | principal.user.product_object_id | Der Wert wird direkt zugeordnet. |
| user_name | additional.fields[].key | Der Schlüssel ist auf „userName“ festgelegt. |
| user_name | additional.fields[].value.string_value | Der Wert wird direkt zugeordnet. |
| user_name | principal.user.userid | Der Wert wird direkt zugeordnet. |
| – | metadata.event_type | Auf „NETWORK_CONNECTION“ festgelegt, wenn sowohl „principal.ip“ als auch „target.ip“ vorhanden sind. Auf „USER_UNCATEGORIZED“ festlegen, wenn „principal.ip“ und „principal.user“ vorhanden sind. Wird auf „STATUS_UPDATE“ gesetzt, wenn nur „principal.ip“ vorhanden ist. Andernfalls auf „GENERIC_EVENT“ setzen. |
| – | metadata.log_type | Fest codiert auf „FORTINET_FORTIWEB“. |
| – | metadata.product_name | Je nach Protokollformat fest codiert auf „FORTINET FORTIWEB“ oder „FortiWEB Cloud“. |
| – | metadata.vendor_name | Je nach Protokollformat fest auf „FORTINET“ oder „Fortinet“ codiert. |
| – | principal.resource.resource_type | Fest codiert auf „DEVICE“, wenn „dev_id“ vorhanden ist. |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten