Read the Docs, 분당 550만 요청 DDoS 공격 10일간 방어
Understanding the recent DDoS attack against Read the Docs

2026년 6월 중순, Read the Docs는 분당 550만 건의 요청이 쏟아진 사상 최대 규모의 DDoS 공격을 10일간 견뎌냈다. 공격은 수백만 개의 IP와 헤더·TLS 무작위화로 기존 방어를 우회했고, 캐시 미스 경로를 집중 공략했다. Cloudflare와 Terraform 기반의 정교한 rate limiting, 봇 점수, 'penalty box' 규칙으로 대응했으며, IP 차단의 무용함과 적극적 캐싱의 중요성을 확인했다.
IP 차단은 분산 공격 앞에서 무용지물이다. 봇넷이나 대규모 스크래퍼는 프록시 서비스를 이용하기 때문에 단순한 IP 차단은 소용이 없다.
HN 토론
59- PinkSheep
이 공격을 완화하느라 팀이 겪었을 스트레스에 대해 죄송합니다. 그래도 저는 항상 공격 측에서 유능함의 징후를 보는 게 흥미롭습니다: L7에서 특정 애플리케이션을 겨냥한 적응형 공격이라니? 와우!
여기 또 다른 추측이 있습니다: 주의를 분산시키고 다른 침입 시도를 숨기기 위한 DDoS라는 것.
> 방어는 IP뿐만 아니라 더 넓은 범위(ASN, 호스트 이름 등)에 걸쳐 속도 제한을 가져야 합니다.
설명/접근 방식이 정적이고 제한적으로 보이나요? 각 요청(티켓/포인트)을 계산하는 누수 버킷을 유지하면서 비용이 많이 드는 요청(404, 리다이렉트)에는 더 높은 비용을 부과하는 건 어떨까요? IP의 평판이 나빠질수록(IPv4/32) 더 넓은 서브넷(IPv4/31, 그다음 /30 등)으로 넘치기 시작합니다. 적응성으로 적응성에 맞서세요. // 어쩌면 제가 완전히 뻔한 얘기를 하는 건지도 모르겠네요, 저는 웹 DDoS 보호 쪽에 관여하지 않습니다.
> 공격자들은 캐시할 수 없는 경로(예: 동적 리다이렉트, 검색 엔드포인트, 404)를 적극적으로 찾습니다.
제 이전 요점을 이어가자면, 개별 서버의 자원(메모리, 소켓 제한)이 허락하는 한 요청을 처리하기 전에 지연시키세요. 평판이 낮은 IP는 더 오래 지연되고, 큐를 초과한 요청은 드롭됩니다. 아이디어는 우아한 성능 저하입니다:
평판이 좋은 IP는 sleep()으로 지연되지 않습니다. 평판이 나쁜 IP는 지연되지만 결국 429/403 대신 응답을 받게 됩니다(즉, 한 번에 많은 탭을 연 사용자). 평판이 최악인 IP는 대기 시간 + 속도 제한(큐 초과)으로 느려지다가 완전히 차단되기 전에 […]
- Animats
법적 대응이 더 많이 나왔으면 좋겠습니다.
먼저, 수백 개의 IP 주소 반대편에 누가 있는지 알아내세요. 미국에 있는 것부터 시작하세요. 손해 배상을 청구하세요. 디스커버리를 통해 반대편에 무엇이 있는지 알아내세요. 그 기기 제조사를 고소하세요. 그것이 가전제품이나 스마트 TV로 밝혀지면, 제조사를 상대로 사건들을 하나로 통합하는 것이 가능할 수도 있습니다. 형사 과실, 계약 방해 불법행위, 괴롭힘, 컴퓨터 사기 및 남용법 위반...
공격을 호스팅할 수 있는 것으로 알려진 "스마트 TV"의 판매를 금지하는 금지 명령을 내릴 수도 있습니다. 세관 및 국경 보호국이 수입품을 압수하게 하세요. 그러면 제조사의 관심을 끌 수 있을 겁니다.
제조사의 EULA는 제조사에 도움이 되지 않습니다. 왜냐하면 원고, 즉 공격받는 당사자는 EULA의 당사자가 전혀 아니기 때문입니다.
- PinkSheep
> 그들은 하드코딩된 Nginx 리다이렉트(간단한 rewrite 정규식 지시문)를 압도하고 있었습니다
1. ngx_http_rewrite_module이 얼마나 최적화되어 있는지 궁금합니다. 패턴을 미리 컴파일할까요? LLM은 그렇다고 했고, 이 SO 답변[1]은 JIT 구성 옵션이 켜져 있어야 한다고 말합니다. 구성 자체가 정적인데 "Just in Time"은 반쪽짜리 대책이라고 생각합니다.
2. NGINX 문서를 보면, 이런 규칙을 작성할 때 몇 가지 함정이 있는 것 같습니다. 예를 들어, 조기 종료를 위해 rewrite를 수동으로 단락시켜야 한다는 것 말이죠?
3. 정규식의 문제점은 치명적인 백트래킹을 일으키는 정규식이 단순해 보인다는 것입니다. 이 문제가 충분히 논의되고 있지 않은 것 같습니다. 독자 여러분이 아직 들어본 적 없다면 링크를 참조하세요.
[1] https://stackoverflow.com/questions/59284921/how-much-impact...
[3.1] https://joshua.hu/nginx-directives-regex-redos-denial-of-ser...
[3.2] https://en.wikipedia.org/wiki/ReDoS
[3.3] https://infrafolks.com/blog/regex-backtracking-devops/
[3.4] https://www.regular-expressions.info/catastrophic.html
- fn-mote
Cloudflare의 "공격 중" 모드를 켜면 공격이 완화될 것이라는 가정이 있습니다.
나머지 공격이 얼마나 적응적인지를 고려하면, 그것이 그 장애물에 어떻게 접근할지 매우 궁금합니다.
- bijowo1676
이것은 AI 기반 공격일 수 있으며 readthedocs는 단지 테스트 대상이었을 수 있습니다.
놀라운 점은 Cloudflare 방어를 우회하는 것이 얼마나 쉬웠는지입니다. CF를 우회하기 쉬웠다는 것은 알지만, CF가 L7 DDoS 차단을 더 잘할 것이라고 기대했습니다.
CF는 L4 DDoS 방어에는 정말 뛰어나지만 L7에는 그렇지 않습니다.
이는 전 세계 수천 개의 에이전트가 주도하는 에이전틱 DDoS 시대에 Cloudflare가 실제로 별로 유용하지 않다는 것을 의미합니다.