Fortinet FortiWeb-Logs erfassen

Unterstützt in:

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

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie die SIEM-Einstellungen > Collection Agents auf.
  3. 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

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie die SIEM-Einstellungen > Profile auf.
  3. 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

  1. Öffnen Sie die Eingabeaufforderung oder PowerShell als Administrator.
  2. Führen Sie dazu diesen Befehl aus:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Warten Sie, bis die Installation abgeschlossen ist.

  4. Ü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

  1. Öffnen Sie ein Terminal mit Root- oder Sudo-Berechtigungen.
  2. 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
    
  3. Warten Sie, bis die Installation abgeschlossen ist.

  4. Ü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.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Konfigurationsdatei bearbeiten

  • Ersetzen Sie den gesamten Inhalt von config.yaml durch 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 Sie udplog für UDP-Syslog oder tcplog fü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
      • 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.
      • log_type: Logtyp genau wie in Chronicle (FORTINET_FORTIWEB)

Konfigurationsdatei speichern

  • Speichern Sie die Datei nach der Bearbeitung:
    • Linux: Drücken Sie Ctrl+O, dann Enter und dann Ctrl+X.
    • Windows: Klicken Sie auf Datei > Speichern.

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-collector
    
    1. Prüfen Sie, ob der Dienst ausgeführt wird:

        sudo systemctl status observiq-otel-collector
      
    2. Logs 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-collector
      
    • Services-Konsole:

      1. Drücken Sie Win+R, geben Sie services.msc ein und drücken Sie die Eingabetaste.
      2. Suchen Sie nach observIQ OpenTelemetry Collector.
      3. Klicken Sie mit der rechten Maustaste und wählen Sie Neu starten aus.

      4. Prüfen Sie, ob der Dienst ausgeführt wird:

        sc query observiq-otel-collector
        
      5. Logs auf Fehler prüfen:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Syslog-Weiterleitung für Fortinet FortiWeb konfigurieren

  1. Melden Sie sich in der Weboberfläche von FortiWeb an.
  2. Gehen Sie zu Log & Report > Log Config > Other Log Settings.
  3. Klicken Sie unter Syslog Policy (Syslog-Richtlinie) auf Create New (Neu erstellen), um eine neue Syslog-Richtlinie hinzuzufügen.
  4. 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 514 ein.
    • 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.
  5. Aktivieren Sie im Abschnitt Logtyp Folgendes:
    • Angriffslog
    • Ereignisprotokoll
    • Traffic-Log
  6. Klicken Sie zum Speichern auf OK.
  7. 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