
Analise, filtre e visualize logs eve.json do Suricata com ferramentas CLI para alertas, fluxos, DNS e payloads. Inclui um tutorial para aprender Suricata e testar regras.
Quando comecei a aprender como usar o Suricata, rapidamente descobri que precisava de uma ferramenta para inspecionar o arquivo eve.json; A maioria dos tutoriais e documentação por aí sugeria instalar uma pilha para realizar as seguintes tarefas:
O que é muito útil, mas e se eu só precisasse fazer uma inspeção rápida dos eventos?
Mais cedo ou mais tarde você vai morrer de tédio fazendo isso:
cat eve.json | jq -r -c 'select(.event_type=="alert")|.payload'| base64 --decode
SuricataLog é um conjunto de ferramentas/scripts para analisar e exibir arquivos de log do Suricata (como /var/log/suricata/eve.json)
O formato Eve JSON não é muito complexo, então escrevi alguns scripts com os recursos que achei mais úteis para a análise da minha rede doméstica.
Como bônus, escrevi minha experiência de aprendizado como um tutorial que você pode usar para aprender sobre o Suricata e também como testá-lo.
Antes de fazer qualquer outra coisa, certifique-se de que seu ambiente está 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
Então você quer contribuir? Ou encontrou um bug e acha que pode enviar um patch? Legal! Aqui está o que você pode fazer para executar em modo de desenvolvimento:
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 .
Executar testes unitários é muito fácil depois disso:
(SuricataLog) [josevnz@dmaf5 SuricataLog]$ python -m unittest test/*.py
.........
----------------------------------------------------------------------
Ran 9 tests in 0.334s
OK
Se os testes unitários falharem, então este é provavelmente o primeiro lugar para corrigir um problema.
Também recomendo executar o console textualize e observar as mensagens do console:
# textual console
textual console --exclude SYSTEM --exclude EVENT
Em outro terminal:
textual run --dev --command eve_log --timestamp '2015-01-01 10:41:21.642899' test/eve.json
Isso imprimirá até mensagens de depuração no console (você pode excluí-las se reiniciar o console com '--exclude DEBUG')
Por favor, verifique DOCKER.md para mais detalhes.
Uma vez que tudo esteja instalado em seu ambiente virtual, você deve ser capaz de chamar os scripts
Você pode descobrir quais aplicativos foram instalados usando o autocompletar, após ativar seu ambiente virtual:
eve_[tab][tab]
E se você instalar a extensão de autocompletar Bash, também receberá algumas sugestões para as flags.
Melhor ver por si mesmo (lembre-se, use --help para aprender quais opções são suportadas)

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 é inspirado nos exemplos fornecidos em [15.1.3. Eve JSON ‘jq’ Examples](https://suricata.readthedocs.io/en/suricata-6.0.0/output/eve/eve-json-
examplesjq.html) Algumas coisas: * A saída usa JSON colorido
argumentos posicionais:
eve Caminho para um ou mais arquivos /var/log/suricata/eve.json para analisar.
argumentos opcionais:
-h, --help Mostra esta mensagem de ajuda e sai
--nxdomain Mostra registros DNS com NXDOMAIN
--payload Mostra alertas com payload imprimível
--flow Relatório de fluxo agregado por protocolo e porta de destino
--netflow NETFLOW Obtém o netflow para um determinado endereço IP
--useragent Principais user agents no tráfego HTTP
Veja alguns exemplos abaixo:

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

Você pode executar as aplicações Suricata Log em um navegador usando o wrapper eve_server:
# Mostrar relatório de fluxo em um arquivo eve.json
eve_server --application eve_json -- --flow ~/eve.json
# Mostrar relatório de NX domain
eve_server --application eve_json -- --nxdomain ~/eve.json
# Inspecionar os registros eve.json
eve_server --applications eve_log -- ~/eve.json
Você precisa passar o '--' para informar ao servidor que essas opções pertencem à eve_* subjacente que você deseja chamar.
Também é possível executar SuricataLog a partir de um contêiner Docker. Consulte DOCKER.md para mais detalhes.
Se você tiver uv, pode simplesmente fazer isso:
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
Você entendeu a ideia.
Tentei ao máximo seguir 8.6 Programmable Completion
Forneci autocompletar para as flags mais comuns. Você pode descobrir todas as flags passando '--help' para qualquer um dos scripts.
Você pode instalar o autocompletar Bash para todos os scripts SuricataLog. Basta executar 'eve_autocomplete' e seguir as instruções:
eve_autocomplete --help
Trabalho neste projeto no meu tempo livre e não posso suportar todas as combinações de Linux/Python existentes. Esta é minha bancada de testes atual e pode mudar sem aviso prévio.
Você é mais do que bem-vindo para:
| SuricataLog | Suportado | SO | Python | Suricata |
|---|
| <= 0.8 | NÃO | NA | < 3.8 | 6.04 |
| 0.9+ | NÃO | fedora 37 | => 3.11.4 | 6.04 |
| 0.9+ | NÃO | Armbian 23.02.2 Jammy | => 3.10.6 | 6.04 |
| 0.9+ | NÃO | Ubuntu 20.04.4 LTS (Focal Fossa) | => 3.8.10 | 6.04 |
| 1.0.3+ | SIM | fedora 40 | => 3.11.4 | 7.0.6 |