The 2026 InfoSec Playbook · Scenario playbooks

#14.8 DDoS and Service Unavailability

Playbook ID: PB-DDOS | Default severity: SEV-2 (escalate to SEV-1 if a revenue-generating or safety-relevant service is fully unavailable, if shared infrastructure such as DNS or the identity provider is targeted, or if any concurrent intrusion indicator appears) | Owner: Operations Lead

#When to run this

Availability degrades and the cause is inbound traffic rather than your own change. Triggers:

Not this playbook: an outage from your own deploy or capacity miss (change management). Ransomware-driven unavailability → 14.1. Resource exhaustion from exploitation of an application flaw → 14.13, or of a perimeter appliance → 14.12. If the flood turns out to be the visible half of an intrusion, run both playbooks in parallel — not one after the other.

#What you are dealing with

DDoS is the one attack class where the adversary needs no cleverness or patience. They need capacity, and capacity is now cheap and enormous. Cloudflare mitigated 47.1 million DDoS attacks in 2025, averaging 5,376 an hour, and the largest peaked at 31.4 Tbps and lasted 35 seconds (Cloudflare Q4 2025). Thirty-five seconds. Your on-call engineer has not finished reading the page alert.

That is not an outlier, it is the shape of the problem: 71% of HTTP DDoS attacks and 89% of network-layer attacks end in under ten minutes (Cloudflare Q3 2025). If your response depends on waking someone for approval, the attack ends before the approval lands — and returns tomorrow on a different vector. CISA sorts the technique space three ways, and the distinction drives what you do next: volumetric (saturate the pipe), protocol (exhaust state on firewalls, balancers and hosts — SYN floods, reflection/amplification), and application-layer (cheap requests that buy expensive work). Layer 7 is the one your bandwidth graph will not show you: small, indistinguishable from customers, and able to "critically overload CPUs and databases" (CISA DDoS Quick Guide). Map as T1498 Network Denial of Service, T1498.001 Direct Network Flood, T1498.002 Reflection Amplification.

Now the mistake, and it is why this playbook sits in a book about intrusion response. A DDoS is a very loud thing to have happening to you, and loud is useful cover. CISA states these attacks "can be launched in conjunction with other types of attacks"; ransomware crews list DDoS as a standard triple-extortion pressure layer beside exfiltration (BleepingComputer). Pulling a fire alarm empties a building, but it is an even better way to walk out the back with the safe while everyone stands in the car park counting heads. Every responder staring at a traffic graph is a responder not watching the identity plane. Actionable takeaway: the first structural decision here is not a mitigation setting. It is splitting the team, and you make it at T+10m.

#Roles for this incident

RoleResponsibility in this scenario
Incident CommanderDeclares severity; owns the team split; approves any control that degrades service for legitimate users.
Operations LeadOwns the mitigation sequence at edge, provider and origin; owns provider escalation.
Network/Edge EngineerExecutes edge, BGP and tunnel changes; captures flow and packet evidence.
Parallel Intrusion WatchA named analyst who does not work the outage. Watches identity, egress, EDR and control-plane change; signs off before close.
Communications LeadStatus page and customer notice; controls what mitigation detail becomes public.
ScribeUTC timeline with the source of each timestamp; every control applied, by whom.
Legal LiaisonExtortion communication, SLA exposure, law-enforcement referral, notification assessment.
Executive SponsorConcurs on blackhole decisions and on accepting a hard revenue outage.

Two markers in the tables. TIP-OFF — observable by whoever is attacking you; it tells them which control landed and what to change. EVIDENCE — reshapes or ages out the traffic evidence; the preceding capture step must be complete first.

#Phase 1 — Detection and Triage

#ActionWhoDone whenEvidence to capture
1Reproduce the failure from outside — three external regions plus one mobile network. An internal check proves nothing.Network/Edge EngExternal fail, internal passPer-region output, resolver used
2Rule the change window in or out: deploys and config pushes in the last 60 minutes. If one correlates, roll back first.Operations LeadChange window clearedDeploy IDs and times examined
3Classify the layer: bandwidth and pps vs baseline, then request rate, then origin CPU and connection count.Network/Edge EngLayer named (3/4, 7, mixed)Dashboard export, baseline vs current
4EVIDENCE Capture flow and packet evidence now, before mitigation reshapes traffic. Flow records roll over; dashboards age out.Network/Edge Engpcap and flow export storedpcap + SHA-256, flow export, collector, UTC start/stop
5Export the provider attack record (Cloudflare DDoS Overview, Shield Advanced events page, Azure DDoS metrics) and declare severity.Operations Lead / ICDeclared, T+0 setAttack ID, vectors, peak rate, source ASN/geo mix
6Assign the Parallel Intrusion Watch and take that person off outage work. Scope: authentication anomalies, new OAuth grants, privileged role changes, egress volume, EDR detections, edge/WAF config change.Incident CommanderAnalyst acknowledged in channelAssignment message, name, scope
7Determine whether the origin answers directly, bypassing the CDN. If it does, edge mitigation will not work.Network/Edge EngReachability knownResolver output, direct-to-origin probe
8Sweep abuse@, support, executive inboxes and public social accounts for an extortion note. Do not reply.Communications LeadSweep completeMessage preserved unaltered, full headers
shell
# What does the public world resolve to, from an off-net resolver?
dig +short A app.example.com @1.1.1.1

