Collecter les journaux DNS Infoblox

Compatible avec :

Ce document explique comment ingérer des journaux DNS Infoblox dans Google Security Operations à l'aide de Bindplane.

L'analyseur extrait les champs des journaux Infoblox DNS au format SYSLOG et CEF. Il utilise grok et/ou kv pour analyser le message du journal, puis mappe ces valeurs au modèle de données unifié (UDM). Il définit également les valeurs de métadonnées par défaut pour la source et le type d'événement.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Une instance Google SecOps
  • Windows Server 2016 ou version ultérieure, ou hôte Linux avec systemd
  • Si vous exécutez l'agent derrière un proxy, assurez-vous que les ports de pare-feu sont ouverts conformément aux exigences de l'agent Bindplane.
  • Accès privilégié à l'interface Web Infoblox Grid Manager

Obtenir le fichier d'authentification d'ingestion Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Agents de collecte.
  3. Téléchargez le fichier d'authentification d'ingestion. Enregistrez le fichier de manière sécurisée sur le système sur lequel Bindplane sera installé.

Obtenir l'ID client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM> Profil.
  3. Copiez et enregistrez le numéro client de la section Informations sur l'organisation.

Installer l'agent Bindplane

Installez l'agent Bindplane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.

Installation de fenêtres

  1. Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
  2. Exécutez la commande suivante :

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Attendez la fin de l'installation.

  4. Vérifiez l'installation en exécutant la commande suivante :

    sc query observiq-otel-collector
    

