Attack playbook
Every attack lab on the estate, in the order a real intrusion runs them. Each stage names the machines to point it at, the steps inside it, and what to look for on the wire. Work top to bottom to walk one intrusion end to end, or drop into any stage on its own.
28 stages
- 01
Reps: Knocking On Every Door
reconbeginnerlinuxOne address touched every machine on the estate in under a minute. Read the capture, tell a half-open scan from a real connection, list what actually answered, and say which finding matters most.
Find what is listening before touching anything.
Target: Any workstation · Every server on the subnet
- 1.Addresses sweptdiscovery · T1018ICMP, Echo (ping) request
- 2.Ports probeddiscovery · T1046[SYN], [RST, ACK], Win=1024alerts
- 3.Versions grabbed off what answereddiscovery · T1046SSH-2.0-OpenSSH, Microsoft SQL Server, Kubernetes API server
- 4.Scanner containedremediation · T1046
- 02
Reps: Dropped In Clear
initial accessbeginnerlinuxSomeone uploaded a file to the estate's FTP server. Read the capture, recover the account and password the transfer used, name the file that landed, and close the clear-text path without stopping the business transfer.
A clear-text upload hands over an account name and password on the wire.
Target: File transfer server
- 1.Control session openedinitial-access · T1071.002220 (vsFTPd 3.0.5), USER, PASS
- 2.File pushed to the servercollection · T1105STOR, payroll-export.csv, 226 Transfer completealerts
- 3.Clear-text path closedremediation · T1071.002
- 03
Reps: Bound And Browsing
reconintermediatelinuxAn ordinary account bound to the directory over LDAP and walked the whole tree. Read the capture, name the account and the distinguished name it bound with, work out what it read, and cut anonymous and over-broad reads without breaking sign-in.
A plain directory bind reads the whole staff list, groups and service accounts.
Target: Domain controller · Directory server
- 1.Simple bind on port 389credential-access · T1040bindRequest, simple, CN=Usersalerts
- 2.Whole subtree readdiscovery · T1087.002wholeSubtree, searchResEntry, servicePrincipalNamealerts
- 3.Reads narrowed and signing requiredremediation · T1087.002
- 1.Simple bind on port 389credential-access · T1040bindRequest, simple, CN=Users
- 04
Reps: Mounted In The Open
initial accessintermediatewindowsA workstation mounted a finance share it should never have reached. Read the capture, name the account in the session setup, work out how it found the share, and tighten the permissions without cutting off the team that needs it.
Shares reachable by the wrong group are the quietest way in.
Target: File server
- 1.Session set up on the file serverlateral-movement · T1021.002NTLMSSP_AUTH, Session Setup, 445
- 2.Shares listed over IPC$discovery · T1135IPC$, NetShareEnumAll, ADMIN$alerts
- 3.Finance share mounted and readcollection · T1039Tree Connect, Finance, Budget FY26.xlsxalerts
- 4.Permissions tightenedremediation · T1039
- 05
Reps: Knocking On 3389
initial accessintermediatewindowsA remote desktop session was opened to a server that should never accept one. Read the capture, pull the user name out of the connection request, decide whether the session succeeded, and close remote desktop down to the jump host only.
The remote desktop handshake names the user before anyone signs in.
Target: Remote access server · Jump host
- 1.Connection request seenlateral-movement · T1021.001mstshash=, TPKT, 3389alerts
- 2.Session establishedlateral-movement · T1021.001X.224 Connection Confirm, CredSSP
- 3.Remote desktop narrowedremediation · T1021.001
- 1.Connection request seenlateral-movement · T1021.001mstshash=, TPKT, 3389
- 06
Reps: Roast and Forge
credential accessadvancedwindowsA service account has a short password. Ask the KDC for its ticket, crack it offline, then use the recovered password to reach a database — and prove a golden ticket forged before the fix stops working once krbtgt is rolled a second time.
Service accounts with short passwords give them up from a ticket.
Target: Domain controller · Database server · Web server
- 1.Service principal names enumerateddiscovery · T1558.003svc-sql
- 2.TGS cracked offlinecredential-access · T1558.003
- 3.krbtgt rolled, golden ticket diesremediation · T1558.001
- 07
Reps: Certified Pre-Owned
privilege escalationadvancedwindowsA VPN rollout cloned a certificate template and left it open: any domain user may enroll, the requester names the subject, and nobody approves it. Ask the authority for a certificate in a domain administrator's name, log on with it, then work out which single setting made it possible.
An open template issues a certificate in an administrator's name.
Target: Certificate authority
Timeline· 30 minute run
- 0 min inVPN rollout ticket landsmessage
- 6 min inCertificate issued in an administrator's nameattackkeyexpect: Certificate issued with a requester-supplied subject
- after Certificate issued in an administrator's nameLogon with the issued certificateattackkeyexpect: Smart-card logon by an account that has no card
- when the learner finishes harden-templateTemplate locked downgate
- on your cueSecond template found openworld
- 1.Ordinary domain accountinitial-access · T1078.002
- 2.Published templates enumerateddiscovery · T1087.002ForgeVPNUseralerts
- 3.Certificate requested for another accountprivilege-escalation · T1649Event 4887, ForgeVPNUseralerts
- 4.Logon with the issued certificatelateral-movement · T1550alerts
- 5.Template closedremediation · T1649
- 0 min inVPN rollout ticket lands
- 08
Reps: Ticket To Ride
privilege escalationadvancedwindowsRequest a service ticket, crack the service account out of it, then use the account to impersonate a user on the application server. Finish by pushing the estate's Kerberos risk score out of the red.
A cracked service account becomes an impersonated session.
Target: Domain controller · Application server
- 1.Service accounts enumerateddiscovery · T1558.003servicePrincipalName, MSSQLSvc
- 2.Ticket cracked offlinecredential-access · T1558.003RC4-HMAC, svc-sqlalerts
- 3.Impersonation on the application serverlateral-movement · T1550.003svc-sql, FinanceDWalerts
- 4.Risk score driven downremediation · T1558.003
- 09
Reps: DCSync and Back
credential accessadvancedwindowsA helpdesk account carries the DS-Replication-Get-Changes-All right by mistake. Replicate the krbtgt secret out of the directory, then remove the right and prove the same request now refuses.
With replication rights, every secret in the directory comes out at once.
Target: Domain controller
Timeline· 25 minute run
- 0 min inNight shift hands overmessage
- 5 min inReplication pulled by a workstationattackkeyexpect: DS-Replication-Get-Changes-All granted to a non-controller
- when the learner finishes remove-replication-rightDelegation removedgatekey
- after Delegation removedAttacker tries the same pull againattackexpect: The controller refuses — the learner proves the fix held.
- on your cueA second account has the same rightworld
- 1.Delegation surveyeddiscovery · T1069.002
- 2.GetNCChanges acceptedcredential-access · T1003.006krbtgt, DRSUAPIalerts
- 3.Right removed and krbtgt rolledremediation · T1003.006
- 0 min inNight shift hands over
- 10
Reps: Inside The Cluster
lateral movementadvancedlinuxThe shop cluster runs six workloads across two worker nodes. Read the capture, follow a request from the front end through to the cache, work out which container is running privileged, and say what an escape from it would reach.
The container estate is a second network with its own accounts.
Target: Cluster control plane · Worker nodes · Image registry
Timeline· 40 minute run
- 0 min inCluster settles into normal trafficworld
- 8 min inFront-end pod compromisedattackkeyexpect: Outbound connection from a pod that only serves traffic
- after Front-end pod compromisedAttacker works the clusteragentkeyexpect: Learner spots the secret read against the control plane and isolates the pod.
- when the learner contains shop-frontendPod isolatedgate
- on your cueAttacker turns noisyworld
- 1.Nodes report in to the control planediscovery · T16136443, 10250, PATCH /api/v1/nodes
- 2.Container to container inside the overlaydiscovery · T1613VXLAN, 10.244.0.0/16, orders.shop.svc.cluster.local
- 3.A privileged workload on a worker nodeprivilege-escalation · T1611privileged, ops, batch-runneralerts
- 4.Image pulled with a shared registry logincollection · T1552.007Authorization: Basic, registry-01, regcred
- 0 min inCluster settles into normal traffic
- 11
Reps: Everything In The Open
credential accessadvancedlinuxSomeone with an ordinary cluster identity listed every secret the estate holds — database connection strings, a live API key, the registry login and a service-account token — and the same sweep picked up a management card still on its factory password. Work out what they could reach, then close it.
Secrets scattered across layers reuse the same passwords.
Target: Cluster control plane · Vault · Management card
- 1.Unauthenticated probe of the API serverdiscovery · T1133system:anonymous, 6443, GET /versionalerts
- 2.Every secret listed at oncecredential-access · T1552.007SecretList, payments-db, stripe-livealerts
- 3.Credentials reused off the clusterlateral-movement · T1078svc-sql, builder, 1433
- 4.Secrets sealed and bindings scopedremediation · T1552.007
- 1.Unauthenticated probe of the API serverdiscovery · T1133system:anonymous, 6443, GET /version
- 12
Reps: Forest Fire
lateral movementexpertwindowsA partner forest trusts yours with SID filtering switched off. Forge a ticket in the partner realm carrying Enterprise Admins in SID history, land as an administrator in your forest, then turn SID filtering on and prove the same ticket is dropped at the trust boundary.
A trust with filtering off carries borrowed privilege across forests.
Target: Domain controller · Partner forest controller
- 1.Trust surveyeddiscovery · T1482
- 2.Foreign ticket presentedlateral-movement · T1550.003alerts
- 3.SID filtering enforcedremediation · T1482
- 13
Reps: Across The Forest
lateral movementexpertwindowsA partner forest trusts yours, and filtering is off. Use the trust to land in the home realm carrying borrowed privilege, spot it in the logs, then turn filtering back on and prove the same move now fails.
The same route, walked end to end, then closed.
Target: Partner forest controller · Federation server
- 1.Trusts mappeddiscovery · T1482nltest /domain_trusts, TDO
- 2.Borrowed privilege carried acrosslateral-movement · T1134.005S-1-5-21-…-519, SID historyalerts
- 3.Filtering restoredremediation · T1482
- 14
Reps: Certificate Authority Under Attack
impactadvancedwindowsRequest a certificate through the risky VPN template, revoke a legitimate certificate to break somebody's login, then close the abuse path, restore the revoked user, and drive the authority's live risk score down to a workable number.
Whoever reaches the authority can revoke everyone else's certificates.
Target: Certificate authority
- 1.Risk score readdiscovery · T1654
- 2.Certificate issued and one revokedprivilege-escalation · T1649alerts
- 3.Authority closed and score fallsremediation · T1649
- 15
Reps: Through The Front Door
initial accessadvancedlinuxNobody was phished and nothing was guessed. The intruder walked in through the public portal using a flaw in the management path, then read every saved password on the box. Trace the first request, isolate the edge, and close the path before the credentials get used inside.
Most intrusions start at an internet-facing service, not an inbox.
Target: Public portal · Edge appliance
Timeline· 35 minute run
- 0 min inEstate at its recorded baselineworld
- 1 min inVendor advisorymessage
- 5 min inPortal exploitedattackkeyexpect: A request to the management path with traversal in it, answered 200
- after Portal exploitedIntruder works from the edgeagentkeyexpect: Learner isolates the portal and rotates what was stored on it.
- 14 min inStored credentials readworldkeyexpect: Bulk profile and configuration reads right after the exploit
- when the learner contains web-01Portal isolatedgate
- on your cueA stolen account signs in insideworld
- 1.Find the first request that workedinitial-access · T1190/manage/, path traversal, 443alerts
- 2.Follow the credential theftcredential-access · T1555.003Login Data, config, service accountalerts
- 3.Isolate the edgecontainment · T1190isolate, web-01
- 4.Patch, rotate and rebuildrecovery · T1555patch, rotate, rebuild
- 0 min inEstate at its recorded baseline
- 16
Reps: The Gate They Left Open
initial accessadvancedlinuxYour remote-access gateway answers a management request that carries no session at all — the flaw the national catalog lists as actively exploited. Somebody used it an hour ago. Work back from the gateway logs to the script they ran and the service they left behind, then stop the run before the file servers start turning over.
Authored from the live known-exploited catalog: an edge authentication bypass, a shell payload and a service left behind.
Target: Remote-access gateway · File server
Timeline· 40 minute run
- 0 min inEstate at its recorded baselineworld
- 1 min inAdvisory landsmessage
- 4 min inManagement path answered without a sessionattackkeyexpect: A management endpoint returning 200 to a request carrying no session
- after Management path answered without a sessionOperator works the gatewayagentkeyexpect: Learner confirms the bypass, finds the service left behind, isolates the gateway and blocks the operator before the share is encrypted.
- 12 min inA service appears that nobody requestedworldkeyexpect: A unit file created outside change control and enabled by hand
- when the learner contains gw-01Gateway isolatedgate
- on your cueOperator reaches for the file serverworld
- 1.Prove the bypass from the gateway loginitial-access · T1190gw-01, 443, no sessionalerts
- 2.Follow the shell that ran nextexecution · T1059.004update.sh, cdn.updates-cache.example, nsrootalerts
- 3.Find the service left behindpersistence · T1543.002estate-telemetry.service, systemctl enable, persistencealerts
- 4.Isolate the gateway and block the operatorcontainment · T1190isolate, gw-01, block
- 5.Patch, rebuild and prove it tookrecovery · T1543.002patch, rebuild, restore
- 0 min inEstate at its recorded baseline
- 17
Reps: Quiet On 443
command and controladvancedwindowsOne workstation is checking in with someone every sixty seconds, and it looks exactly like a content delivery network. When you close the web route it moves the same conversation into DNS lookups. Find the beacon in ordinary traffic, prove it, and cut both channels.
A beacon hides in ordinary web traffic and falls back to DNS when the web route closes.
Target: Workstation · Proxy · Resolver
Timeline· 35 minute run
- 0 min inEstate at its recorded baselineworld
- 1 min inTip from the proxy teammessage
- 4 min inBeacon starts checking inattackkeyexpect: Fixed-interval HTTPS requests with a constant response size
- after Beacon starts checking inOperator works the channelagentkeyexpect: Learner isolates the workstation and blocks both the web and DNS route.
- 14 min inChannel moves into DNSworldkeyexpect: TXT queries with encoded labels and steady response sizes
- when the learner contains wks-09Workstation isolatedgate
- on your cueA second machine starts beaconingworld
- 1.Find the rhythm in the web trafficcommand-and-control · T1071.001cdn.updates-cache.example, 443, 60s intervalalerts
- 2.Follow the fallback into DNScommand-and-control · T1071.004TXT, tun.updates-cache.example, 53alerts
- 3.Isolate the workstationcontainment · T1562isolate, wks-09
- 4.Close both routes and restorerecovery · T1071block, sinkhole, restore
- 0 min inEstate at its recorded baseline
- 18
Reps: Hiding In The Noise
command and controlexpertwindowsNothing looks wrong. The traffic is all protocols this estate uses every day, to destinations that resolve, on ports that are meant to be open. An operator is inside anyway. Find them in the ordinary traffic and confirm what you have before you pull a single machine off the network — this rep scores the detection, not the cleanup.
Everything the operator touches is allowed traffic; the room is scored on detecting and confirming it before containment.
Target: Workstation · Proxy · File share
Timeline· 45 minute run
- 0 min inEstate at its recorded baselineworld
- 1 min inHunt taskingmessage
- 3 min inOperator already has a footholdattackkeyexpect: Ordinary protocols carrying a rhythm and a volume the baseline does not have
- after Operator already has a footholdOperator stays inside the noiseagentkeyexpect: Learner confirms a real incident from the traffic evidence before isolating, then contains.
- 16 min inBaseline drift becomes measurableworldkeyexpect: Volume drift on a host with an otherwise normal protocol mix
- when the learner logs incident-confirmedRoom confirms a real incidentgate
- on your cueLeadership asks for a machine to be pulledworld
- 1.Compare the host against its own baselinediscovery · T1082wks-14, baseline, driftalerts
- 2.Find the rhythm inside ordinary web trafficcommand-and-control · T1071.001interval, constant size, 443alerts
- 3.State the finding on the recorddetection · T1071confirm, incident-confirmed, evidencealerts
- 4.Then contain, in the right ordercontainment · T1041isolate, block, wks-14
- 0 min inEstate at its recorded baseline
- 19
Reps: Signed And Trusted
defense evasionadvancedwindowsThe endpoint console shows nothing but Microsoft-signed processes, and the machine is still calling out every few minutes. The payload never ran under its own name — a trusted Windows binary was asked to load it. Work out which signed process is carrying it, prove the module it loaded, and cut the run before the operator moves on.
The payload never runs under its own name: a signed Windows binary loads it, so the process tree looks clean.
Target: Workstation · Proxy
Timeline· 40 minute run
- 0 min inEstate at its recorded baselineworld
- 1 min inTasking from the network teammessage
- 4 min inA module is written where nothing should be writtenworldkeyexpect: A DLL written to a world-writable path outside any installer
- after A module is written where nothing should be writtenOperator works from behind the signed binaryagentkeyexpect: Learner names rundll32 as the carrier, ties it to the module on disk, isolates wks-22 and blocks the callback destination.
- when the learner contains wks-22Workstation isolatedgate
- on your cueOperator tries the next machineworld
- 1.Find the signed process that is doing the talkingdefense-evasion · T1218.011rundll32.exe, update.dll, wks-22alerts
- 2.Prove the module, not the processexecution · T1218.011unsigned, C:\Users\Public, image loadalerts
- 3.Tie the callback to the same processcommand-and-control · T1071.001cdn.telemetry-sync.example, 443, beaconalerts
- 4.Isolate the machine and block the destinationcontainment · T1218.011isolate, wks-22, block
- 5.Clean and prove it tookrecovery · T1218.011rebuild, restore, clean
- 0 min inEstate at its recorded baseline
- 20
Reps: Lights Off
defense evasionadvancedwindowsThe endpoint agent on a server stopped reporting and the security log has a gap. Nothing alerted, because the thing that alerts was turned off first. Work the absence: prove the tampering from what is left, isolate the machine and get your visibility back.
The agent is stopped and the log cleared before anything worth alerting on happens.
Target: Member server · Log collector · Endpoint console
Timeline· 30 minute run
- 0 min inEstate at its recorded baselineworld
- 1 min inNote from the platform teammessage
- 5 min inAgent stopped and log clearedattackkeyexpect: Service control calls over RPC and a cleared security log
- after Agent stopped and log clearedIntruder works in the darkagentkeyexpect: Learner isolates app-02 before the intruder reaches a second machine.
- 12 min inThe gap is measurableworldkeyexpect: A silent machine against a baseline that says it should be talking
- when the learner contains app-02Server isolatedgate
- on your cueAnother log clearsworld
- 1.Notice the machine went silentdetection · T1562.001app-02, missing heartbeat, silent hostalerts
- 2.Prove the tampering from what is leftdefense-evasion · T1070.006svcctl, EvtClearLog, 1102alerts
- 3.Isolate before the next machinecontainment · T1021isolate, app-02
- 4.Restore visibility and alert on the gaprecovery · T1562restore, heartbeat, tamper protection
- 0 min inEstate at its recorded baseline
- 21
Reps: The Bot They Said Yes To
credential accessadvancedwindowsA helpful-looking productivity app asked one person in Finance for permission, and they gave it. No password was stolen and nobody logged in from a strange country. Since then the app has been reading channels, messages and attached files across the whole workspace on its own token. Find the grant, measure what it read, and take the access away without breaking the twelve legitimate apps sitting beside it.
Authored from the live watch: a consented application holds its own token, so no password is ever stolen.
Target: Collaboration workspace · Identity tenant
Timeline· 40 minute run
- 0 min inOrdinary workspace dayworld
- 2 min inFinance asks a questionmessage
- 5 min inThe consent recordworldkeyexpect: A new application holding tenant-wide read, consented by a standard user
- after The consent recordThe application keeps readingagentkeyexpect: Learner finds the grant, scopes what the token read from the audit log, revokes that application only, and leaves the approved applications working.
- 14 min inThe read is bigger than Financeworldkeyexpect: One application token reading far outside the consenting user's own access
- when the learner logs app-revokedApplication revokedgate
- on your cueThe token is used to pull attachments outworld
- 1.Find the grant behind the readingcredential-access · T1528workspace-insights, files.read.all, chat.read.allalerts
- 2.Measure what the token actually readcollection · T1213app token, paging, 84 channelsalerts
- 3.Separate this application from the approved onesdiscovery · T1213approved apps, admin consent, scope
- 4.Revoke the grant and kill the tokencontainment · T1528revoke, service principal, refresh token
- 5.Close the door that let one person open the tenantrecovery · T1528consent policy, admin consent, verified publisher
- 0 min inOrdinary workspace day
- 22
Reps: Someone Else's Computer
impactadvancedwindowsA token from a workstation is being used against the company's cloud storage from somewhere else entirely. No server was touched and nothing on the estate broke — the data simply left. Spot the token in use, cut it, and prove what was taken.
A stolen token takes the data straight out of the cloud; no estate server is touched.
Target: Workstation · Cloud object store
Timeline· 35 minute run
- 0 min inEstate at its recorded baselineworld
- 2 min inAlert from the cloud consolemessage
- 4 min inToken taken off a workstationattackkeyexpect: Saved credential stores read on the workstation
- after Token taken off a workstationBroker works the storageagentkeyexpect: Learner revokes the token and isolates the workstation before the pull finishes.
- 13 min inBulk download from the object storeworldkeyexpect: A volume spike far outside the machine's recorded traffic
- when the learner contains wks-11Workstation isolatedgate
- on your cueA second token appearsworld
- 1.Match the token to the machinecredential-access · T1552.001wks-11, token, credential storealerts
- 2.Catch the bulk readcollection · T1530storage.cloud.example, 443, 184 MBalerts
- 3.Revoke and isolatecontainment · T1078.004revoke, isolate, wks-11
- 4.Prove what left and shorten the tokensrecovery · T1567.002access log, short-lived token, restore
- 0 min inEstate at its recorded baseline
- 23
Reps: One Machine At A Time
lateral movementexpertwindowsAn intruder on a single workstation is working its way towards a domain controller, one remote session at a time. Each hop is small and ordinary-looking. Follow the chain, cut it at the right machine and stop it reaching the controller.
A live intruder hops machine to machine while the room tries to cut the chain.
Target: Workstations · Member servers · Domain controller
Timeline· 45 minute run
- 0 min inEstate at its recorded baselineworld
- 3 min inOne workstation is takenattackkeyexpect: A workstation opening sessions to machines it never talks to
- after One workstation is takenIntruder moves machine to machineagentkeyexpect: Learner cuts the chain before the intruder reaches a controller.
- 14 min inA second machine answers a remote sessionworldkeyexpect: Remote desktop between two machines with no history of it
- when the learner contains wks-12Chain cutgate
- after Chain cutIntruder tries the next hopattackexpect: The hop is refused — the machine it worked from is isolated
- on your cueIntruder goes straight for the controllerworld
- 1.Put the hops in orderdiscovery · T1018wks-12, 3389, 445alerts
- 2.Catch the remote session between two machineslateral-movement · T1021.001mstshash, 3389, new pairalerts
- 3.Stop it before the controllercontainment · T1562isolate, block, wks-12
- 4.Prove the chain is deadrecovery · T1562refused, baseline, drift
- 0 min inEstate at its recorded baseline
- 24
Reps: Out The Side Door
impactadvancedwindowsNothing breaks, nothing locks, nothing alarms. An intruder is reading shares, collecting them into one archive and uploading it a chunk at a time. Find the collection before the upload finishes, isolate the staging machine and block the route out.
Quiet collection and a chunked upload — damage without anything breaking.
Target: Workstation · File shares · Outbound edge
Timeline· 35 minute run
- 0 min inEstate at its recorded baselineworld
- 1 min inTip from the network teammessage
- 6 min inCollection startsattackkeyexpect: One machine reading many shares it has never opened
- after Collection startsIntruder collects and shipsagentkeyexpect: Learner spots the staging and blocks the upload before it completes.
- 18 min inFirst upload leaves the estateattackkeyexpect: Large outbound transfer to a host the estate has never contacted
- when the learner contains wks-07Staging machine isolatedgate
- after Staging machine isolatedIntruder tries to finish the uploadattackexpect: The upload is refused — the route out is blocked
- on your cueIntruder stops being patientworld
- 1.Find the machine reading everythingcollection · T1039wks-07, 445, share readsalerts
- 2.Find the staged archivecollection · T1074.001staging, .7z, write bursts
- 3.Catch the uploadexfiltration · T1567443, outbound, chunked uploadalerts
- 4.Isolate and block the route outcontainment · T1562isolate, block, wks-07
- 0 min inEstate at its recorded baseline
- 25
Reps: Before The Note
impactadvancedwindowsA ransomware crew is already inside and heading for the backups. You have the time between the first share read and the first encrypted file: find the machine it holds, isolate it, block it and get the estate back before the note lands.
Backups go first, encryption second; the gap between them is the whole rep.
Target: File server · Backup server
Timeline· 40 minute run
- 0 min inEstate at its recorded baselineworld
- 0 min inService desk notemessage
- 5 min inCrew lands on a file serverattackkeyexpect: Share reads from an account that has never touched Finance
- after Crew lands on a file serverRansomware crew works the estateagentkeyexpect: Learner isolates the file server and blocks the crew before encryption starts.
- 16 min inBackup server answers a deleteworldkeyexpect: Shadow copy deletion and backup share writes in the capture
- when the learner contains fs-01File server isolatedgate
- after File server isolatedCrew tries the encryption anywayattackexpect: The attempt is refused — the machine is off the network
- on your cueCrew comes back on a second machineworld
- 1.Compare the file server to its recordingdiscovery · T1083fs-01, 445, baseline driftalerts
- 2.Catch the backup deletionimpact · T1490vssadmin, shadow copy, backup sharealerts
- 3.Isolate the machine the crew holdscontainment · T1562isolate, fs-01
- 4.Block the crew and restorerecovery · T1562block, restore, offline backup
- 0 min inEstate at its recorded baseline
- 26
Reps: Hold The Line
hardenadvancedwindowsAn attacker is already on a jump host and working outward while you watch. Catch the breach in the capture, isolate the machine it holds, block it at the edge and show the estate back at its recorded baseline before the run ends.
Catch a live attacker mid-run, isolate it and prove the estate is back to baseline.
Target: Jump host · File server · Domain controller
Timeline· 35 minute run
- 0 min inEstate at its recorded baselineworld
- 0 min inNight shift hands overmessage
- 4 min inAttacker lands on the jump hostattackkeyexpect: Outbound sessions from the jump host to machines it never talks to
- after Attacker lands on the jump hostAttacker works the estateagentkeyexpect: Learner isolates the jump host and blocks the attacker.
- when the learner contains jump-01Jump host isolatedgate
- after Jump host isolatedAttacker tries the same path againattackexpect: The retry is refused — containment held
- on your cueAttacker stops being carefulworld
- 1.Read the recorded baselinediscovery · T1046baseline, expected ports, packets per second
- 2.Spot the ports the jump host never spokediscovery · T1046jump-01, 389, 445alerts
- 3.Isolate the machine the attacker holdscontainment · T1562isolate, jump-01, containment
- 4.Block the attacker and restore the baselinerecovery · T1562block, restore, drift
- 0 min inEstate at its recorded baseline
- 27
Reps: Issued To Whom
hardenadvancedwindowsSomeone used the certificate authority the way it was configured to be used, and walked out as a domain administrator. You have the issuance log, the directory and the logon records. Find the request, name the account it was really for, and scope who else could have done the same.
Spot the issued certificate in the log after the fact.
Target: Certificate authority
- 1.Suspicious privileged logoninitial-access · T1550alerts
- 2.Issuance log revieweddiscovery · T1654request 1043alerts
- 3.Template exposure scopeddiscovery · T1087.002alerts
- 4.Certificate revoked and account containedremediation · T1649
- 1.Suspicious privileged logoninitial-access · T1550
- 28
Reps: Close The Authority
hardenexpertwindowsThe certificate authority is open in more than one way: a template anybody may enroll against, an enrollment agent anybody may become, a template ordinary users may edit, a flag that overrides every template, and web enrollment over plain HTTP. Close each one, prove the enrollment is refused afterwards, and keep the estate's real certificates working.
Shut every abuse route without breaking sign-in.
Target: Certificate authority
- 1.Authority revieweddiscovery · T1654EDITF_ATTRIBUTESUBJECTALTNAME2alerts
- 2.Open templates scoped downremediation · T1649
- 3.Authority flag clearedremediation · T1649
- 4.Web enrollment securedremediation · T1187alerts
- 5.Path proved deadremediation · T1649
- 1.Authority revieweddiscovery · T1654EDITF_ATTRIBUTESUBJECTALTNAME2