Collecter les journaux du détecteur de menaces Google Cloud DNS

Compatible avec :

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.list ou rôles roles/networksecurity.dnsThreatDetectorViewer et roles/logging.viewer.

Créer un bucket Google Cloud Storage

  1. Accédez à Google Cloud Console.
  2. Sélectionnez votre projet ou créez-en un.
  3. Dans le menu de navigation, accédez à Cloud Storage> Buckets.
  4. Cliquez sur Créer un bucket.
  5. 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
  6. 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

  1. Dans la console Google Cloud, accédez à la page Détection avancée des menaces.
  2. Cliquez sur Créer un détecteur de menaces DNS.
  3. Attribuez un nom à votre détecteur de menaces DNS.
  4. Sélectionnez Tous les réseaux VPC du projet.
  5. 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.

  1. Dans la console Google Cloud, accédez à Journalisation > Routeur de journaux.
  2. Cliquez sur Créer un récepteur.
  3. 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.
  4. Cliquez sur Suivant.
  5. 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.
  6. Cliquez sur Suivant.
  7. 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.

  1. Cliquez sur Suivant.
  2. 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

  1. Accédez à Paramètres SIEM> Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Cliquez sur Configurer un flux unique.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, GCP DNS Threat Detector Logs).
  5. Sélectionnez Google Cloud Storage V2 comme Type de source.
  6. Sélectionnez Détecteur de menaces Google Cloud DNS comme Type de journal.

  7. Cliquez sur Obtenir un compte de service.

  8. Une adresse e-mail unique pour le compte de service s'affiche, par exemple :

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. Copiez cette adresse e-mail. Vous en aurez besoin lors de la tâche suivante.

  10. Cliquez sur Suivant.

  11. 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.
  12. Cliquez sur Suivant.

  13. 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.

  1. Accédez à Cloud Storage > Buckets.
  2. Cliquez sur le nom de votre bucket (par exemple, dns-threat-detector-logs).
  3. Accédez à l'onglet Autorisations.
  4. Cliquez sur Accorder l'accès.
  5. 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.
  6. 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.