# Is the origin answering directly — i.e. is the edge being bypassed?
# A 200 here means your CDN is optional to the attacker.
curl -sS -o /dev/null -w '%{http_code} %{time_total}s\n' \
  --resolve app.example.com:443:<origin-ip> https://app.example.com/

# Half-open connections on a suspected SYN-flood target (Linux origin or LB)
ss -tan state syn-recv | wc -l

# Bounded evidence capture. -s 96 keeps headers only; -c bounds the file
# so a flood cannot fill the evidence disk.
tcpdump -n -i eth0 -s 96 -c 200000 -w /evidence/ddos-$(date -u +%Y%m%dT%H%M%SZ).pcap

#Phase 2 — Containment

Order is deliberate: cheapest-for-legitimate-users first, most user-hostile last. Reversing it breaks your own customers before you have tried the controls that would not have.

#ActionWhoDone whenEvidence to capture
1Set provider DDoS managed rulesets to documented maximum posture — Cloudflare's guidance is High sensitivity with default mitigation actions (Cloudflare).Network/Edge EngConfirmed at HighBefore/after ruleset export
2Raise caching to absorb requests at the edge. Cloudflare's documented pattern: exclude query strings from the cache key so cache-busting floods do not become origin subrequests.Network/Edge EngOrigin load fallingCache config diff, origin CPU graph
3Deploy rate-limit and custom rules in Count mode first, verify they match attack traffic and not customers, then switch to Block. AWS: "Always test your rules first by initially using the rule action Count instead of Block" (AWS). Blocking on an untested match takes you down faster than the attacker could.Operations LeadBlocking, customers verified unaffectedRule definitions, Count-mode counts, post-Block success rate
4Engage the provider's humans. AWS Shield Advanced: open a Support case — critical and urgent cases route directly to DDoS experts, and the Shield Response Team can apply AWS WAF mitigations with your consent (AWS). Azure DDoS Network Protection: support request → Issue Type Technical → Service DDOS Protection → the DDoS plan linked to the protected virtual network → Severity A – Critical Impact → Problem Type Under attack (Microsoft).Operations LeadCase open with a numberCase number, time opened, engineer assigned
5Give the ISP the attacking source addresses. CISA also suggests asking the ISP for port and packet-size filtering.Network/Edge EngISP ticket openTicket number, IP list, filters applied
6Shed application load: disable or queue expensive unauthenticated endpoints — search, export, report generation, PDF rendering. Serve a static degraded page, not a 500.Operations LeadExpensive endpoints gatedFeature-flag changes, timestamps
7TIP-OFF EVIDENCE Before any interstitial challenge, blackhole or blanket geo-block, snapshot edge logs and the provider attack record — these controls change the traffic mix and you lose the ability to characterize the original attack. Then decide, per the callouts below.Scribe captures; IC approvesSnapshot stored, approval recordedLog export hash, approval message, enable time, stated expiry
8Confirm in channel each status cycle that the Intrusion Watch is still running and has not been quietly pulled onto the outage.Incident CommanderConfirmed each cycleChannel confirmations

#Phase 3 — Eradication

No malware to remove. Eradication here means taking away the leverage — the exposed origin, the amplifiable service, the expensive endpoint — and closing the intrusion question.

#ActionWhoDone whenEvidence to capture
1If the origin IP was exposed and directly targeted, rotate it. Cloudflare's guidance: get new origin IPs from the hosting provider, and accept traffic only from the edge provider's ranges.Network/Edge EngNew IPs live, firewall restrictedOld/new IP record, firewall diff
2Audit your own internet-facing services for reflection surface — open resolvers, exposed UDP services, anything answering unauthenticated queries larger than the request.Network/Edge EngExternal scan cleanScan output before/after
3Fix the layer-7 weakness the attack found: authentication, pagination, caching or a cost ceiling on the endpoint that fell over.Operations LeadLoad-tested at attack request rateLoad-test result, change reference
4Complete the Intrusion Watch review across the window plus two hours either side: authentication events, new OAuth grants, privileged role changes, service-account activity, outbound volume, EDR detections, edge/WAF/DNS config change.Intrusion WatchWritten finding, including "none found"Queries run, time ranges, findings
5EVIDENCE Export the provider attack report and edge logs before dashboard retention expires or a temporary rule is deleted.ScribeExport verified readableManifest with hashes; custody per RFC 3227
6Disposition every emergency rule: a reviewed permanent rule with a named owner, or a deletion with a date. No rule leaves without one.Operations LeadAll rules dispositionedRule inventory, owner, disposition
7Withdraw temporary BGP announcements and blackhole routes one at a time, monitoring between each.Network/Edge EngTemporary routing revertedRouting diff, withdrawal times

