
Una herramienta de detección independiente basada en SIGMA para registros de EVTX, Auditd y Sysmon de Linux


Zircolite es una herramienta autónoma escrita en Python 3 que te permite usar reglas SIGMA sobre:
--archive-password para ZIP/7z cifrados.Puedes usar Zircolite directamente con Python.
La documentación está disponible aquí (sitio dedicado) o aquí (directorio del repositorio).
El proyecto ha sido probado con Python 3.10 y versiones posteriores. Instala las dependencias con: pip3 install -r requirements.txt.
orjson, xxhash, rich, rich-argparse, RestrictedPython, requests, urllib3, pySigma, evtx (pyevtx-rs), jinja2, lxml, chardet, psutil, pyyaml, py7zrpy7zr se importa solo cuando se abre una entrada ; ZIP, gzip y bzip2 usan la biblioteca estándar.⚠️ En algunos sistemas (Mac, ARM, etc.), la biblioteca Python evtx puede requerir que Rust y Cargo estén instalados.
Consulta los (antiguos) tutoriales hechos por otras personas (EN, ES y FR) aquí.
La ayuda está disponible con:
python3 zircolite.py -h
Si tus archivos EVTX tienen la extensión ".evtx":
# python3 zircolite.py --evtx <CARPETA EVTX o ARCHIVO EVTX> --ruleset <RULESET SIGMA> [--ruleset <OTRO RULESET>]
python3 zircolite.py --evtx sysmon.evtx --ruleset rules/rules_windows_merged.json
Puedes usar reglas Sigma nativas (YAML) directamente:
# Regla YAML única
python3 zircolite.py --evtx sample.evtx --ruleset path/to/rule.yml
# Directorio de reglas Sigma
python3 zircolite.py --evtx sample.evtx --ruleset ./sigma/rules/windows/process_creation
# Con pipelines pySigma
python3 zircolite.py --evtx sample.evtx --ruleset rule.yml --pipeline sysmon --pipeline windows-logsources
Zircolite detecta automáticamente el formato de log en la mayoría de los casos, por lo que los indicadores de formato explícitos son opcionales:
# Autodetección (recomendada) - Zircolite identifica el formato automáticamente
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 <CARPETA_O_ARCHIVO_JSON> --ruleset rules/rules_windows_merged.json
# Indicadores de formato explícitos (anulan la autodetección)
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 <CARPETA_O_ARCHIVO_JSON> --ruleset rules/rules_windows_merged.json --jsononly
python3 zircolite.py --events <CARPETA_O_ARCHIVO_JSON> --ruleset rules/rules_windows_merged.json --json-array
python3 zircolite.py --events <CARPETA_O_ARCHIVO_CSV> --ruleset rules/rules_windows_merged.json --csv-input
python3 zircolite.py --events <CARPETA_O_ARCHIVO_XML> --ruleset rules/rules_windows_merged.json --xml-input
--events puede ser un archivo o una carpeta. Si es una carpeta, se seleccionarán todos los archivos de log de la carpeta actual y sus subcarpetas (usa --no-recursion para deshabilitarlo).--file-pattern para especificar un patrón glob personalizado para la selección de archivos.--no-auto-detect para deshabilitar la detección automática de formato.[!TIP] Si quieres probar la herramienta, puedes probar con EVTX-ATTACK-SAMPLES (archivos EVTX).
# Descargar la imagen Docker
docker pull wagga40/zircolite:latest
# Si tus logs y reglas están en un directorio específico
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 con el directorio (solo ruta absoluta) donde se almacenan tus logs y reglas/rulesets.Dados varios archivos, Zircolite los mide contra la RAM y la CPU disponibles, elige un modo de base de datos (una base de datos compartida, o una por archivo) y decide si vale la pena procesarlos en paralelo — luego adapta el número de trabajadores a la presión de memoria durante la ejecución.
python3 zircolite.py --evtx ./logs/ --ruleset rules/rules_windows_merged.json
Anula cualquiera de estas opciones con --no-auto-mode, --unified-db (una base de datos para todos los archivos, que es lo que necesitan las reglas de correlación entre archivos), --no-parallel o --parallel-workers N. Consulta Optimización Automática del Procesamiento para saber cómo se toma la decisión.
Para flujos de trabajo de análisis complejos o repetidos, usa un archivo de configuración YAML:
# Genera un archivo de configuración completamente comentado
python3 zircolite.py --generate-config my_config.yaml
# Ejecutar con él
python3 zircolite.py --yaml-config my_config.yaml
# Los argumentos de la CLI anulan el archivo
python3 zircolite.py --yaml-config my_config.yaml --evtx ./other_logs/
El archivo generado documenta cada clave admitida; config/zircolite_example.yaml es un
ejemplo práctico. Consulta Configuración YAML para conocer las reglas de fusión
y las opciones que no tienen equivalente YAML.
python3 zircolite.py -U
Alternativamente, si usas Task (go-task), ejecuta task update-rules desde la raíz del proyecto para actualizar los rulesets desde Zircolite-Rules-v2. Consulta la documentación para otras tareas (compilación de Docker, limpieza, etc.).
[!IMPORTANT]
Ten en cuenta que estos rulesets se proporcionan para usar Zircolite sin configuración adicional, pero deberías generar tus propios rulesets ya que pueden ser ruidosos o lentos. Estos rulesets autoactualizados están disponibles en el repositorio dedicado: Zircolite-Rules-v2.
Dos características de configuración dan forma a los eventos a medida que se ingieren, ambas en config/config.yaml:
Hashes de Sysmon (SHA1=abc123,MD5=def456,SHA256=789xyz) se convierte en campos separados SHA1, MD5 y SHA256, de modo que las reglas puedan coincidir directamente con un hash.split:
Hashes:
separator: ","
equal: "="
Consulta División de Campos y Transformaciones de Campos para ver la configuración completa, las transformaciones que incluye Zircolite y cómo probar las tuyas propias.
La documentación completa está disponible aquí.
La Mini-GUI se puede usar completamente sin conexión. Te permite mostrar y buscar resultados. Puedes generar automáticamente un "paquete" de la Mini-GUI con la opción --package. Usa --package-dir para especificar el directorio de salida. Para aprender a usar la Mini-GUI, consulta la documentación aquí.



Inglés: Russ McRee ha publicado un tutorial detallado sobre SIGMA y Zircolite en su blog.
Español: César Marín ha publicado un tutorial en español aquí.
Francés: IT-connect.fr ha publicado un extenso tutorial sobre Zircolite en francés.
Francés: IT-connect.fr también ha publicado un write-up del reto Hack the Box usando Zircolite.
evtx_dump está bajo la licencia MIT..7z