Collecter les journaux ClamAV
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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Agents de collecte.
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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Profil.
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
- Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
Exécutez la commande suivante :
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietAttendez la fin de l'installation.
Vérifiez l'installation en exécutant la commande suivante :
sc query observiq-otel-collectorL'état du service doit être RUNNING (EN COURS D'EXÉCUTION).
Installation de Linux
- Ouvrez un terminal avec les droits root ou sudo.
Exécutez la commande suivante :
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shAttendez la fin de l'installation.
Vérifiez l'installation en exécutant la commande suivante :
sudo systemctl status observiq-otel-collectorL'é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.yamlWindows :
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Modifiez le fichier de configuration
Remplacez l'intégralité du contenu de
config.yamlpar 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/clamavRemplacez les espaces réservés suivants :
Configuration du récepteur :
listen_address: définissez sur0.0.0.0:514pour écouter sur toutes les interfaces sur le port UDP 514. Si le port 514 nécessite des droits racine sur Linux, utilisez0.0.0.0:1514et 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
- Linux :
customer_id: remplacezYOUR_CUSTOMER_IDpar 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.
- États-Unis :
log_type: définissez surCLAM_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 surEnter, puis surCtrl+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-collectorVérifiez que le service est en cours d'exécution :
sudo systemctl status observiq-otel-collectorRecherchez les erreurs dans les journaux :
sudo journalctl -u observiq-otel-collector -f
Pour redémarrer l'agent Bindplane sous 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-collectorConsole Services :
- Appuyez sur
Win+R, saisissezservices.msc, puis appuyez sur Entrée. - Localisez observIQ OpenTelemetry Collector.
- Effectuez un clic droit, puis sélectionnez Redémarrer.
- Appuyez sur
Vérifiez que le service est en cours d'exécution :
sc query observiq-otel-collectorRecherchez 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
- Connectez-vous au système Linux exécutant ClamAV avec les droits root ou sudo.
Ouvrez le fichier de configuration du démon ClamAV :
sudo nano /etc/clamav/clamd.confRecherchez la ligne
#LogSyslog yesou#LogSyslog true.Supprimez le caractère de commentaire
#pour activer la journalisation syslog :LogSyslog yesFacultatif : Configurez la fonctionnalité syslog. Recherchez la ligne
#LogFacility LOG_LOCAL6et annulez sa mise en commentaire :LogFacility LOG_LOCAL6Facultatif : Activez des options de journalisation supplémentaires pour obtenir des journaux plus détaillés :
LogTime yes LogVerbose yes ExtendedDetectionInfo yesLogTime: 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
Enregistrez le fichier et quittez :
Appuyez sur
Ctrl+O, puis surEnter, puis surCtrl+X.Redémarrez le daemon ClamAV pour appliquer les modifications :
sudo systemctl restart clamav-daemonVérifiez que le daemon ClamAV est en cours d'exécution :
sudo systemctl status clamav-daemon
Configurer rsyslog pour transférer les journaux ClamAV
Créez un fichier de configuration rsyslog pour le transfert ClamAV :
sudo nano /etc/rsyslog.d/30-clamav-forward.confAjoutez 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 }Remplacez
BINDPLANE_AGENT_IPpar 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).
- Si Bindplane est installé sur le même hôte que ClamAV, utilisez
Si vous avez configuré Bindplane pour qu'il écoute sur un autre port (par exemple,
1514), mettez à jour le paramètreporten conséquence.Enregistrez le fichier et quittez :
Appuyez sur
Ctrl+O, puis surEnter, puis surCtrl+X.Validez la syntaxe de configuration rsyslog :
sudo rsyslogd -N1Redémarrez rsyslog pour appliquer les modifications :
sudo systemctl restart rsyslogVérifiez que rsyslog est en cours d'exécution :
sudo systemctl status rsyslog
Tester la configuration
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.comAnalysez le fichier de test avec ClamAV :
sudo clamdscan /tmp/eicar.comVérifiez que la détection apparaît dans syslog :
sudo tail -f /var/log/syslog | grep clamdUne 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) FOUNDConsultez les journaux de l'agent Bindplane pour vérifier que les journaux sont transférés :
sudo journalctl -u observiq-otel-collector -fVérifiez que les journaux s'affichent dans Google SecOps :
- Connectez-vous à la console Google SecOps.
- Accédez à Rechercher > Recherche UDM.
Exécutez une requête de recherche pour les journaux ClamAV :
metadata.log_type = "CLAM_AV"
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 :
Modifiez la configuration rsyslog :
sudo nano /etc/rsyslog.d/30-forward-all.confAjoutez 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" )Remplacez
BINDPLANE_AGENT_IPpar l'adresse IP appropriée.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.