
Un outil de détection autonome basé sur SIGMA pour les journaux EVTX, Auditd et Sysmon pour Linux.


Zircolite est un outil autonome écrit en Python 3 qui vous permet d'utiliser des règles SIGMA sur :
--archive-password pour les ZIP/7z chiffrés.Vous pouvez utiliser Zircolite directement avec Python.
La documentation est disponible ici (site dédié) ou ici (répertoire du dépôt).
Le projet a été testé avec Python 3.10 et versions ultérieures. Installez les dépendances avec : pip3 install -r requirements.txt.
orjson, xxhash, rich, rich-argparse, RestrictedPython, requests, urllib3, pySigma, evtx (pyevtx-rs), jinja2, lxml, chardet, psutil, pyyaml, py7zrpy7zr n'est importé que lorsqu'une entrée est ouverte ; ZIP, gzip et bzip2 utilisent la bibliothèque standard.⚠️ Sur certains systèmes (Mac, ARM, etc.), la bibliothèque Python evtx peut nécessiter l'installation de Rust et Cargo.
Découvrez les (anciens) tutoriels réalisés par d'autres (EN, ES et FR) ici.
L'aide est disponible avec :
python3 zircolite.py -h
Si vos fichiers EVTX portent l'extension « .evtx » :
# python3 zircolite.py --evtx <DOSSIER EVTX ou FICHIER EVTX> --ruleset <RULESET SIGMA> [--ruleset <AUTRE RULESET>]
python3 zircolite.py --evtx sysmon.evtx --ruleset rules/rules_windows_merged.json
Vous pouvez utiliser directement des règles Sigma natives (YAML) :
# Règle YAML unique
python3 zircolite.py --evtx sample.evtx --ruleset path/to/rule.yml
# Répertoire de règles Sigma
python3 zircolite.py --evtx sample.evtx --ruleset ./sigma/rules/windows/process_creation
# Avec les pipelines pySigma
python3 zircolite.py --evtx sample.evtx --ruleset rule.yml --pipeline sysmon --pipeline windows-logsources
Zircolite détecte automatiquement le format du journal dans la plupart des cas ; les indicateurs de format explicites sont donc facultatifs :
# Auto-détection (recommandée) - Zircolite identifie le format automatiquement
python3 zircolite.py --events auditd.log --ruleset rules/rules_linux.json
python3 zircolite.py --events sysmon.log --ruleset rules/rules_linux.json
python3 zircolite.py --events <DOSSIER_OU_FICHIER_JSON> --ruleset rules/rules_windows_merged.json
# Indicateurs de format explicites (remplacent l'auto-détection)
python3 zircolite.py --events auditd.log --ruleset rules/rules_linux.json --auditd
python3 zircolite.py --events sysmon.log --ruleset rules/rules_linux.json --sysmon4linux
python3 zircolite.py --events <DOSSIER_OU_FICHIER_JSON> --ruleset rules/rules_windows_merged.json --jsononly
python3 zircolite.py --events <DOSSIER_OU_FICHIER_JSON> --ruleset rules/rules_windows_merged.json --json-array
python3 zircolite.py --events <DOSSIER_OU_FICHIER_CSV> --ruleset rules/rules_windows_merged.json --csv-input
python3 zircolite.py --events <DOSSIER_OU_FICHIER_XML> --ruleset rules/rules_windows_merged.json --xml-input
--events peut être un fichier ou un dossier. S'il s'agit d'un dossier, tous les fichiers journaux du dossier courant et de ses sous-dossiers seront sélectionnés (utilisez --no-recursion pour désactiver).--file-pattern pour spécifier un modèle glob personnalisé pour la sélection des fichiers.--no-auto-detect pour désactiver la détection automatique du format.[!TIP] Si vous souhaitez essayer l'outil, vous pouvez tester avec EVTX-ATTACK-SAMPLES (fichiers EVTX).
# Récupérez l'image Docker
docker pull wagga40/zircolite:latest
# Si vos journaux et règles se trouvent dans un répertoire spécifique
docker run --rm --tty \
-v $PWD:/case/input:ro \
-v $PWD:/case/output \
wagga40/zircolite:latest \
-e /case/input \
-o /case/output/detected_events.json \
-r /case/input/a_sigma_rule.yml
$PWD par le répertoire (chemin absolu uniquement) où sont stockés vos journaux et règles/rulesets.Étant donné plusieurs fichiers, Zircolite les évalue par rapport à la RAM et au CPU disponibles, choisit un mode de base de données (une base partagée ou une par fichier) et décide si leur traitement en parallèle en vaut la peine — puis adapte le nombre de workers à la pression mémoire au fur et à mesure de l'exécution.
python3 zircolite.py --evtx ./logs/ --ruleset rules/rules_windows_merged.json
Remplacez tout cela avec --no-auto-mode, --unified-db (une base de données pour tous les fichiers, ce dont les règles de corrélation inter-fichiers ont besoin), --no-parallel ou --parallel-workers N. Consultez Optimisation automatique du traitement pour comprendre comment le choix est effectué.
Pour des flux d'analyse complexes ou répétés, utilisez un fichier de configuration YAML :
# Génère un fichier de configuration entièrement commenté
python3 zircolite.py --generate-config my_config.yaml
# Exécution avec ce fichier
python3 zircolite.py --yaml-config my_config.yaml
# Les arguments CLI remplacent le fichier
python3 zircolite.py --yaml-config my_config.yaml --evtx ./other_logs/
Le fichier généré documente chaque clé prise en charge ; config/zircolite_example.yaml est un exemple complet. Consultez Configuration YAML pour les règles de fusion et les options sans équivalent YAML.
python3 zircolite.py -U
Sinon, si vous utilisez Task (go-task), exécutez task update-rules à la racine du projet pour mettre à jour les règles depuis Zircolite-Rules-v2. Consultez les docs pour les autres tâches (build Docker, nettoyage, etc.).
[!IMPORTANT]
Veuillez noter que ces rulesets sont fournis pour utiliser Zircolite immédiatement, mais vous devriez générer vos propres rulesets car ils peuvent être bruités ou lents. Ces rulesets mis à jour automatiquement sont disponibles dans le dépôt dédié : Zircolite-Rules-v2.
Deux options de configuration façonnent les événements lors de leur ingestion, toutes deux dans config/config.yaml :
Hashes de Sysmon (SHA1=abc123,MD5=def456,SHA256=789xyz) devient des champs distincts SHA1, MD5 et SHA256, permettant aux règles de correspondre directement à un hash.split:
Hashes:
separator: ","
equal: "="
Consultez Découpage de champs et Transformations de champs pour la configuration complète, les transformations fournies par Zircolite et la manière de tester les vôtres.
La documentation complète est disponible ici.
La Mini-GUI peut être utilisée entièrement hors ligne. Elle vous permet d'afficher et de rechercher des résultats. Vous pouvez générer automatiquement un « package » Mini-GUI avec l'option --package. Utilisez --package-dir pour spécifier le répertoire de sortie. Pour apprendre à utiliser la Mini-GUI, consultez la documentation ici.



Anglais : Russ McRee a publié un tutoriel détaillé sur SIGMA et Zircolite sur son blog.
Espagnol : César Marín a publié un tutoriel en espagnol ici.
Français : IT-connect.fr a publié un tutoriel complet sur Zircolite en français.
Français : IT-connect.fr a également publié un write-up de défi Hack the Box utilisant Zircolite.
evtx_dump est sous licence MIT..7z