On Sunday 21 November 2021 at 02:05 UTC, a cache-busting query flood targeted a online casino customer in the Middle East. The attack peaked at 348.0 million requests per second and lasted 180 minutes. Traffic originated from 2605 autonomous systems in 69 countries, predominantly mobile carrier ranges.
| Vector | cache-busting query flood |
| Peak | 348.0 million requests per second |
| Duration | 180 min |
| Time to mitigation | 0.193 s |
| Attack traffic reaching origin | 0.003% |
| Legitimate traffic challenged | 0.09% |
Timeline
The attack was preceded by an extortion email received two days earlier. Request rates on the targeted routes exceeded their hourly baseline by a factor of 878 within 7 seconds. The risk score of participating clients crossed the challenge threshold automatically and proof-of-work difficulty rose with origin load.
What the customer saw
A brief increase in p99 latency of 108 ms during the first minute, then normal service.
Recommendations
- Enable log streaming to your SIEM for faster correlation.
- Keep origin IPs out of public DNS history.
- Review allow-listed partner ranges quarterly.
Carpet bombing is nasty. Good to see a clear explanation of it.
Thanks! Yes — the risk score and its components are included in every log record.
Any plans to support per-tenant limits keyed on a JWT claim?
Would love a follow-up on how you handle HTTP/3 fingerprinting.
Thanks! Yes — the risk score and its components are included in every log record.
How does the proof-of-work challenge behave on older Android devices? Any numbers below Android 10?
Good question. We will cover that in a follow-up post.
Solid runbook advice. The DNS-at-2am point hit home.
Thanks — sharing this with our on-call team.