Ivanti Connect Secure-Protokolle (Pulse Secure) erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie Ivanti Connect Secure-Logs (Pulse Secure) mit Bindplane in Google Security Operations aufnehmen.

Ivanti Connect Secure (früher Pulse Secure) ist eine SSL-VPN-Lösung, die sicheren Remotezugriff auf Unternehmensanwendungen, ‑ressourcen und ‑netzwerke ermöglicht. Sie unterstützt die Multi-Faktor-Authentifizierung, die Überprüfung der Endpunktkonformität und detaillierte Zugriffsrichtlinien für Remote-Mitarbeiter und Partner. Hinweis: Pulse Secure wurde 2020 von Ivanti übernommen. Der Parser extrahiert Felder aus Logs, die im Syslog-Format von Pulse Secure VPN formatiert sind. Die Logmeldung wird mit Grok geparst und die Werte werden dem Unified Data Model (UDM) zugeordnet. 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 Ivanti Connect Secure-Admin-Konsole (Pulse Secure)

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: 'PULSE_SECURE_VPN'
            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 (PULSE_SECURE_VPN)

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 auf Ivanti Connect Secure (Pulse Secure) konfigurieren

  1. Melden Sie sich in der Admin-Konsole von Ivanti Connect Secure (früher Pulse Secure) an.
  2. Rufen Sie System > Log/Monitoring > Syslog Servers auf.
  3. Klicken Sie auf Neuer Server, um einen Syslog-Server hinzuzufügen.
  4. Geben Sie die folgenden Konfigurationsdetails an:
    • Servername/IP: Geben Sie die IP-Adresse des Bindplane-Agent-Hosts ein.
    • Server Port (Server-Port): Geben Sie 514 ein.
    • Einrichtung: Wählen Sie LOCAL0 (oder die gewünschte Einrichtung) aus.
    • Typ: Wählen Sie UDP aus.
  5. Wählen Sie im Bereich Ereignisfilter die weiterzuleitenden Ereignistypen aus:
    • Standard: Für das Standard-Syslog-Format
  6. Wählen Sie die Protokollkategorien aus:
    • Ereignisse: Wählen Sie Nutzerzugriffslogs, Administrator-Logs oder Sensorereignisse aus.
    • Schweregradebenen: Wählen Sie Info und höher aus, um alle Ereignisse zu protokollieren.
  7. Klicken Sie auf Änderungen speichern.
  8. Prüfen Sie in den Bindplane-Agent-Logs, ob Syslog-Nachrichten gesendet werden.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