#Phase 4 — Recovery

#ActionWhoDone whenEvidence to capture
1Step controls down in reverse order of user harm: blackhole, interstitial challenge, geo/ASN blocks, rate limits, caching posture. One at a time, 15-minute hold — remove several at once and you cannot tell which was carrying you.Operations LeadEach step held 15 min cleanStep-down log, per-step metrics
2Re-enable disabled endpoints; watch origin CPU, connection count and queue depth against baseline.Operations LeadMetrics within baselineGraphs before/after
3Validate a real customer journey from outside — sign-in, one transaction, one write. Not a 200 on the homepage.Network/Edge EngJourney passes from three regionsJourney transcript with timings
4Drain the backlog: queued jobs, retried webhooks, failed payment authorizations, abandoned sessions. This is where the money actually went.Operations LeadDrained or written offQueue depth, failed transaction count
5Restore any DNS TTLs shortened during the incident.Network/Edge EngTTLs at documented valuesZone diff
6Publish the resolution notice only after independent external validation, never off the internal dashboard.Communications LeadNotice publishedPublished text and time
7Do not close until the Intrusion Watch signs off in writing. Service restored is not incident over.Incident CommanderSign-off recordedSign-off with name and scope covered

#Phase 5 — Post-Incident

#ActionWhoDone whenEvidence to capture
1Reconcile your timeline against the provider's attack record; note every disagreement.ScribeMerged timeline completeTimeline, discrepancy list
2Decompose time-to-mitigate into detect / decide / act. "Decide" is usually the largest number and the only one you can fix this quarter.Incident CommanderThree intervals measuredCalculation with source timestamps
3Pre-authorize in writing every control you had to stop and ask permission for, with thresholds, an expiry, and a named approver beyond them.Executive SponsorStanding authority signedDocument version and date
4Drill the provider escalation path out of band: contract entitlement, 24×7 contact, case severity, who may open a critical case.Operations LeadDrill completedDrill record, response times
5Publish a traffic baseline per internet-facing service — requests/sec, bandwidth, pps, geo and ASN mix — so the next comparison takes seconds.Network/Edge EngBaselines publishedBaseline document per service
6Report it. CISA and FBI urge prompt reporting to a local FBI Field Office or CISA at report@cisa.gov / (888) 282-0870; US state, local, tribal and territorial entities may also report to MS-ISAC at SOC@cisecurity.org / 866-787-4722.Legal LiaisonReport filedReference and time filed
7Add the architectural exposure found — exposed origin, single-provider dependency, uncached expensive endpoint — to the risk register with the outage cost.Incident CommanderRegister updatedEntry with owner and review date

#Decision points

#Communications and notification triggers

A pure availability event usually does not start a personal-data breach clock. Three other clocks may already be running.

Externally, publish what customers can act on: which services are affected, whether their data is involved (say "no evidence of data access" only if the Intrusion Watch supports it), and when the next update comes. Never publish which vector you filtered or which control you applied — that is tuning notes for the person attacking you.

#Automation notes

With 71% of HTTP and 89% of network-layer attacks finishing inside ten minutes, a mitigation gated on a human approval arrives after the incident. Automation is not an optimization here. It is the only way to be on time.

Automate without a gate — reversible, scoped, evidence-producing: correlation across synthetic checks, edge metrics and provider alerts; evidence capture (flow export, bounded pcap, provider attack record, edge log snapshot); channel and ticket creation; status-page draft for human approval; managed-ruleset escalation to the documented High posture; rate-limit rules deployed in Count mode; auto-paging the Intrusion Watch role whenever this playbook opens.

Require a named human approver — irreversible, or blast radius scaled by a false positive: switching any rule from Count to Block, global Under Attack Mode, geography or ASN blocking, blackhole requests to the upstream, BGP announcement changes, origin IP rotation. This is the book's general gate rule: automation may gather, enrich, correlate and recommend freely; it may act only where the action is reversible, scoped and rate-limited.

Two conditions on every automated mitigation. It must auto-expire — a mitigation with no expiry becomes permanent shadow configuration nobody remembers approving. And it must write its evidence to the incident record as it fires, because an automated block with no captured rationale is indistinguishable from a misconfiguration when someone asks in six weeks why a whole country cannot reach your site.

#Pitfalls

This is one of the fourteen scenario playbooks in The 2026 InfoSec Playbook, a free field manual by Daniel Ramos. Written so somebody who has never read the book can pick it up mid-incident and run it. See all fourteen. Free, in full, no email wall.