Proof · How Warden tests its own build

What Warden's build replays against it, and how it did.

This is Warden's record of its own build. A signed record of a run in your own accounts is a separate thing: the signed record.

Every result on this page is read from two files the product writes at commit e1e668dc14e8, and every number is counted from them. The results are synthetic and offline: no real AWS account and no live attacker. The files say so themselves, in the label below. In this run every attack variant raised a finding, and the benign variants raised 3 false positives.

Replayed at build time

The file's own label

Synthetic and offline: the build-time adversary and benign corpus replayed through the full pipeline over a synthetic estate. Not a measurement of any real estate.

The build-time corpus holds 91 attack variants and 13 benign variants, replayed through the full pipeline. In this run, 91 of 91 attack variants were detected, and the benign variants raised 3 false positives (listed below).

The corpus is part of the product's own source at that commit, written with the rules it tests, and nobody outside Warden has run it. A full score shows that the rules catch the variants written for them and that nothing has slipped; it does not show what an attacker the corpus does not describe would get past.

By rule: 53 detected, 3 with no variant in the corpus (the file marks them not detected: "no self-play variant exercises this rule") and 1 out of scope, of 57. Each row is one detection rule and the variants written to test it; the rule links to its entry in the rules catalogue.

Detection per rule

Rule Checks that fired ATT&CK Variants detected Status
V-001 Credential-shaped inline value in workload configuration
  • Active IAM access key inline in workload configuration
none listed 1 of 1 Detected
V-002 Audit-logging and detection posture and tamper
  • CloudTrail logging stopped or trail deleted
none listed 1 of 1 Detected
V-003 New or privileged principals
  • IAM role created by a non-deployer principal
  • T1136.003
  • T1098
1 of 1 Detected
V-004 Access-key anomalies
  • Access key minted on another user
  • T1098.001
1 of 1 Detected
V-005 KMS Sign behaviour no variant none listed no variant Not tested no self-play variant exercises this rule
V-006 Key control plane
  • Grant created that lets its holder sign
  • Key alias moved to a different key
  • Key disabled or scheduled for deletion while in use
  • Key policy replaced
none listed 4 of 4 Detected
V-007 Wildcard signing grants no variant none listed no variant Not tested no self-play variant exercises this rule
V-008 Snapshot and export exfiltration
  • RDS snapshot shared with an out-of-org account
  • T1537
1 of 1 Detected
V-009 Trust surface
  • Third-party role trust without sts:ExternalId
none listed 1 of 1 Detected
V-010 Standing admin and privilege escalation
  • Standing admin: Allow on any action and any resource without a restricting condition
none listed 1 of 1 Detected
V-011 Resource-policy and organization perimeter
  • Bucket policy admits accounts outside your organization
  • Queue policy admits callers outside your organization
  • Topic policy admits callers outside your organization
none listed 3 of 3 Detected
V-011a Organization perimeter slice
  • No root-attached resource control policy requires aws:PrincipalOrgID
none listed 1 of 1 Detected
V-012 Cluster-admin surface
  • Access entry created or widened outside the deployer identity
  • Binding grants cluster-admin or a wildcard-equivalent role
none listed 2 of 2 Detected
V-013 IMDS posture
  • Launch template launches instances that accept IMDSv1
none listed 1 of 1 Detected
V-013a IMDS posture slice
  • EC2 instance accepts IMDSv1 with a hop limit above 1
  • T1552.005
1 of 1 Detected
V-014 Edge bypass and exposure
  • Publicly accessible database open to the internet on its port
none listed 1 of 1 Detected
V-014a EKS public endpoint slice
  • EKS API endpoint public to any address
none listed 1 of 1 Detected
V-014b Internet exposure slice
  • Admin port open to the internet on a public instance
none listed 1 of 1 Detected
V-015 S3 public exposure
  • Bucket public access block not fully enabled
  • Bucket readable by anyone
none listed 1 of 1 Detected
V-015a S3 public-access slice
  • Account public access block not fully enabled
none listed 1 of 1 Detected
V-016 Post-revocation success
  • Revoked credential or identity used successfully after its revocation
none listed 1 of 1 Detected
V-017 Probing, unused regions and credential-use anomalies
  • One principal calling into five or more regions within a minute
