Collecter les journaux ClamAV

Compatible avec :

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

ClamAV est un moteur antivirus Open Source conçu pour détecter les chevaux de Troie, les virus, les logiciels malveillants et d'autres menaces malveillantes. Il permet d'analyser les fichiers en ligne de commande, de mettre à jour automatiquement la base de données de signatures et est compatible avec plusieurs formats de fichiers, y compris les archives, les exécutables et les documents. ClamAV fonctionne en tant que daemon local (clamd) ou scanner de ligne de commande (clamscan) sur les systèmes Linux, Unix et Windows.

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
  • Connectivité réseau entre l'hôte de l'agent Bindplane et le serveur ClamAV
  • Si vous exécutez l'agent derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts conformément aux exigences de l'agent Bindplane.
  • ClamAV installé et en cours d'exécution sur les points de terminaison Linux
  • Un accès root ou sudo au serveur ClamAV et à l'hôte de l'agent Bindplane

Obtenir le fichier d'authentification pour l'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
    

    L'état du service doit être 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
    

    L'état du service doit être active (running).

Ressources d'installation supplémentaires

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 syslog et envoyer des journaux à 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

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

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/clamav:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: CLAM_AV
            raw_log_field: body
            ingestion_labels:
                env: production
    
    service:
        pipelines:
            logs/clamav_to_chronicle:
                receivers:
                    - udplog
                exporters:
                    - chronicle/clamav
    
  2. Remplacez les espaces réservés suivants :

    • Configuration du récepteur :

      • listen_address : définissez sur 0.0.0.0:514 pour écouter sur toutes les interfaces sur le port UDP 514. Si le port 514 nécessite des droits racine sur Linux, utilisez 0.0.0.0:1514 et configurez rsyslog pour qu'il transfère les données vers le port 1514.
    • 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
      • customer_id : remplacez YOUR_CUSTOMER_ID par le numéro client obtenu précédemment.

      • 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 : définissez sur CLAM_AV (correspondance exacte pour l'analyseur Google SecOps)

      • ingestion_labels : libellés facultatifs au format YAML (par exemple, env: production)

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 :

    1. Exécutez la commande suivante :

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

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

      sudo journalctl -u observiq-otel-collector -f
      
  • Pour redémarrer l'agent Bindplane sous Windows :

    1. 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.
    2. Vérifiez que le service est en cours d'exécution :

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

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

Configurer le transfert syslog ClamAV

Activer la journalisation syslog dans ClamAV

  1. Connectez-vous au système Linux exécutant ClamAV avec les droits root ou sudo.
  2. Ouvrez le fichier de configuration du démon ClamAV :

    sudo nano /etc/clamav/clamd.conf
    
  3. Recherchez la ligne #LogSyslog yes ou #LogSyslog true.

  4. Supprimez le caractère de commentaire # pour activer la journalisation syslog :

    LogSyslog yes
    
  5. Facultatif : Configurez la fonctionnalité syslog. Recherchez la ligne #LogFacility LOG_LOCAL6 et annulez sa mise en commentaire :

    LogFacility LOG_LOCAL6
    
  6. Facultatif : Activez des options de journalisation supplémentaires pour obtenir des journaux plus détaillés :

    LogTime yes
    LogVerbose yes
    ExtendedDetectionInfo yes
    
    • LogTime : ajoute des codes temporels aux messages du journal.
    • LogVerbose : active la journalisation détaillée avec des informations supplémentaires.
    • ExtendedDetectionInfo : inclut la taille et le hachage du fichier avec les détections de virus
  7. Enregistrez le fichier et quittez :

    Appuyez sur Ctrl+O, puis sur Enter, puis sur Ctrl+X.

  8. Redémarrez le daemon ClamAV pour appliquer les modifications :

    sudo systemctl restart clamav-daemon
    
  9. Vérifiez que le daemon ClamAV est en cours d'exécution :

    sudo systemctl status clamav-daemon
    

Configurer rsyslog pour transférer les journaux ClamAV

  1. Créez un fichier de configuration rsyslog pour le transfert ClamAV :

    sudo nano /etc/rsyslog.d/30-clamav-forward.conf
    
  2. Ajoutez la configuration suivante pour transférer les journaux ClamAV vers l'agent Bindplane :

    # Forward ClamAV logs (LOG_LOCAL6 facility) to Bindplane agent
    if $syslogfacility-text == 'local6' then {
        action(
            type="omfwd"
            protocol="udp"
            target="BINDPLANE_AGENT_IP"
            port="514"
            queue.type="linkedList"
            queue.size="10000"
            action.resumeRetryCount="100"
        )
        stop
    }
    
  3. Remplacez BINDPLANE_AGENT_IP par l'adresse IP de l'hôte de l'agent Bindplane :

    • Si Bindplane est installé sur le même hôte que ClamAV, utilisez 127.0.0.1.
    • Si Bindplane se trouve sur un autre hôte, utilisez l'adresse IP de cet hôte (par exemple, 192.168.1.100).
  4. Si vous avez configuré Bindplane pour qu'il écoute sur un autre port (par exemple, 1514), mettez à jour le paramètre port en conséquence.

  5. Enregistrez le fichier et quittez :

    Appuyez sur Ctrl+O, puis sur Enter, puis sur Ctrl+X.

  6. Validez la syntaxe de configuration rsyslog :

    sudo rsyslogd -N1
    
  7. Redémarrez rsyslog pour appliquer les modifications :

    sudo systemctl restart rsyslog
    
  8. Vérifiez que rsyslog est en cours d'exécution :

    sudo systemctl status rsyslog
    

Tester la configuration

  1. Générez une détection de virus de test à l'aide du fichier de test EICAR :

    cd /tmp
    echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar.com
    
  2. Analysez le fichier de test avec ClamAV :

    sudo clamdscan /tmp/eicar.com
    
  3. Vérifiez que la détection apparaît dans syslog :

    sudo tail -f /var/log/syslog | grep clamd
    

    Une entrée de journal semblable à celle-ci doit s'afficher :

    Jan 15 10:30:45 hostname clamd[1234]: /tmp/eicar.com: Win.Test.EICAR_HDB-1(44d88612fea8a8f36de82e1278abb02f:68) FOUND
    
  4. Consultez les journaux de l'agent Bindplane pour vérifier que les journaux sont transférés :

    sudo journalctl -u observiq-otel-collector -f
    
  5. Vérifiez que les journaux s'affichent dans Google SecOps :

    1. Connectez-vous à la console Google SecOps.
    2. Accédez à Rechercher > Recherche UDM.
    3. Exécutez une requête de recherche pour les journaux ClamAV :

      metadata.log_type = "CLAM_AV"
      
  6. Nettoyez le fichier de test :

    sudo rm /tmp/eicar.com
    

Configuration alternative : transférer tous les messages syslog vers BindPlane

Si vous souhaitez transférer tous les messages syslog (et pas seulement ClamAV) vers Bindplane, utilisez cette configuration plus simple :

  1. Modifiez la configuration rsyslog :

    sudo nano /etc/rsyslog.d/30-forward-all.conf
    
  2. Ajoutez la configuration suivante :

    # Forward all logs to Bindplane agent
    *.* action(
        type="omfwd"
        protocol="udp"
        target="BINDPLANE_AGENT_IP"
        port="514"
        queue.type="linkedList"
        queue.size="10000"
        action.resumeRetryCount="100"
    )
    
  3. Remplacez BINDPLANE_AGENT_IP par l'adresse IP appropriée.

  4. Enregistrez, validez et redémarrez rsyslog comme décrit dans les étapes précédentes.

Table de mappage UDM

Champ de journal Mappage UDM Logique
parsed_msg.resource.labels.instance_id observer.resource.id Valeur copiée directement
parsed_msg.labels.compute.googleapis.com/resource_name observer.resource.name Valeur copiée directement
parsed_msg.resource.type, parsed_msg.labels.container.googleapis.com/stream observer.resource.type Concaténation de parsed_msg.resource.type et parsed_msg.labels.container.googleapis.com/stream avec le séparateur "/"
parsed_msg.resource.labels.project_id, parsed_msg.resource.labels.cluster_name, parsed_msg.resource.labels.container_name observer.hostname Concaténation de parsed_msg.resource.labels.project_id, parsed_msg.resource.labels.cluster_name et parsed_msg.resource.labels.container_name avec des séparateurs "/"
parsed_msg.resource.labels.container_name observer.application Valeur copiée directement
parsed_msg.labels.container.googleapis.com/namespace_name observer.namespace Valeur copiée directement
parsed_msg.resource.labels.zone observer.location.country_or_region Valeur copiée directement
parsed_msg.resource.labels.pod_id observer.labels Fusionné en tant que clé "pod_id" avec la valeur de parsed_msg.resource.labels.pod_id
parsed_msg.resource.labels.project_id, parsed_msg.resource.labels.cluster_name, parsed_msg.resource.labels.container_name principal.hostname Concaténation de parsed_msg.resource.labels.project_id, parsed_msg.resource.labels.cluster_name et parsed_msg.resource.labels.container_name avec des séparateurs "/"
file, _file_path target.file.full_path Valeur du fichier si elle est extraite du modèle Grok, sinon de _file_path si elle est extraite d'un autre modèle Grok
menace security_result.threat_name Valeur copiée directement
total_files, _outcome, threat security_result.summary Définissez sur "%{total_files} fichiers infectés trouvés." si num_files est extrait, sinon "Fichier analysé. (%{_outcome})" si _outcome est extrait, sinon "Signature de menace %{threat} trouvée." si la menace n'est pas vide
category security_result.category Valeur copiée directement (définie sur "SOFTWARE_MALICIOUS" si la menace n'est pas vide)
action security_result.action Valeur copiée directement (définie sur "BLOCK" si la menace n'est pas vide, sinon sur "ALLOW" si _outcome est extrait)
parsed_msg.insertId metadata.product_log_id Valeur copiée directement
parsed_msg.logName metadata.description Valeur copiée directement
metadata.event_type Défini sur "SCAN_FILE" si une menace est détectée ou si le fichier est analysé, sinon sur "STATUS_UPDATE" si le nombre de fichiers infectés est extrait
metadata.product_name Défini sur "CLAMAV"
metadata.vendor_name Défini sur "Cisco Systems"

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