Detectors 59 detectors over a collected case, layered from behavioral heuristics to live intel matching, with auto-Sigma export per detector.

How they fit together

A detector implements detect(store) -> Iterable[Finding]. It reads artifacts from the store via store.iter_artifacts(collector=..., category=...), applies its logic, and yields findings. Detectors don't talk to each other directly — they share the evidence store. Order is incidental, except timeline which runs last and depends on others.

Each finding has a severity (info low med high crit), a MITRE ATT&CK technique ID where applicable, a free-form evidence dict, and references to the underlying artifact UUIDs.

The roster

suspicious_processes

Heuristics over the live process tree:

network_anomaly

Listening sockets outside a benign-port allow-list; established external connections (with the owning process linked back from the process collector).

persistence_outlier

Generic cross-platform: every artifact in category persistence is scanned for references to writable/world-shared paths (/tmp/, /Users/Public/, \AppData\Local\Temp\, /dev/shm/, …) and for binaries in user-writable scratch space.

lolbins

Living-off-the-land tradecraft. Pattern set covers LOLBAS (certutil, bitsadmin, mshta, regsvr32, rundll32 with URL, msbuild, installutil), GTFOBins (osascript shell escape, xattr quarantine removal, curl/wget fetching executable content, nc/socat reverse shells, python socket.socket one-liners, bash /dev/tcp/).

yara

If yara-python is installed, compiles every .yar/.yara file under digger/rules/yara/ and any directory you pass via the detector's extra_dirs argument. Scans:

Bundled rules cover mimikatz strings, Cobalt Strike default beacon strings, PowerView/PowerSploit, reverse-shell one-liners, credential-harvest keywords, and Shai-Hulud markers.

ioc

Plain-text IOC feeds from digger/rules/iocs/*.txt. Indicator type auto-detected by format: SHA-256 (64 hex), MD5 (32 hex), IPv4, URL, domain, path. Process exe SHA-256s are matched against the hash list; every artifact's serialized data is searched for IP/domain matches.

shai_hulud

Targeted detector for the Shai-Hulud npm worm:

supply_chain

Two layers:

c2

C2-framework signatures from digger/rules/c2/c2_signatures.yaml: Cobalt Strike, Sliver, Mythic, Brute Ratel, Havoc, Empire, Metasploit Meterpreter, Pupy, Posh-C2, AsyncRAT family. Matches against browser history URLs and process command lines.

Also fuses live intel:

threat_actor

Named-actor TTP patterns from digger/rules/threat_actors/ttp_signatures.yaml: APT29/Midnight Blizzard, APT28, FIN7, Lazarus, Volt Typhoon, Scattered Spider/Octo Tempest, Black Basta/BlackCat/Akira ransomware affiliates. Attribution is heuristic — multiple actors share TTPs, so digger reports the match without making a definitive call.

browser

Flags Chrome/Edge/Brave/Firefox extensions with sweeping permissions: <all_urls>, webRequest, cookies, history, clipboardRead/Write, nativeMessaging, debugger, management, proxy.

env_hijack

Environment variables that override the dynamic linker (LD_PRELOAD, LD_AUDIT, DYLD_INSERT_LIBRARIES), shell init hooks (PROMPT_COMMAND, BASH_ENV, ENV), or PATH entries pointing at writable temp dirs.

ssh_auth_keys

authorized_keys with forced-command directives, unusually long key lists, unrestricted keys.

service_cve

Pulls service versions captured by service_versions collector and matches them against the live NVD CPE-keyed CVE corpus (nvd_service_cves feed, 24h refresh). Range-aware: handles introduced / fixed / last_affected OSV-style ranges with loose semver. No bundled fallback — runs only when the live cache is populated. Tag: T1190.

firewall_audit

See Firewall audit + remediation. Eight checks across pf / nftables / iptables / ufw / firewalld / WFP + macOS Application Firewall, with platform-specific copy-pasteable fix commands routed through redact_dangerous_command.

Counter-offensive detectors

Nine detectors target Decepticon-style red-team tradecraft, all observation-only. See Decepticon countermeasures for the full phase-by-phase rundown.

memory_anomaly (extended)

RWX regions, anonymous-exec regions, drop-loaded modules — same as before, but severity now escalates to critical when the affected process's parent is a listening network service (the canonical post-RCE landing signature). Cross-correlates with the exploitation detector's parent-name set.

browser (extended)

See Browser scanner for the full list of branches. Beyond the original risky-extension check, the detector now covers cookies (counts + bad-host), saved-passwords summary, IndexedDB / Local Storage / PWAs / profile defaults, service workers with URLhaus + ThreatFox cross-reference, and a corpus-driven detection for unpatched Chromium bugs.

sigma

Optional. Run via digger sigma --case-dir <case>. Loads Sigma YAML rules from the bundled corpus AND the live SigmaHQ rule cache (sigmahq_corpus feed), matches them against process_creation and network_connection log sources. See Sigma rules.

Specialized auditors

Detectors that pair with a dedicated collector / ingester and run only after that collector has populated the case:

Persistence (cross-platform)

Deep-audit detectors that complete the cross-platform persistence story (macOS launchd + TCC, Linux systemd / cron / shell rc, Windows registry). Each runs on the existing platform collector's artifacts; no new CLI commands required.

timeline

Synthesizes a chronological event timeline from process create times, recent-file mtimes, and macOS quarantine timestamps. Emits one informational finding containing up to 2000 sorted events for report rendering.

Running a subset

digger scan --case-dir x --only suspicious_processes,c2,shai_hulud

Severity ladders

PillMeaning
criticalHigh-confidence malicious. Examples: confirmed Shai-Hulud package, MalwareBazaar hash match on a running exe, live ThreatFox IP match.
highStrong tradecraft signal: encoded PowerShell, certutil URL cache, browser-spawns-shell, LD_PRELOAD set.
mediumSuspicious but plausibly explainable: process with no exe, browser extension with sweeping perms, persistence pointing at user-scratch path.
lowWorth a glance: listener on unusual port.
infoNot an indicator of compromise. External connection record, timeline summary.

The AI triage step re-grades severity independently using the IC estimative-probability ladder.