
Caza de amenazas local-first para los registros que ya tienes: Zeek, Pi-hole, syslog o el journal de systemd, CloudTrail. Cada ejecución nombra la técnica detrás de cada detector. Sin agente, sin demonio, sin caja negra: entre grep y un SIEM.

entre grep y un SIEM
sigwood es una herramienta local-first de línea de comandos para la caza de amenazas, pensada para autoalojadores. Apúntala a
registros que ya tienes - Zeek, Pi-hole/dnsmasq, syslog o CloudTrail - y perfila
lo que contienen, luego ejecuta un puñado de detectores sobre ellos: beaconing, DNS sospechoso, escaneos
de puertos, transferencias salientes masivas, configuraciones TLS atípicas, estructura de autenticación, eventos
syslog poco frecuentes, actividad inusual de CloudTrail y patrones de comportamiento en nombres que tu Pi-hole
ya había bloqueado.
No es un SIEM. No es un agente. No es magia. Nada que desplegar - sin base de datos, sin demonio, sin red, sin cuenta. Instálalo, apúntalo a un directorio de registros, lee la salida. Se ejecuta en tu propia máquina, sobre registros en reposo, y tus registros nunca tienen que salir de tu equipo.
Estado: estable (
1.2.0). Los diez detectores funcionan y están cubiertos por pruebas; qué significa 1.0 indica qué interfaces están ahora fijadas y cuáles no. Construido con una fuerte asistencia de IA bajo revisión humana; las FAQ explican cómo, y el registro de evidencias documenta qué se ha medido y qué no. Los comentarios son bienvenidos.
Instalar · Manual · FAQ · Contrato · Hoja de ruta · Problemas conocidos · Esquemas · Trabajo previo · Seguridad
pipx install sigwood # or: pip install sigwood in a venv - see Installation
sigwood /var/log/ # point it at a directory
sigwood /opt/zeek/dns.log # or a single file
Eso es todo: no se requiere configuración. Este es el tipo de cosas que una ejecución saca a la luz (salida ilustrativa, no datos de red reales):
dns - 1 finding · 1 high
domain names that stand apart from the rest, including machine-generated-looking
names of the sort malware uses for disposable command domains, and large batches
of related lookups
────────────────────────────────────────────────────────────────────────────────
groups (1)
names entropy score queries clients
high 16 2.10-1.85 418 1 k7x2p9qz3f.example
beacon - 2 findings · 2 medium
outbound connections that keep a regular rhythm
────────────────────────────────────────────────────────────────────────────────
medium 192.168.1.37 → 198.51.100.20:443/tcp period=3.0m rhythm=0.624 480 conns
medium 192.168.1.37 → 203.0.113.50:8443/tcp period=10.0m rhythm=0.606 144 conns
syslog - 1 finding · 1 medium
rare log patterns, and recorded reboots or administrative runs, so changes on a
machine do not disappear into routine logs
────────────────────────────────────────────────────────────────────────────────
privileged (1)
medium Accepted password for root from 198.51.100.20 port 51900 ssh2
-v explains why each finding surfaced
Léelo de arriba a abajo, eso es una historia: un host interno realizando consultas de alta entropía bajo un dominio desechable, comunicándose con dos IPs externas según un horario fijo, y un inicio de sesión SSH como root desde una de esas mismas IPs. Un hallazgo significa "inusual para tu red", no "conocido como malicioso" - es una pista que investigar, no un veredicto. Añade -v para ver la evidencia detrás de cada puntuación y los siguientes pasos para investigarlo.
¿Solo tienes un Pi-hole? Eso es una configuración completa por sí sola:
sigwood digest /var/log/pihole/pihole.log # orient: what's in the log
sigwood /var/log/pihole/ # hunt: DNS clustering over your queries
sigwood dnsblock /var/log/pihole/ # bonus: behavior in names Pi-hole blocked
Las invocaciones habituales:
sigwood digest /var/log/messages # orient first - a fast, factual profile of a file
sigwood graph /opt/zeek # replay the flows as a self-contained HTML artifact
sigwood syslog /var/log # run a single detector
sigwood init # detection-driven setup, writes a config
sigwood hunt # run the curated default hunt
¿No tienes logs a mano? El repositorio incluye un pequeño generador de corpus sintético —un host comprometido, sin datos de red reales— para que puedas verlo funcionar primero:
git clone https://github.com/helixmap/sigwood
cd sigwood
python3 demo/gen_corpus.py # writes a synthetic corpus; no network calls
sigwood hunt --config=demo/sigwood.toml # beacons, a DGA burst, a bulk transfer out, and the syslog trail
Los registros generados se encuentran en demo/corpus/ (ignorado por git); el recorrido completo está en
demo/README.md. Aquí hay una
ejecución completa contra ese corpus, seguida de los mismos hallazgos en formato HTML:
...y los mismos flujos reproducidos por sigwood graph, un único archivo HTML autocontenido:
Un solo nombre en todas partes: la distribución de PyPI, el comando, el paquete de importación y la sección
de configuración son todos sigwood. Requiere Python 3.11 hasta 3.14; 3.15 se rechaza en el momento de la instalación
hasta que su pila de dependencias publique wheels para ella.