Collecter les journaux du détecteur de menaces Google Cloud DNS
Ce document explique comment ingérer les journaux Google Cloud DNS Threat Detector dans Google Security Operations à l'aide de Google Cloud Storage V2.
DNS Armor, qui repose sur Infoblox, est un service entièrement géré qui assure la sécurité de la couche DNS pour vos charges de travail Google Cloud. Son détecteur de menaces avancé est conçu pour détecter les activités malveillantes au tout début de la chaîne d'attaque (la requête DNS), sans complexité opérationnelle ni impact sur les performances. Une fois une menace détectée, vous pouvez obtenir des insights pratiques sur les menaces DNS grâce à Cloud Logging.
Lorsque vous activez un détecteur de menaces DNS pour un projet, DNS Armor envoie de manière sécurisée vos journaux de requêtes DNS liées à Internet au moteur d'analyse basé sur Google Cloud et reposant sur Infoblox. Ce moteur utilise un mélange de flux de données d'intelligence sur les menaces et d'analyse comportementale basée sur l'IA pour identifier les menaces. Toute activité malveillante détectée génère un journal de menaces DNS Armor, qui est ensuite renvoyé à votre projet et écrit dans Cloud Logging pour que vous puissiez le consulter et prendre les mesures nécessaires.
Avant de commencer
Assurez-vous de remplir les conditions préalables suivantes :
- Instance Google SecOps.
- Projet GCP avec l'API Cloud Storage activée.
- Autorisations permettant de créer et de gérer des buckets GCS.
- Autorisations permettant de gérer les stratégies IAM sur les buckets GCS.
- L'API Network Security est activée dans votre projet.
- Rôles IAM requis pour activer un détecteur de menaces DNS.
- Autorisations permettant d'afficher les journaux des menaces DNS :
resourcemanager.projects.get,resourcemanager.projects.list,networksecurity.dnsThreatDetectors.get,networksecurity.dnsThreatDetectors.listou rôlesroles/networksecurity.dnsThreatDetectorVieweretroles/logging.viewer.
Créer un bucket Google Cloud Storage
- Accédez à Google Cloud Console.
- Sélectionnez votre projet ou créez-en un.
- Dans le menu de navigation, accédez à Cloud Storage> Buckets.
- Cliquez sur Créer un bucket.
Fournissez les informations de configuration suivantes :
Paramètre Valeur Nommer votre bucket Saisissez un nom unique (par exemple, dns-threat-detector-logs).Type d'emplacement Choisissez en fonction de vos besoins (région, birégion ou multirégion). Emplacement Sélectionnez l'emplacement (par exemple, us-central1).Classe de stockage Standard (recommandé pour les journaux auxquels vous accédez fréquemment) Access control (Contrôle des accès) Uniforme (recommandé) Outils de protection Facultatif : Activer la gestion des versions des objets ou la règle de conservation Cliquez sur Créer.
Créer un détecteur de menaces DNS
Cette section explique comment créer un détecteur de menaces DNS pour surveiller les réseaux VPC en vue de détecter des activités DNS malveillantes liées à Internet.
Vous ne pouvez activer qu'un seul détecteur de menaces DNS par projet.
Utiliser la console Google Cloud
- Dans la console Google Cloud, accédez à la page Détection avancée des menaces.
- Cliquez sur Créer un détecteur de menaces DNS.
- Attribuez un nom à votre détecteur de menaces DNS.
- Sélectionnez Tous les réseaux VPC du projet.
- Cliquez sur Créer.
Utiliser l'outil de ligne de commande gcloud
Vous pouvez également créer un détecteur de menaces DNS à l'aide de la commande gcloud :
gcloud beta network-security dns-threat-detectors create my-dns-threat-detector \
--location=global \
--project=PROJECT_ID \
--provider="infoblox"
Remplacez :
- my-dns-threat-detector : nom de votre détecteur de menaces DNS.
- PROJECT_ID : ID de votre projet.
Configurer Cloud Logging pour exporter les journaux du détecteur de menaces DNS vers GCS
Les journaux des menaces DNS Armor sont écrits dans Cloud Logging. Vous devez configurer un récepteur de journaux pour exporter ces journaux vers votre bucket GCS.
- Dans la console Google Cloud, accédez à Journalisation > Routeur de journaux.
- Cliquez sur Créer un récepteur.
- Fournissez les informations de configuration suivantes :
- Nom du récepteur : saisissez un nom descriptif (par exemple,
dns-threat-detector-to-gcs). - Description du récepteur : description facultative.
- Nom du récepteur : saisissez un nom descriptif (par exemple,
- Cliquez sur Suivant.
- Dans la section Sélectionner le service de récepteur :
- Service de récepteur : sélectionnez Bucket Cloud Storage.
- Sélectionner un bucket Cloud Storage : sélectionnez le bucket (par exemple,
dns-threat-detector-logs) dans le menu déroulant.
- Cliquez sur Suivant.
Dans la section Sélectionner les journaux à inclure dans le récepteur, saisissez la requête de filtre suivante :
resource.type="networksecurity.googleapis.com/DnsThreatDetector" logName="projects/PROJECT_ID/logs/networksecurity.googleapis.com%2FDnsThreatDetector"
Remplacez PROJECT_ID par l'ID de votre projet GCP.
- Cliquez sur Suivant.
- Vérifiez la configuration, puis cliquez sur Créer un récepteur.
Utiliser l'outil de ligne de commande gcloud
Vous pouvez également créer un récepteur de journaux à l'aide de la commande gcloud :
gcloud logging sinks create dns-threat-detector-to-gcs \
gs://dns-threat-detector-logs \
--log-filter='resource.type="networksecurity.googleapis.com/DnsThreatDetector" AND logName="projects/PROJECT_ID/logs/networksecurity.googleapis.com%2FDnsThreatDetector"' \
--project=PROJECT_ID
Remplacez :
- dns-threat-detector-logs : nom de votre bucket GCS.
- PROJECT_ID : ID de votre projet GCP.
Récupérer le compte de service Google SecOps
Google SecOps utilise un compte de service unique pour lire les données de votre bucket GCS. Vous devez accorder à ce compte de service l'accès à votre bucket.
Configurer un flux dans Google SecOps pour ingérer les journaux du détecteur de menaces Google Cloud DNS
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Cliquez sur Configurer un flux unique.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
GCP DNS Threat Detector Logs). - Sélectionnez Google Cloud Storage V2 comme Type de source.
Sélectionnez Détecteur de menaces Google Cloud DNS comme Type de journal.
Cliquez sur Obtenir un compte de service.
Une adresse e-mail unique pour le compte de service s'affiche, par exemple :
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopiez cette adresse e-mail. Vous en aurez besoin lors de la tâche suivante.
Cliquez sur Suivant.
Spécifiez les valeurs des paramètres d'entrée suivants :
URL du bucket Storage : saisissez l'URI du bucket GCS avec le préfixe du chemin d'accès :
gs://dns-threat-detector-logs/Remplacez :
dns-threat-detector-logs: nom de votre bucket GCS.
- Option de suppression de la source : sélectionnez l'option de suppression de votre choix :
- Jamais : ne supprime jamais aucun fichier après les transferts (recommandé pour les tests).
- Supprimer les fichiers transférés : supprime les fichiers après un transfert réussi.
- Supprimer les fichiers transférés et les répertoires vides : supprime les fichiers et les répertoires vides après un transfert réussi.
- Âge maximal des fichiers : incluez les fichiers modifiés au cours des derniers jours. La valeur par défaut est de 180 jours.
- Espace de noms de l'élément : espace de noms de l'élément.
- Libellés d'ingestion : libellé à appliquer aux événements de ce flux.
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Accorder des autorisations IAM au compte de service Google SecOps
Le compte de service Google SecOps a besoin du rôle Lecteur des objets Storage sur votre bucket GCS.
- Accédez à Cloud Storage > Buckets.
- Cliquez sur le nom de votre bucket (par exemple,
dns-threat-detector-logs). - Accédez à l'onglet Autorisations.
- Cliquez sur Accorder l'accès.
- Fournissez les informations de configuration suivantes :
- Ajouter des comptes principaux : collez l'adresse e-mail du compte de service Google SecOps.
- Attribuez des rôles : sélectionnez Lecteur des objets de l'espace de stockage.
Cliquez sur Enregistrer.
Table de mappage UDM
| Champ du journal | Mappage UDM | Logique |
|---|---|---|
| record.jsonPayload.dnsQuery.responseCode, record.jsonPayload.dnsQuery.authAnswer, record.jsonPayload.dnsQuery.queryTime, record.jsonPayload.partnerId, record.jsonPayload.detectionTime, record.logName | additional.fields | Valeurs copiées dans la carte d'ajout, puis fusionnées en tant qu'entrées de carte avec value.string_value si elles ne sont pas vides |
| record.receiveTimestamp | metadata.collected_timestamp | Analysé en tant que code temporel ISO8601 |
| metadata.event_type | Défini sur "NETWORK_CONNECTION" si has_principal et has_target, sur "STATUS_UPDATE" si has_principal, sinon sur "GENERIC_EVENT" | |
| record.timestamp | metadata.event_timestamp | Analysé en tant que code temporel ISO8601 |
| record.insertId | metadata.product_log_id | Valeur copiée directement si elle n'est pas vide |
| record.jsonPayload.dnsQuery.rdata | network.dns.answers | Valeur copiée dans answer.data, puis fusionnée sous forme de tableau si elle n'est pas vide |
| record.jsonPayload.dnsQuery.queryName, record.jsonPayload.dnsQuery.queryType | network.dns.questions | questions.name à partir de queryName, questions.type mappé de la chaîne queryType à un entier, puis fusionné sous forme de tableau s'il n'est pas vide |
| record.jsonPayload.dnsQuery.responseCode | network.dns.response_code | Mappé d'une chaîne à un entier à l'aide d'une table prédéfinie |
| record.jsonPayload.dnsQuery.protocol | network.ip_protocol | Valeur copiée directement si elle n'est pas vide |
| record.jsonPayload.dnsQuery.sourceIp | principal.asset.ip | Valeur copiée directement si elle n'est pas vide |
| record.jsonPayload.dnsQuery.sourceIp | principal.ip | Valeur copiée directement si elle n'est pas vide |
| record.jsonPayload.dnsQuery.location | principal.location.country_or_region | Valeur copiée directement si elle n'est pas vide |
| record.resource.labels.location | principal.location.name | Valeur copiée directement si elle n'est pas vide |
| record.jsonPayload.dnsQuery.vmProjectNumber, record.jsonPayload.dnsQuery.projectNumber | principal.resource.attribute.labels | Les valeurs sont copiées dans la carte d'ajout, puis fusionnées en tant qu'entrées de carte si elles ne sont pas vides. |
| record.jsonPayload.dnsQuery.vmInstanceId | principal.resource.id | Valeur copiée directement si elle n'est pas vide |
| record.resource.labels.id | principal.resource.product_object_id | Valeur copiée directement si elle n'est pas vide |
| record.resource.type | principal.resource.type | Valeur copiée directement si elle n'est pas vide |
| security_result | Fusionné à partir de la carte security_result créée | |
| record.jsonPayload.threatInfo.confidence | security_result.confidence | Mappé sur LOW_CONFIDENCE si les correspondances sont (?i)Low, sur MEDIUM_CONFIDENCE si (?i)Medium et sur HIGH_CONFIDENCE si (?i)High |
| record.jsonPayload.threatInfo.threatDescription | security_result.description | Valeur copiée directement si elle n'est pas vide |
| record.jsonPayload.threatInfo.threatIndicatorType, record.jsonPayload.threatInfo.threatIndicator, record.jsonPayload.threatInfo.threatFeed, record.jsonPayload.threatInfo.category, record.jsonPayload.threatInfo.type, record.jsonPayload.threatInfo.threat, record.jsonPayload.threatInfo.severity, record.resource.labels.resource_container | security_result.detection_fields | Les valeurs sont copiées dans la carte d'ajout, puis fusionnées en tant qu'entrées de carte si elles ne sont pas vides. |
| record.severity | security_result.severity | Correspond à LOW si (?i)Low, INFORMATIONAL si (?i)(Informational|Info), MEDIUM si (?i)Medium, CRITICAL si (?i)Critical, HIGH si (?i)High |
| record.jsonPayload.threatInfo.threatId | security_result.threat_id | Valeur copiée directement si elle n'est pas vide |
| record.jsonPayload.dnsQuery.destinationIp | target.asset.ip | Valeur copiée directement si elle n'est pas vide |
| record.jsonPayload.dnsQuery.destinationIp | target.ip | Valeur copiée directement si elle n'est pas vide |
| metadata.vendor_name | Défini sur "Google Cloud" | |
| metadata.product_name | Défini sur "Détecteur de menaces Google Cloud DNS" |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.