WordPress-CMS-Protokolle erfassen

Unterstützt in:

Übersicht

Dieser Parser extrahiert WordPress-CMS-Logs aus JSON- oder Nur-Text-Nachrichten. Es verarbeitet sowohl JSON- als auch nicht JSON-formatierte Protokolle, analysiert relevante Felder und ordnet sie dem UDM zu, einschließlich Nutzerdetails, Netzwerkinformationen, Ressourcenattributen und Sicherheitsergebnisdetails. Der Parser führt auch mehrere Datentransformationen durch, z. B. die Umwandlung von Datentypen, das Zusammenführen von Feldern und die Verarbeitung bestimmter Protokollmuster für Kubernetes und andere Ressourcen.

Hinweise

  • Sie benötigen eine Google SecOps-Instanz.
  • Sie benötigen Berechtigungen für eine WordPress-Website.
  • Ein Plug-in, das die Webhook-Funktion ermöglicht (z. B. WP Webhooks).

Feed in Google SecOps für die Aufnahme von WordPress-Protokollen konfigurieren

  1. Gehen Sie zu SIEM-Einstellungen > Feeds.
  2. Klicken Sie auf Neu hinzufügen.
  3. Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. WordPress-Protokolle.
  4. Wählen Sie als Quelltyp Webhook aus.
  5. Wählen Sie WordPress als Logtyp aus.
  6. Klicken Sie auf Weiter.
  7. Optional: Geben Sie Werte für die folgenden Eingabeparameter an:
    • Trennzeichen für die Aufteilung: Das Trennzeichen, mit dem Logzeilen getrennt werden, z. B. \n.
    • Asset-Namespace: der Asset-Namespace.
    • Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet wird.
  8. Klicken Sie auf Weiter.
  9. Überprüfen Sie die Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
  10. Klicken Sie auf Secret-Schlüssel generieren, um einen Secret-Schlüssel zur Authentifizierung dieses Feeds zu generieren.
  11. Kopieren und speichern Sie den geheimen Schlüssel. Sie können sich diesen geheimen Schlüssel nicht noch einmal ansehen. Bei Bedarf können Sie einen neuen Secret-Schlüssel generieren. Dadurch wird der vorherige Secret-Schlüssel jedoch ungültig.
  12. Kopieren Sie auf dem Tab Details die Feedendpunkt-URL aus dem Feld Endpunktinformationen. Sie müssen diese Endpunkt-URL in Ihrer Clientanwendung angeben.
  13. Klicken Sie auf Fertig.

API-Schlüssel für den Webhook-Feed erstellen

  1. Rufen Sie die Google Cloud Console > Anmeldedaten auf.

    Zu den Anmeldedaten

  2. Klicken Sie auf Anmeldedaten erstellen und wählen Sie anschließend API-Schlüssel aus.

  3. Beschränken Sie den API-Schlüsselzugriff auf die Google Security Operations API.

Endpunkt-URL angeben

  1. Geben Sie in Ihrer Clientanwendung die HTTPS-Endpunkt-URL an, die im Webhook-Feed angegeben ist.
  2. Aktiviere die Authentifizierung, indem du den API-Schlüssel und den geheimen Schlüssel als Teil der benutzerdefinierten Kopfzeile im folgenden Format angibst:

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Empfehlung: Geben Sie den API-Schlüssel als Header an, anstatt ihn in der URL anzugeben. Wenn Ihr Webhook-Client keine benutzerdefinierten Header unterstützt, können Sie den API-Schlüssel und den geheimen Schlüssel mithilfe von Suchparametern im folgenden Format angeben:

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

Ersetzen Sie Folgendes:

  • ENDPOINT_URL: die URL des Feedendpunkts.
  • API_KEY: Der API-Schlüssel, mit dem Sie sich bei Google Security Operations authentifizieren.
  • SECRET: der geheime Schlüssel, den Sie zur Authentifizierung des Feeds generiert haben.

WordPress-Webhook konfigurieren

  1. Installieren und aktivieren Sie das WP Webhooks-Plug-in (oder das von Ihnen ausgewählte Webhook-Plug-in) über das WordPress-Plug-in-Verzeichnis.
  2. Rufen Sie im WordPress-Administratormenü das Untermenü WP Webhooks auf, das sich in der Regel unter „Einstellungen“ befindet.
  3. Klicken Sie im Menü oben auf Daten senden.
  4. Wählen Sie die WordPress-Aktion aus, die den Webhook auslösen soll. Gängige Beispiele sind publish_post (bei Veröffentlichung eines neuen Beitrags), user_register (bei Registrierung eines neuen Nutzers) oder comment_post (beim Posten eines neuen Kommentars). Das hängt von den Daten ab, die Sie auswählen und an Google SecOps senden.
  5. Klicken Sie auf Webhook-URL hinzufügen.
  6. Webhook konfigurieren:
    • Name: Geben Sie Ihrem Webhook einen aussagekräftigen Namen, z. B. Google SecOps-Feed.
    • Webhook-URL: Fügen Sie die Endpunkt-URL von Google SecOps ein.
  7. Klicken Sie auf Webhook speichern.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
ClientIP principal.ip Die IP-Adresse des Clients wird aus dem Feld ClientIP im Rohprotokoll extrahiert.
Code target.resource.attribute.labels.key Der Wert „Code“ wird als Schlüssel im target.resource.attribute.labels-Objekt zugewiesen.
Code target.resource.attribute.labels.value Der Wert des Felds Code aus dem Rohprotokoll wird dem target.resource.attribute.labels-Objekt zugewiesen.
CurrentUserID target.user.userid CurrentUserID aus dem Rohprotokoll wird in einen String konvertiert und dem Feld target.user.userid zugeordnet.
EditUserLink target.url EditUserLink aus dem Rohprotokoll wird dem Feld target.url zugeordnet.
EventType metadata.product_event_type EventType aus dem Rohprotokoll wird dem Feld metadata.product_event_type zugeordnet.
FirstName target.user.first_name FirstName aus dem Rohprotokoll wird dem Feld target.user.first_name zugeordnet.
insertId metadata.product_log_id insertId aus dem Rohprotokoll wird dem Feld metadata.product_log_id zugeordnet.
labels.compute.googleapis.com/resource_name additional.fields.key Der Wert „Ressourcenname“ wird als Schlüssel im additional.fields-Objekt zugewiesen.
labels.compute.googleapis.com/resource_name additional.fields.value.string_value Der Wert von labels.compute.googleapis.com/resource_name aus dem Rohprotokoll wird als Stringwert im additional.fields-Objekt zugewiesen.
labels.k8s-pod/app_kubernetes_io/instance target.resource.attribute.labels.key Der Wert „Kubernetes IO Instance“ wird als Schlüssel im target.resource.attribute.labels-Objekt zugewiesen.
labels.k8s-pod/app_kubernetes_io/instance target.resource.attribute.labels.value Der Wert von labels.k8s-pod/app_kubernetes_io/instance aus dem Rohprotokoll wird dem target.resource.attribute.labels-Objekt zugewiesen.
labels.k8s-pod/app_kubernetes_io/managed-by target.resource.attribute.labels.key Der Wert „Kubernetes IO Instance Manager“ wird als Schlüssel im target.resource.attribute.labels-Objekt zugewiesen.
labels.k8s-pod/app_kubernetes_io/managed-by target.resource.attribute.labels.value Der Wert von labels.k8s-pod/app_kubernetes_io/managed-by aus dem Rohprotokoll wird dem target.resource.attribute.labels-Objekt zugewiesen.
labels.k8s-pod/app_kubernetes_io/name target.resource.attribute.labels.key Der Wert „Kubernetes IO Instance Name“ wird als Schlüssel im target.resource.attribute.labels-Objekt zugewiesen.
labels.k8s-pod/app_kubernetes_io/name target.resource.attribute.labels.value Der Wert von labels.k8s-pod/app_kubernetes_io/name aus dem Rohprotokoll wird dem target.resource.attribute.labels-Objekt zugewiesen.
labels.k8s-pod/controller-revision-hash target.resource.attribute.labels.key Der Wert „Controller Revision Hash“ wird als Schlüssel im target.resource.attribute.labels-Objekt zugewiesen.
labels.k8s-pod/controller-revision-hash target.resource.attribute.labels.value Der Wert von labels.k8s-pod/controller-revision-hash aus dem Rohprotokoll wird dem target.resource.attribute.labels-Objekt zugewiesen.
labels.k8s-pod/helm_sh/chart target.resource.attribute.labels.key Der Wert „Kubernetes IO Instance Manager SH“ wird als Schlüssel im target.resource.attribute.labels-Objekt zugewiesen.
labels.k8s-pod/helm_sh/chart target.resource.attribute.labels.value Der Wert von labels.k8s-pod/helm_sh/chart aus dem Rohprotokoll wird dem target.resource.attribute.labels-Objekt zugewiesen.
labels.k8s-pod/k8s-app target.resource.attribute.labels.key Der Wert „Anwendung“ wird als Schlüssel im target.resource.attribute.labels-Objekt zugewiesen.
labels.k8s-pod/k8s-app target.resource.attribute.labels.value Der Wert von labels.k8s-pod/k8s-app aus dem Rohprotokoll wird dem target.resource.attribute.labels-Objekt zugewiesen.
labels.k8s-pod/pod-template-generation target.resource.attribute.labels.key Der Wert „Pod-Vorlagegenerierung“ wird als Schlüssel im target.resource.attribute.labels-Objekt zugewiesen.
labels.k8s-pod/pod-template-generation target.resource.attribute.labels.value Der Wert von labels.k8s-pod/pod-template-generation aus dem Rohprotokoll wird dem target.resource.attribute.labels-Objekt zugewiesen.
labels.k8s-pod/pod-template-hash target.resource.attribute.labels.key Der Wert „Pod-Vorlage-Hash“ wird als Schlüssel im target.resource.attribute.labels-Objekt zugewiesen.
labels.k8s-pod/pod-template-hash target.resource.attribute.labels.value Der Wert von labels.k8s-pod/pod-template-hash aus dem Rohprotokoll wird dem target.resource.attribute.labels-Objekt zugewiesen.
LastName target.user.last_name LastName aus dem Rohprotokoll wird dem Feld target.user.last_name zugeordnet.
logName target.resource.attribute.labels.key Der Wert „Log Name“ wird als Schlüssel im target.resource.attribute.labels-Objekt zugewiesen.
logName target.resource.attribute.labels.value Der Wert des Felds logName aus dem Rohprotokoll wird dem target.resource.attribute.labels-Objekt zugewiesen.
receiveTimestamp metadata.event_timestamp Der Wert „receiveTimestamp“ aus dem Rohprotokoll wird analysiert und dem Feld „metadata.event_timestamp“ zugeordnet.
resource.labels.cluster_name additional.fields.key Der Wert „Cluster Name“ wird als Schlüssel im additional.fields-Objekt zugewiesen.
resource.labels.cluster_name additional.fields.value.string_value Der Wert von resource.labels.cluster_name aus dem Rohprotokoll wird als Stringwert im additional.fields-Objekt zugewiesen.
resource.labels.cluster_name target.resource.resource_type Wenn resource.labels.cluster_name vorhanden ist, wird target.resource.resource_type der Wert „CLUSTER“ zugewiesen.
resource.labels.container_name metadata.product_event_type Wenn resource.type „k8s_container“ ist, werden der Wert von resource.labels.container_name und resource.labels.namespace_name zum Erstellen von metadata.product_event_type verwendet.
resource.labels.container_name target.resource.name Der Wert von resource.labels.container_name aus dem Rohprotokoll wird dem Feld target.resource.name zugewiesen.
resource.labels.location target.location.country_or_region Der Wert von resource.labels.location aus dem Rohprotokoll wird dem Feld target.location.country_or_region zugewiesen.
resource.labels.namespace_name additional.fields.key Der Wert „Namespace Name“ wird als Schlüssel im additional.fields-Objekt zugewiesen.
resource.labels.namespace_name additional.fields.value.string_value Der Wert von resource.labels.namespace_name aus dem Rohprotokoll wird als Stringwert im additional.fields-Objekt zugewiesen.
resource.labels.namespace_name metadata.product_event_type Wenn resource.type „k8s_container“ ist, werden der Wert von resource.labels.namespace_name und resource.labels.container_name zum Erstellen von metadata.product_event_type verwendet.
resource.labels.node_name metadata.product_event_type Wenn resource.type „k8s_node“ ist, wird der Wert von resource.labels.node_name zum Erstellen der metadata.product_event_type verwendet.
resource.labels.pod_name additional.fields.key Der Wert „Pod Name“ wird als Schlüssel im additional.fields-Objekt zugewiesen.
resource.labels.pod_name additional.fields.value.string_value Der Wert von resource.labels.pod_name aus dem Rohprotokoll wird als Stringwert im additional.fields-Objekt zugewiesen.
resource.labels.project_id additional.fields.key Der Wert „Project Id“ (Projekt-ID) wird als Schlüssel im additional.fields-Objekt zugewiesen.
resource.labels.project_id additional.fields.value.string_value Der Wert von resource.labels.project_id aus dem Rohprotokoll wird als Stringwert im additional.fields-Objekt zugewiesen.
resource.type target.resource.resource_subtype Der Wert von resource.type aus dem Rohprotokoll wird dem Feld target.resource.resource_subtype zugewiesen.
Roles target.user.user_role Das Feld Roles aus dem Rohprotokoll wird in Großbuchstaben konvertiert und dem Feld target.user.user_role zugeordnet.
SessionID network.session_id SessionID aus dem Rohprotokoll wird dem Feld network.session_id zugeordnet.
sev security_result.severity Der Wert des Felds sev bestimmt den Wert von security_result.severity. „INFO“ oder „NOTICE“ wird zu „INFORMATIONAL“, „WARN“ zu „MEDIUM“ und „ERR“ zu „ERROR“ zugeordnet.
TargetUsername target.user.user_display_name TargetUsername aus dem Rohprotokoll wird dem Feld target.user.user_display_name zugeordnet.
textPayload metadata.description Wenn resource.type „k8s_node“ ist, wird der Wert von textPayload dem Feld metadata.description zugeordnet.
textPayload network.application_protocol Das Protokoll (z. B. HTTP) wird mithilfe von Grok-Mustern aus dem Feld textPayload extrahiert.
textPayload network.http.method Die HTTP-Methode (z. B. GET, POST) wird mithilfe von Grok-Mustern aus dem Feld textPayload extrahiert.
textPayload network.http.referral_url Die URL wird mithilfe von Grok-Mustern aus dem Feld textPayload extrahiert.
textPayload network.http.response_code Der HTTP-Antwortcode wird mithilfe von Grok-Mustern aus dem Feld textPayload extrahiert und in eine Ganzzahl umgewandelt.
textPayload network.received_bytes Die empfangenen Bytes werden mithilfe von Grok-Mustern aus dem Feld textPayload extrahiert und in eine unge signed integer umgewandelt.
textPayload principal.ip Die Quell-IP-Adresse wird mithilfe von Grok-Mustern aus dem Feld textPayload extrahiert.
textPayload security_result.description Die Beschreibung wird mithilfe von Grok-Mustern aus dem Feld textPayload extrahiert.
textPayload target.file.full_path Der Pfad wird mithilfe von Grok-Mustern aus dem Feld textPayload extrahiert.
UserAgent network.http.user_agent UserAgent aus dem Rohprotokoll wird dem Feld network.http.user_agent zugeordnet. metadata.event_type ist der Wert „USER_RESOURCE_ACCESS“ zugewiesen.

Änderungen

2024-05-07

  • Fehlerkorrektur:
  • Die Parserlogik wurde geändert, um nicht geparste und gelöschte Protokolle zu verarbeiten.

2023-05-25

  • Neu erstellter Parser.