none listed 1 of 1 Detected
V-017a Probing and credential-use slice
  • Denied calls from a principal outside the organization
none listed 1 of 1 Detected
V-018 Secret-store reconnaissance
  • Instance passwords or launch data read in a burst
  • Parameter path read with decryption by a principal that never did
  • Secret reads refused in volume
  • Secrets or parameters read in a sweep by a principal that never read them
none listed 4 of 4 Detected
V-019 GuardDuty triage
  • GuardDuty finding of high or critical severity to triage
none listed 1 of 1 Detected
V-019a GuardDuty parity slice no variant none listed no variant Out of scope grades another sensor's findings beside Warden's (GuardDuty parity); there is no adversary act to replay, only a third-party verdict
V-020 Cognito posture and abuse
  • App client lets the password be sent to the service
  • App client tells a caller which users exist
  • User pool accepts short passwords
  • User pool lets anyone sign up without verifying who they are
  • User pool offers no second factor
  • T1078.004
  • T1136.003
3 of 3 Detected
V-020a Identity pool abuse slice no variant
  • T1078.004
  • T1136.003
no variant Not tested no self-play variant exercises this rule
V-021 Network-position trust
  • Edge allowlist admits third-party addresses pinned one by one
none listed 1 of 1 Detected
V-022 Root and console hygiene
  • Root credentials used in the last 24 h
none listed 1 of 1 Detected
V-023 Registry exfiltration and provenance
  • Workload runs an image by tag, not by digest
  • Workload runs an image from a registry outside the allowed list
none listed 2 of 2 Detected
V-024 Persistence and alert-cut
  • Another security tool's alarm switched off or told to look away
none listed 1 of 1 Detected
V-025 Coverage and self-integrity
  • Coverage gap: collector receipt not OK
none listed 1 of 1 Detected
V-026 Compute and AI hijack
  • Foundation-model access opened by a principal with no model history
  • Model invocation logging or a guardrail removed
none listed 1 of 1 Detected
V-027 S3 impact and exfiltration
  • Bucket versioning suspended by a non-deployer
none listed 1 of 1 Detected
V-028 Identity Center principals and assignments
  • Administrator access is assigned in the Identity Center management account
  • Administrator access is assigned to an individual user
  • Administrator permission set keeps sessions open for more than eight hours
none listed 3 of 3 Detected
V-029 EKS audit-log behaviours
  • Kubernetes RBAC written outside the deployer identity
none listed 1 of 1 Detected
V-030 GitOps and IaC drift
  • Admission webhook written outside the GitOps identity
  • Scheduled job written outside the GitOps identity
  • Workload written outside the GitOps identity
none listed 2 of 2 Detected
V-031 Privileged workload posture
  • Workload mounts a sensitive directory of the node
  • Workload runs a container as root
  • Workload runs a privileged container
  • Workload shares the node's process, IPC or network namespace
none listed 3 of 3 Detected
V-032 Host execution through cloud APIs
  • Command run on hosts through SSM by a non-deployer
none listed 1 of 1 Detected
V-033 CI/CD identity and project surface
  • Build project holds secret-named variables in plaintext
  • Build project is readable by anyone
  • Build project runs as an administrator role
  • Build project starts from pull requests anyone can open
  • Source-provider credential is a long-lived token
none listed 3 of 3 Detected
V-034 AI and agent surface
  • AI coding agent identity with administrative or escalation access
  • AI or agent tooling reachable from the internet without authentication
none listed 2 of 2 Detected
V-035 Credential-consumer inventory
  • Active access key whose user has no owner or consumer tag
none listed 2 of 2 Detected
V-036 Enclave-gated key posture
  • Key opens to an enclave host's role without requiring attestation
  • Key policy requires attestation but accepts any enclave image
none listed 2 of 2 Detected
V-037 Frontend asset integrity
  • CDN distribution or edge function changed by something other than the deployer
  • CDN origin bucket accepts writes from outside the estate
  • CDN origin bucket lets any CloudFront distribution read it
none listed 3 of 3 Detected
V-038 CloudHSM control plane and audit
  • HSM backup copied to another region by a non-deployer
  • HSM backup deleted by a non-deployer
  • HSM cluster built or restored from a backup by a non-deployer
  • HSM cluster deleted by a non-deployer
