WordPress-CMS-Protokolle erfassen
Ü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
- Gehen Sie zu SIEM-Einstellungen > Feeds.
- Klicken Sie auf Neu hinzufügen.
- Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. WordPress-Protokolle.
- Wählen Sie als Quelltyp Webhook aus.
- Wählen Sie WordPress als Logtyp aus.
- Klicken Sie auf Weiter.
- 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.
- Trennzeichen für die Aufteilung: Das Trennzeichen, mit dem Logzeilen getrennt werden, z. B.
- Klicken Sie auf Weiter.
- Überprüfen Sie die Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
- Klicken Sie auf Secret-Schlüssel generieren, um einen Secret-Schlüssel zur Authentifizierung dieses Feeds zu generieren.
- 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.
- Kopieren Sie auf dem Tab Details die Feedendpunkt-URL aus dem Feld Endpunktinformationen. Sie müssen diese Endpunkt-URL in Ihrer Clientanwendung angeben.
- Klicken Sie auf Fertig.
API-Schlüssel für den Webhook-Feed erstellen
Rufen Sie die Google Cloud Console > Anmeldedaten auf.
Klicken Sie auf Anmeldedaten erstellen und wählen Sie anschließend API-Schlüssel aus.
Beschränken Sie den API-Schlüsselzugriff auf die Google Security Operations API.
Endpunkt-URL angeben
- Geben Sie in Ihrer Clientanwendung die HTTPS-Endpunkt-URL an, die im Webhook-Feed angegeben ist.
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
- Installieren und aktivieren Sie das WP Webhooks-Plug-in (oder das von Ihnen ausgewählte Webhook-Plug-in) über das WordPress-Plug-in-Verzeichnis.
- Rufen Sie im WordPress-Administratormenü das Untermenü WP Webhooks auf, das sich in der Regel unter „Einstellungen“ befindet.
- Klicken Sie im Menü oben auf Daten senden.
- 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.
- Klicken Sie auf Webhook-URL hinzufügen.
- 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.
- 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.