Skip to content
BlackSnufkin edited this page May 4, 2026 · 3 revisions

Dashboard

The / page is the operator landing screen β€” at-a-glance health, scanner inventory, and EDR-fleet status. Everything is async-loaded by the page's JS so the initial render is instant and the live data fills in.


What it shows

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  LitterBox v5.0.0                                          [Cleanup] β”‚
β”‚  Sandbox status / fleet posture / quick links                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€ Sandbox health ──────────┐   β”Œβ”€ Local scanners ────────────┐    β”‚
β”‚  β”‚ Upload folder       OK    β”‚   β”‚ Static     yara, checkplz,  β”‚    β”‚
β”‚  β”‚ Result folder       OK    β”‚   β”‚            stringnalyzer    β”‚    β”‚
β”‚  β”‚ Doppelganger DB     OK    β”‚   β”‚ Dynamic    yara, pe-sieve,  β”‚    β”‚
β”‚  β”‚ HolyGrail tool      OK    β”‚   β”‚            moneta, patriot, β”‚    β”‚
β”‚  β”‚                           β”‚   β”‚            hsb, rededr,     β”‚    β”‚
β”‚  β”‚  Issues: 0                β”‚   β”‚            hollows-hunter   β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚ HolyGrail  enabled, found   β”‚    β”‚
β”‚                                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                                      β”‚
β”‚  β”Œβ”€ EDR fleet ──────────────────────────────────────────────────┐    β”‚
β”‚  β”‚  elastic   βœ“ agent reachable Β· βœ“ Elastic stack Β· DESKTOP-... β”‚    β”‚
β”‚  β”‚  fibratus  βœ“ agent reachable Β· βœ“ Fibratus installed Β· ...    β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                                      β”‚
β”‚  β”Œβ”€ Recent samples (last 10) ──────────────────────────────────┐    β”‚
β”‚  β”‚  hash  Β·  filename  Β·  type  Β·  detection score Β· profiles  β”‚    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Data sources

The dashboard makes two async fetches:

Endpoint Drives Refresh
GET /health Sandbox health + Local scanners + EDR fleet (one unified payload) every 60s
GET /files Recent samples every 60s

/health covers all three top cards in a single request β€” it returns scanner inventory under scanners.rows/counts, EDR reachability under edr_agents.agents, and boot-validation issues at the top level.

Polling pauses when the tab is hidden (document.visibilityState === 'hidden') and resumes β€” with one immediate refresh β€” when it becomes visible again.


Sandbox health card

Backed by /health's top-level status + issues. Status is ok (no issues) or degraded (one or more configuration problems β€” missing tool path, unwritable upload folder, etc.). The sandbox block reports upload_folder_accessible. The scanners and edr_agents blocks drive the other two cards on this page.

Issues are listed verbatim. The most common ones:

  • Tool path is missing for X β€” config has enabled: true but no tool_path. Either point it at the binary or set enabled: false.
  • Configured tool not found: <path> β€” path is set but file doesn't exist. Often a path-with-backslashes-on-different-machines issue.
  • Upload folder does not exist β€” usually means LitterBox booted but Uploads/ wasn't created. Restart should fix.

Local scanners card

Backed by /health's scanners.rows array. Per-scanner row with:

Field Meaning
enabled enabled: true in config?
tool_path Absolute path from config
exists Does the file actually exist?
status ok (enabled + exists), missing (enabled + no file), disabled (not enabled)

The dashboard groups by static / dynamic / holygrail and color-codes:

  • green dot β†’ ok
  • red dot β†’ missing (enabled but binary not on disk β€” needs attention)
  • gray dot β†’ disabled (deliberately off)

EDR fleet card

Backed by /health's edr_agents.agents array (which delegates to the same TTL-cached probe /api/edr/agents/status exposes). For each registered profile (one YAML under Config/edr_profiles/) it shows:

  • Profile name + display name (from the YAML)
  • Kind β€” elastic or fibratus
  • Whiskers reachable β€” GET /api/info succeeded
  • Backend reachable β€” for kind: elastic, the Elastic cluster _cluster/health; for kind: fibratus, Fibratus presence flag from /api/info's telemetry_sources
  • Hostname / agent version β€” self-reported by /api/info
  • Lock state β€” free / in_use (from /api/lock/status)

The probe is server-side cached with a 30s TTL and continuously pre-warmed by a background poller in app/services/edr_health.py. Steady-state fetches return instantly from cache. First request after boot waits one probe cycle.

?refresh=1 on /api/edr/agents/status forces a synchronous re-probe (debug aid).


Recent samples card

Backed by /files. Lists every analysis result on disk: hash, original filename, file type, detection score, and which EDR profiles ran against it.

The _summary_cache.json (mtime-validated, written by app/services/summary_cache.py) keeps this card under 100 ms even with hundreds of saved samples. The cache regenerates per-sample only when its result-folder mtime changes; otherwise it's served from the JSON cache without re-walking the analyzer outputs.


See also

πŸ“Œ LitterBox Β· self-hosted payload analysis sandbox

Release


πŸš€ Getting Started

πŸ“Š Pipelines & Pages

πŸ”¬ Scanners Β· 4 modules

πŸ›°οΈ EDR Integration
πŸ”Œ API & Clients
βš™οΈ Configuration & Dev

Releases Β· CHANGELOG Β· Issues Β· README

Clone this wiki locally