Chasse aux menaces locale-first pour les journaux dont vous disposez déjà : Zeek, Pi-hole, syslog ou le journal systemd, CloudTrail. Chaque exécution nomme la technique derrière chaque détecteur. Pas d'agent, pas de démon, pas de boîte noire - entre grep et un SIEM.

entre grep et un SIEM
sigwood est un outil local-first en ligne de commande pour la chasse aux menaces, destiné aux auto-hébergeurs. Pointez-le vers
des journaux que vous possédez déjà - Zeek, Pi-hole/dnsmasq, syslog ou CloudTrail - et il profile
leur contenu, puis exécute une série de détecteurs dessus : balisage (beaconing), DNS suspect, scans
de ports, transferts sortants massifs, configurations TLS atypiques, structure d'authentification, événements
syslog rares, activité CloudTrail inhabituelle et motifs comportementaux dans les noms que votre Pi-hole
a déjà bloqués.
Pas un SIEM. Pas un agent. Pas de la magie. Rien à déployer - pas de base de données, pas de démon, pas de réseau, pas de compte. Installez-le, pointez-le vers un répertoire de journaux, lisez la sortie. Il s'exécute sur votre propre machine, sur des journaux au repos, et vos journaux n'ont jamais besoin de quitter votre machine.
Statut : stable (
1.2.0). Les dix détecteurs fonctionnent et sont couverts par des tests ; ce que signifie 1.0 indique quelles interfaces sont désormais figées et lesquelles ne le sont pas. Développé avec une assistance IA intensive sous relecture humaine ; la FAQ explique comment, et le registre de preuves consigne ce qui a été mesuré et ce qui ne l'a pas été. Les retours sont les bienvenus.
Installer · Manuel · FAQ · Contrat · Feuille de route · Problèmes connus · Schémas · Travaux antérieurs · Sécurité
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
C'est tout - aucune configuration requise. Voici le type de résultat qu'une exécution fait apparaître (sortie illustrative, pas de données réseau réelles) :
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
Lisez de haut en bas, c'est une histoire : un hôte interne effectuant des requêtes à haute entropie sous un domaine jetable, appelant deux IP externes selon un calendrier fixe, et une connexion SSH root depuis l'une de ces mêmes IP. Un constat signifie « inhabituel pour votre réseau », pas « connu comme malveillant » - c'est une piste à examiner, pas un verdict. Ajoutez -v pour obtenir les preuves derrière chaque score et les prochaines étapes pour l'approfondir.
Vous n'avez qu'un Pi-hole ? C'est une configuration complète à elle seule :
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
Les invocations habituelles :
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
Pas de journaux sous la main ? Le dépôt inclut un petit générateur de corpus synthétique - un hôte compromis, aucune donnée réseau réelle - afin que vous puissiez d'abord observer son fonctionnement :
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
Les journaux générés se trouvent sous demo/corpus/ (ignoré par git) ; la procédure complète se trouve dans
demo/README.md. Voici une
exécution complète sur ce corpus, suivie des mêmes résultats au format HTML :
...et les mêmes flux rejoués par sigwood graph, un seul fichier HTML autonome :