Corvus Technology  ·  Architecture Reference

Corvus, Red-Team Kill-Chain Orchestrator

A target-agnostic, human-in-the-loop, multi-agent red-team framework driven by a local LLM, executing real offensive tooling under full operator control. Architecture reference.

The engagement is data (a playbook). Three local-LLM roles plan and adapt; a single deterministic gate enforces scope, risk tiers, approvals and audit on every action. Techniques run real offensive tooling through a config-driven toolpack, network and Active-Directory tooling, a web-application tier, pivoting/tunneling, and live HTTP against AI targets. The same engine drives a full Active-Directory forest compromise, a web-application foothold that pivots into the internal network, an AI-application breach, and an AI-model robustness assessment, switched by which playbook is loaded.

Runtime loop

Local LLM on host (Ollama / MLX) planner · operator · analyst roles (degrade to deterministic offline) Playbook, the engagement as data scope · techniques · eligibility · tiers · success Planner picks next technique Operator synthesizes its args The Gate scope · tier · HITL · audit pauses for a human at Tier ≥ 2 toolpack / MCP runs REAL CLI tools (live) · fixtures (sim) Analyst insights · ranks · summary Engagement State + Ledger loot · targets · findings · redacted output · decision log Operator (human) approve/edit/deny/abort Audit sink, one JSONL line per action (scope decision, tier, approver, exact command, redacted output, digests) · the engagement's evidence timeline recommendation ledger → LLM

Loop: Planner chooses the next eligible technique (recon/discovery run exhaustively first; the kill chain is selective) → Operator fills its args from state → gate (scope → risk tier → human approval if Tier ≥ 2 → audit) → toolpack runs the real tool → its redacted output lands in the ledger → Analyst derives insights + a recommendation. Every LLM role reads the ledger, so choices adapt to what actually happened. Repeats until the success condition, a stop, or an abort.

The design invariant

The LLM proposes; deterministic code disposes. Every action any agent takes passes through one choke point, the gate. It checks the target against a hard scope allowlist before execution (per-host, even for a multi-host sweep), classifies the action into a risk tier, pauses for human approval on Tier ≥ 2, and audits everything. The LLM's input is the ledger; its output (technique + args, or pivot/stop) is always gated and logged. The three roles add adaptivity; none can widen scope, skip a gate, or act unlogged. The gate's decision logic has not changed since the first slice, every later capability, including live tool execution, was built around it, never through it.

Components

ComponentRole
State machinedrives the supervisor → execute → analyst loop with a checkpointer; enforces exhaustive discovery before the selective kill chain
The gatethe single choke point every action passes through (scope → tier → human approval → audit → execute)
Scope / risk / audit guardrailsdeterministic controls: a hard allowlist (per-host, multi-target aware), the risk-tier classifier, and an append-only audit sink with redacted output
Tool runnerconfig-driven executor: substitutes synthesized args into a declared command, runs it live (or replays a fixture), parses output into loot, and redacts secrets in stored output
Eligibility enginefindings-driven predicates, techniques become eligible only from what recon actually found
Engagement statemerges loot and maintains the ledger digest fed to every LLM role
Planner rolechooses the next eligible technique (local LLM, with deterministic fallback)
Operator rolesynthesizes a technique's tool args from discovered state (including multi-host enumeration); the LLM cannot override a scope-pinned target
Analyst rolederives attack-path insights, ranks eligible techniques, and summarizes state
Playbook loaderloads and validates a playbook: authorization gate, phase ordering, tier resolution, and success/coverage criteria
Tool manifesteach tool declared once as a command template, a capture pattern, and a replay fixture (held internally, shared under NDA)
Least-privilege executorsper-call, sandboxed processes that dispatch the declared tools

Live vs. sim execution

Every tool is declared once in the manifest as a command template, a capture pattern, and a replay fixture. A single switch selects the mode: Adding a capability is a manifest entry, not code. The gate, scope, tiers and audit are byte-identical in both modes.

Risk tiers (the HITL contract)

TierMeaningGate
T0read-only recon / enumerationauto
T1low-impact / contained mutationnotify
T2state-changing exploitationapprove
T3destructive / high blast radiusapprove + typed confirm

Tiers are set per tool and overridable per playbook; a human-only override forces a step to a confirm gate for the highest-impact actions (e.g. an agentic AI tool action, or a domain-dominance step).

Adaptivity, how a run steers itself

MechanismWhat it does
Findings-driven eligibilityeach technique's eligibility rule gates it on live state (e.g. a domain controller was discovered, credentials are available, a vulnerable certificate template was found); only applicable branches fire.
Exhaustive discoveryevery recon/discovery technique runs first, deterministically, no vector is skipped, before the LLM-selective kill chain, which may stop early once a foothold works.
The ledgereach action's redacted output + outcome accumulates in state; the planner/operator/analyst read it, so they adapt to real signals (e.g. an access-denied result → pivot to another enumeration route) instead of stalling.
Multi-host sweepenumeration targets an explicit host list or CIDR; one step iterates every in-scope host. Authenticated steps stay pinned to a single discovered host.
Operator synthesistool args (targets, users, payloads) are synthesized from discovered state; a scope-pinned value cannot be overridden by a hallucinating LLM.

Auditability

The audit trail is the engagement's record of record. Every action writes a JSONL line with the scope decision, tier, approver, the exact command that ran (passwords masked), a redacted copy of the tool's output (hashes, tickets, cleartext credentials masked by default; a raw opt-in exists for debugging), and a digest of the full result for integrity. Because the ledger the LLM reads is the same redacted output, no secret reaches a prompt, and every autonomous decision is recorded with its rationale in the decision log.

Playbooks shipped

PlaybookKindExecution
full-adActive-Directory forest → domain/forest compromise: recon, poison/relay, credential access, certificate-services abuse, delegation, ACL abuse, database access, trusts, domain dominancereal tools (live / sim)
web-appWeb-application foothold: unauth recon → OWASP Top 10 → credential recovery → CMS/plugin RCE → local privesc → pivot into the internal network → hands off to the AD chainreal tools + HTTP (live / sim)
ai-surface-redteamAI model/agent robustness, OWASP-LLM / MITRE ATLAS batteryreal HTTP against the target agent (live / sim)
ai-dmzAI-to-AD pivot: retrieval poisoning → web exploitation → internal lateral movementreal HTTP + tools (live / sim)

Playbooks are loaded as data and keyed by name; adding or removing one is a configuration change, not a code change. Scope (the target network, hosts and endpoints) lives in each playbook's scope block, so the same technique set retargets to any authorized environment.

Operating model

← Back to Technology Request the full technical brief