Aktion security_result.action_details Direkt aus dem Feld „Aktion“ zugeordnet.
Anwendung principal.application Direkt aus dem Anwendungsfeld zugeordnet.
bytes_read network.received_bytes Direkt aus dem Feld „bytes_read“ zugeordnet und in eine vorzeichenlose Ganzzahl konvertiert.
bytes_written network.sent_bytes Direkt aus dem Feld „bytes_written“ zugeordnet und in eine vorzeichenlose Ganzzahl konvertiert.
client_host hauptkonto.hostname, hauptkonto.asset.hostname Direkt aus dem Feld „client_host“ zugeordnet.
CMD principal.process.command_line Direkt aus dem Feld „cmd“ zugeordnet.
connection_status security_result.detection_fields.value.string_value Direkt aus dem Feld „connection_status“ zugeordnet.
data_time metadata.event_timestamp.seconds Wird aus dem Feld „data_time“ mit verschiedenen Zeitstempelformaten (MM-TT-JJJJ HH:MM:SS Z, RFC 3339, ISO8601, MMM T HH:MM:SS, MMM T HH:MM:SS) geparst.
devname hauptkonto.hostname, hauptkonto.asset.hostname Direkt aus dem Feld „devname“ zugeordnet.
dstip target.ip, target.asset.ip Direkt aus dem Feld „dstip“ zugeordnet.
dstport target.port Direkt aus dem Feld „dstport“ zugeordnet und in eine Ganzzahl konvertiert.
dstcountry target.location.country_or_region Direkt aus dem Feld „dstcountry“ zugeordnet, wenn es nicht „Reserved“ oder leer ist.
Dauer network.session_duration.seconds Direkt aus dem Feld „duration“ (Dauer) zugeordnet und in eine Ganzzahl umgewandelt.
dvc intermediary.hostname oder intermediary.ip Wenn das Feld „dvc“ in eine IP-Adresse umgewandelt werden kann, wird es „intermediary.ip“ zugeordnet. Andernfalls wird sie intermediary.hostname zugeordnet.
dvc_hostname intermediary.hostname, principal.hostname, principal.asset.hostname oder intermediary.ip, principal.ip, principal.asset.ip Wenn das Feld „dvc_hostname“ in eine IP-Adresse umgewandelt werden kann, wird es den entsprechenden IP-Feldern zugeordnet. Andernfalls wird sie den entsprechenden Hostname-Feldern zugeordnet.
event_type metadata.product_event_type Direkt aus dem Feld „event_type“ zugeordnet.
failure_reason security_result.description Direkt aus dem Feld „failure_reason“ zugeordnet. Wenn die Meldung „because host“ enthält, wird dem Fehlergrund der Text „host“ vorangestellt.
has_principal event.idm.read_only_udm.principal (presence) Auf „true“ gesetzt, wenn Felder für den Hauptnutzer ausgefüllt sind, andernfalls „false“. Wird durch die Parserlogik abgeleitet.
has_target event.idm.read_only_udm.target (presence) Auf „true“ gesetzt, wenn Zielfelder ausgefüllt sind, andernfalls „false“. Wird durch die Parserlogik abgeleitet.
has_target_user event.idm.read_only_udm.target.user.userid (presence) Auf „true“ gesetzt, wenn „target.user.userid“ ausgefüllt ist, andernfalls „false“. Wird durch die Parserlogik abgeleitet.
host_ip principal.ip, principal.asset.ip Direkt aus dem Feld „host_ip“ zugeordnet.
host_mac principal.mac Direkt aus dem Feld „host_mac“ zugeordnet, wobei Bindestriche durch Doppelpunkte ersetzt werden.
http_method network.http.method Direkt aus dem Feld „http_method“ zugeordnet.
http_response network.http.response_code Direkt aus dem Feld „http_response“ zugeordnet und in eine Ganzzahl konvertiert.
info_desc about.labels.value Direkt aus dem Feld „info_desc“ zugeordnet.
ip_new target.ip, target.asset.ip Direkt aus dem Feld „ip_new“ zugeordnet.
level security_result.severity, security_result.severity_details security_result.severity wird aus dem Feld „level“ abgeleitet („error“/„warning“ –> HIGH, „notice“ –> MEDIUM, „information“/„info“ –> LOW). Der Rohwert der Ebene wird auch security_result.severity_details zugeordnet.
logid metadata.product_log_id Direkt aus dem Feld „logid“ zugeordnet.
locip principal.ip, principal.asset.ip Direkt aus dem Feld „locip“ zugeordnet.
Nachricht metadata.description Wird verwendet, um verschiedene Felder mit den Filtern „grok“ und „kv“ zu extrahieren. Wenn die Nachricht „EventID“ enthält, wird sie als Windows-Ereignisprotokoll verarbeitet.
message_info metadata.description Wird direkt metadata.description zugeordnet, sofern nicht anderweitig in spezifischeren Grok-Mustern verwendet.
msg metadata.product_event_type, metadata.description Wenn das Feld „msg“ vorhanden ist, wird der Produkttyp extrahiert und metadata.product_event_type zugeordnet. Die verbleibende Nachricht wird metadata.description zugeordnet.
msg_hostname hauptkonto.hostname, hauptkonto.asset.hostname Direkt aus dem Feld „msg_hostname“ zugeordnet.
msg_ip principal.ip, principal.asset.ip Direkt aus dem Feld „msg_ip“ zugeordnet.
msg_user_agent network.http.user_agent, network.http.parsed_user_agent, metadata.product_version Der User-Agent-String wird network.http.user_agent zugeordnet, der geparste User-Agent network.http.parsed_user_agent und die Produktversion (falls vorhanden) metadata.product_version.
network_duration network.session_duration.seconds Direkt aus dem Feld „network_duration“ zugeordnet und in eine Ganzzahl umgewandelt.
policyid security_result.rule_id Direkt aus dem Feld „policyid“ zugeordnet.
policyname security_result.rule_name Direkt aus dem Feld „policyname“ zugeordnet.
policytype security_result.rule_type Direkt aus dem Feld „policytype“ zugeordnet.
priority_code about.labels.value Direkt aus dem Feld „priority_code“ abgeleitet und auch verwendet, um „about.labels.value“ für den Schlüssel „Severity“ abzuleiten (siehe Logik).
prod_name metadata.product_name Direkt aus dem Feld „prod_name“ zugeordnet.
product_type metadata.product_event_type Direkt aus dem Feld „product_type“ zugeordnet.
product_version metadata.product_version Direkt aus dem Feld „product_version“ zugeordnet.
Proto network.ip_protocol Wird nach der Konvertierung in einen IP-Protokollnamen mithilfe einer Suche network.ip_protocol zugeordnet.
pwd principal.process.file.full_path Direkt aus dem Feld „pwd“ zugeordnet.
Bereich principal.group.attribute.labels.value Direkt aus dem Bereichsfeld zugeordnet.
rcvdbyte network.received_bytes Direkt aus dem Feld „rcvdbyte“ zugeordnet und in eine vorzeichenlose Ganzzahl konvertiert.
remip target.ip Direkt aus dem Feld „remip“ zugeordnet.
ressource_name target.resource.name Direkt aus dem Feld „resource_name“ abgeleitet, nachdem voran- und nachgestellte Leerzeichen und Bindestriche entfernt wurden.
resource_status security_result.description Direkt aus dem Feld „resource_status“ zugeordnet.
resource_user_group principal.user.group_identifiers Direkt aus dem Feld „resource_user_group“ zugeordnet.
resource_user_name principal.user.userid Direkt aus dem Feld „resource_user_name“ zugeordnet.
Rollen principal.user.group_identifiers Direkt aus dem Feld „Rollen“ zugeordnet.
sentbyte network.sent_bytes Direkt aus dem Feld „sentbyte“ zugeordnet und in eine vorzeichenlose Ganzzahl konvertiert.
session_id network.session_id Direkt aus dem Feld „session_id“ zugeordnet.
sessionid network.session_id Direkt aus dem Feld „sessionid“ zugeordnet.
srcip principal.ip, principal.asset.ip Direkt aus dem Feld „srcip“ zugeordnet.
srcport principal.port Direkt aus dem Feld „srcport“ zugeordnet und in eine Ganzzahl konvertiert.
srccountry principal.location.country_or_region Direkt aus dem Feld „srccountry“ zugeordnet, sofern es nicht „Reserved“ oder leer ist.
subtype metadata.product_event_type Wird in Verbindung mit „type“ verwendet, um „metadata.product_event_type“ zu bilden.
target_file target.file.full_path Direkt aus dem Feld „target_file“ zugeordnet.
target_host target.hostname, target.asset.hostname Direkt aus dem Feld „target_host“ zugeordnet.
target_ip target.ip, target.asset.ip Direkt aus dem Feld „target_ip“ zugeordnet.
target_port target.port Direkt aus dem Feld „target_port“ zugeordnet und in eine Ganzzahl konvertiert.
target_url target.url Direkt aus dem Feld „target_url“ übernommen.
Zeit metadata.event_timestamp.seconds Wird aus dem Zeitfeld im Format „JJJJ-MM-TT HH:mm:ss“ geparst.
Typ metadata.product_event_type Wird in Verbindung mit „subtype“ verwendet, um „metadata.product_event_type“ zu bilden.
u_event_source_ip principal.ip, principal.asset.ip oder target.ip Wenn „target_ip“ oder „target_host“ vorhanden sind, wird „u_event_source_ip“ „principal.ip“ und „principal.asset.ip“ zugeordnet. Andernfalls, wenn target_ip, target_host und target_url alle leer sind, wird u_event_source_ip target.ip zugeordnet.
u_observer_ip observer.ip Direkt aus dem Feld „u_observer_ip“ zugeordnet.
u_prin_ip principal.ip, principal.asset.ip Direkt aus dem Feld „u_prin_ip“ zugeordnet.
Nutzer target.user.userid Direkt aus dem Nutzerfeld zugeordnet.
user_agent network.http.user_agent, network.http.parsed_user_agent Der User-Agent-String wird network.http.user_agent und der geparste User-Agent network.http.parsed_user_agent zugeordnet.
user_group_identifier target.user.group_identifiers oder principal.user.group_identifiers Wird in den meisten Fällen target.user.group_identifiers zugeordnet. Wird den Ereignissen „IP-Änderung (USER_UNCATEGORIZED)“ und „Realm-Einschränkungen“ principal.user.group_identifiers zugeordnet.
user_ip principal.ip, principal.asset.ip Direkt aus dem Feld „user_ip“ zugeordnet. Wenn leer und „u_event_source_ip“ nicht leer ist, wird der Wert von „u_event_source_ip“ übernommen.
Nutzername principal.user.userid oder target.user.userid Wird in den meisten Fällen „principal.user.userid“ zugeordnet. Wird in bestimmten Szenarien target.user.userid zugeordnet, z.B. wenn „detect_user_logout_failed“ und „detect_policy_change_failed“ beide „false“ sind.
username_removed target.user.userid Direkt aus dem Feld „username_removed“ abgeleitet.
vd principal.administrative_domain Direkt aus dem Feld „vd“ zugeordnet.

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten