1Password-Protokolle erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie 1Password-Logs mit Bindplane in Google Security Operations aufnehmen. Der Parser wandelt Rohlogdaten im JSON-Format in ein strukturiertes Format um, das dem einheitlichen Datenmodell (Unified Data Model, UDM) von Google SecOps entspricht. Der Schwerpunkt liegt dabei auf der Normalisierung und Anreicherung von Ereignissen im Zusammenhang mit Anmeldeversuchen von Nutzern. Außerdem werden Details zum Nutzer, seinem Standort, Clientinformationen und dem Ergebnis des Versuchs extrahiert.

Hinweise

Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:

  • Google SecOps-Instanz
  • Windows 2016 oder höher oder Linux-Host mit systemd
  • Wenn die Ausführung hinter einem Proxy erfolgt, sind die Firewallports geöffnet.
  • Privilegierter Zugriff auf 1Password

Authentifizierungsdatei für die Aufnahme in Google SecOps abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie 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 > „Profil“ auf.
  3. Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.

BindPlane-Agent installieren

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
    

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
    

Zusätzliche Installationsressourcen

Weitere Installationsoptionen finden Sie im Installationsleitfaden.

BindPlane-Agent zum Erfassen von Syslog-Daten und Senden an Google SecOps konfigurieren

  1. 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).
  2. Bearbeiten Sie die Datei config.yamlso:

    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: 'ONEPASSWORD'
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Ersetzen Sie den Port und die IP-Adresse nach Bedarf in Ihrer Infrastruktur.

  4. Ersetzen Sie <customer_id> durch die tatsächliche Kunden-ID.

  5. Aktualisieren Sie /path/to/ingestion-authentication-file.json auf den Pfad, in dem die Authentifizierungsdatei im Abschnitt Authentifizierungsdatei für die Google SecOps-Aufnahme abrufen gespeichert wurde.

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 bindplane-agent
    
  • Wenn Sie den Bindplane-Agent unter Windows neu starten möchten, können Sie entweder die Konsole Dienste verwenden oder den folgenden Befehl eingeben:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

1Password-API-Token abrufen

  1. Melden Sie sich in der 1Password-Web-UI an.
  2. Rufen Sie Integrationen auf.
  3. Klicken Sie oben auf der Seite auf Verzeichnis.
  4. Geben Sie einen Namen für das Token ein und legen Sie das Ablaufdatum des Tokens fest.
  5. Klicken Sie unter Berichterstellung zu Ereignissen auf Sonstige.
  6. Wählen Sie die entsprechenden Ereignistypen aus.
  7. Klicken Sie auf Issue Token (Token ausstellen), um den Zugriffstoken-Schlüssel zu generieren.
  8. Klicken Sie auf In 1Password speichern und wählen Sie aus, in welchem Tresor Ihr Token gespeichert werden soll.
  9. Klicken Sie auf Integrationsdetails ansehen, um das Token aufzurufen.

Konfigurieren Sie einen Linux-Host für die Ausführung der folgenden Elemente:

  • Führen Sie dazu diesen Befehl aus:

      import datetime
      import requests
      import os
      import socket
      import json
    
    # For more information, check out the support page: https://support.1password.com/events-reporting
    
      api_token = os.environ.get('EVENTS_API_TOKEN')
      url = "https://events.1password.com"
      if not api_token:
          print("Please set the EVENTS_API_TOKEN environment variable.")
          exit(1)
      start_time = datetime.datetime.now() - datetime.timedelta(hours=24)
    
    # Define the bindplane agent details
    
      syslog_server_ip = <ip-address> # Replace with your Bindplane IP
      syslog_server_port = <port-number> # Replace with your Bindplane port
      headers = {
          "Content-Type": "application/json",
          "Authorization": f"Bearer {api_token}"
      payload = {
          "limit": 20,
          "start_time": start_time.astimezone().replace(microsecond=0).isoformat()
    
    # Alternatively, use the cursor returned from previous responses to get any new events
      # payload = { "cursor": cursor }
      try:
          r = requests.post(f"{url}/api/v1/signinattempts", headers=headers, json=payload)
          r.raise_for_status()  # Raise an exception if the request fails
          if r.status_code == requests.codes.ok:
    
    # Send the response to the bindplane server
              syslog_message = f"{json.dumps(r.json())}"
              with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
                  sock.connect((syslog_server_ip, syslog_server_port))
                  sock.sendall(f"{syslog_message}\n".encode())
          else:
              print(f"Error getting sign-in attempts: status code {r.status_code}")
      except requests.exceptions.RequestException as e:
          print(f"Request error: {e}")
      except Exception as e:
          print(f"Error during syslog logging: {e}")
    

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
Kategorie security_result.category_details Der Wert wird aus dem Feld category im Rohlog übernommen.
client.app_name principal.application Der Wert wird aus dem Feld client.app_name im Rohlog übernommen.
client.app_version metadata.product_version Der Wert wird aus dem Feld client.app_version im Rohlog übernommen.
client.ip_address principal.ip Der Wert wird aus dem Feld client.ip_address im Rohlog übernommen.
client.os_name principal.platform Der Wert wird aus dem Feld client.os_name im Rohlog übernommen und dem entsprechenden UDM-Plattformwert (LINUX, WINDOWS, MAC) zugeordnet.
client.os_version principal.platform_version Der Wert wird aus dem Feld client.os_version im Rohlog übernommen.
client.platform_name principal.resource.attribute.labels.key: platform_name, principal.resource.attribute.labels.value: Chrome Der Wert wird aus dem Feld client.platform_name im Rohlog übernommen.
client.platform_version principal.asset.platform_software.platform_version Der Wert wird aus dem Feld client.platform_version im Rohlog übernommen.
country principal.location.country_or_region Der Wert wird aus dem Feld country im Rohlog übernommen, wenn location.country nicht vorhanden ist.
item_uuid security_result.about.resource.attribute.labels.key: item_uuid, security_result.about.resource.attribute.labels.value: nx4f2lhmafhhfkvgid6ff2fyh4 Der Wert wird aus dem Feld item_uuid im Rohlog übernommen.
location.city principal.location.city Der Wert wird aus dem Feld location.city im Rohlog übernommen.
location.country principal.location.country_or_region Der Wert wird aus dem Feld location.country im Rohlog übernommen.
location.latitude principal.location.region_latitude Der Wert wird aus dem Feld location.latitude im Rohlog übernommen.
location.longitude principal.location.region_longitude Der Wert wird aus dem Feld location.longitude im Rohlog übernommen.
location.region principal.location.name Der Wert wird aus dem Feld location.region im Rohlog übernommen.
session.ip principal.ip Der Wert wird aus dem Feld session.ip im Rohlog übernommen.
session_uuid network.session_id Der Wert wird aus dem Feld session_uuid im Rohlog übernommen.
target_user.email target.user.email_addresses Der Wert wird aus dem Feld target_user.email im Rohlog übernommen.
target_user.uuid target.user.userid Der Wert wird aus dem Feld target_user.uuid im Rohlog übernommen.
timestamp metadata.event_timestamp.seconds, metadata.event_timestamp.nanos Der Wert wird aus dem Feld timestamp im Rohlog übernommen und in Sekunden und Nanosekunden umgerechnet.
Typ additional.fields.key: type, additional.fields.value.string_value: mfa_ok Der Wert wird aus dem Feld type im Rohlog übernommen.
user.email principal.user.email_addresses Der Wert wird aus dem Feld user.email im Rohlog übernommen.
nutzer.name principal.user.user_display_name Der Wert wird aus dem Feld user.name im Rohlog übernommen.
used_version additional.fields.key: used_version, additional.fields.value.string_value: 1 Der Wert wird aus dem Feld used_version im Rohlog übernommen.
uuid principal.resource.attribute.labels.key: uuid, principal.resource.attribute.labels.value: EPNGUJLHFVHCXMJL5LJQGXTENA Der Wert wird aus dem Feld uuid im Rohlog übernommen.
vault_uuid security_result.about.resource.attribute.labels.key: vault_uuid, security_result.about.resource.attribute.labels.value: lddjidoxtrxteclqhubbo3pkyq Der Wert wird aus dem Feld vault_uuid im Rohlog übernommen.
extensions.auth Für dieses Feld wird ein leeres Objekt erstellt.
metadata.event_type Der Wert wird auf USER_LOGIN gesetzt, wenn category gleich success oder firewall_reported_success ist, auf STATUS_UPDATE, wenn keine Nutzerinformationen vorhanden sind, und auf USER_UNCATEGORIZED in allen anderen Fällen.
metadata.log_type Der Wert wird auf ONEPASSWORD festgelegt.
metadata.product_name Der Wert wird auf ONEPASSWORD festgelegt.
metadata.vendor_name Der Wert wird auf ONEPASSWORD festgelegt.
security_result.action Der Wert wird auf ALLOW gesetzt, wenn category gleich success oder firewall_reported_success ist, auf BLOCK, wenn category gleich credentials_failed, mfa_failed, modern_version_failed oder firewall_failed ist, und bleibt andernfalls leer.

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