v0.20.0 — open source, AGPL-3.0 · Second pair of (A)eyes

Second pair of
(A)eyes.

AI that investigates with you — turning screenshots and artifacts into a forensic timeline, findings, IOCs, attacker path, and reports. First responder speed, on your machine.

dfir-companion — 127.0.0.1:4773
# Start the companion
$ cd companion && npm run dev

[DFIR] companion v0.20.0 — localhost only
[DFIR] cases root: ./cases
[DFIR] listening on http://127.0.0.1:4773
[DFIR] dashboard: http://127.0.0.1:4773/dashboard

# Create a case, start capturing
✓ Case INC-2026-001 created
✓ Extension connected — recording
✓ Capture → window (4 screenshots)
✓ AI extraction → 12 forensic events
✓ Synthesis → findings + attacker path

⚠ HIGH: T1059.001 — PowerShell spawned by Word
⚠ CRIT: T1003.001 — LSASS memory dump
✓ Report ready (MD + HTML + PDF)

The "so what" layer — not another detection engine.

Your detection tools (Velociraptor, Security Onion, Chainsaw, Hayabusa, THOR, EDR/SIEM) already find the hits. DFIR Companion ingests their verdicts, correlates them across tools into one forensic timeline, and synthesizes the findings, attacker path, IOCs, and report. The value is in the correlation and narrative, not re-deriving alerts.

What it builds — automatically

For each case the AI constructs and maintains a complete investigation state from your evidence.

🔍

Forensic Timeline

Real incident events with true timestamps from artifacts — process creation, logons, network connections, file MAC times. Not the capture log.

cross-source correlation
⚠️

Findings & Confidence

Per-technique analytic conclusions with severity, MITRE mapping, and AI confidence score (0–100). Color-coded badges: green ≥80, yellow 50–79, red <50. Filter by min confidence.

confidence-scored
🎯

IOCs & Attack Path

Indicators with enrichment verdicts (VirusTotal, MISP, YETI, AbuseIPDB, CrowdStrike, Hunting.ch). Push IOCs + MITRE to MISP. Full kill-chain narrative.

enriched + MISP export
🔗

Asset ↔ IoC Graph

Interactive graph showing which indicators touched each compromised host, account, or service. Drag nodes to reposition. Zoom, fullscreen, multiple layouts.

interactive + drag
🔗

Evidence Chain Graph

Causal attack graph: process trees + lateral movement + file lineage + network flows. Trace the full path end to end — spawned, lateral-move, ran-on, wrote-file, executed-file, network edges with confidence levels.

deterministic — no AI
💬

Ask the Case

Free-form Q&A grounded in the evidence: "was data exfiltrated?", "was a USB connected?". If unknown, tells you what to collect next.

evidence-grounded
📄

Reports — MD / HTML / PDF / DOCX

Full incident report following the AnttiKurittu template. Executive summary, BIA, timelines, conclusions. One-click PDF. Push to DFIR-IRIS, Timesketch, and MISP.

exportable
🔎

Hunt-Pivot Generator

From any event or IOC, generate ready-to-run queries: Velociraptor VQL, KQL, SPL, Sigma, YARA, Suricata, Elastic ES|QL. Zero AI cost — deterministic templates.

7 platforms
🛡️

Customer Exposure

Check victim org domains & emails against LeakCheck, HIBP, DeHashed, and Shodan. Strict customer boundary — adversary IOCs never queried. No raw passwords stored.

v0.11 — credential leak check

Triage Tags & Star

Hand-label any entity with triage tags (confirmed-malicious, false-positive, key-evidence…). Star important events. Multi-select bulk actions. Tags survive re-synthesis.

v0.11 — analyst-driven
📸

Browser Extension Capture

MV3 extension: timer + event-driven (navigation, tab switch, click). Ctrl+Shift+S hotkey. Offline queue. Per-case attach. Evidence-first persistence.

lossless PNG
🔒

AI Input Anonymization

Reversibly tokenizes internal IPs, usernames, hostnames before the LLM sees them. Adversary IOCs preserved. Per-case toggle. Default on.

OPSEC-first

Attack Phases

Groups timeline events into bursts by time gaps — initial access, persistence, lateral movement, exfil. Each phase labeled with dominant ATT&CK tactic. No AI, purely algorithmic.

