enodia-sentinal/enodia_sentinel
Luna a56d72edd6 Add incident grouping (roadmap v0.8: incident list/show/export)
Collapse related alerts into one incident, process-lineage first with a
time-window fallback. Each alert batch's flagged PIDs are walked up the
/proc PPid chain into a lineage set (excluding pid 0/1 so everything
doesn't correlate through init); batches whose lineage sets intersect —
sharing a process or a common ancestor like the web server or SSH
session — join the same incident. PID-less batches (FIM drift, package
tamper, hidden modules) fall back to the most recently active open
incident within incident_window.

snapshot.capture now computes lineage and records each snapshot into a
JSON incident index (incidents.json), writing incident_id into both the
report JSON (report level, so the per-alert schema is untouched) and the
text header. New commands:

  incident list              incidents newest-first, with signatures
  incident show <id>         summary + time-ordered snapshot timeline
  incident export <id>       JSON bundle: record + inlined snapshots

The lineage/assign cores are pure functions; record() serializes the
index under a lock (capture runs from sweep + eBPF threads) and is
best-effort so an index problem never loses a snapshot. 17 new tests
(lineage, assign, record, and an end-to-end capture→group→CLI path).
Config: incident_tracking / incident_window / incident_lineage_depth.
Docs + sample config updated; closes the last v0.8 roadmap item.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 17:52:42 -07:00
..
detectors Add false-positive triage via package-ownership provenance 2026-05-31 22:05:00 -07:00
events Add event-driven eBPF execve layer with a Snort-style rule engine 2026-05-31 07:16:53 -07:00
notify Add read-only web dashboard and phone push notifications 2026-05-31 16:18:00 -07:00
static Add tamper-evidence: package-DB integrity, self-integrity, dead-man's switch 2026-05-31 22:27:50 -07:00
__init__.py Add platform docs; reposition as host security platform 2026-06-10 04:03:06 -07:00
alert.py Add event-driven eBPF execve layer with a Snort-style rule engine 2026-05-31 07:16:53 -07:00
cli.py Add incident grouping (roadmap v0.8: incident list/show/export) 2026-06-10 17:52:42 -07:00
config.py Add incident grouping (roadmap v0.8: incident list/show/export) 2026-06-10 17:52:42 -07:00
daemon.py Add signed-package verification and anti-rootkit cross-view (v0.7) 2026-06-01 05:42:57 -07:00
fim.py Add file integrity monitoring (Tripwire-style), auto-refreshed via pacman hook 2026-05-31 22:18:42 -07:00
incident.py Add incident grouping (roadmap v0.8: incident list/show/export) 2026-06-10 17:52:42 -07:00
netutil.py Relicense under GPL-3.0-or-later 2026-05-31 06:52:34 -07:00
pkgdb.py Add platform docs; reposition as host security platform 2026-06-10 04:03:06 -07:00
posture.py Add host posture checks (roadmap v0.8: posture check) 2026-06-10 05:15:06 -07:00
provenance.py Add false-positive triage via package-ownership provenance 2026-05-31 22:05:00 -07:00
rootcheck.py Add signed-package verification and anti-rootkit cross-view (v0.7) 2026-06-01 05:42:57 -07:00
selfprotect.py Add tamper-evidence: package-DB integrity, self-integrity, dead-man's switch 2026-05-31 22:27:50 -07:00
snapshot.py Add incident grouping (roadmap v0.8: incident list/show/export) 2026-06-10 17:52:42 -07:00
system.py Relicense under GPL-3.0-or-later 2026-05-31 06:52:34 -07:00
triage.py Add false-positive triage via package-ownership provenance 2026-05-31 22:05:00 -07:00
web.py Add tamper-evidence: package-DB integrity, self-integrity, dead-man's switch 2026-05-31 22:27:50 -07:00