
Analizza, filtra e visualizza i log Suricata eve.json con strumenti CLI per alert, flussi, DNS e payload. Include un tutorial per imparare Suricata e testare le regole.
Quando ho iniziato a imparare come usare Suricata, ho subito scoperto che avevo bisogno di uno strumento per ispezionare il file eve.json; la maggior parte dei tutorial e della documentazione in circolazione suggeriva di installare uno stack per svolgere le seguenti attività:
Il che è molto utile, ma se avessi solo bisogno di fare una veloce ispezione degli eventi?
Prima o poi ti annoi a morte a fare così:
cat eve.json | jq -r -c 'select(.event_type=="alert")|.payload'| base64 --decode
SuricataLog è un insieme di strumenti/script per analizzare e visualizzare i file di log di Suricata (come /var/log/suricata/eve.json).
Il formato Eve JSON non è molto complesso, quindi ho scritto alcuni script con le funzionalità che ritenevo più utili per l'analisi della mia rete domestica.
Come bonus, ho documentato la mia esperienza di apprendimento in un tutorial che puoi usare per imparare Suricata e anche come testarlo.
Prima di fare qualsiasi altra cosa, assicurati che il tuo ambiente sia pronto:
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
Vuoi contribuire? O hai trovato un bug e pensi di poter inviare una patch? Bello! Ecco cosa puoi fare per eseguire in modalità sviluppo:
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 .
Eseguire i test unitari è molto semplice dopo:
(SuricataLog) [josevnz@dmaf5 SuricataLog]$ python -m unittest test/*.py
.........
----------------------------------------------------------------------
Ran 9 tests in 0.334s
OK
Se i test unitari falliscono, questo è molto probabilmente il primo posto dove risolvere un problema.
Consiglio anche di eseguire la console textualize e osservare i messaggi della console:
# textual console
textual console --exclude SYSTEM --exclude EVENT
Poi su un altro terminale:
textual run --dev --command eve_log --timestamp '2015-01-01 10:41:21.642899' test/eve.json
Questo stamperà anche i messaggi di debug sulla console (puoi escluderli se riavvii la console con '--exclude DEBUG')
Per maggiori dettagli, consulta DOCKER.md.
Una volta che tutto è installato nel tuo ambiente virtuale, dovresti essere in grado di chiamare gli script.
Puoi scoprire quali applicazioni sono state installate usando il completamento automatico, dopo aver attivato il tuo ambiente virtuale:
eve_[tab][tab]
E se installi l'estensione di completamento automatico Bash, riceverai anche alcuni suggerimenti per i flag.
Meglio vedere da soli (ricorda, usa --help per conoscere le opzioni supportate)

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 ...]
This script is inspired by the examples provided on [15.1.3. Eve JSON 'jq' Examples](https://suricata.readthedocs.io/en/suricata-6.0.0/output/eve/eve-json-
examplesjq.html) A few things: * The output uses colorized JSON
positional arguments:
eve Path to one or more /var/log/suricata/eve.json file to parse.
optional arguments:
-h, --help show this help message and exit
--nxdomain Show DNS records with NXDOMAIN
--payload Show alerts with a printable payload
--flow Aggregated flow report per protocol and destination port
--netflow NETFLOW Get the netflow for a given IP address
--useragent Top user agent in HTTP traffic
Dai un'occhiata ad alcuni esempi qui sotto:

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

Puoi eseguire le applicazioni Suricata Log su un browser usando il wrapper eve_server:
# Mostra il report del flusso su un file eve.json
eve_server --application eve_json -- --flow ~/eve.json
# Mostra il report NX domain
eve_server --application eve_json -- --nxdomain ~/eve.json
# Ispeziona i record di eve.json
eve_server --applications eve_log -- ~/eve.json
Devi passare '--' per dire al server che queste opzioni appartengono all'eve_* sottostante che vuoi chiamare.
È anche possibile eseguire SuricataLog da un container Docker. Consulta DOCKER.md per maggiori dettagli.
Se hai uv, puoi semplicemente fare:
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
Hai capito l'idea.
Ho cercato di seguire 8.6 Programmable Completion
Ho fornito il completamento automatico per i flag più comuni. Puoi scoprire tutti i flag passando '--help' a qualsiasi script.
Puoi installare il completamento automatico Bash per tutti gli script SuricataLog. Basta eseguire 'eve_autocomplete' e seguire le istruzioni:
eve_autocomplete --help
Lavoro a questo progetto nel mio tempo libero e non posso supportare ogni combinazione di Linux/Python in circolazione. Questa è la mia configurazione di test attuale, e potrebbe cambiare senza preavviso.
Sei più che benvenuto a:
| SuricataLog | Supportato | Sistema Operativo | 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+ | SI | fedora 40 | => 3.11.4 | 7.0.6 |