Collecter les journaux d'alertes Microsoft Defender pour le cloud
Présentation
Cet analyseur extrait les données des alertes de sécurité des journaux au format JSON de Microsoft Defender for Cloud. Il transforme et mappe les champs de journaux bruts dans l'UDM Google SecOps, en gérant différents types de données et structures imbriquées, tout en enrichissant les données avec un contexte et des libellés supplémentaires pour une meilleure analyse.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes :
- Instance Google SecOps.
- Accès privilégié à Microsoft Defender pour le cloud.
Configurer des flux
Il existe deux points d'entrée différents pour configurer les flux dans la plate-forme Google SecOps :
- Paramètres SIEM> Flux
- Plate-forme de contenu > Packs de contenu
Configurer des flux à partir de Paramètres SIEM > Flux
Pour configurer un flux, procédez comme suit :
- Accédez à Paramètres SIEM > Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Sur la page suivante, cliquez sur Configurer un seul flux.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux des alertes Microsoft Defender pour le cloud).
- Sélectionnez Webhook comme type de source.
- Sélectionnez Microsoft Defender for Cloud comme Type de journal.
- Cliquez sur Suivant.
- Facultatif : spécifiez les valeurs des paramètres d'entrée suivants :
- Délimiteur de fractionnement : délimiteur utilisé pour séparer les lignes de journaux, tel que
\n
.
- Délimiteur de fractionnement : délimiteur utilisé pour séparer les lignes de journaux, tel que
- Cliquez sur Suivant.
- Vérifiez la configuration du flux sur l'écran Finaliser, puis cliquez sur Envoyer.
- Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.
- Copiez et stockez la clé secrète. Vous ne pourrez plus afficher cette clé secrète. Si nécessaire, vous pouvez générer une nouvelle clé secrète, mais l'ancienne deviendra obsolète.
- Dans l'onglet Détails, copiez l'URL du point de terminaison du flux à partir du champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.
- Cliquez sur OK.
Configurer des flux depuis le Hub de contenu
Indiquez les valeurs des champs suivants :
- Délimiteur de fractionnement : délimiteur utilisé pour séparer les lignes de journaux, tel que
\n
.
Options avancées
- Nom du flux : valeur préremplie qui identifie le flux.
- Type de source : méthode utilisée pour collecter les journaux dans Google SecOps.
- Espace de noms de l'élément : espace de noms associé au flux.
Libellés d'ingestion : libellés appliqués à tous les événements de ce flux.
Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.
Copiez et stockez la clé secrète. Vous ne pourrez plus afficher cette clé secrète. Si nécessaire, vous pouvez générer une nouvelle clé secrète, mais l'ancienne deviendra obsolète.
Dans l'onglet Détails, copiez l'URL du point de terminaison du flux à partir du champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.
Créer une clé API pour le flux de webhook
Accédez à la consoleGoogle Cloud > Identifiants.
Cliquez sur Créer des identifiants, puis sélectionnez Clé API.
Restreignez l'accès à la clé API à l'API Google Security Operations.
Spécifier l'URL du point de terminaison
- Dans votre application cliente, spécifiez l'URL du point de terminaison HTTPS fournie dans le flux de webhook.
Activez l'authentification en spécifiant la clé API et la clé secrète dans l'en-tête personnalisé au format suivant :
X-goog-api-key = API_KEY X-Webhook-Access-Key = SECRET
Recommandation : Spécifiez la clé API en tant qu'en-tête au lieu de la spécifier dans l'URL. Si votre client de webhook n'accepte pas les en-têtes personnalisés, vous pouvez spécifier la clé API et la clé secrète à l'aide de paramètres de requête au format suivant :
ENDPOINT_URL?key=API_KEY&secret=SECRET
Remplacez les éléments suivants :
ENDPOINT_URL
: URL du point de terminaison du flux.API_KEY
: clé API pour s'authentifier auprès de Google Security Operations.SECRET
: clé secrète que vous avez générée pour authentifier le flux.
Créer une application Azure Logic
- Connectez-vous au portail Azure (https://portal.azure.com).
- Cliquez sur Créer une ressource et recherchez Logic App.
- Cliquez sur Créer pour lancer le processus de déploiement.
- Configurer l'application logique :
- Nom : donnez un nom descriptif à l'application logique (par exemple, GoogleSecOpsWebhook).
- Abonnement : sélectionnez l'abonnement approprié.
- Groupe de ressources : choisissez un groupe de ressources existant ou créez-en un.
- Emplacement : choisissez l'emplacement le plus proche de votre environnement.
- Analyse de journaux : activez cette option si vous souhaitez enregistrer les données de diagnostic pour l'application logique.
- Cliquez sur Examiner + Créer pour créer l'application logique.
- Cliquez sur Créer pour déployer l'application logique.
Configurer la connexion Webhook Azure Logic App
- Accédez à l'application logique créée à l'étape précédente.
- Cliquez sur Outils de développement > Concepteur d'applications logiques.
- Cliquez sur Ajouter un déclencheur.
Recherchez Microsoft Defender pour le cloud > Lorsqu'une alerte Microsoft Defender pour le cloud est créée ou déclenchée comme déclencheur.
Cliquez sur Créer, puis suivez les instructions pour vous authentifier.
Cliquez sur Insérer une nouvelle étape pour ajouter une étape au workflow.
Cliquez sur Ajouter une action.
Recherchez HTT.
Sélectionnez HTTP comme action.
Configurez l'action HTTP :
- URI : saisissez l'URL du point de terminaison de l'API Google SecOps.
- Méthode :
POST
- Ajouter un en-tête Content-Type : définissez
Content-Type
comme clé d'en-tête etapplication/json
comme valeur d'en-tête. Cela indique à Google SecOps le format des données envoyées. - Ajouter une clé API aux requêtes : définissez
key
comme première clé de requête et<API_KEY>
comme valeur de requête.API_KEY
correspond à la valeur de la clé API générée lors de la configuration du flux Google SecOps. - Ajouter une clé secrète aux requêtes : définissez
secret
comme deuxième clé de requête et<SECRET_KEY>
comme valeur de requête.SECRET_KEY
correspond à la clé secrète générée lors de la configuration du flux Google SecOps. - Définissez le corps à partir de l'étape précédente : cliquez sur Saisir le contenu de la requête > cliquez sur Saisir les données des étapes précédentes (bouton avec l'icône en forme d'éclair à gauche du champ de saisie).
Cliquez sur Enregistrer.
Configurer le webhook des alertes Microsoft Defender pour le cloud
- Accédez à Microsoft Defender pour le cloud.
- Cliquez sur Gestion > Automatisation des workflows.
- Cliquez sur Ajouter une automatisation de workflow.
- Nom : attribuez un nom descriptif à la règle d'automatisation (par exemple, ForwardAlertsToGoogleSecOps).
- Groupe de ressources : choisissez un groupe de ressources existant.
- Type de données Defender for Cloud : sélectionnez Alerte de sécurité.
- Gravité de l'alerte : sélectionnez Tout sélectionner.
- Afficher les instances Logic Apps des abonnements suivants : choisissez l'abonnement dans lequel l'application logique a été créée.
- Sélectionner l'application logique : choisissez l'application logique créée lors des étapes précédentes.
- Cliquez sur Créer pour enregistrer l'automatisation du workflow.
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
AlertLink |
principal.resource.attribute.labels.AlertLink.value |
Mappé directement. |
AlertName |
security_result.rule_name |
Mappé directement. |
AlertSeverity |
security_result.severity |
Mappé directement si la valeur est HIGH, MEDIUM, LOW, CRITICAL ou UNKNOWN_SEVERITY. Sinon, elle est mappée sur security_result.severity_details . La valeur est convertie en majuscules avant la comparaison. |
AlertType |
security_result.threat_name |
Mappé directement. |
CompromisedEntity |
principal.resource.attribute.labels.CompromisedEntity.value |
Mappé directement. |
Description |
security_result.description |
Mappé directement. |
DisplayName |
security_result.summary |
Mappé directement. |
EndTime |
about.resource.attribute.labels.EndTime.value |
Mappé directement. |
Entities[].Location.City |
principal.location.city |
Mappé directement. |
Entities[].Location.CountryName |
principal.location.country_or_region |
Mappé directement. |
ExtendedLinks[].Category |
about.resource.attribute.labels.extendedLink_Category.value |
Mappé directement. |
ExtendedLinks[].Href |
about.resource.attribute.labels.extendedLink_Href.value |
Mappé directement. |
ExtendedLinks[].Label |
about.resource.attribute.labels.extendedLink_Label.value |
Mappé directement. |
ExtendedLinks[].Type |
about.resource.attribute.labels.extendedLink_Type.value |
Mappé directement. |
ExtendedProperties.Account Session Id |
network.session_id |
Directement mappé après avoir été renommé en accountSessionId . |
ExtendedProperties.Alert Id |
metadata.product_log_id |
Directement mappé après avoir été renommé en alertId . |
ExtendedProperties.Authentication type |
extensions.auth.auth_details |
Directement mappé après avoir été renommé en authenticationType . |
ExtendedProperties.Client Application |
principal.application |
Directement mappé après avoir été renommé en clientApplication . |
ExtendedProperties.Client Hostname |
principal.asset.hostname , principal.hostname |
Directement mappé après avoir été renommé en clientHostName . |
ExtendedProperties.Client IP address |
principal.asset.ip , principal.ip |
Directement mappé après avoir été renommé en clientIpAddress . |
ExtendedProperties.Client IP location |
principal.location.country_or_region |
Directement mappé après avoir été renommé en clientIpLocation . |
ExtendedProperties.Client Location |
principal.location.country_or_region |
Directement mappé après avoir été renommé en clientLocation . |
ExtendedProperties.Client Principal Name |
principal.user.userid |
Directement mappé après avoir été renommé en clientPrincipalName . |
ExtendedProperties.Compromised Host |
principal.asset.hostname , principal.hostname |
Directement mappé après avoir été renommé en compromisedHost . |
ExtendedProperties.Suspicious Command Line |
target.process.command_line |
Directement mappé après avoir été renommé en suspiciousCommandLine . |
ExtendedProperties.Suspicious Process |
target.process.file.full_path |
Directement mappé après avoir été renommé en suspiciousProcess . |
ExtendedProperties.Suspicious Process Id |
target.process.pid |
Directement mappé après avoir été renommé en suspiciousProcessId . |
ExtendedProperties.User agent |
network.http.user_agent |
Directement mappé après avoir été renommé en userAgent . |
ExtendedProperties.User Name |
principal.user.user_display_name |
Directement mappé après avoir été renommé en userName . |
ExtendedProperties.resourceType |
principal.resource.name |
Mappé directement. |
IsIncident |
security_result.detection_fields.IsIncident.value |
Mappé directement. Converti en chaîne. |
ProcessingEndTime |
about.resource.attribute.labels.ProcessingEndTime.value |
Mappé directement. |
ProductName |
metadata.product_name |
Mappé directement. |
ResourceId |
principal.resource.product_object_id |
Mappé directement. |
SourceSystem |
security_result.detection_fields.SourceSystem.value |
Mappé directement. |
StartTime |
about.resource.attribute.labels.StartTime.value |
Mappé directement. |
Status |
security_result.detection_fields.Status.value |
Mappé directement. |
SystemAlertId |
metadata.product_log_id |
Mappé directement. |
Tactics |
security_result.attack_details.tactics.name |
Mappé directement. |
TenantId |
additional.fields.TenantId.string_value |
Mappé directement. |
TimeGenerated |
about.resource.attribute.labels.TimeGenerated.value |
Mappé directement. |
VendorName |
metadata.vendor_name |
Mappé directement. |
WorkspaceResourceGroup |
target.resource.attribute.labels.WorkspaceResourceGroup.value |
Mappé directement. |
WorkspaceSubscriptionId |
target.resource.attribute.labels.WorkspaceSubscriptionId.value |
Mappé directement. |
_Internal_WorkspaceResourceId |
target.resource.product_object_id |
Mappé directement. |
properties.alertDisplayName |
security_result.rule_name |
Mappé directement. |
properties.alertType |
security_result.threat_name |
Mappé directement. |
properties.alertUri |
principal.resource.attribute.labels.AlertUri.value |
Mappé directement. |
properties.correlationKey |
principal.resource.attribute.labels.correlationKey.value |
Mappé directement. |
properties.description |
security_result.description |
Mappé directement. |
properties.endTimeUtc |
additional.fields.EndTime.string_value |
Mappé directement. |
properties.entities[].location.city |
principal.location.city |
Mappé directement. |
properties.entities[].location.countryName |
principal.location.country_or_region |
Mappé directement. |
properties.entities[].location.latitude |
principal.location.region_coordinates.latitude |
Mappé directement. Convertie en float. |
properties.entities[].location.longitude |
principal.location.region_coordinates.longitude |
Mappé directement. Convertie en float. |
properties.extendedProperties.alert_Id |
metadata.product_log_id |
Mappé directement. |
properties.extendedProperties.clientApplication |
principal.application |
Mappé directement. |
properties.extendedProperties.clientIpAddress |
principal.asset.ip , principal.ip |
Mappé directement. Adresse IP analysée. |
properties.extendedProperties.clientLocation |
principal.location.country_or_region |
Mappé directement. |
properties.extendedProperties.clientPrincipalName |
principal.user.userid |
Mappé directement. |
properties.extendedProperties.compromisedEntity |
principal.resource.attribute.labels.CompromisedEntity.value |
Mappé directement. |
properties.extendedProperties.resourceType |
principal.resource.name |
Mappé directement. |
properties.IsIncident |
security_result.detection_fields.isIncident.value |
Mappé directement. Converti en chaîne. |
properties.productName |
metadata.product_name |
Mappé directement. |
properties.resourceIdentifiers[].<key> |
additional.fields.<key>_<index>.string_value |
Mappé directement. Les clés $id et type sont ajoutées avec l'index de l'élément dans le tableau. |
properties.severity |
security_result.severity |
Mappé directement si la valeur est HIGH, MEDIUM, LOW, CRITICAL ou UNKNOWN_SEVERITY. Sinon, elle est mappée sur security_result.severity_details . La valeur est convertie en majuscules avant la comparaison. |
properties.startTimeUtc |
additional.fields.StartTime.string_value |
Mappé directement. |
properties.status |
security_result.detection_fields.Status.value |
Mappé directement. |
properties.timeGeneratedUtc |
additional.fields.TimeGenerated.string_value |
Mappé directement. Définissez la valeur sur "MICROSOFT_DEFENDER_CLOUD_ALERTS" si elle n'est pas fournie dans le journal. À définir sur "MICROSOFT_DEFENDER_CLOUD_ALERTS". Définissez la valeur sur "USER_RESOURCE_ACCESS" si le principal ou la cible sont présents, sinon définissez-la sur "GENERIC_EVENT". |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.