CONSOLE· sandbox · dev-user· region ap-south-1
linked · STS only · no long-lived keys
A single run · start to evidence

What runs. What you see.

The left is real boto3 - the same code MayaTrail packages, signs, and replays. The right is what lands in CloudTrail while it runs. Both are exported with every run.

emulations/attach_role_policy.py · python · 56 lines
01# T1548.005 · T1098 - abuse role policy attachment for priv-esc
02from mayatrail import Chain, step
03import boto3
04
05chain = Chain("attach_role_policy", mitre=["T1548.005", "T1098"])
06
07@step("recon", mitre="T1087.004")
08def enumerate_roles(ctx):
09    iam = ctx.client("iam")
10    return iam.list_roles()["Roles"]
11
12@step("priv-esc", mitre="T1548.005")
13def attach_admin(ctx, target):
14    iam = ctx.client("iam")
15    iam.attach_role_policy(
16        RoleName=target["RoleName"],
17        PolicyArn="arn:aws:iam::aws:policy/AdministratorAccess",
18    )
19    return ctx.assume(target["Arn"])
20
21@step("exfil", mitre="T1567.002")
22def walk_buckets(elevated):
23    s3 = elevated.client("s3")
24    for b in s3.list_buckets()["Buckets"]:
25        elevated.exfil_objects(b["Name"])
26
27chain.run(teardown=True, evidence="./run-2f4a/")
cloudtrail · live tail · sandbox/dev-user
RUNNING WITH · detection engineers · purple teams · cloud security guilds · academic researchers
Adversary catalogue

Real APTs. Each one runs as code.

