mini-siem
Mini-SIEM: ingestão, normalização e correlação de logs com detecção de ataques.
9 testes · 9 passou · 0 falhou · 0 skip
- test_package_importable0.00s
- test_source_files_present0.00s
- test_parse_ssh_failure0.00s
- test_parse_ssh_success0.00s
- test_parse_nginx0.00s
- test_bruteforce_detection0.00s
- test_web_scan_detection0.00s
- test_store_ingest_and_query0.00s
- test_stats0.00s
Entrypoints (CLI)
minisiem
Módulos e funções principais
minisiem/__init__.py
- —
minisiem/cli.py
main()
minisiem/parsers.py
parse_line()parse_stream()
minisiem/store.py
detect_bruteforce()— Regra: N falhas de autenticação do mesmo IP => brute-force.detect_web_scan()— Regra: muitos 404 do mesmo IP => varredura web.run_all_rules()
Estrutura de arquivos
- LICENSE
- README.md
- mini_siem.egg-info/PKG-INFO
- mini_siem.egg-info/SOURCES.txt
- mini_siem.egg-info/dependency_links.txt
- mini_siem.egg-info/entry_points.txt
- mini_siem.egg-info/requires.txt
- mini_siem.egg-info/top_level.txt
- minisiem/__init__.py
- minisiem/cli.py
- minisiem/parsers.py
- minisiem/store.py
- pyproject.toml
- samples/auth.log
- tests/test_imports.py
- tests/test_siem.py
README
# Mini-SIEM 📊
Um SIEM caseiro (mini-Splunk) que **ingere logs**, **normaliza** em eventos estruturados, **armazena** em SQLite, permite **consultas** e roda **regras de correlação/detecção** (brute-force SSH, varredura web).
> Núcleo funcional (parsers + storage + regras) pronto. Dashboard React/Grafana e backend Go estão no roadmap — ver abaixo.
## Estado atual (funcional ✅)
- Parsers: **sshd** (auth_failure/success/invalid_user), **syslog**, **nginx access**
- Armazenamento e consulta em **SQLite**
- Regras de detecção:
- `ssh_bruteforce` — N falhas do mesmo IP
- `web_scan` — muitos 404 do mesmo IP
- CLI de ingestão (arquivo ou stdin), consulta, stats e detecção
## Instalação
```bash
git clone https://github.com/Diogo-Damasceno/mini-siem.git
cd mini-siem
pip install -e .
```
## Uso
```bash
# ingerir o log de exemplo (detecta brute-force + web scan)
minisiem --db siem.db ingest samples/auth.log
# via stdin (ex.: journald)
journalctl -u sshd --no-pager | minisiem ingest
# consultar e estatísticas
minisiem --db siem.db query --type auth_failure
minisiem --db siem.db stats
minisiem --db siem.db detect
```
### Saída de exemplo
```
[*] 18 eventos ingeridos.
[!] CRITICAL ssh_bruteforce: 6 tentativas de autenticação falhas de 45.9.148.2
[!] WARNING web_scan: 11 respostas 404 de 185.100.87.1 (possível varredura)
```
## Arquitetura
```
minisiem/
├── parsers.py # normalização de logs -> Event [✅ funcional]
├── store.py # SQLite + regras de detecção [✅ funcional]
└── cli.py # ingestão / consulta / detecção [✅ funcional]
```
## Roadmap (expansão para SIEM completo)
- [ ] Backend HTTP (FastAPI/Go) expondo consultas e alertas
- [ ] Dashboard web (React) com gráficos de eventos/alertas
- [ ] Coletores para Docker, firewall (nftables), auditd
- [ ] Regras adicionais (impossible travel, exfil, privilege escalation)
- [ ] PostgreSQL como backend para alto volume
- [ ] Integração com o Threat Intelligence Platform (enriquecimento de IOCs)
## Testes
```bash
pip install -e '.[dev]'
pytest -q
```
## Licença
MIT
Como rodar na prática (entrada → saída):
$ mini-siem ingest auth.log
142 eventos (failed_password) ALERTA: brute-force de 192.0.2.10 (142 tentativas)
$ mini-siem query 'SELECT * FROM alerts'
id=1 brute-force 192.0.2.10 id=2 web-scan 203.0.113.22