On Tuesday 23 March 2021 at 03:31 UTC, a HTTP GET flood targeted a developer platform customer in Central Europe. The attack peaked at 943.7 million requests per second and lasted 152 minutes. Traffic originated from 3932 autonomous systems in 111 countries, predominantly residential proxy networks.
| Vector | HTTP GET flood |
| Peak | 943.7 million requests per second |
| Duration | 152 min |
| Time to mitigation | 0.018 s |
| Attack traffic reaching origin | 0.065% |
| Legitimate traffic challenged | 0.18% |
Timeline
The attack was preceded by a competitor’s product launch. Request rates on the targeted routes exceeded their hourly baseline by a factor of 295 within 22 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
Checkout conversion was unchanged compared with the same hour of the previous week.
Recommendations
- Enable authenticated origin pulls.
- Add a dedicated rate limit for the targeted route.
- Enable log streaming to your SIEM for faster correlation.
How does the proof-of-work challenge behave on older Android devices? Any numbers below Android 10?
How do you avoid challenging uptime monitors and partners?
Do you publish the edge IP ranges in a machine-readable format?
Good question. We will cover that in a follow-up post.
Carpet bombing is nasty. Good to see a clear explanation of it.
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.
How does the proof-of-work challenge behave on older Android devices? Any numbers below Android 10?
Any plans to support per-tenant limits keyed on a JWT claim?
Could you share the dataset behind the percentages?
Verified good bots and allow-listed partners bypass challenges entirely.