Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
484 commits
Select commit Hold shift + click to select a range
09670a4
fix: resolve multiple credential-handling and GPU utilization bugs (#…
l50 Jul 21, 2026
a875d21
refactor: fix certipy ESC1 auth reliability and success detection (#241)
l50 Jul 21, 2026
b872a66
feat: add potfile-disable flag to all hashcat passes and enable golde…
l50 Jul 21, 2026
e8b160d
fix: normalize hash type spellings in crack priority ranking (#243)
l50 Jul 21, 2026
e146b4e
feat: prefer native domain credentials for ADCS enumeration over forg…
l50 Jul 21, 2026
bd999db
chore(deps): update github/codeql-action action to v4.37.2 (#248)
ares-renovate[bot] Jul 22, 2026
739a1d1
chore(deps): update taiki-e/install-action digest to a6b2e2d (#245)
ares-renovate[bot] Jul 22, 2026
a86354c
chore(deps): update actions/checkout action to v7.0.1 (#246)
ares-renovate[bot] Jul 22, 2026
482bedc
chore(deps): update renovatebot/github-action action to v46.1.20 (#250)
ares-renovate[bot] Jul 22, 2026
4d8de8f
chore(deps): update actions/labeler action to v7 (#254)
ares-renovate[bot] Jul 22, 2026
4857567
chore(deps): update actions/setup-python action to v7 (#255)
ares-renovate[bot] Jul 22, 2026
e3dd24d
chore(deps): update dependency pre-commit to v4.6.1 (#247)
ares-renovate[bot] Jul 22, 2026
7e5b79d
chore(deps): update grafana/grafana docker tag to v13.1.1 (#249)
ares-renovate[bot] Jul 22, 2026
2b824c6
chore(deps): update rust crate serde_json to v1.0.151 (#251)
ares-renovate[bot] Jul 22, 2026
6deaa8f
chore(deps): update rust crate tokio to v1.53.1 (#252)
ares-renovate[bot] Jul 22, 2026
d71d64f
chore(deps): update rust crate async-nats to 0.50 (#253)
ares-renovate[bot] Jul 22, 2026
cdb0d52
feat: add ESC13 exploitation chain, machine-account hash auth, and sc…
l50 Jul 22, 2026
a3dd966
feat: add operation teardown, workspace sanitization, and box-local h…
l50 Jul 22, 2026
ed0fffd
feat: add blue-side simulated containment loop with op-state projecti…
l50 Jul 23, 2026
648bc27
fix: correct remote build dir and postgres install guard (#259)
l50 Jul 23, 2026
41429f9
feat: add remote report generation and local fetch for blue reports (…
l50 Jul 23, 2026
d543cdb
feat: add deterministic baseline detection sweep for blue investigati…
l50 Jul 24, 2026
a507f75
fix: replace over-broad kerberos detection patterns with field-anchor…
l50 Jul 25, 2026
83506dd
chore(deps): update returntocorp/semgrep docker digest to 98c2572 (#265)
ares-renovate[bot] Jul 26, 2026
4db7160
chore(deps): update docker/login-action digest to abd2ef4 (#264)
ares-renovate[bot] Jul 26, 2026
93b294c
chore(deps): update taiki-e/install-action digest to 3d7d7cd (#266)
ares-renovate[bot] Jul 26, 2026
679a33e
chore(deps): update github/codeql-action action to v4.37.3 (#267)
ares-renovate[bot] Jul 26, 2026
9fdbe0c
chore(deps): update grafana/loki docker tag to v3.7.4 (#268)
ares-renovate[bot] Jul 26, 2026
a3892e5
chore(deps): update grafana/mimir docker tag to v3.1.4 (#269)
ares-renovate[bot] Jul 26, 2026
f2e3903
chore(deps): update rust crate tera to v2.1.0 (#270)
ares-renovate[bot] Jul 26, 2026
0f86c1f
fix(deps): update rust crate base64 to 0.23 (#271)
ares-renovate[bot] Jul 26, 2026
968bae1
feat: add golden ticket correlation via 4769-without-4768 cross-event…
l50 Jul 26, 2026
b21814f
ci: report failures, detect ansible-based template changes, harden re…
l50 Jul 26, 2026
d3040c7
fix: warn on empty otel endpoint, stay silent when absent (#273)
l50 Jul 26, 2026
623a055
feat: add certipy esc1/esc3/esc13 full-chain tools and parity tests (…
l50 Jul 27, 2026
b7e8a30
fix: steer cross-forest trust escalation to native paths and update p…
l50 Jul 27, 2026
8134738
feat: introduce acl attack graph, bloodhound parsing, and ranked acl …
l50 Jul 27, 2026
22371db
feat: parameterize observability endpoints and context across envs (#…
l50 Jul 27, 2026
861659c
docs: update ares-operator troubleshooting for trust follow and cross…
l50 Jul 27, 2026
0cc7fd4
feat: improve detection sweep with event timestamps and host context …
l50 Jul 27, 2026
e402b8e
feat: add pass-the-hash and kerberos auth across acl tooling (#280)
l50 Jul 27, 2026
84fac05
build: enforce reusable ARES_CLI precondition across ec2 tasks (#281)
l50 Jul 27, 2026
c2dd4f3
feat: enable kerberos and pass-the-hash across delegation chain tools…
l50 Jul 27, 2026
4a01aa4
feat: publish acquired acl edges and restrict shadow-cred to property…
l50 Jul 27, 2026
a7e6c4e
feat: dispatch acl chains with hashes/tickets and publish reset crede…
l50 Jul 27, 2026
950f3c4
fix: route acl-style shadow credential exploits to correct worker rol…
l50 Jul 27, 2026
51e673e
docs: replace samr password reset fallback with shadow credentials (#…
l50 Jul 27, 2026
e14ee9a
fix: keep shadow-cred vulns live when edge grants write_dac (#287)
l50 Jul 27, 2026
d685c17
feat: add redaction utilities and deferred span status with safer exe…
l50 Jul 27, 2026
1536eab
fix: enforce per-domain spray budget and make auth throttle configura…
l50 Jul 27, 2026
3bff850
fix: prevent wrong-realm/apex spn wedges in inter-realm ticket forgin…
l50 Jul 27, 2026
2aeefc4
fix: default child stdin to null and improve execution error reportin…
l50 Jul 27, 2026
c8beeb6
fix: enforce window-based no-policy spray cap and close tally race (#…
l50 Jul 27, 2026
9d65324
fix: prevent temp file collisions in drop_excluded_users (#294)
l50 Jul 28, 2026
c2c8a94
feat: measure blue coverage against red ground truth and supersede mi…
l50 Jul 28, 2026
499ab6f
fix: emit raw backtick strings for logql regex filters to prevent 400…
l50 Jul 28, 2026
4760356
test: standardize sample domains to contoso.local in tests and docs (…
l50 Jul 28, 2026
9bdbd68
fix: gate username_as_password by lockout budget and align debit logi…
l50 Jul 28, 2026
41a9235
feat: derive mitre tactics in reports and disallow sibling matches (#…
l50 Jul 28, 2026
9fd8093
feat: show red team finalizing status and stop runtime at red complet…
l50 Jul 28, 2026
699f35e
fix: enforce loki query budget and clamp per-attempt timeouts (#301)
l50 Jul 28, 2026
5a5c61f
feat: improve technique mapping and add mssql and credential detectio…
l50 Jul 28, 2026
dac0002
feat: add unsecured credential detection and refine ATT&CK mappings (…
l50 Jul 28, 2026
fc06758
test: add e2e guard for loki per-query wall-clock retry budget (#304)
l50 Jul 28, 2026
c2e4fd4
feat: split sweep vs analyst evidence in blueteam reports (#305)
l50 Jul 28, 2026
34ac282
feat: expose credential source and harden acl dispatch logic (#306)
l50 Jul 28, 2026
99f5bb4
fix: refuse automated password reset for built-in and machine account…
l50 Jul 28, 2026
1eb61ba
feat: gate irreversible tools behind opt-in and add mutation classifi…
l50 Jul 28, 2026
2ba2392
feat: add post-op auto teardown at orchestrator shutdown (#309)
l50 Jul 28, 2026
2f9460b
fix: harden teardown credential resolution and safe revert classifica…
l50 Jul 28, 2026
c542d35
fix: avoid journaling no-op mutations and run auto teardown once per …
l50 Jul 28, 2026
ab0e66d
feat: enable pass-the-hash teardown and robust auth resolution (#312)
l50 Jul 28, 2026
b236191
fix: reorder red drain and teardown before blue investigation wait (#…
l50 Jul 28, 2026
b03960f
fix: require attacker_account for rbcd_write and avoid phantom mutati…
l50 Jul 28, 2026
c0b9eb3
fix: prefer domain admin for teardown and flag impacket delete refusa…
l50 Jul 28, 2026
d2d61a2
fix: unblock pywhisker pass-the-hash and improve teardown errors (#316)
l50 Jul 29, 2026
881e32f
chore(deps): update renovatebot/github-action action to v46.1.21 (#319)
ares-renovate[bot] Jul 29, 2026
98e9abf
chore(deps): update taiki-e/install-action digest to 18b1216 (#318)
ares-renovate[bot] Jul 29, 2026
249c765
chore(deps): update docker/login-action digest to 371161b (#317)
ares-renovate[bot] Jul 29, 2026
60af82e
fix: prevent drain from stranding terminal blue investigation (#320)
l50 Jul 29, 2026
dc1c2b7
fix: align trust escalation events and report superseded vulnerabilit…
l50 Jul 29, 2026
0c4b4b9
fix: report all compromised domains and emit per-domain da events (#322)
l50 Jul 29, 2026
1ec9790
feat: add laps parsing and relay/mitm6/printnightmare/nopac support (…
l50 Jul 29, 2026
f49d303
fix: publish seimpersonate as lead without exploitation credit (#325)
l50 Jul 29, 2026
4236ef2
ci: enforce token sweep in pre-commit and sanitize tests (#323)
l50 Jul 29, 2026
8003714
feat: expand exploit scoring with acl/gpo evidence and assistance (#327)
l50 Jul 29, 2026
729a828
fix: separate failed queries from clean results; tighten detection ru…
l50 Jul 29, 2026
0d503c8
test: update seimpersonate fixture ip for potato requirement test (#329)
l50 Jul 29, 2026
ad00cc5
fix: persist and enforce observed ad lockout policy across sprays (#330)
l50 Jul 29, 2026
b347ea9
fix: harden journaling and revert verification, enforce lockout polic…
l50 Jul 29, 2026
0c7c72c
fix: require tool attribution for generic acl success markers (#331)
l50 Jul 29, 2026
5fe05fc
refactor: remove seimpersonate escalation automation and mark lead-on…
l50 Jul 29, 2026
7dae820
fix: enforce catalog-grounded mitre technique ids on blue writes (#332)
l50 Jul 29, 2026
7eb95e8
fix: attribute evidence to query provenance and mark catalog detectio…
l50 Jul 29, 2026
3b8eeee
fix: route ntlmv1 downgrade to capture-capable role (#337)
l50 Jul 29, 2026
121b24c
fix: re-arm trust forges on recon change and skip sanitation on resum…
l50 Jul 29, 2026
b45e814
fix: preserve exploit failure diagnostics in timeline events (#339)
l50 Jul 29, 2026
bb96163
feat: add write-ahead mutation journaling and unresolved teardown han…
l50 Jul 29, 2026
df767f1
feat: enable phase 0 path recording by default in shipped config (#333)
l50 Jul 29, 2026
d8d0741
feat: enforce configurable cap on acl/gpo vulnerability publishing (#…
l50 Jul 29, 2026
1922977
feat: generate operation coverage reports and gate grafana rule creat…
l50 Jul 29, 2026
9f5c9dc
feat: include task objectives in mssql exploit prompts and add stop c…
l50 Jul 29, 2026
4f269e3
fix: hide grafana rule creation tool unless explicitly enabled (#344)
l50 Jul 29, 2026
fee2bd6
feat: simplify agent config and apply per-role max_steps from yaml (#…
l50 Jul 29, 2026
8ba1439
refactor: retire orchestrator agent and trap dispatch/management tool…
l50 Jul 29, 2026
8cb4af5
fix: parse certipy esc3 chain and recover add_computer creds (#347)
l50 Jul 29, 2026
bc77e53
fix: propagate vuln_id in automation payloads and clarify privesc lim…
l50 Jul 29, 2026
3caecb1
ci: add resilient buildx setup action and pin hashcat version (#349)
l50 Jul 30, 2026
d9d7dd8
feat: enable hash-based dacl abuse and accurate gmsa credit with time…
l50 Jul 30, 2026
080ef4e
feat: probe cross-forest credential reuse via netexec auth checks (#351)
l50 Jul 30, 2026
a4bfd47
feat: seed acl chains from uncracked kerberos roast material (#352)
l50 Jul 30, 2026
77ffe58
fix: centralize hash crediting to restore AS-REP and roast attributio…
l50 Jul 30, 2026
645f635
feat: preserve timed-out tool output and unify failure messaging (#353)
l50 Jul 30, 2026
d729e45
fix: derive acl source members from ldap memberOf to dispatch group e…
l50 Jul 30, 2026
eed9cb5
fix: persist admin credential upgrades to redis and include host in t…
l50 Jul 30, 2026
a427762
feat: parse lateral movement outputs and preserve host ownership (#357)
l50 Jul 30, 2026
678b871
feat: add silver ticket correlation and generalize forged-ticket dete…
l50 Jul 30, 2026
7f80957
feat: add silver ticket forging with evidence parsing and mitre mappi…
l50 Jul 30, 2026
27903de
feat: add liveness heartbeats and safe sid resolution for dacl abuse …
l50 Jul 30, 2026
72a40f0
feat: enable diversity knobs by default in shipped config (#361)
l50 Jul 30, 2026
46ee14d
fix: move path diversity recording to dedup and prevent stalled sweep…
l50 Jul 30, 2026
818ce83
feat: add shared vuln counts and netbios-backed dc hostname resolutio…
l50 Jul 30, 2026
0cacc8e
fix: gate technique coverage on observed detections to prevent silent…
l50 Jul 30, 2026
67eae21
fix: gate LLM-directed shell output and attest credential provenance …
l50 Jul 30, 2026
adf6495
fix: exclude superseded vulnerabilities from token coverage exploited…
l50 Jul 30, 2026
cb01d23
fix: align tool output parsers with modern impacket and freerdp outpu…
l50 Jul 30, 2026
61be3ba
fix: prevent generic exploitation from dispatching unexecutable ADCS …
l50 Jul 30, 2026
6bbe756
feat: mint self-owned machine account names in add_computer (#369)
l50 Jul 30, 2026
bfb83b9
feat: add ares skill suite and default red ops to blind start (#370)
l50 Jul 30, 2026
f7fb13f
fix: emit timeline events for published reset and discovery credentia…
l50 Jul 31, 2026
5c3e2ef
refactor: remove krbrelayup automation and fix shadow-credential expl…
l50 Jul 31, 2026
b33696a
refactor: weld credential publish and timeline event into shared help…
l50 Jul 31, 2026
c5eba75
fix: gate template-required ADCS exploits and log mutation policy at …
l50 Jul 31, 2026
a9e4eb8
feat: add owner_edit tool for WriteOwner edge exploitation (#376)
l50 Jul 31, 2026
d490895
feat: add blue containment invalidation counters to ops runtime (#377)
l50 Jul 31, 2026
73e9e17
feat: credit hash-only principals as local admin on Pwn3d! lines (#378)
l50 Jul 31, 2026
2de15dc
feat: restart stale ares workers and enable irreversible mutation on …
l50 Jul 31, 2026
b43520a
fix: split orphan exploit credits into attributed and unattributed co…
l50 Jul 31, 2026
aa5572f
fix: close dedup signature race in deferred task pop path (#383)
l50 Jul 31, 2026
fd0888f
docs: clarify privilege escalation tool dispatch status in goad attac…
l50 Jul 31, 2026
af1e1c1
fix: derive domain admin path from parser state instead of hardcoding…
l50 Jul 31, 2026
8bf03fc
docs: remove redundant doc comments from krbtgt path resolution (#386)
l50 Jul 31, 2026
5a1b57e
feat: split not-exploitable-by-construction vulns into their own buck…
l50 Aug 1, 2026
a3ba736
fix: attribute dumped credentials to target DC realm not auth realm (…
l50 Aug 1, 2026
801d9ac
feat: add windows_stage_and_run privilege escalation tool (#387)
l50 Aug 1, 2026
2d3417e
feat: classify empty lsassy dumps with actionable remediation (#391)
l50 Aug 1, 2026
2c8c868
feat: distinguish ESC11 from ESC8 in relay certificate captures (#390)
l50 Aug 1, 2026
e00f359
feat: wire ESC11 ICPR CA name through the relay-and-coerce chain (#392)
l50 Aug 1, 2026
21c88af
fix: prevent kerberoast credit undercount and orphaned scoreboard tok…
l50 Aug 1, 2026
681d5d3
feat: detect ESC16 CA security extension state and promote UPN-spoof …
l50 Aug 1, 2026
4588471
feat: add gMSA reader detection and LAPS pass-the-hash dispatch (#395)
l50 Aug 1, 2026
e47cb54
fix: pin pywhisker PFX passphrase so certipy_auth completes shadow cr…
l50 Aug 1, 2026
ed2c0bc
feat: recover from truncated completions with retry nudges and reason…
l50 Aug 1, 2026
2775b03
fix: bind GPO ACL abuse to the container DN instead of the bare GUID …
l50 Aug 1, 2026
76b1cff
feat: resolve group-typed ACL edge sources to owned members (#400)
l50 Aug 1, 2026
49bb953
fix: supply PKINIT identity and answer certipy prompts for shadow-cre…
l50 Aug 1, 2026
8795d5a
feat: distinguish blue containment from red-inferred failures in defe…
l50 Aug 1, 2026
8c65026
feat: capture and merge LDAP group membership for ACL edge resolution…
l50 Aug 1, 2026
d7a1584
feat: expose certipy_shadow to the acl agent role (#404)
l50 Aug 1, 2026
80ac91a
fix: keep certipy output when the child ignores canned stdin answers …
l50 Aug 1, 2026
f9515d0
feat: add UPN-spoof victim selection for ADCS ESC9/ESC10 exploitation…
l50 Aug 1, 2026
2095c12
feat: prioritize actionable ACL edges over low-value trustees in publ…
l50 Aug 1, 2026
08577c4
feat: prevent unauthenticated principal dispatch and cross-forest cca…
l50 Aug 1, 2026
144fd41
feat: add local-auth reuse sweep and DCC2/LSA secret extraction (#409)
l50 Aug 1, 2026
4452e28
chore(deps): update docker/login-action digest to dbcb813 (#412)
ares-renovate[bot] Aug 2, 2026
71e07cd
chore(deps): update taiki-e/install-action digest to 1beb33e (#413)
ares-renovate[bot] Aug 2, 2026
27a8092
chore(deps): update github/codeql-action action to v4.37.4 (#414)
ares-renovate[bot] Aug 2, 2026
be89908
chore(deps): update renovatebot/github-action action to v46.2.0 (#416)
ares-renovate[bot] Aug 2, 2026
d3cd5ca
feat: add certipy shadow credential parser with end-to-end chain cred…
l50 Aug 2, 2026
076bbf0
fix: reconcile Kerberos ticket paths across worker dispatches (#411)
l50 Aug 2, 2026
dbc58ec
chore(deps): update prom/prometheus docker tag to v3.13.2 (#415)
ares-renovate[bot] Aug 2, 2026
db84dfe
chore(deps): update rust crate redis to v1.5.0 (#417)
ares-renovate[bot] Aug 2, 2026
5f0d6c5
fix: reserve a no-policy spray attempt for username_as_password (#418)
l50 Aug 2, 2026
6b3c675
fix: gather EC2 metadata for Alloy stream labels in attacker setup (#…
l50 Aug 2, 2026
04bcfb0
fix: correct targeted_kerberoast flags and simplify etype handling wi…
l50 Aug 2, 2026
db1c66e
fix: correct ESC7 cross-domain authentication and gate dispatch on Ma…
l50 Aug 2, 2026
b398815
fix: correct certipy v5 principal and template attribution for adcs e…
l50 Aug 2, 2026
1db12bf
fix: sync detection rule evaluation interval with grafana group caden…
l50 Aug 2, 2026
ef2179f
fix: pin investigation_id for blue sub-agent tool calls (#424)
l50 Aug 2, 2026
be2d763
fix: resolve certipy cross-forest Kerberos SPN lookup failures (#425)
l50 Aug 3, 2026
c6ed146
feat: persist investigation escalation state to redis (#426)
l50 Aug 4, 2026
e9148f5
fix: decode json escapes before ioc extraction (#427)
l50 Aug 4, 2026
1d257f4
feat: add NoPac sAMAccountName spoofing detection (#428)
l50 Aug 4, 2026
086a900
feat: expand ATT&CK technique mapping for AD attack paths (#429)
l50 Aug 4, 2026
87bdcd7
fix: remove event 4741 from nopac detection to reduce false positives…
l50 Aug 4, 2026
c74b145
feat: add shadow credentials and ACL manipulation detections (#431)
l50 Aug 4, 2026
e80ec96
fix: remove T1210 fallback and add exact technique mappings (#432)
l50 Aug 4, 2026
e158aa3
fix: correct mssql linked server detection mitre technique mapping (#…
l50 Aug 4, 2026
a585aac
fix: map mssql coercion vulns to forced authentication technique (#434)
l50 Aug 4, 2026
1b7319f
fix: retarget ntlm relay detection to victim-side coercion telemetry …
l50 Aug 4, 2026
dac7d6d
fix: reject misattributed krbtgt NTLM hashes across domains (#436)
l50 Aug 4, 2026
f2592e7
feat: add hard wall-clock timeouts and self-healing for the orchestra…
l50 Aug 4, 2026
512a207
chore(deps): update github/codeql-action action to v4.37.6 (#441)
ares-renovate[bot] Aug 5, 2026
38f5370
chore(deps): update taiki-e/install-action digest to cb33e69 (#440)
ares-renovate[bot] Aug 5, 2026
25a1b6b
chore(deps): update renovatebot/github-action action to v46.2.1 (#443)
ares-renovate[bot] Aug 5, 2026
46803c6
chore(deps): update grafana/grafana docker tag to v13.1.2 (#442)
ares-renovate[bot] Aug 5, 2026
6fd6f36
chore(deps): update rust crate base64 to v0.23.1 (#444)
ares-renovate[bot] Aug 5, 2026
1dc13b9
fix: gate password resets on a restorable lab baseline (#439)
l50 Aug 5, 2026
e7ffa1a
fix: prefer confirmed trust keys over same-named computer accounts in…
l50 Aug 5, 2026
e7df1c4
fix: reject uncracked roast ciphertext as auth material and harden or…
l50 Aug 5, 2026
06cd3a8
feat: reintroduce LLM orchestrator with proposal-based work mediation…
l50 Aug 5, 2026
e7debaf
fix: make orchestrator planner and mediation opt-in with dispatch coo…
l50 Aug 5, 2026
4f45b55
feat: add cached token accounting to cost summaries (#447)
l50 Aug 5, 2026
8540dae
feat: cap orchestrator planner interval when mediation is enabled (#448)
l50 Aug 5, 2026
820f6cd
feat: enable orchestrator planner by default with discovery-driven wa…
l50 Aug 5, 2026
f7a732d
feat: add per-role token usage tracking and cost reporting (#452)
l50 Aug 5, 2026
49da6b7
feat: add advancement-based stall detection to post-soft-cap extensio…
l50 Aug 5, 2026
35da18f
feat: add config-backed orchestrator flags and periodic blue re-inves…
l50 Aug 5, 2026
1cc6d9b
fix: resolve well-known SIDs and page LDAP searches to prevent silent…
l50 Aug 5, 2026
f555cb8
fix: prevent false-positive credential revocation from cross-realm an…
l50 Aug 5, 2026
5b076f9
fix: reject child domain apexes in target DC hostname resolution (#457)
l50 Aug 5, 2026
0972443
fix: distinguish blue-actuated krbtgt rotations from red-inferred one…
l50 Aug 5, 2026
a00a576
feat: re-arm empty-dump trust forges on new trust material (#459)
l50 Aug 5, 2026
9c54235
fix: skip non-logon principals when dispatching certipy_find for ADCS…
l50 Aug 5, 2026
f03a218
fix: retry ADCS enumeration when certipy_find bind never authenticate…
l50 Aug 6, 2026
dde3499
fix: prevent orchestrator from re-dispatching abandoned vulns and ove…
l50 Aug 7, 2026
efabb73
ci: add ignore-error to buildcache cache-to in build workflow (#464)
l50 Aug 8, 2026
dd7540e
fix: prevent ADCS unauth retry hot loop and stop dispatching trust-ow…
l50 Aug 8, 2026
e365544
feat: annotate vulnerability targets with resolved hostnames (#466)
l50 Aug 8, 2026
a310b67
feat: add lifecycle logging for hashcat crack jobs (#467)
l50 Aug 8, 2026
fdd1976
refactor: remove remote crackd hashcat backend (#468)
l50 Aug 8, 2026
6275d95
docs: update template docs to reference main branch and fix formattin…
l50 Aug 8, 2026
a6a51b6
fix: correct config docs, credential chain formatting, and doc refere…
l50 Aug 8, 2026
7521fb9
docs: consolidate blue team docs and update infrastructure references…
l50 Aug 8, 2026
5bffdf3
chore(deps): update dtolnay/rust-toolchain digest to 4360b52 (#473)
ares-renovate[bot] Aug 9, 2026
e5b4aa1
chore(deps): update taiki-e/install-action digest to 6c6fd71 (#474)
ares-renovate[bot] Aug 9, 2026
3296e24
chore(deps): update dependency cowdogmoo/warpgate to v4.10.0 (#480)
ares-renovate[bot] Aug 9, 2026
dc545b1
refactor: consolidate LDAP base DN helper into shared ares-core modul…
l50 Aug 9, 2026
707d25e
chore(deps): update dependency community.docker to v5.2.2 (#475)
ares-renovate[bot] Aug 9, 2026
0ec00cc
chore(deps): update grafana/grafana docker tag to v13.1.3 (#476)
ares-renovate[bot] Aug 9, 2026
f8a2dd1
chore(deps): update grafana/loki docker tag to v3.7.6 (#477)
ares-renovate[bot] Aug 9, 2026
8f9b3db
chore(deps): update rust crate async-trait to v0.1.92 (#478)
ares-renovate[bot] Aug 9, 2026
a683aa8
chore(deps): update rust crate thiserror to v2.0.20 (#479)
ares-renovate[bot] Aug 9, 2026
e6b6a67
refactor: remove redundant inline comments across codebase (#481)
l50 Aug 9, 2026
3d7a8bc
fix: correct mssql coercion routing, prompt rendering, and result par…
l50 Aug 9, 2026
6e653c0
fix: detect underscore-formatted lab IPs in token sweep (#483)
l50 Aug 9, 2026
01d6f94
feat: add end-to-end EC2 operation runner and unify blue transport ba…
l50 Aug 9, 2026
ac181cb
fix: prevent parser arms from minting false evidence on empty tool ou…
l50 Aug 9, 2026
d9c1b1e
docs: update ares skill references for taskfile migration and blue ta…
l50 Aug 9, 2026
2212c0c
refactor: parameterize hardcoded AWS resources and rename build phase…
l50 Aug 9, 2026
6082c2f
refactor: extract attacker ip resolution into standalone script (#487)
l50 Aug 9, 2026
d9360cc
refactor: remove hardcoded s3 defaults from benchmark config (#489)
l50 Aug 9, 2026
7560f76
fix: prevent redundant crack task dispatch across producers (#490)
l50 Aug 9, 2026
9702030
fix: skip abandoned winrm lateral movement in dispatcher (#491)
l50 Aug 9, 2026
ce79448
fix: reserve crack dedup keys at submission layer to close double-que…
l50 Aug 9, 2026
01a5a88
feat: add configurable reasoning effort for reasoning models (#493)
l50 Aug 9, 2026
961833f
fix: dedupe crack tasks by hash identity in deferred queue signature …
l50 Aug 10, 2026
ea59b6f
refactor: remove legacy grafana credential fields from config (#495)
l50 Aug 10, 2026
f17ebe7
fix: correct blue investigation deployment resolution and e2e complet…
l50 Aug 10, 2026
8eb1585
Merge remote-tracking branch 'upstream/main' into chore/sync-upstream…
l50 Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
9 changes: 9 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Use mold for linking on x86_64 Linux (much faster than default ld).
# The cross-rs image's pre-build in Cross.toml installs mold and drops a
# `ld` symlink at /opt/mold-shim/ld → mold. We pass `-B/opt/mold-shim` so
# gcc picks that up as its linker without needing gcc ≥12 (which is when
# `-fuse-ld=mold` support landed; the cross image ships gcc 9). Host macOS
# builds are unaffected — the config is target-scoped, and macOS builds
# target aarch64/x86_64-apple-darwin. Devs can override in ~/.cargo/config.toml.
[target.x86_64-unknown-linux-gnu]
rustflags = ["-C", "link-arg=-B/opt/mold-shim"]
141 changes: 139 additions & 2 deletions .claude/agents/ares-operator.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,22 @@
---
name: ares-operator
description: Operates the Ares distributed red/blue team system. Use when asked to deploy code, run operations, monitor progress, debug stuck operations, check loot, generate reports, or manage infrastructure across K8s and EC2.
description: Operates the Ares distributed red/blue team system. Use for multi-step Ares workflows — launching/monitoring/debugging operations, deploying code, injecting state, generating reports. DO NOT use for one-shot kubectl/task commands the parent can run inline (e.g., `kubectl rollout restart`, `kubectl get pods`, `task ec2:status`); dispatching a subagent for these adds latency without value. Spawn this agent only when the work needs ≥3 dependent commands or domain knowledge of Ares-specific flags.
tools: Bash, Read, Grep, Glob
model: opus
---

You operate a distributed multi-agent penetration testing system called Ares. The system runs on remote infrastructure (K8s cluster or EC2 instance) — you drive it from the local machine via `ares-cli` or Taskfile commands.

## Scope: when NOT to use this agent

The parent should handle these inline, not delegate to you:

- Single kubectl commands (`get pods`, `rollout restart`, `logs`, `describe`).
- Single task commands the user already named (`task rust:build`, `task ec2:status`).
- One-shot reads of status/loot/queue that don't require follow-up reasoning.

Delegation is only worth the overhead when the work is multi-step, requires Ares-specific flags the parent doesn't know, or involves interpreting state across commands.

## Architecture

```
Expand Down Expand Up @@ -130,6 +140,133 @@ ares-cli --k8s ares-red ops kill --all # Kill all running ops
ares-cli --k8s ares-red ops cleanup --max-age-hours 24 # Delete old checkpoints
```

## Red Team Operations (Proxmox)

A third deployment target for the GOAD Ludus range: a single attack-box VM
(`attacker-1`, VMID 200) on the `proxmox` SSH alias that runs ares in
standalone mode (`ARES_TOOL_DISPATCH=local`, no worker StatefulSets, local
Redis/NATS). Reachable only through the proxmox jump host (DHCP-assigned
IP on `vmbr1001` VLAN 10). All operator commands live under the `proxmox:`
task namespace and resolve the current attacker IP automatically each run.

### Submit + dispatcher healthcheck

```bash
task proxmox:submit # uses DEFAULT_IPS/DOMAIN/MODEL
task proxmox:submit IPS=10.1.10.10,10.1.10.11 DOMAIN=...
```

`proxmox:submit` waits up to ~15s after the CLI returns and confirms the
dispatcher actually wrote `Starting operation: <op_id>` to `/var/log/ares/dispatch.log`
before exiting (PR #58). If the SUCCESS line doesn't print, the wrapper
warns to run `task proxmox:deploy:restart` — the dispatcher silently
wedging is a known symptom of stale orchestrator state and the submit
healthcheck is the first place it surfaces.

### Watch progress every minute (with wedge detection)

`Monitor` against a polling script is the right pattern; emit one line per
minute showing the deltas an operator would scan for. When tokens flatline
for ≥2 ticks while `status=running`, that's the same orchestrator wedge
PR #66 partially addressed — fall through to `task proxmox:logs` to
identify which subsystem stalled.

```bash
# Inline shell to feed into Monitor (persistent, ~1h timeout):
prev_tokens=""; frozen_ticks=0; while true; do
out=$(task proxmox:runtime 2>&1)
op=$(echo "$out" | grep -oE 'op-[0-9]{8}-[0-9]{6}' | head -1)
op_status=$(echo "$out" | grep -oE 'Status:[[:space:]]+\S+' | awk '{print $2}')
runtime=$(echo "$out" | grep -oE 'Runtime:.*' | sed 's/.*Runtime:[[:space:]]*//' | head -1)
creds=$(echo "$out" | grep -oE 'Credentials: [0-9]+' | awk '{print $2}')
hashes=$(echo "$out" | grep -oE 'Hashes: [0-9]+' | awk '{print $2}')
vulns=$(echo "$out" | grep -oE '[0-9]+ discovered, [0-9]+ exploited')
domains=$(echo "$out" | grep -oE 'Domains \([0-9]+/[0-9]+ compromised' | grep -oE '[0-9]+/[0-9]+')
tokens=$(echo "$out" | grep -oE 'Tokens: [0-9,]+' | tr -d ',' | awk '{print $2}')
cost=$(echo "$out" | grep -oE 'Cost:[[:space:]]+\$[0-9.]+' | grep -oE '\$[0-9.]+')
ts=$(date -u +%H:%M:%SZ); flag=""
if [ -n "$prev_tokens" ] && [ "$tokens" = "$prev_tokens" ] && [ "$op_status" = "running" ]; then
frozen_ticks=$((frozen_ticks + 1))
flag=" ⚠️ TOKENS FROZEN ${frozen_ticks}m"
else
frozen_ticks=0
fi
echo "$ts $op rt=$runtime doms=$domains c=$creds h=$hashes v=$vulns tokens=$tokens $cost status=$op_status$flag"
if [ "$frozen_ticks" -ge 2 ]; then
echo "=== wedge dig: last 30 WARN/ERROR lines from dispatch ==="
task proxmox:logs LINES=200 FILTER='WARN|ERROR|FATAL|Stale task|stale eviction' 2>&1 | tail -30
echo "=== orchestrator outbound HTTPS connection count ==="
task proxmox:exec CMD='ORCH=$(pgrep -f "ares orchestrator" | head -1); echo orch_pid=$ORCH; sudo ss -tnp 2>/dev/null | grep "pid=$ORCH" | grep -v 127.0.0.1 | wc -l' 2>&1 | tail -5
echo "=== end wedge dig ==="
frozen_ticks=0
fi
prev_tokens=$tokens
if [ "$op_status" = "completed" ] || [ "$op_status" = "stopped" ]; then
echo "$ts Op finished ($op_status) — stopping monitor"; break
fi
sleep 60
done
```

Note: `status` is read-only in zsh — use `op_status`. Tasks run via
the `Bash` tool inherit a zsh environment.

### Debugging a stuck op via `task proxmox:logs`

`proxmox:logs LINES=<n> FILTER=<regex>` tails the orchestrator dispatch
log over SSH and strips ANSI for clean grepping. Useful filters when the
1-min monitor flags a freeze:

```bash
# What was the last thing that actually completed?
task proxmox:logs LINES=500 FILTER='Task completed via LLM'

# Are auto-planner tasks being deferred while no LLM call runs?
# (worker-slot leak symptom — pre-PR-66 binaries; verify with the HTTPS conn count)
task proxmox:logs LINES=300 FILTER='Task deferred|throttler'

# Trust-follow / cross-forest forge progress
task proxmox:logs LINES=300 FILTER='Cross-forest forge|raise_child|Cleared stale trust_follow|forge_inter_realm'

# Cracker (remote crackd)
task proxmox:logs LINES=200 FILTER='crackd|Cracked password|crack_with_hashcat'

# Domain admin / golden ticket events
task proxmox:logs LINES=500 FILTER='discovery.domain_admin|tool.generate_golden_ticket|Forest trust escalation'

# Anything explicitly fatal
task proxmox:logs LINES=500 FILTER='FATAL|panic|Traceback|RUST_BACKTRACE|thread .* panicked'
```

Cross-reference with the orchestrator's outbound HTTPS connection count
(via `proxmox:exec` + `ss -tnp` filtered to the orch PID): zero open OpenAI
connections while `status=running` is the canonical wedge signature.

### Known wedge patterns + first-pass remedies

| Symptom | Likely cause | Fix |
| --- | --- | --- |
| Tokens frozen, 0 OpenAI conns, `llm_count>0`, only `Task deferred` lines | Worker-slot leak (pre-#66) | `task proxmox:deploy:restart` |
| Op submits but `Starting operation:` never logged | Dispatcher wedge | `task proxmox:deploy:restart` then re-submit |
| `crackd backend error: failed to GET /jobs/{id}` repeatedly | Idle-keepalive race vs uvicorn (pre-#64 client; bump server `--timeout-keep-alive` if pre-deploy) | Rebuild from main; verify `pool_idle_timeout` in `ares-tools/src/cracker/remote.rs::http_client` |
| `Child-to-parent forge dispatched` count is 0 but child trust hash + DCs are in state | `auto_trust_follow` dedup leak (pre-#64) | Rebuild from main; the staleness sweep clears stuck `trust_follow:*` marks every 30s tick |
| Cross-forest forge dispatched but no target krbtgt | Not a bug. SID filtering on the receiving DC strips the injected claim regardless of RID — the forge has never taken a second forest | Expect the foreign forest to fall to a native escalation instead (ADCS ESC13 above all, then MSSQL linked servers, AS-REP roasting, foreign security principals). Chase why no forest-native credential was acquired, not why the forge failed |
| Op marks `completed` at N/M domains with N<M | `compute_undominated_forests` collapses children (pre-#68) | Rebuild from main |
| `Kerberos SessionError: KRB_AP_ERR_SKEW` / `KRB_AP_ERR_TKT_NYV` | DC clock skew vs attacker | Router-side NTP serving + DHCP option 42 — see `project-ludus-dg-clock-skew` memory |

### Common one-shots

```bash
task proxmox:status # VM state + IP + dispatcher procs + service health
task proxmox:runtime # Token/cost/domain banner (one-shot, no watch)
task proxmox:loot # Full loot dump (OP_ID=op-... to target a specific op)
task proxmox:ops:list # Every op id in Redis
task proxmox:deploy # Build + push + restart (kills any running op)
task proxmox:deploy:restart # Just restart the dispatcher (kills any running op)
task proxmox:stop # Stop the latest op without restarting the dispatcher
task proxmox:exec CMD='...' # Arbitrary shell on attacker-1 (avoids `==` zsh parse issues — use `:::` separators)
```

## Red Team Operations (EC2)

EC2 runs everything on a single instance: Redis + 7 systemd worker units + orchestrator (run per-operation). Access is via AWS SSM, no SSH/public IP.
Expand Down Expand Up @@ -333,7 +470,7 @@ task ec2:exec EC2_NAME=kali-ares CMD='redis-cli ping' # Arbitrary health check

**K8s:**

1. **Check Grafana** (`grafana.dev.plundr.ai`) for token usage and Loki errors.
1. **Check Grafana** (`$GRAFANA_URL`) for token usage and Loki errors.
2. **Check failed tasks**: `ares-cli --k8s ares-red ops tasks --latest --status failed`.
3. **Verify binary sync**: `task remote:check`.
4. **Inject state**: If the LLM is stuck on a specific discovery step, manually inject the result.
Expand Down
Loading
Loading