none listed 4 of 4 Detected
V-040 Application token stores and plaintext recovery secrets
  • Application token parameter has no expiry and has not changed in a year
  • Application token secret is never rotated and has not changed in a year
  • Recovery secret stored as a plain-text parameter
  • Secret stored as a plain-text parameter
none listed 4 of 4 Detected
V-041 Idle and dangling identity
  • Customer-managed policy keeps a non-default version broader than its default
none listed 1 of 1 Detected
V-043 Principal behaviour off its own baseline
  • A principal used a privilege tier for the first time
  • T1078
1 of 1 Detected
V-044 Text planted to steer an AI reviewer
  • Text planted to steer an AI reviewer, written by a principal of the estate
none listed 1 of 1 Detected
V-045 Decoy touched
  • Ember access key used
  • Ember secret read
  • T1552
  • T1078.004
2 of 2 Detected
V-046 Known vulnerability in running software
  • Known vulnerability in an installed package
  • Package name is listed as malicious on the public registry
  • T1190
  • T1210
2 of 2 Detected
V-047 Exploited or exploitable vulnerability with a path to harm
  • Proven malicious package is running
  • Vulnerability exploited in the wild on software open to the internet
  • T1190
  • T1195.002
  • T1068
2 of 2 Detected
V-048 End of support and out-of-date platforms
  • Kubernetes version is in or near the end of standard support
  • Managed database or data service version is in or near the end of support
  • T1190
  • T1195
2 of 2 Detected
V-049 AWS security update waiting
  • Cache service has a security update waiting
  • Instance is missing security patches
  • T1190
  • T1068
2 of 2 Detected
V-050 Vulnerability blind spots
  • Amazon Inspector is off where software runs
  • Running images come from a registry no scanner reads
  • T1562.001
  • T1190
2 of 2 Detected
V-100 LOW hygiene pack
  • Database instance is not encrypted at rest
  • Database instance runs in a single zone
  • Identity holds full CloudShell access
none listed 3 of 3 Detected

Benign false positives

The benign variants are ordinary changes that should raise nothing. 1 of the 13 raised 3 findings, and all 3 are false positives. By severity: 1 high, 2 low. Each is shown as the file records it: rule, severity, then the finding.

enclave-host.imdsv2-hop-2
  • V-013a high Weak-IMDS instance set grew
  • V-013a low EC2 instance metadata hop limit above 1
  • V-013a low Weak-IMDS instance set

What this record does not cover

  • A real AWS account or cluster: the accounts are synthetic, in the file's own words above.
  • An outside or live attacker: every variant is in the product's source and is replayed offline.
  • Containment: this record scores detection only.
  • V-005: no variant in the corpus (no self-play variant exercises this rule).
  • V-007: no variant in the corpus (no self-play variant exercises this rule).
  • V-020a: no variant in the corpus (no self-play variant exercises this rule).
  • V-019a: out of scope (grades another sensor's findings beside Warden's (GuardDuty parity); there is no adversary act to replay, only a third-party verdict).

How these files are made

Both files come from the product repository's main branch at commit e1e668dc14e8ef60509c4f963bc79707125af0ba. The product repository is private, so these commands need access to it. In a checkout, with Node 22.21 or later, they rebuild both files from the corpus and the rules with the product's own generators, show that they match that commit byte for byte, and print their sha256. Without access, you can still download the copies served here and compare their sha256 with the last column.

git checkout e1e668dc14e8ef60509c4f963bc79707125af0ba
npm ci
npx tsx tools/selfplay/ratchet.ts --write
npx tsx tools/gen-coverage-map.ts --write
npx biome format --write tools/selfplay-score.json techniques.json
git diff --exit-code tools/selfplay-score.json techniques.json
sha256sum tools/selfplay-score.json techniques.json
File Written by sha256 at the commit
tools/selfplay-score.json tools/selfplay/ratchet.ts 1d9391bff8b17ba34f522d70a56dd991c4561de8e6e4bf1b068912288856e077
techniques.json tools/gen-coverage-map.ts ebeccdd7d79fe01f25a5cc9f3127809d96d2daae83a963704e012284995324ff

The files as this page read them: selfplay-score.json (the score: every variant and the findings it raised) and techniques.json (the technique map made from it).