
Analiza, filtra y visualiza registros eve.json de Suricata con herramientas CLI para alertas, flujos, DNS y cargas útiles. Incluye un tutorial para aprender Suricata y probar reglas.
Cuando empecé a aprender cómo usar Suricata, rápidamente descubrí que necesitaba una herramienta para inspeccionar el archivo eve.json; la mayoría de los tutoriales y la documentación disponibles sugerían instalar un stack para realizar las siguientes tareas:
Lo cual es muy útil, pero ¿qué pasa si solo necesito hacer una inspección rápida de los eventos?
Tarde o temprano te aburrirás hasta la muerte haciendo esto:
cat eve.json | jq -r -c 'select(.event_type=="alert")|.payload'| base64 --decode
SuricataLog es un conjunto de herramientas/scripts para analizar y mostrar archivos de registro de Suricata (como /var/log/suricata/eve.json)
El formato Eve JSON no es muy complejo, así que escribí algunos scripts con las funciones que pensé que serían más útiles para el análisis de mi red doméstica.
Como bonus, escribí mi experiencia de aprendizaje como un tutorial que puedes usar para aprender sobre Suricata y también cómo probarlo.
Antes de hacer cualquier otra cosa, asegúrate de que tu entorno esté listo:
python3 -m venv ~/virtualenv/suricatalog
. ~/virtualenv/suricatalog/bin/activate
python3 -m pip install --upgrade pip setuptools wheel
pip3 install --upgrade SuricataLog
git clone [email protected]:josevnz/SuricataLog.git
cd SuricataLog
python3 -m venv ~/virtualenv/suricatalog
. ~/virtualenv/suricatalog/bin/activate
python3 -m pip install --upgrade build
python3 -m build
pip3 install dist/SuricataLog-X.Y.Z-py3-none-any.whl
¿Quieres contribuir? ¿O encontraste un error y crees que puedes enviar un parche? ¡Genial! Esto es lo que puedes hacer para ejecutar en modo de desarrollo:
git clone [email protected]:josevnz/SuricataLog.git
cd SuricataLog
python3 -m venv ~/virtualenv/suricatalog
. ~/virtualenv/suricatalog/bin/activate
pip install --upgrade pip
python -m pip install --upgrade build
pip install textual-dev
pip install --editable .
Ejecutar las pruebas unitarias es muy fácil después de eso:
(SuricataLog) [josevnz@dmaf5 SuricataLog]$ python -m unittest test/*.py
.........
----------------------------------------------------------------------
Ran 9 tests in 0.334s
OK
Si las pruebas unitarias fallan, entonces este es probablemente el primer lugar para solucionar un problema.
También recomiendo ejecutar la consola de textualize y observar los mensajes de la consola:
# textual console
textual console --exclude SYSTEM --exclude EVENT
Luego, en otra terminal:
textual run --dev --command eve_log --timestamp '2015-01-01 10:41:21.642899' test/eve.json
Eso imprimirá incluso mensajes de depuración en la consola (puedes excluirlos si reinicias la consola con '--exclude DEBUG')
Por favor, consulta DOCKER.md para más detalles.
Una vez que todo esté instalado en tu entorno virtual, deberías poder llamar a los scripts.
Puedes averiguar qué aplicaciones se instalaron usando el autocompletado, después de activar tu entorno virtual:
eve_[tab][tab]
Y si instalas la extensión de autocompletado de Bash, también obtendrás algunas sugerencias para las banderas.
Mejor véelo por ti mismo (recuerda, usa --help para aprender qué opciones están disponibles)

eve_log --timestamp '2015-01-01 10:41:21.642899' --formats TABLE test/eve.json
(suricatalog) [josevnz@dmaf5 SuricataLog]$ eve_json --help
usage: eve_json [-h] [--nxdomain | --payload | --flow | --netflow NETFLOW | --useragent] eve [eve ...]
Este script está inspirado en los ejemplos proporcionados en [15.1.3. Eve JSON 'jq' Examples](https://suricata.readthedocs.io/en/suricata-6.0.0/output/eve/eve-json-
examplesjq.html) Algunas cosas: * La salida usa JSON coloreado
positional arguments:
eve Ruta a uno o más archivos /var/log/suricata/eve.json para analizar.
optional arguments:
-h, --help Muestra este mensaje de ayuda y salida
--nxdomain Muestra registros DNS con NXDOMAIN
--payload Muestra alertas con un payload imprimible
--flow Informe de flujo agregado por protocolo y puerto de destino
--netflow NETFLOW Obtiene el netflow para una dirección IP dada
--useragent Agente de usuario principal en el tráfico HTTP
Mira algunos ejemplos a continuación:

eve_json --nxdomain test/eve.json

eve_json --payload ~/Downloads/eve.json

eve_json --flow test/eve_udp_flow.json

eve_json --netflow 224.0.0.251 test/eve_udp_flow.json

eve_json --useragent test/eve.json

Puedes ejecutar las aplicaciones de Suricata Log en un navegador usando el envoltorio eve_server:
# Muestra el informe de flujo en un archivo eve.json
eve_server --application eve_json -- --flow ~/eve.json
# Muestra el informe de NX domain
eve_server --application eve_json -- --nxdomain ~/eve.json
# Inspecciona los registros de eve.json
eve_server --applications eve_log -- ~/eve.json
Debes pasar '--' para indicar al servidor que estas opciones pertenecen a la eve_* subyacente que deseas llamar.
También es posible ejecutar SuricataLog desde un contenedor Docker. Consulta DOCKER.md para más detalles.
Si tienes uv, puedes hacer simplemente esto:
uvx --from SuricataLog eve_log /var/log/suricata/eve.json
uvx --from SuricataLog eve_json --useragent /var/log/suricata/eve.json
uvx --from SuricataLog eve_server --application eve_json -- --flow /var/log/suricata/eve.json
Te haces una idea.
Hice lo mejor que pude para seguir 8.6 Programmable Completion
Proporcioné autocompletado para las banderas más comunes. Puedes descubrir todas las banderas pasando '--help' a cualquiera de los scripts.
Puedes instalar el autocompletado de Bash para todos los scripts de SuricataLog. Simplemente ejecuta 'eve_autocomplete' y sigue las instrucciones:
eve_autocomplete --help
Trabajo en este proyecto en mi tiempo libre y no puedo soportar todas las combinaciones de versiones de Linux/Python que existen. Esta es mi plataforma de pruebas actual, y puede cambiar sin previo aviso
Eres más que bienvenido a:
| SuricataLog | Compatible | SO | Python | Suricata |
|---|
| <= 0.8 | NO | NA | < 3.8 | 6.04 |
| 0.9+ | NO | fedora 37 | => 3.11.4 | 6.04 |
| 0.9+ | NO | Armbian 23.02.2 Jammy | => 3.10.6 | 6.04 |
| 0.9+ | NO | Ubuntu 20.04.4 LTS (Focal Fossa) | => 3.8.10 | 6.04 |
| 1.0.3+ | SÍ | fedora 40 | => 3.11.4 | 7.0.6 |