v0.14 — temporal clustering
⚙️

Settings Modal

All configuration in one place: investigator name, AI provider/model/keys, enrichment & exposure provider keys, integrations (IRIS, Timesketch, Velociraptor, MISP), and section visibility — drag-reorderable.

v0.14
📓

Analyst Notebook

Per-case scratchpad for hypotheses, notes, and open questions. Typed entries (hypothesis/note/question) with colored badges. Survives re-synthesis. Included in reports.

v0.14 — AI-aware
📖

Narrative Timeline

Prose story-mode view of the incident for management and non-technical stakeholders. AI-generated, editable, included in reports §3.2.

v0.14 — story mode
📋

Case Templates

Start new cases pre-loaded with investigation questions: Ransomware, BEC, Insider Threat, Web App Intrusion, General Malware. Custom templates supported.

v0.14 — workflow
🔗

Manual Asset Editing

Rename, add, or suppress assets and manually link assets to IOCs. Overrides persist per case, survive re-synthesis. Full audit trail in the asset graph.

v0.14 — graph editing
📋

Response Playbook

AI-generated checklist from Critical/High findings + next steps. Optional IR-template expansion. Push to DFIR-IRIS or ClickUp. Tasks get stable short IDs (T001, T002…).

v0.16 — IR workflow
🦅

Velociraptor Fleet Hunts

Generate VQL hunts from findings with rationale — one-click deploy across all endpoints. Dedicated AI model for VQL. Collection results pulled inline.

v0.19 — AI-suggested hunts
📓

AI Playbook Hunts

Per playbook task, suggest a Velociraptor hunt. Endpoint-tied tasks deploy as single-client collections; others as fleet hunts. Suggestions persist, only new/changed tasks re-generated.

v0.19 — per-task VQL
📱

Mobile Companion PWA

Installable read-only PWA — case status, worst findings, recent timeline, IOC verdicts. Quick glances during IR from your phone. Navigate to /mobile.

v0.19 — on-the-go
🧠

Memory Forensics Import

Volatility 3 + Rekall importer: process trees, network connections, injected code (T1055), services, modules. Zero AI — pure parsing.

v0.19 — memory analysis
🐧

Linux Evidence Importers

auditd, journald JSON, sysdig/Falco alerts + events — auto-detected by Import button. Full Linux IR alongside Windows.

v0.19 — Linux IR
📧

Email / .eml / .msg Import

Phishing & BEC triage: SPF/DKIM/DMARC checks, spoof heuristics, IOC harvesting. MITRE T1566 mapping.

v0.18 — phishing triage
🎯

Adversary Group Hints

Known ATT&CK groups ranked by technique overlap — sub-technique-aware scoring. Not attribution, but narrows the landscape. Dashboard panel + report.

v0.18 — sub-technique aware
📤

STIX 2.1 + ATT&CK Navigator

Export STIX bundles to any TIP. Navigator layer JSON — techniques colored by severity. MISP push + Notion export.

v0.18 — multi-format export
🔒

Redacted Case Export

Shareable ZIP for external parties: IPs/hosts/users tokenized to ANON_*, secrets redacted, screenshot EXIF stripped + PII blurred. No AI keys included.

v0.19 — safe sharing
💾

Investigation Snapshot

Export/import one JSON — timeline, findings, IOCs, graph, analyst decisions. Restore on another machine. No AI keys or machine config.

v0.19 — cross-machine
🌙

Dark / Light Theme

Full-coverage theme toggle. Follows OS preference by default, manual choice persists. Every panel, graph, canvas themed. Night-mode DFIR.

v0.19 — theme persistence
🔔

Notifications

Slack / MS Teams webhooks + SMTP email for findings, playbook updates, milestones. Per-channel severity thresholds. Opt-in.

v0.19 — Slack/Teams/Email
🛡️

NSRL Known-Good Hashes

Auto-mark matching events + IOCs legitimate on import. Flat hash set or direct query the full ~160GB NSRL RDS SQLite DB — never loaded into memory.

v0.19 — false positive reduction
📑

Custom Report Templates

Branded layouts — accent colour, cover, running header/footer with placeholder interpolation. Built-ins editable in place, selected per case.

