Microsoft Defender for Cloud-Benachrichtigungsprotokolle erfassen
Übersicht
Dieser Parser extrahiert Daten zu Sicherheitswarnungen aus den JSON-formatierten Logs von Microsoft Defender for Cloud. Es transformiert und ordnet die Rohprotokollfelder dem UDM von Google SecOps zu, wobei verschiedene Datentypen und verschachtelte Strukturen verarbeitet werden. Außerdem werden die Daten mit zusätzlichem Kontext und Labels angereichert, um die Analyse zu verbessern.
Hinweise
Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:
- Google SecOps-Instanz.
- Berechtigter Zugriff auf Microsoft Defender for Cloud.
Feeds einrichten
Es gibt zwei verschiedene Einstiegspunkte zum Einrichten von Feeds in der Google SecOps-Plattform:
- SIEM-Einstellungen > Feeds
- Content Hub> Content-Pakete
Feeds über „SIEM-Einstellungen“ > „Feeds“ einrichten
So konfigurieren Sie einen Feed:
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf Neuen Feed hinzufügen.
- Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
- Geben Sie im Feld Feed name (Feedname) einen Namen für den Feed ein, z. B. Microsoft Defender for Cloud alert logs (Microsoft Defender for Cloud-Benachrichtigungsprotokolle).
- Wählen Sie Webhook als Quelltyp aus.
- Wählen Sie Microsoft Defender for Cloud als Log type (Protokolltyp) aus.
- Klicken Sie auf Weiter.
- Optional: Geben Sie Werte für die folgenden Eingabeparameter an:
- Trennzeichen für Aufteilung: Das Trennzeichen, das zum Trennen von Logzeilen verwendet wird, z. B.
\n
.
- Trennzeichen für Aufteilung: Das Trennzeichen, das zum Trennen von Logzeilen verwendet wird, z. B.
- Klicken Sie auf Weiter.
- Prüfen Sie die Feedkonfiguration auf dem Bildschirm Finalize (Abschließen) und klicken Sie dann auf Submit (Senden).
- Klicken Sie auf Geheimen Schlüssel generieren, um einen geheimen Schlüssel zur Authentifizierung dieses Feeds zu generieren.
- Kopieren Sie den geheimen Schlüssel und speichern Sie ihn. Sie können diesen geheimen Schlüssel nicht noch einmal aufrufen. Bei Bedarf können Sie einen neuen geheimen Schlüssel generieren. Dadurch wird der vorherige geheime Schlüssel jedoch ungültig.
- Kopieren Sie auf dem Tab Details die Feed-Endpunkt-URL aus dem Feld Endpunktinformationen. Sie müssen diese Endpunkt-URL in Ihrer Clientanwendung angeben.
- Klicken Sie auf Fertig.
Feeds über den Content Hub einrichten
Geben Sie Werte für die folgenden Felder an:
- Trennzeichen für Aufteilung: Das Trennzeichen, das zum Trennen von Logzeilen verwendet wird, z. B.
\n
.
Erweiterte Optionen
- Feedname: Ein vorausgefüllter Wert, der den Feed identifiziert.
- Quelltyp: Methode, die zum Erfassen von Logs in Google SecOps verwendet wird.
- Asset-Namespace: Der Namespace, der dem Feed zugeordnet ist.
Aufnahmelabels: Labels, die auf alle Ereignisse aus diesem Feed angewendet werden.
Klicken Sie auf Geheimen Schlüssel generieren, um einen geheimen Schlüssel zur Authentifizierung dieses Feeds zu generieren.
Kopieren Sie den geheimen Schlüssel und speichern Sie ihn. Sie können diesen geheimen Schlüssel nicht noch einmal aufrufen. Bei Bedarf können Sie einen neuen geheimen Schlüssel generieren. Dadurch wird der vorherige geheime Schlüssel jedoch ungültig.
Kopieren Sie auf dem Tab Details die Feed-Endpunkt-URL aus dem Feld Endpunktinformationen. Sie müssen diese Endpunkt-URL in Ihrer Clientanwendung angeben.
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.
Schränken Sie den API-Schlüsselzugriff auf die Google Security Operations API ein.
Endpunkt-URL angeben
- Geben Sie in Ihrer Clientanwendung die HTTPS-Endpunkt-URL an, die im Webhook-Feed bereitgestellt wird.
Aktivieren Sie die Authentifizierung, indem Sie den API-Schlüssel und den geheimen Schlüssel als Teil des benutzerdefinierten Headers im folgenden Format angeben:
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 Headern unterstützt, können Sie den API-Schlüssel und den geheimen Schlüssel mit Suchparametern im folgenden Format angeben:
ENDPOINT_URL?key=API_KEY&secret=SECRET
Ersetzen Sie Folgendes:
ENDPOINT_URL
: Die URL des Feed-Endpunkts.API_KEY
: Der API-Schlüssel für die Authentifizierung bei Google Security Operations.SECRET
: Der geheime Schlüssel, den Sie zur Authentifizierung des Feeds generiert haben.
Azure Logic App erstellen
- Melden Sie sich im Azure-Portal (https://portal.azure.com) an.
- Klicken Sie auf Ressource erstellen und suchen Sie nach Logic App.
- Klicken Sie auf Erstellen, um den Bereitstellungsprozess zu starten.
- Logic App konfigurieren:
- Name: Geben Sie einen aussagekräftigen Namen für die Logic App an, z. B. GoogleSecOpsWebhook.
- Abo: Wählen Sie das entsprechende Abo aus.
- Ressourcengruppe: Wählen Sie eine vorhandene Ressourcengruppe aus oder erstellen Sie eine neue.
- Standort: Wählen Sie den Standort aus, der Ihrer Umgebung am nächsten ist.
- Log Analytics: Aktivieren Sie diese Option, wenn Sie Diagnosedaten für die Logic App protokollieren möchten.
- Klicken Sie auf Prüfen und erstellen, um die Logic App zu erstellen.
- Klicken Sie auf Erstellen, um die Logic App bereitzustellen.
Webhook-Verbindung für Azure Logic App konfigurieren
- Rufen Sie die im vorherigen Schritt erstellte Logic App auf.
- Klicken Sie auf Entwicklungstools > Logic App Designer.
- Klicken Sie auf Trigger hinzufügen.
Suchen Sie nach Microsoft Defender for Cloud > When a Microsoft Defender for Cloud alert is created or triggered (Wenn eine Microsoft Defender for Cloud-Benachrichtigung erstellt oder ausgelöst wird) als Trigger.
Klicken Sie auf Neu erstellen und folgen Sie der Anleitung zur Authentifizierung.
Klicken Sie auf Neuen Schritt einfügen, um dem Workflow einen neuen Schritt hinzuzufügen.
Klicken Sie auf Aktion hinzufügen.
Suchen Sie nach HTT.
Wählen Sie HTTP als Aktion aus.
HTTP-Aktion konfigurieren:
- URI: Hier geben Sie die Google SecOps API-Endpunkt-URL ein.
- Methode:
POST
- Content-Type-Header hinzufügen: Legen Sie
Content-Type
als Header-Schlüssel undapplication/json
als Header-Wert fest. So wird Google SecOps das Format der gesendeten Daten mitgeteilt. - API-Schlüssel zu Anfragen hinzufügen: Legen Sie
key
als ersten Anfrageschlüssel und<API_KEY>
als Anfrage-Wert fest.API_KEY
ist der generierte API-Schlüsselwert bei der Konfiguration des Google SecOps-Feeds. - Secret Key zu Anfragen hinzufügen: Legen Sie
secret
als zweiten Anfrageschlüssel und<SECRET_KEY>
als Anfrage-Wert fest.SECRET_KEY
ist der generierte Secret Key während der Konfiguration des Google SecOps-Feeds. - Body aus dem vorherigen Schritt festlegen: Klicken Sie auf Anfrageinhalt eingeben > klicken Sie auf Daten aus den vorherigen Schritten eingeben (Schaltfläche mit Blitzsymbol links neben dem Eingabefeld).
Klicken Sie auf Speichern.
Webhook für Microsoft Defender Cloud-Benachrichtigungen konfigurieren
- Rufen Sie Microsoft Defender for Cloud auf.
- Klicken Sie auf Verwaltung > Workflow-Automatisierung.
- Klicken Sie auf Workflow-Automatisierung hinzufügen.
- Name: Geben Sie einen aussagekräftigen Namen für die Automatisierungsregel an, z. B. ForwardAlertsToGoogleSecOps.
- Ressourcengruppe: Wählen Sie eine vorhandene Ressourcengruppe aus.
- Defender for Cloud-Datentyp: Wählen Sie Sicherheitswarnung aus.
- Schweregrad der Benachrichtigung: Wählen Sie Alle auswählen aus.
- Logic App-Instanzen aus den folgenden Abos anzeigen: Wählen Sie das Abo aus, in dem die Logic App erstellt wurde.
- Logic App auswählen: Wählen Sie die Logic App aus, die Sie in den vorherigen Schritten erstellt haben.
- Klicken Sie auf Erstellen, um die Workflow-Automatisierung zu speichern.
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
AlertLink |
principal.resource.attribute.labels.AlertLink.value |
Direkt zugeordnet. |
AlertName |
security_result.rule_name |
Direkt zugeordnet. |
AlertSeverity |
security_result.severity |
Direkt zugeordnet, wenn der Wert HIGH, MEDIUM, LOW, CRITICAL oder UNKNOWN_SEVERITY ist. Andernfalls wird security_result.severity_details zugeordnet. Der Wert wird vor dem Vergleich in Großbuchstaben umgewandelt. |
AlertType |
security_result.threat_name |
Direkt zugeordnet. |
CompromisedEntity |
principal.resource.attribute.labels.CompromisedEntity.value |
Direkt zugeordnet. |
Description |
security_result.description |
Direkt zugeordnet. |
DisplayName |
security_result.summary |
Direkt zugeordnet. |
EndTime |
about.resource.attribute.labels.EndTime.value |
Direkt zugeordnet. |
Entities[].Location.City |
principal.location.city |
Direkt zugeordnet. |
Entities[].Location.CountryName |
principal.location.country_or_region |
Direkt zugeordnet. |
ExtendedLinks[].Category |
about.resource.attribute.labels.extendedLink_Category.value |
Direkt zugeordnet. |
ExtendedLinks[].Href |
about.resource.attribute.labels.extendedLink_Href.value |
Direkt zugeordnet. |
ExtendedLinks[].Label |
about.resource.attribute.labels.extendedLink_Label.value |
Direkt zugeordnet. |
ExtendedLinks[].Type |
about.resource.attribute.labels.extendedLink_Type.value |
Direkt zugeordnet. |
ExtendedProperties.Account Session Id |
network.session_id |
Direkt nach dem Umbenennen in accountSessionId zugeordnet. |
ExtendedProperties.Alert Id |
metadata.product_log_id |
Direkt nach dem Umbenennen in alertId zugeordnet. |
ExtendedProperties.Authentication type |
extensions.auth.auth_details |
Direkt nach dem Umbenennen in authenticationType zugeordnet. |
ExtendedProperties.Client Application |
principal.application |
Direkt nach dem Umbenennen in clientApplication zugeordnet. |
ExtendedProperties.Client Hostname |
principal.asset.hostname , principal.hostname |
Direkt nach dem Umbenennen in clientHostName zugeordnet. |
ExtendedProperties.Client IP address |
principal.asset.ip , principal.ip |
Direkt nach dem Umbenennen in clientIpAddress zugeordnet. |
ExtendedProperties.Client IP location |
principal.location.country_or_region |
Direkt nach dem Umbenennen in clientIpLocation zugeordnet. |
ExtendedProperties.Client Location |
principal.location.country_or_region |
Direkt nach dem Umbenennen in clientLocation zugeordnet. |
ExtendedProperties.Client Principal Name |
principal.user.userid |
Direkt nach dem Umbenennen in clientPrincipalName zugeordnet. |
ExtendedProperties.Compromised Host |
principal.asset.hostname , principal.hostname |
Direkt nach dem Umbenennen in compromisedHost zugeordnet. |
ExtendedProperties.Suspicious Command Line |
target.process.command_line |
Direkt nach dem Umbenennen in suspiciousCommandLine zugeordnet. |
ExtendedProperties.Suspicious Process |
target.process.file.full_path |
Direkt nach dem Umbenennen in suspiciousProcess zugeordnet. |
ExtendedProperties.Suspicious Process Id |
target.process.pid |
Direkt nach dem Umbenennen in suspiciousProcessId zugeordnet. |
ExtendedProperties.User agent |
network.http.user_agent |
Direkt nach dem Umbenennen in userAgent zugeordnet. |
ExtendedProperties.User Name |
principal.user.user_display_name |
Direkt nach dem Umbenennen in userName zugeordnet. |
ExtendedProperties.resourceType |
principal.resource.name |
Direkt zugeordnet. |
IsIncident |
security_result.detection_fields.IsIncident.value |
Direkt zugeordnet. In String umgewandelt. |
ProcessingEndTime |
about.resource.attribute.labels.ProcessingEndTime.value |
Direkt zugeordnet. |
ProductName |
metadata.product_name |
Direkt zugeordnet. |
ResourceId |
principal.resource.product_object_id |
Direkt zugeordnet. |
SourceSystem |
security_result.detection_fields.SourceSystem.value |
Direkt zugeordnet. |
StartTime |
about.resource.attribute.labels.StartTime.value |
Direkt zugeordnet. |
Status |
security_result.detection_fields.Status.value |
Direkt zugeordnet. |
SystemAlertId |
metadata.product_log_id |
Direkt zugeordnet. |
Tactics |
security_result.attack_details.tactics.name |
Direkt zugeordnet. |
TenantId |
additional.fields.TenantId.string_value |
Direkt zugeordnet. |
TimeGenerated |
about.resource.attribute.labels.TimeGenerated.value |
Direkt zugeordnet. |
VendorName |
metadata.vendor_name |
Direkt zugeordnet. |
WorkspaceResourceGroup |
target.resource.attribute.labels.WorkspaceResourceGroup.value |
Direkt zugeordnet. |
WorkspaceSubscriptionId |
target.resource.attribute.labels.WorkspaceSubscriptionId.value |
Direkt zugeordnet. |
_Internal_WorkspaceResourceId |
target.resource.product_object_id |
Direkt zugeordnet. |
properties.alertDisplayName |
security_result.rule_name |
Direkt zugeordnet. |
properties.alertType |
security_result.threat_name |
Direkt zugeordnet. |
properties.alertUri |
principal.resource.attribute.labels.AlertUri.value |
Direkt zugeordnet. |
properties.correlationKey |
principal.resource.attribute.labels.correlationKey.value |
Direkt zugeordnet. |
properties.description |
security_result.description |
Direkt zugeordnet. |
properties.endTimeUtc |
additional.fields.EndTime.string_value |
Direkt zugeordnet. |
properties.entities[].location.city |
principal.location.city |
Direkt zugeordnet. |
properties.entities[].location.countryName |
principal.location.country_or_region |
Direkt zugeordnet. |
properties.entities[].location.latitude |
principal.location.region_coordinates.latitude |
Direkt zugeordnet. In Gleitkommazahl konvertiert. |
properties.entities[].location.longitude |
principal.location.region_coordinates.longitude |
Direkt zugeordnet. In Gleitkommazahl konvertiert. |
properties.extendedProperties.alert_Id |
metadata.product_log_id |
Direkt zugeordnet. |
properties.extendedProperties.clientApplication |
principal.application |
Direkt zugeordnet. |
properties.extendedProperties.clientIpAddress |
principal.asset.ip , principal.ip |
Direkt zugeordnet. Wird als IP-Adresse geparst. |
properties.extendedProperties.clientLocation |
principal.location.country_or_region |
Direkt zugeordnet. |
properties.extendedProperties.clientPrincipalName |
principal.user.userid |
Direkt zugeordnet. |
properties.extendedProperties.compromisedEntity |
principal.resource.attribute.labels.CompromisedEntity.value |
Direkt zugeordnet. |
properties.extendedProperties.resourceType |
principal.resource.name |
Direkt zugeordnet. |
properties.IsIncident |
security_result.detection_fields.isIncident.value |
Direkt zugeordnet. In String umgewandelt. |
properties.productName |
metadata.product_name |
Direkt zugeordnet. |
properties.resourceIdentifiers[].<key> |
additional.fields.<key>_<index>.string_value |
Direkt zugeordnet. An die Schlüssel $id und type wird der Index des Elements im Array angehängt. |
properties.severity |
security_result.severity |
Direkt zugeordnet, wenn der Wert HIGH, MEDIUM, LOW, CRITICAL oder UNKNOWN_SEVERITY ist. Andernfalls wird security_result.severity_details zugeordnet. Der Wert wird vor dem Vergleich in Großbuchstaben umgewandelt. |
properties.startTimeUtc |
additional.fields.StartTime.string_value |
Direkt zugeordnet. |
properties.status |
security_result.detection_fields.Status.value |
Direkt zugeordnet. |
properties.timeGeneratedUtc |
additional.fields.TimeGenerated.string_value |
Direkt zugeordnet. Wird auf „MICROSOFT_DEFENDER_CLOUD_ALERTS“ gesetzt, wenn im Log kein Wert angegeben ist. Legen Sie diesen Wert auf „MICROSOFT_DEFENDER_CLOUD_ALERTS“ fest. Auf „USER_RESOURCE_ACCESS“ festgelegt, wenn „principal“ oder „target“ vorhanden sind, andernfalls auf „GENERIC_EVENT“. |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten