SilentWitness

SilentWitness — Complete Setup & Usage Guide

Written so **anyone** can follow it — you do not need to be a developer. If you can copy a

Written so anyone can follow it — you do not need to be a developer. If you can copy a command and press Enter, you can run a full AI forensic investigation with this guide. Every step says what to type, what you'll see, and what to do if it goes wrong.

If you are a judge: jump to §8 "For judges" for the fastest path and where every required artifact lives.


1. What this tool does (30-second version)

You give SilentWitness a Windows forensic image (a disk and/or memory capture). It:

  1. Parses the evidence once into a fast searchable index.
  2. Investigates it like a senior analyst — forming hypotheses, searching for evidence, and writing down findings that quote the actual evidence.
  3. Checks itself — it can't make a claim it can't prove, and it won't stop until it has answered all five investigative questions (who/what/where/how/when).
  4. Produces a report you can read, plus logs that trace every finding back to the exact search that produced it.

2. What you need before you start

RequirementWhyHow to get it
A SANS SIFT Workstation (2026)The forensic OS this runs onDownload the free OVA from https://sans.org/tools/sift-workstation and import it into VirtualBox/VMware. ~10 min.
An LLM API keyThe AI "brain" (model-agnostic)An OpenAI key (OPENAI_API_KEY) or an Anthropic key (ANTHROPIC_API_KEY). You use your own key — the tool calls the model on your behalf.
A forensic imageThe evidence to investigateE.g. the SANS Find Evil! ROCBA case (.E01 disk). Any Windows E01/raw disk works.
~100 GB free diskExtracted artifacts + indexThe image is large; parsing extracts a working copy.

You do not need to install Python, forensic tools, or dependencies by hand — the installer does all of it.


3. Install (one command)

Open a terminal in your SIFT VM and run:

curl -fsSL https://raw.githubusercontent.com/Blockchain-Oracle/silentwitness/main/install.sh | bash

This installs SilentWitness and every dependency (the forensic parsers, the index engine, the agent). It finishes with a parser-environment verification check for the Python modules, log2timeline, psort, and the spaCy entity model. When it finishes you'll have a silentwitness command.

Check it worked:

silentwitness --help

You should see a list of commands (register-evidence, prepare, index, investigate, …).


4. Tell it which AI model to use (set your key)

Pick one provider and paste your key in place of the placeholder.

# Option A — OpenAI
export OPENAI_API_KEY="<paste-your-openai-key-here>"
export SILENTWITNESS_MODEL="openai-chat:gpt-5-mini"   # cost-safe OpenAI investigator model

# Option B — Anthropic (Claude)
export ANTHROPIC_API_KEY="<paste-your-anthropic-key-here>"
export SILENTWITNESS_MODEL="anthropic:claude-sonnet-4-6"

For a deliberate high-recall rerun, use a stronger model only with an explicit cap, for example silentwitness investigate rocba --max-iterations 120 --max-tokens 8_000_000.

Tip: the key is read from the environment. To make it permanent, add those two lines to the bottom of ~/.bashrc and run source ~/.bashrc.


5. Run an investigation - the workflow

Each command is one line. We'll use a case named rocba and an evidence file or starter-case folder at ~/evidence/rocba (change the path to your evidence).

Step 1 - Create the case workspace

silentwitness init rocba --examiner "$USER"

What it does: creates cases/rocba/, the empty report, audit directory, evidence registry, case metadata, and per-case verification salt. This is the project folder for one investigation.

Step 2 - Register the evidence

silentwitness register-evidence rocba ~/evidence/rocba

What it does: records what you are investigating, classifies artifact types, computes hashes, and refuses unsafe writable evidence mounts. If you pass a folder, direct evidence files are registered and downloaded .sha256 sidecars are skipped. The original evidence is not modified.

What you'll see: a confirmation with the image's SHA-256 hash.

Step 3 - Prepare the artifacts

silentwitness prepare rocba

What it does: opens the disk image read-only and copies out the high-value Windows artifacts (event logs, registry, file table, shortcuts, prefetch, etc.). Takes a few minutes. The original image is never modified.

Step 4 - Build the evidence index

silentwitness index rocba

What it does: runs the forensic parsers + the Sigma detection engine over the extracted artifacts and builds a fast searchable index. This is the heavy step. SilentWitness records an index freshness manifest after a successful build, so an unchanged rerun returns quickly with index already current; use silentwitness index rocba --force when you intentionally want a clean rebuild. If you registered a memory image, the default memory profile is tuned for demo speed: Volatility runs pslist, cmdline, netscan, and psscan with visible per-plugin progress. The expensive all-process malfind VAD scan is opt-in. For a bounded malware sweep, use the targeted profile:

silentwitness index rocba --memory-profile targeted

That runs standard inventory first, selects high-signal PIDs from netscan, suspicious command lines, and psscan-only processes, then runs malfind --pid for that bounded set. The PID cap is SILENTWITNESS_VOL3_MALFIND_MAX_PIDS (default: 64). For an all-process sweep:

silentwitness index rocba --memory-profile deep

Slow plugins are bounded by SILENTWITNESS_VOL3_TIMEOUT_SEC (default: 300 seconds) and become audit advisories instead of making the terminal look stuck. What you'll see: progress bars with ETA for artifact parsing, visible plugin-level progress for memory indexing, a full-text-index build spinner, then a summary like indexed 2,673,733 records with phase timings and any memory-plugin advisory that needs review.

The default index path uses the targeted parser spine. The slower plaso super-timeline is available when you explicitly want extra breadth:

silentwitness index rocba --with-plaso

Step 5 - Investigate

silentwitness investigate rocba

What it does: the agent investigates — starting from the staged detections, forming hypotheses, searching the index, and recording cited findings. It will refuse to finish until it has addressed all five Key Questions. Takes a few minutes. What you'll see: a live stream of hypotheses being formed, confirmed, and (when needed) pivoted or challenged by its own critic.

Step 6 - Review the staged findings

silentwitness review rocba          # see the staged findings
silentwitness review rocba --finding-id F-001

What it does: shows the findings the agent staged so the examiner can approve, reject, modify, or skip them before they become report material. The list view prints the next command to inspect one finding in detail. The detail view shows the observation, interpretation, cited audit IDs, caveats, and action prompt.

Step 7 - Approve accepted findings

silentwitness approve rocba F-001

What it does: promotes a DRAFT finding into APPROVED report material, signs the tamper-evident HMAC ledger at /var/lib/silentwitness/verification/<case-id>.jsonl, and updates cases/rocba/report.md. The password prompt is a case approval signing password, not your Linux/root password. Reuse the same signing password for every approval in the same case so silentwitness verify rocba can later reconcile the ledger.

Repeat review --finding-id ... and approve ... for each finding you accept. Reject or skip findings you do not want in the final report.

Step 8 - Verify the audit trail

silentwitness verify --audit-chain rocba

What it does: walks every audit/<backend>.jsonl file and recomputes the hash chain. If an audit row is missing or edited, this command exits non-zero and tells you where the chain broke.

Step 9 - Export the report

silentwitness export rocba --md
cat cases/rocba/report.md           # the full investigative narrative
cat cases/rocba/findings.json | jq '.[] | select(.status == "APPROVED")'
ls cases/rocba/audit/*.jsonl

What it does: prints the final Markdown report path and shows the machine-readable artifacts behind it. approve updates the report as findings are accepted; export --md is the stable way to locate it during a demo. Use --pdf when you want a PDF report. IOC sidecars are attempted only when you explicitly pass --ioc-format.

(Optional) Score it against known answers

If you have a ground-truth file (we ship one for the ROCBA case):

python -m harness.score_case --case cases/rocba --dataset rocba

What you'll see: a recall score and a HIT/MISS line per expected finding.


6. Understanding the output

  • cases/rocba/report.md — the human-readable investigation: what happened, the evidence, the confidence level, and the gaps the agent itself flagged.
  • cases/rocba/findings.json — every recorded observation, each citing the exact evidence record(s) it's based on.
  • cases/rocba/audit/*.jsonl — the timestamped log of every tool the agent ran. Any finding can be traced back to the exact search that produced it (see THREE_CLAIM_TRACE.md for a worked example).
  • /var/lib/silentwitness/verification/rocba.jsonl — the HMAC-signed ledger for findings approved by the examiner.

For a GitHub-clickable artifact map, use DEMO_ARTIFACTS.md.

Every claim in the report quotes real evidence. If the AI ever tried to "make something up," the system rejects it before it reaches the report — see the Accuracy Report.


7. If something goes wrong (troubleshooting)

SymptomCauseFix
silentwitness: command not foundInstall didn't finish or shell not reloadedRe-run the install command; open a new terminal.
no evidence index for this caseYou skipped prepare/indexRun Step 2 then Step 3 before investigate.
Investigation stops with request_limitThe model needs more stepsRe-run with silentwitness investigate rocba --max-iterations 120.
Investigation stops with total_tokens_limitThe model consumed the run-wide token budgetRe-run only if needed with a deliberate cap, for example silentwitness investigate rocba --max-tokens 8_000_000.
authentication / 401 errorAPI key not set or out of creditRe-check Step 4; confirm your provider account has credit.
approval signing password: promptThe approval ledger needs a signing secretThis is not your Linux/root password. Choose one for the case and reuse it for every approval in that case.
indexed 0 recordsprepare extracted nothingConfirm the image path is correct and is a Windows disk image.
index already currentThe registered evidence, prepared artifacts, host label, memory profile, and relevant parser settings match the last successful buildContinue to investigate; add --force only when you intentionally want to rebuild.
vol3 malfind timed outThe optional memory malware scan exceeded the bounded per-plugin timeoutThe disk/log/indexed memory inventory is still usable. Re-run with silentwitness index rocba --memory-profile targeted for bounded PID scanning, or SILENTWITNESS_VOL3_TIMEOUT_MALFIND_SEC=0 silentwitness index rocba --memory-profile deep if you want an unbounded all-process sweep.
Recall varies between runsThe AI is non-deterministicExpected — see the Accuracy Report §3; a stronger model gives higher, steadier recall.

8. For judges

  • Fastest path: you do not need to run it — the Accuracy Report, Architecture + diagram, and the showcase runs contain judge-clickable artifacts. If you do run it, follow §3–§5 with your own API key.
  • Three-claim trace: THREE_CLAIM_TRACE.md walks three findings from the report → the cited evidence record → the exact audit tool execution (docs/showcase_runs/mr_evil_openai_gpt_5_2_resume/).
  • Report + JSON artifacts: DEMO_ARTIFACTS.md points to the committed report, findings JSON, audit JSONL, and approval-ledger examples.
  • Self-correction in the logs: docs/showcase_runs/mr_evil_openai_gpt_5_2_resume/audit/critic.jsonl preserves AGREE/CHALLENGE/REJECT verdicts from the live critic.
  • Evidence integrity: Accuracy Report §6 — read-only evidence, no write surface, tamper-evident provenance, enforced architecturally.
  • Guardrails (architectural, not prompt): the citation gate, entity gate, and coverage gate live in silentwitness_mcp / the agent's output_validator — see Architecture.
  • Starter cases & findings: STARTER_CASES.md.

9. Where everything lives (map of the repo)

You want…Look here
How it's builtdocs/architecture.md + assets/brand/diagram-A-architecture.png
How accurate it is (honest)docs/ACCURACY_REPORT.md
What data it was tested ondocs/STARTER_CASES.md
Trace a finding to its tool calldocs/THREE_CLAIM_TRACE.md
Report + JSON artifact mapdocs/DEMO_ARTIFACTS.md
Demo showcase runsdocs/showcase_runs/
The MCP server (the product)src/silentwitness_mcp/
The agentsrc/silentwitness_agent/
The forensic parserssrc/silentwitness_mcp/index/feeders_*.py
The coverage gatesrc/silentwitness_agent/coverage.py
The ground truth + scorerharness/

On this page