Objectif
Sysmon est un outil Microsoft Sysinternals porté sur Linux. Il collecte des événements système détaillés (création de processus, connexions réseau, accès fichiers) et les envoie au syslog pour ingestion dans un SIEM.
À la fin de ce lab vous saurez :
- Créer une configuration XML Sysmon minimale
- Charger la configuration et démarrer le service
- Lire les événements Sysmon dans le syslog
- Comprendre les EventIDs principaux (1, 3, 11)
État de la VM — Ce qui ne fonctionne pas
(1) Le fichier /opt/sysmon/sysmon-config.xml existe mais est vide. (2) Le service sysmon.service n'est pas activé. (3) sysmon n'a jamais été lancé avec une configuration — aucun événement n'apparaît dans /var/log/syslog.
Diagnostiquez d'abord :
# Vérifier que sysmon est installé
which sysmon || ls /opt/sysmon/
# Voir le contenu du fichier de config (doit être vide)
cat /opt/sysmon/sysmon-config.xml
# Vérifier l'état du service
systemctl status sysmon
# Chercher des événements sysmon dans le syslog
grep -i sysmon /var/log/syslog | tail -10
Script Guidé — À Compléter
Ce script crée la configuration XML minimale et active Sysmon. Complétez les TODO.
#!/bin/bash
# Lab Bit-Bang — Sysmon Linux setup
CONFIG="/opt/sysmon/sysmon-config.xml"
# --- Étape 1 : Créer la configuration XML minimale ---
# La structure XML Sysmon contient des RuleGroups par EventID
# TODO: écrire le fichier XML de configuration
# Consultez la structure ci-dessous et complétez les balises manquantes :
sudo tee $CONFIG > /dev/null << 'XML'
<Sysmon schemaversion="4.82">
<EventFiltering>
<!-- EventID 1 : Créations de processus -->
<!-- TODO: ajouter un RuleGroup pour ProcessCreate (onmatch="include")
avec une Rule incluant tous les processus (condition="is any") -->
<!-- EventID 3 : Connexions réseau -->
<RuleGroup name="" groupRelation="or">
<NetworkConnect onmatch="include">
<DestinationPort condition="is any"></DestinationPort>
</NetworkConnect>
</RuleGroup>
<!-- EventID 11 : Créations de fichiers -->
<!-- TODO: ajouter un RuleGroup pour FileCreate (onmatch="include")
ciblant le répertoire /tmp (TargetFilename contains "/tmp") -->
</EventFiltering>
</Sysmon>
XML
# --- Étape 2 : Charger la configuration dans sysmon ---
# TODO: lancer sysmon avec la configuration XML
# Indice : sudo sysmon -accepteula -c $CONFIG
# --- Étape 3 : Activer et démarrer le service ---
# TODO: activer le service sysmon au démarrage
# Indice : sudo systemctl enable sysmon && sudo systemctl start sysmon
sudo systemctl status sysmon --no-pager
echo "Sysmon actif. Vérifiez : journalctl -u sysmon -f"
▸ AFFICHER LA SOLUTION (essayez d'abord !)
Configuration XML complète et commandes :
<RuleGroup name="" groupRelation="or">
<ProcessCreate onmatch="include">
<Image condition="is any"></Image>
</ProcessCreate>
</RuleGroup>
<RuleGroup name="" groupRelation="or">
<FileCreate onmatch="include">
<TargetFilename condition="contains">/tmp</TargetFilename>
</FileCreate>
</RuleGroup>
# Charger la config et démarrer
sudo sysmon -accepteula -c /opt/sysmon/sysmon-config.xml
sudo systemctl enable sysmon && sudo systemctl start sysmon
Vérification — Lire les Événements
Générez des événements et vérifiez qu'ils sont bien capturés :
# Générer un événement de création de processus (EventID 1)
ls /tmp
# Générer un événement de création de fichier dans /tmp (EventID 11)
touch /tmp/sysmon_test.txt
# Lire les événements en temps réel via journald
sudo journalctl -u sysmon -f
# Ou filtrer les événements de création de processus dans le syslog
grep "ProcessCreate" /var/log/syslog | tail -10
# Vérifier que le service est bien actif
systemctl is-active sysmon && echo "OK: sysmon collecte les événements"
journalctl doit afficher des entrées avec RuleName, ProcessCreate ou FileCreate. Si vous voyez des événements avec CommandLine et Image renseignés, Sysmon collecte bien la télémétrie système.
Pour aller plus loin
- Utiliser la config communautaire sysmon-modular
- Envoyer les événements vers un SIEM via
rsyslogoufilebeat - Corréler les EventIDs Sysmon avec les techniques MITRE ATT&CK
- github.com/microsoft/SysmonForLinux