v0.19 — branded reports
🏊

Timeline Swimlane View

Interactive asset/time chart with selection, scope-to-view, and PNG/SVG export. See which host was active when — at a glance.

v0.17 — visual timeline

One Import button — auto-detects the format

Drop any file. The server sniffs the structure and routes it to the right importer. Most are deterministic — zero AI calls, zero cost.

🦅Velociraptor
🧅Security Onion
🪚Chainsaw
🦅Hayabusa
THOR / Nextron
🔬Cyber Triage
🌊Suricata
🦓Zeek
📂KAPE / EZ Tools
Plaso / log2timeline
☁️M365 / Entra ID
☁️AWS CloudTrail
☁️GCP / Azure
🧪CAPEv2
🦅Falcon Sandbox
📊SIEM / EDR JSON
📝CSV / Generic Log
📸Screenshots (any)
🎯CrowdStrike Falcon
🦡Hunting.ch (abuse.ch)
🐧auditd / journald / Falco
🧠Volatility 3 / Rekall
📧Email / .eml / .msg

Two-phase analysis

Cheap vision extraction per screenshot batch → forensic timeline. One strong text-only synthesis → findings, attacker path, conclusions.

1

Capture & Import

Browser extension screenshots your investigation. Import any artifact file — auto-detected, zero config.

2

Extract & Correlate

Deterministic parsers + cheap AI vision extract forensic events. Cross-source deduplication. Evidence stays on disk.

3

Synthesize & Report

One strong model call: findings, IOCs, MITRE, attacker path, key questions. Markdown + HTML + PDF + push to IRIS/Timesketch.

Built for OPSEC-conscious teams

Every design decision favors local-first, evidence-stays-on-box, your-AI-your-choice.

🔒

Localhost Only

Binds 127.0.0.1. Evidence on disk. AI provider is yours to choose — OpenAI, Ollama, local LiteLLM, Gemini. Nothing phone-home.

🛡️

AI Input Anonymization

Internal IPs, usernames, hostnames reversibly tokenized before the LLM. Adversary IOCs preserved. Per-case toggle, default on.

📡

Threat Intel — Per-Source OPSEC

Local sources (your MISP/YETI) by default. External (VirusTotal, AbuseIPDB) opt-in with confirm. Reachability gate — down servers skip, not fail.

🖥️

Portable Windows EXE

No install. Unzip, double-click, dashboard opens. Built with Node SEA — single portable binary with dashboard assets embedded.

🐳

Docker / Docker Compose

One command: docker compose up. Localhost-only by design (Compose maps port back to 127.0.0.1). Evidence persists on volume.

⚙️

AI On/Off Per Case

Capture-only mode by default. Turn AI on when ready — it backfills everything captured while off. Deterministic imports still populate timeline.

🔒

Redacted Case Export

Share findings externally safely — internal IPs/hosts tokenized, secrets redacted, screenshot EXIF stripped + PII blurred. No AI keys in the ZIP.

🌙

Dark / Light Theme

Full theme coverage — every panel, graph, swimlane canvas. Follows OS preference, persists per-session. Night-shift DFIR without eye strain.

💾

Investigation Snapshot

Export the full case state (no AI keys, no machine config) as one JSON. Import on another machine and continue. Cross-team collaboration without credentials leakage.

Running in 60 seconds

From Source

terminal
# Clone & install git clone https://github.com/hasamba/dfir-companion.git cd dfir-companion/companion npm install # Configure AI (or leave off for capture-only) cp .env.example .env # Start the server npm run dev # Load the extension cd ../extension npm install && npm run build # → Load extension/dist as unpacked

Docker

terminal
# Build & run git clone https://github.com/hasamba/dfir-companion.git cd dfir-companion docker compose up -d --build # Or pull prebuilt docker compose pull && docker compose up -d # → http://127.0.0.1:4773/dashboard # Load ./addon/dist as unpacked extension

Portable EXE

windows
# Download from GitHub Releases # Unzip → drop .env next to exe → double-click # → http://127.0.0.1:4773/dashboard

Ready to investigate smarter?

AI eyes on your evidence. Open source. On your machine. Your conclusions.

License: AGPL v3 Node 20+ Platforms