Le service doit être indiqué comme RUNNING (EN COURS D'EXÉCUTION).

Installation de Linux

  1. Ouvrez un terminal avec les droits root ou sudo.
  2. Exécutez la commande suivante :

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Attendez la fin de l'installation.

  4. Vérifiez l'installation en exécutant la commande suivante :

    sudo systemctl status observiq-otel-collector
    

Le service doit être indiqué comme actif (en cours d'exécution).

Autres ressources d'installation

Pour obtenir d'autres options d'installation et de dépannage, consultez le guide d'installation de l'agent Bindplane.

Configurer l'agent Bindplane pour ingérer les journaux syslog et les envoyer à Google SecOps

Localiser le fichier de configuration

  • Linux :

    sudo nano /etc/bindplane-agent/config.yaml
    
  • Windows :

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Modifiez le fichier de configuration

  • Remplacez l'intégralité du contenu de config.yaml par la configuration suivante :

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            creds_file_path: '/path/to/ingestion-authentication-file.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: 'INFOBLOX_DNS'
            raw_log_field: body
            ingestion_labels:
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    

Paramètres de configuration

  • Remplacez les espaces réservés suivants :

    • Configuration du récepteur :

      • udplog : utilisez udplog pour syslog UDP ou tcplog pour syslog TCP.
      • 0.0.0.0 : adresse IP à écouter (0.0.0.0 pour écouter sur toutes les interfaces)
      • 514 : numéro de port à écouter (port syslog standard)
    • Configuration de l'exportateur :

      • creds_file_path : chemin d'accès complet au fichier d'authentification de l'ingestion :
        • Linux : /etc/bindplane-agent/ingestion-auth.json
        • Windows : C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • YOUR_CUSTOMER_ID : ID client de la section "Obtenir l'ID client"
      • endpoint : URL du point de terminaison régional :
        • États-Unis : malachiteingestion-pa.googleapis.com
        • Europe : europe-malachiteingestion-pa.googleapis.com
        • Asie : asia-southeast1-malachiteingestion-pa.googleapis.com
        • Pour obtenir la liste complète, consultez Points de terminaison régionaux.
      • log_type : type de journal tel qu'il apparaît dans Chronicle (INFOBLOX_DNS)

Enregistrez le fichier de configuration.

  • Après avoir modifié le fichier, enregistrez-le :
    • Linux : appuyez sur Ctrl+O, puis sur Enter, puis sur Ctrl+X.
    • Windows : cliquez sur Fichier > Enregistrer.

Redémarrez l'agent Bindplane pour appliquer les modifications.

  • Pour redémarrer l'agent Bindplane sous Linux, exécutez la commande suivante :

    sudo systemctl restart observiq-otel-collector
    
    1. Vérifiez que le service est en cours d'exécution :

        sudo systemctl status observiq-otel-collector
      
    2. Recherchez les erreurs dans les journaux :

        sudo journalctl -u observiq-otel-collector -f
      
  • Pour redémarrer l'agent Bindplane dans Windows, choisissez l'une des options suivantes :

    • Invite de commandes ou PowerShell en tant qu'administrateur :

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Console Services :

      1. Appuyez sur Win+R, saisissez services.msc, puis appuyez sur Entrée.
      2. Localisez observIQ OpenTelemetry Collector.
      3. Effectuez un clic droit, puis sélectionnez Redémarrer.

      4. Vérifiez que le service est en cours d'exécution :

        sc query observiq-otel-collector
        
      5. Recherchez les erreurs dans les journaux :

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Configurer le transfert Syslog sur Infoblox DNS

  1. Connectez-vous à l'interface Web Infoblox Grid Manager.
  2. Accédez à Grille > Gestionnaire de grille > Membres.
  3. Sélectionnez le membre à configurer, puis cliquez sur Modifier.
  4. Accédez à l'onglet Surveillance.
  5. Sous Syslog, cliquez sur Ajouter pour ajouter un serveur Syslog.
  6. Fournissez les informations de configuration suivantes :
    • Adresse : saisissez l'adresse IP de l'hôte de l'agent Bindplane.
    • Port : saisissez 514.
    • Transport : sélectionnez UDP.
    • ID du nœud : sélectionnez le nœud Infoblox (pour les paires HA).
    • Gravité : sélectionnez Info (ou le niveau de gravité de votre choix).
    • Établissement : sélectionnez local0 (ou l'établissement de votre choix).
  7. Activez les catégories de journaux suivantes :
    • Requêtes DNS : sélectionnez Journaliser les requêtes DNS sous Propriétés DNS de la grille > Journalisation.
    • Réponses DNS : sélectionnez Enregistrer les réponses DNS.
    • DHCP : activez la journalisation DHCP sous Propriétés DHCP de la grille.
    • Audit : activez la journalisation d'audit sous Propriétés de la grille > Surveillance.
  8. Cliquez sur Enregistrer et fermer.
  9. Redémarrez le service DNS si nécessaire.
  10. Vérifiez que les messages syslog sont envoyés en consultant les journaux de l'agent Bindplane.

Table de mappage UDM

Champ de journal Mappage UDM Logique
agent.hostname principal.hostname Pour les journaux au format CEF, si agent.hostname existe, il est mappé sur principal.hostname.
client_ip principal.ip Pour les journaux au format CEF, si client_ip existe, il est mappé sur principal.ip.
client_port principal.port Pour les journaux au format CEF, si client_port existe, il est mappé à principal.port.
données answers.data Extrait du champ de données de la section "Réponses" du journal brut. Plusieurs occurrences sont mappées en tant qu'objets de réponse distincts.
description metadata.description Directement mappé à partir du champ de description du journal brut ou extrait à l'aide de modèles Grok à partir d'autres champs tels que "message" et "msg2".
dest_ip1 target.ip Extrait du journal brut et mappé à target.ip.
destinationDnsDomain dns_question.name Pour les journaux au format CEF, si destinationDnsDomain existe, il est mappé sur dns_question.name.
dns_class dns_question.class Mappé à l'aide de la table de recherche dns_query_class_mapping.include.
dns_domain dns_question.name Extrait du champ de message du journal brut à l'aide de modèles Grok et mappé à dns_question.name.
dns_name dns_question.name Extrait du champ "dns_domain" à l'aide de modèles Grok et mappé à "dns_question.name".
dns_records answers.data Pour les journaux au format CEF, si dns_records existe, il est mappé à answers.data. Plusieurs occurrences sont mappées en tant qu'objets de réponse distincts.
dst_ip target.ip ou target.hostname Extrait du champ de message du journal brut à l'aide de modèles Grok. Si l'adresse IP est valide, elle est mappée sur target.ip. Sinon, elle est mappée sur target.hostname.
dst_ip1 target.ip ou target.hostname Extrait du champ "message" ou "msg2" du journal brut à l'aide de modèles Grok. Si l'adresse IP est valide, elle est mappée sur target.ip. Sinon, elle est mappée sur target.hostname. N'est mappé que s'il est différent de dst_ip.
evt_type metadata.product_event_type Directement mappé à partir du champ evt_type du journal brut, qui est extrait du champ de message à l'aide de modèles grok.
InfobloxB1OPHIPAddress principal.ip Pour les journaux au format CEF, si InfobloxB1OPHIPAddress existe, il est mappé sur principal.ip.
InfobloxB1Region principal.location.country_or_region Pour les journaux au format CEF, si InfobloxB1Region existe, il est mappé à principal.location.country_or_region.
InfobloxDNSQType dns_question.type Pour les journaux au format CEF, si InfobloxDNSQType existe, il est mappé sur dns_question.type.
intermédiaire intermediary.ip ou intermediary.hostname Extrait du champ de message du journal brut à l'aide de modèles Grok. Si l'adresse IP est valide, elle est mappée sur intermediary.ip. Sinon, elle est mappée sur intermediary.hostname.
msg2 metadata.description, dns.response_code, dns_question.name, target.ip, target.hostname, answers.name, answers.ttl, answers.data, answers.class, answers.type, security_result.severity Extrait du champ de message du journal brut à l'aide de modèles Grok. Utilisé pour extraire différents champs, mais pas directement mappé à l'UDM.
name1 answers.name Extrait du champ msg2 du journal brut à l'aide de modèles Grok et mappé à answers.name.
name2 answers.name Extrait du champ msg2 du journal brut à l'aide de modèles Grok et mappé à answers.name.
protocol network.ip_protocol Mappé directement à partir du champ de protocole du journal brut s'il correspond à des protocoles connus.
qclass dns_question.class Champ intermédiaire utilisé pour mapper dns_class sur UDM.
qclass1 answers.class Champ intermédiaire utilisé pour mapper dns_class1 sur UDM.
qclass2 answers.class Champ intermédiaire utilisé pour mapper dns_class2 sur UDM.
query_type dns_question.type Mappé à l'aide de la table de recherche dns_record_type.include.
query_type1 answers.type Mappé à l'aide de la table de recherche dns_record_type.include.
query_type2 answers.type Mappé à l'aide de la table de recherche dns_record_type.include.
recursion_flag network.dns.recursion_desired Si le champ recursion_flag contient un "+", il est mappé sur network.dns.recursion_desired avec la valeur "true".
record_type dns_question.type Champ intermédiaire utilisé pour mapper query_type sur UDM.
record_type1 answers.type Champ intermédiaire utilisé pour mapper query_type1 sur UDM.
record_type2 answers.type Champ intermédiaire utilisé pour mapper query_type2 sur UDM.
res_code network.dns.response_code Mappé à l'aide de la table de recherche dns_response_code.include.
response_code network.dns.response_code Pour les journaux au format CEF, si response_code existe, il est mappé à network.dns.response_code à l'aide de la table de recherche dns_response_code.include.
security_action security_result.action D'après le champ "État". Si l'état est"refusé ", security_action est défini sur"BLOCK" (BLOQUER). Sinon, il est défini sur "ALLOW" (AUTORISER).
de gravité, security_result.severity Pour les journaux au format CEF, si la gravité existe et est "informational", elle est mappée à security_result.severity en tant que "INFORMATIONAL".
src_host principal.hostname Extrait du champ de description ou de message du journal brut à l'aide de modèles Grok et mappé à principal.hostname.
src_ip principal.ip ou principal.hostname Extrait du champ de message du journal brut à l'aide de modèles Grok. S'il s'agit d'une adresse IP valide, elle est mappée sur principal.ip. Sinon, elle est mappée sur principal.hostname.
src_port principal.port Extrait du champ de message du journal brut à l'aide de modèles Grok et mappé à principal.port.
ttl1 answers.ttl Extrait du champ msg2 du journal brut à l'aide de modèles Grok et mappé sur answers.ttl.
ttl2 answers.ttl Extrait du champ msg2 du journal brut à l'aide de modèles Grok et mappé sur answers.ttl.
metadata.event_type metadata.event_type Dérivé de différents champs et de la logique de l'analyseur. La valeur par défaut est GENERIC_EVENT si aucun autre type d'événement n'est identifié. Les valeurs possibles sont NETWORK_DNS, NETWORK_CONNECTION et STATUS_UPDATE.
metadata.log_type metadata.log_type Défini sur "INFOBLOX_DNS" par l'analyseur.
metadata.product_name metadata.product_name Défini sur "Infoblox DNS" par l'analyseur.
metadata.vendor_name metadata.vendor_name Défini sur "INFOBLOX" par l'analyseur.
metadata.product_version metadata.product_version Extrait des messages CEF.
metadata.event_timestamp metadata.event_timestamp Copié à partir du champ d'horodatage.
network.application_protocol network.application_protocol Définissez la valeur sur "DNS" si event_type n'est pas "GENERIC_EVENT" ni "STATUS_UPDATE".

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.