On Friday 3 September 2021 at 20:09 UTC, a HTTP GET flood targeted a healthcare portal customer in Latin America. The attack peaked at 777.4 million requests per second and lasted 187 minutes. Traffic originated from 1026 autonomous systems in 96 countries, predominantly hijacked home routers.
| Vector | HTTP GET flood |
| Peak | 777.4 million requests per second |
| Duration | 187 min |
| Time to mitigation | 0.371 s |
| Attack traffic reaching origin | 0.089% |
| Legitimate traffic challenged | 0.25% |
Timeline
The attack was preceded by no stated motive. Request rates on the targeted routes exceeded their hourly baseline by a factor of 680 within 18 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
The customer’s status page stayed green throughout; they learned about the attack from our notification.
Recommendations
- Enable log streaming to your SIEM for faster correlation.
- Review allow-listed partner ranges quarterly.
- Enable authenticated origin pulls.
The billing model is what got our finance team on board, honestly.
Is the risk score exposed in the logs so we can build our own dashboards on it?
Machine-readable ranges are at /ips.json and via the API.
We had the exact false-positive issue with CGNAT carriers. The weighting change makes sense.
Any plans to support per-tenant limits keyed on a JWT claim?
Solid runbook advice. The DNS-at-2am point hit home.
We moved from a scrubbing provider to always-on last year; time to mitigation went from minutes to basically nothing.
How do you avoid challenging uptime monitors and partners?
The point about origin IPs leaking through certificate transparency logs is underrated.
Good question. We will cover that in a follow-up post.
The billing model is what got our finance team on board, honestly.