Collecter les journaux DNSFilter
Ce document explique comment configurer DNSFilter pour envoyer des journaux à Google Security Operations à l'aide de webhooks via le protocole HTTP Event Collector (HEC).
DNSFilter est une solution de sécurité DNS basée sur l'IA qui offre une protection contre les menaces, un filtrage de contenu et une visibilité sur le réseau. La fonctionnalité d'exportation de données permet d'exporter automatiquement les données de journalisation des requêtes DNS vers les plates-formes SIEM via l'API HTTP Event Collector (HEC), ce qui permet de surveiller la sécurité en temps réel et de générer des rapports de conformité.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Une instance Google SecOps
- Accès au tableau de bord DNSFilter avec des autorisations d'administrateur ou supérieures
- Fonctionnalité complémentaire DNSFilter Data Export activée (disponible pour les forfaits Basic, Pro et Enterprise en tant que module complémentaire payant)
- Accès à Google Cloud Console (pour la création de clés API)
Créer un flux de webhook dans Google SecOps
Créer le flux
- Accédez à Paramètres SIEM > Flux.
- Cliquez sur Add New Feed (Ajouter un flux).
- Sur la page suivante, cliquez sur Configure a single feed (Configurer un seul flux).
- Dans le champ Feed name (Nom du flux), saisissez un nom pour le flux (par exemple,
DNSFilter HEC Feed). - Sélectionnez Webhook comme Source type (Type de source).
- Sélectionnez DNSFILTER comme Log type (Type de journal).
- Cliquez sur Next (Suivant).
- Spécifiez les valeurs des paramètres d'entrée suivants :
- Split delimiter (Délimiteur de division) (facultatif) : laissez ce champ vide, car chaque requête HEC contient des événements correctement formatés.
- Asset namespace (Espace de noms de l'élément) : espace de noms de l'élément
- Ingestion labels (Libellés d'ingestion) : libellé à appliquer aux événements de ce flux
- Cliquez sur Next (Suivant).
- Vérifiez la configuration de votre nouveau flux dans l'écran Finalize (Finaliser), puis cliquez sur Submit (Envoyer).
Générer et enregistrer la clé secrète
Après avoir créé le flux, vous devez générer une clé secrète pour l'authentification :
- Sur la page des détails du flux, cliquez sur Generate Secret Key (Générer une clé secrète).
- Une boîte de dialogue affiche la clé secrète.
Copiez et enregistrez la clé secrète en toute sécurité.
Obtenir l'URL du point de terminaison du flux
- Accédez à l'onglet Details (Détails) du flux.
- Dans la section Endpoint Information (Informations sur le point de terminaison), copiez l'URL du point de terminaison du flux.
Le format d'URL est le suivant :
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateou
https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateEnregistrez cette URL pour les étapes suivantes.
Cliquez sur OK.
Créer une clé API Google Cloud
Google SecOps nécessite une clé API pour l'authentification. Créez une clé API limitée dans Google Cloud Console.
Créer la clé API
- Accédez à la page Identifiants dans Google Cloud Console.
- Sélectionnez votre projet (celui associé à votre instance Google SecOps).
- Cliquez sur Créer des identifiants > Clé API.
- Une clé API est créée et affichée dans une boîte de dialogue.
- Cliquez sur Modifier la clé API pour la limiter.
Restreindre la clé API
- Sur la page des paramètres de la clé API :
Name (Nom) : saisissez un nom descriptif (par exemple,
Google SecOps DNSFilter Webhook API Key). - Sous API restrictions (Restrictions relatives aux API) :
- Sélectionnez Restreindre la clé.
- Dans le menu déroulant Sélectionner des API, recherchez et sélectionnez API Google SecOps (ou API Chronicle).
- Cliquez sur Enregistrer.
- Copiez la valeur de la clé API à partir du champ Clé API en haut de la page.
Enregistrez la clé API en toute sécurité.
Configurer l'exportation de données DNSFilter
Construire l'URL du point de terminaison HEC
Combinez l'URL du point de terminaison Google SecOps et la clé API pour créer l'URL HEC :
<ENDPOINT_URL>?key=<API_KEY>Exemple :
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
Configurer l'exportation de données dans DNSFilter
- Connectez-vous au tableau de bord DNSFilter.
- Accédez à Tools > Data Export (Outils > Exportation de données).
- Dans la section Export Destination (Destination d'exportation), sélectionnez HTTP Event Collector (HEC).
- Dans la section HEC Configuration (Configuration HEC), saisissez les informations suivantes :
- URL du collecteur d'événements HTTP : collez l'URL complète du point de terminaison avec la clé API de l'étape précédente.
- Active Event Collector Token (Jeton du collecteur d'événements actif) : collez la clé secrète générée lors de la création du flux Google SecOps.
- Cliquez sur Enregistrer la configuration.
DNSFilter teste la connexion et affiche un message de réussite si la configuration est correcte.
Vérifier l'ingestion des données
- Dans le tableau de bord DNSFilter, accédez à Tools > Data Export (Outils > Exportation de données).
- Vérifiez que l'état est Actif ou Connecté.
- Dans la console Google SecOps, accédez à SIEM Settings > Feeds (Paramètres SIEM > Flux).
- Recherchez votre flux DNSFilter et vérifiez que l'état est Actif.
- Cliquez sur le nom du flux pour afficher les détails.
- Vérifiez la métrique Logs Ingested (Journaux ingérés) pour confirmer que les données sont transmises.
Pour rechercher des événements DNSFilter, accédez à Search (Rechercher) et exécutez la requête suivante :
metadata.log_type = "DNSFILTER"
Référence des méthodes d'authentification
Les flux de webhook Google SecOps sont compatibles avec plusieurs méthodes d'authentification. L'intégration HEC DNSFilter utilise la méthode hybride.
Méthode utilisée : hybride (URL + en-tête)
DNSFilter envoie la clé API dans l'URL et la clé secrète (jeton HEC) dans l'en-tête de requête.
Format de la requête :
POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1 Content-Type: application/json Authorization: Splunk <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
Autre méthode : en-têtes personnalisés
Si vous configurez une application personnalisée pour envoyer des journaux à Google SecOps, utilisez cette méthode pour une meilleure sécurité.
Format de la requête :
POST <ENDPOINT_URL> HTTP/1.1 Content-Type: application/json x-goog-chronicle-auth: <API_KEY> x-chronicle-auth: <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }Avantages :
- La clé API et le code secret ne sont pas visibles dans l'URL.
- Plus sécurisé (les en-têtes ne sont pas enregistrés dans les journaux d'accès au serveur Web)
- Méthode à privilégier lorsque le fournisseur la prend en charge
Noms des en-têtes d'authentification
Google SecOps accepte les noms d'en-tête suivants pour l'authentification :
Pour la clé API :
x-goog-chronicle-auth(recommandé)X-Goog-Chronicle-Auth(non sensible à la casse)
Pour la clé secrète :
x-chronicle-auth(recommandé)X-Chronicle-Auth(non sensible à la casse)Authorization: Splunk <TOKEN>(compatibilité HEC)
Limites et bonnes pratiques concernant les webhooks
Limites de requêtes
| Limite | Valeur |
|---|---|
| Taille maximale de la requête | 4 Mo |
| Nombre maximal de requêtes par seconde (RPS) | 15 000 |
| Délai avant expiration de la requête | 30 secondes |
| Comportement de nouvelle tentative | Automatique avec intervalle exponentiel entre les tentatives |
Bonnes pratiques
- Surveiller l'état de l'exportation : vérifiez régulièrement l'état de l'exportation de données dans le tableau de bord DNSFilter pour assurer un flux de données continu.
- Rotation des clés API : faites régulièrement tourner votre clé API Google Cloud pour des raisons de sécurité.
- Gestion des clés secrètes : stockez la clé secrète Google SecOps en toute sécurité et régénérez-la si elle est compromise.
- Conservation des données : configurez des règles de conservation des données appropriées dans DNSFilter et Google SecOps.
- Configuration des alertes : configurez des alertes dans Google SecOps pour les événements de sécurité DNS critiques.
Dépannage
Échec du test de connexion
Si le test de configuration de l'exportation de données DNSFilter échoue :
- Vérifiez que l'URL HEC est correcte et qu'elle inclut le paramètre de clé API.
- Vérifiez que la clé secrète (jeton HEC) est copiée correctement, sans espace supplémentaire.
- Vérifiez que l'accès à l'API Chronicle est activé pour la clé API Google Cloud.
- Vérifiez que le flux Google SecOps est à l'état Actif.
- Vérifiez la connectivité réseau entre DNSFilter et les points de terminaison Google Cloud.
Aucune donnée n'apparaît dans Google SecOps
Si la connexion réussit, mais qu'aucune donnée n'apparaît :
- Vérifiez que des requêtes DNS sont générées dans votre déploiement DNSFilter.
- Consultez le journal des requêtes DNSFilter pour vérifier que le trafic est traité.
- Dans Google SecOps, recherchez
metadata.log_type = "DNSFILTER"pour vérifier l'ingestion. - Vérifiez la métrique Logs Ingested (Journaux ingérés) du flux dans Google SecOps.
- Consultez les journaux d'erreurs du flux pour détecter les erreurs d'ingestion.
L'exportation de données renvoie un message d'erreur
Causes d'erreurs courantes :
- Identifiants non valides : la clé API ou la clé secrète est incorrecte ou a expiré.
- Incompatibilité de région : la région de l'URL du point de terminaison Google SecOps ne correspond pas à votre instance.
- Autorisations : l'accès à l'API Chronicle n'est pas activé pour la clé API.
- Problèmes de réseau : pare-feu ou proxy bloquant les connexions HTTPS sortantes.
Tableau de mappage UDM
| Champ du journal | Mappage UDM | Logique |
|---|---|---|
| heure | metadata.collected_timestamp | Converti au format de date : yyyy-MM-dd HH:mm:ss Z UTC |
| metadata.event_type | Défini sur "STATUS_UPDATE" si principal_ip_present, principal_hostname_present ou principal_mac_present est défini sur "true", sinon sur "GENERIC_EVENT" | |
| question_type | network.dns.questions | question_type converti en question.type à l'aide du mappage de type d'enregistrement DNS, puis fusionné dans un tableau |
| code | network.dns.response_code | Converti à l'aide du mappage de code de réponse DNS |
| protocol | network.ip_protocol | Converti à l'aide du mappage de protocole IP |
| Client | principal.hostname | Valeur copiée directement |
| request_address, ip4, ip6, source_addresses | principal.ip | Fusionné à partir de request_address (IP extraite), ip4 (IP extraite), ip6 (IP extraite) et des adresses IP extraites du tableau source_addresses |
| région | principal.location.country_or_region | Valeur copiée directement |
| clientMac | principal.mac | Valeur copiée directement si elle correspond à l'expression régulière MAC |
| clientID | principal.resource.product_object_id | Valeur copiée directement |
| nom d'utilisateur | principal.user.user_display_name | Valeur copiée directement |
| user_id | principal.user.userid | Valeur copiée directement |
| code, original_code, clientType, collection, network_name, networkID, collectionID, policy, policyID, scheduled_policy, scheduled_policyID, sec_cats, sec_allow_cats, block_cats, block_allow_cats, threat, allowed, method, organization, organizationID, applicationID, application_name, application_categoryID, application_category_name | security_result.detection_fields | Libellés fusionnés à partir de différents champs sources sous forme de paires clé/valeur |
| domaine | target.administrative_domain | Valeur copiée directement |
| fqdn | target.domain.name | Valeur copiée directement |
| metadata.product_name | Défini sur "DNSFILTER" | |
| metadata.vendor_name | Défini sur "DNSFILTER" |
Vous avez encore besoin d'aide ? Obtenez des réponses auprès des membres de la communauté et des professionnels Google SecOps.