Every chain in MayaTrail traces back to an observed cloud campaign. Reproducible to the second, mapped to MITRE ATT&CK, with the detection content that should (and didn't) catch it.

§ 01 · UNC3944Critical
Scattered Spider
Identity-first · MGM, Caesars, Twilio (2023-24)

Calls the help-desk, resets MFA, attaches AdministratorAccess to an existing IAM role. Sub-60s priv-esc.

§ attach_role_policy T1548.005T1556.006T1098
helpdesk → IAM admin~12s
§ 02 · ALPHV / BlackCatCritical
BlackCat cloud-ransom
RaaS · MGM, Reddit, Henry Schein (2023)

Imports external KMS key material, re-encrypts target buckets with the attacker key, drops the import. Recovery requires their key.

§ s3_kms_encryption T1486T1485
BYO-key extortion~1m04s
§ 03 · SCARLETEELHigh
SCARLETEEL
Sysdig, 2023 · Kubernetes → AWS lateral

Compromised EKS pod token harvests AWS creds, enumerates S3, exfils objects to attacker-controlled bucket while CloudTrail data-events are off.

§ s3_initial_access T1530T1552T1567.002
EKS → S3 exfil~42s
§ 04 · LAPSUS$High
LAPSUS$ race
Extortion · Okta, Microsoft, Nvidia (2022)

Compromised IdP, SAML token replay against AWS - racing the IAM eventual-consistency window so revoked creds still authenticate.

§ eventual_consistency T1078T1098
IdP → STS race~18s
§ 05 · AMBERSQUIDMedium
AMBERSQUID ▶ RUN
Sysdig, 2023 · cloud-native cryptomining

Spins miners across Amplify, Fargate, SageMaker - the under-monitored services GuardDuty doesn't watch. Maps the permission surface first.

§ enumeration T1496T1087.004T1580
surface map → miner~31s
§ 06 · TeamTNTHigh
TeamTNT blind-spot
Long-running · IMDS abuse, log evasion (2020-)

Hits IMDSv1/2 endpoints for instance creds, then chains behind APIs that CloudTrail simply doesn't log. Silent persistence.

§ cloudtrail_blindspot T1552.005T1556.005
IMDS → silent persist~27s
Live emulation

Watch AMBERSQUID run end‑to‑end.

13 kill-chain steps. 4 credential pivots. 11 Sigma rules armed. Watch the chain land in real time - every CloudTrail event, every detection trigger, the StopLogging moment. No AWS calls; pure playback from an approved emulation plan.

13 steps
11 detections armed
~36s playback
$0.00 per run
▶  Run the AMBERSQUID emulation
LIVE PREVIEW · RUN-20260426
+02.40 iam             CreateRole          ⚠ ecsTaskExecutionRole
+02.78 iam             AttachRolePolicy    ⚠ AdministratorAccess
+03.34 sts             AssumeRole          codecommit-session
+04.20 amplify         CreateApp           miner-app
+05.10 sagemaker       CreateNotebook
+09.20 s3              GetObject           ⚠ CANARY · tfstate
+12.40 cloudtrail      StopLogging         ⚠ CRITICAL
+13.40 s3              DeleteObject        log file
 chain complete · 10/11 detections fired · 1 missed
      
Which detections fire

Our APT chains, your detection sources, multiple cells of truth.

Aggregated across 14 beta runs. Cell shows what the source produced for that scenario - fired, late (>30s), or missed. Numbers are median latency.

SCENARIO
GUARDDUTY
CLOUDTRAIL
FALCO
SIGMA RULES
SPLUNK ESCU
§ 01 · Scattered Spider T1548.005 · T1098
FIRED+3.1s
FIRED+0.8s
·N/Ano host
FIRED+2.0s
FIRED+4.4s
§ 02 · BlackCat cloud-ransom T1486 · T1485
MISSEDno rule
!LATE+58s
·N/Ano host
MISSEDno rule
!LATE+42s
§ 03 · SCARLETEEL T1530 · T1567.002
FIRED+6.0s
FIRED+1.4s
·N/Ano host
!LATE+45s
MISSEDno rule
§ 04 · LAPSUS$ race T1078 · T1098
MISSEDno rule
FIRED+1.2s
·N/Ano host
MISSEDno rule
!LATE+38s
§ 05 · AMBERSQUID T1087.004 · T1580
FIRED+4.0s
FIRED+0.9s
·N/Ano host
FIRED+2.1s
FIRED+3.6s
§ 06 · TeamTNT blind-spot T1556.005
MISSEDby design
MISSEDsilent API
·N/Ano host
MISSEDno rule
MISSEDno rule
n=14 · 30 cells · 14 fired · 4 late · 12 missed
Fired <30s Late >30s Missed Not applicable
Attack surface · indexed

An instrument for cloud attack emulation, not a checklist.

Every IAM action, every STS handshake, every KMS call is mapped to a technique and a detection. The sphere is a live index of what we can run against your AWS today.

  • 01Technique-level coverage - 32 MITRE techniques shipped, scored against real CloudTrail.
  • 02Scriptable end-to-end - every chain has a Python SDK call and a one-line CLI.
  • 03Bring your own infra - hosted, or self-hosted on the OSS core (Apache 2.0).
SCANNER · 32 techniques · 4 services indexed
SERVICE IAM · STS · S3 · KMS HOT 6 findings LAST SCAN 14:02:11
Take home · three deliverables

Detection rules. IR playbook. Signed evidence.

Every run ends with three artifacts your team uses on Monday - one for the detection repo, one for the runbook wiki, one for the audit folder. Hash-chained, portable, replayable.

detection-bundle.zip 18 KB
INITIALEXECPERSISTPRIV-ESCEVASIONEXFIL
Sigma rules · MITRE-mapped One rule per technique we ran. Drop into your detection repo. Fires next time the chain lands.
playbook_AMBERSQUID.md 32 KB · 739 lines
# 1. Preparation
- CloudTrail multi-region trail enabled
- GuardDuty + S3 Protection

# 2. Identification
- P0 · cloudtrail:StopLogging
- P0 · AttachRolePolicy + Admin
- P1 · canary.tfstate accessed

# 3. Containment
aws cloudtrail start-logging \
  --name $TRAIL_NAME

# 4. Eradication ...
VIEW ↗
739-line incident runbook Prep · identify (P0-P3 triggers) · contain · eradicate · recover. Real AWS CLI queries. Tabletop-ready.
evidence.zip 142 KB · signed
{
  "runId": "run-2f4a",
  "trail": "cloudtrail.json",
  "map": "mitre-map.svg",
  "signature": "sha256:8ed1f4...",
  "chain": [
    "step-01...",
    "step-02...",
    "... 11 more"
  ],
  "verified": true
}
CloudTrail dump + MITRE map Hash-chained. Replay offline against any SIEM. Audit-ready.
How it runs

Four steps. No agents. No long-lived keys.

The whole platform sits behind an STS-only role you grant in your sandbox account. Every resource is tagged. Every action is in your CloudTrail.

01 · CONNECT

STS role, no keys

Grant MayaTrail an assumable role in your sandbox account. Trust policy is two lines. No long-lived credentials ever leave AWS.

02 · PROVISION

Pulumi sandbox

A tagged stack of intentionally-leaky resources spins up in ~60s. Mirrors a real account in shape, not in data.

03 · RUN

Execute a chain

Pick a scenario. Watch the chain land in your CloudTrail. Read which detections fired, which didn't.

04 · TEAR DOWN

One command

The sandbox is destroyed; the evidence packet - CloudTrail, MITRE map, signed report - is yours to keep.

Where it sits

There are other tools. None of them are this.

MayaTrail isn't a vulnerable lab or a single-call test. It's an instrument: real cloud, full chain, mapped, signed, replayable. Here's how it compares.

 
Real AWS
End-to-end chain
MITRE-mapped
1-cmd teardown
Signed evidence
MayaTrailv0.4 · private beta
✓ live · STS-scoped
✓ priv-esc + exfil
✓ 32 techniques
✓ Pulumi destroy
✓ hash-chained
CloudGoatRhino Security Labs
✓ live
~ scenario-only
- manual map
✓ terraform destroy
- none
Stratus Red TeamDataDog
✓ live
~ single technique
✓ tagged
~ per-technique
- stdout only
PacuRhino Security Labs
✓ live · any creds
~ operator-driven
- manual map
- manual cleanup
- session log only
Atomic Red TeamRed Canary
~ mostly on-host
~ atomic tests
✓ technique-aligned
- N/A
- logs only
Open questions

The objections worth answering directly.

From beta interviews. If yours isn't here, ask: admin@mayatrail.tech.

Will this touch my production account?
No. MayaTrail only acts inside a separate sandbox account you nominate. The trust policy enforces a single sandbox aws:PrincipalAccount condition. Cross-account actions are statically blocked at the SDK layer and at the IAM boundary. Nothing executes against prod, ever.
What does a run cost in AWS spend?
A typical chain (~30s of API calls + a small KMS key + a 4-object S3 bucket) costs under $0.10. Worst-case scenarios (DynamoDB write storm, GuardDuty findings billed by sample) cap at ~$1.40. Every run prints a forecast before execution.
How do I know teardown is real?
Teardown is pulumi destroy with a post-condition: every resource the stack declared must return DescribeX → NotFound. If any survive, the run is flagged incomplete and the evidence packet refuses to sign. You get logs for both halves.
What if my detections aren't on this list?
The matrix shows the five we've benchmarked in beta. The evidence packet is raw - CloudTrail JSON + a MITRE map - so you can replay any run against your own detection stack offline. Custom adapters (Wazuh, Elastic, Chronicle, custom Lambda) ship as plugins.
Is this red-team or detection-eng oriented?
Detection engineering first. Red-team second. The product is built around the question "did your stack notice?", not "can you compromise this?" Pacu and others already do the latter well. We're complementary, not a replacement.
Self-host or SaaS?
Both. The emulation core, Pulumi recipes, and CLI are OSS (Apache 2.0). The hosted control plane adds run history, the evidence signer, the detection adapters, and a UI. Same chain runs in either mode - evidence packets are byte-identical.
Get access

See your AWS the way attackers see it.

Private beta. We onboard 4-6 detection teams per month. Apply with a few sentences about what you want to test.

14 teams onboarded · 4 spots open this quarter