2023년 10월 10일, Cloudflare, Google, AWS는 거의 동시에 수주간 인터넷을 괴롭히던 공격 기법을 공개했다: HTTP/2 Rapid Reset(CVE-2023-44487). 이 공격은 봇넷의 '인해전술'에 의존하지 않고 HTTP/2 프로토콜 자체의 설계 특성을 악용해 애플리케이션 계층(L7) 플러드를 피크 초당 3억 9,800만 요청(RPS)까지 끌어올렸다. 본문은 프로토콜·데이터·방어 3계층에서 이 'L7 DDoS 전장을 바꿔버린' 사건을 완전히 해설한다.
1. 적은 전력으로 이기는 원리
HTTP/2의 핵심 기능 중 하나는 다중화(multiplexing): 하나의 TCP 연결에서 많은 '스트림'을 동시에 열 수 있다. Rapid Reset은 스트림 생명주기, 특히 RST_STREAM 프레임을 악용한다.
공격 수법은 지극히 단순하다. 각 스트림에서 요청(HEADERS 프레임)을 보내고 즉시 RST_STREAM을 보내 취소한 뒤 다음을 연다. '요청→취소→요청→취소'를 고속으로 반복한다. 요청은 취소되지만, 서버는 이미 메모리 할당, HPACK 압축 해제, 라우팅, 스트림 초기화를 수행했고 그 비용은 나중에야 회수한다.
이는 계산 비대칭성의 싸움이다. 공격자는 라운드당 약 20~30바이트(9바이트 HEADERS + 13바이트 RST_STREAM)만 지불하지만, 서버는 라운드당 수천 바이트의 CPU와 메모리 처리를 감당한다. 최소 대역폭으로 먼저 서버 CPU가 고갈된다.
Cloudflare의 수치가 시사적이다. 불과 2만 노드의 봇넷이 노드당 초당 약 1만 회 루프로 2억 RPS를 생성했다. 수십만~수백만 대의 장비가 필요한 기존 IoT 봇넷(대개 수백만 RPS 수준)과 비교해 보라. Rapid Reset은 노드당 공격력을 비약적으로 높였다.
2. 실측 규모: 3 거인의 측정값
- Google: 피크 초당 3억 9,800만 요청——인터넷 역사상 최대 공격의 7배 이상.
- Cloudflare: 피크 초당 2억 100만 요청——2023년 2월 7,100만 RPS 기록의 3배.
- AWS: 이틀간 10건 이상 공격, 최대 초당 1억 5,500만 요청.
결정적인 것은, 이것이 사실상 모든 HTTP/2 구현에 존재하는 설계 결함을 파고든다는 점이다. Nginx, Apache HTTP Server, Apache Tomcat, Microsoft IIS, HAProxy, Envoy, gRPC, Node.js, Go net/http, .NET Kestrel 모두 패치가 필요했다. 2023년 10월 10일의 협조 공개는 '인터넷 역사상 최대 규모의 동기화 패치 이벤트'라 불렸고, CISA는 AA23-283A를 발표했다.
3. 왜 기존 방어가 여기서 무력한가
- 로그가 공격을 보지 못한다: RST_STREAM은 서버가 응답을 반환하기 전 요청을 취소하므로, 액세스 로그는 이 '미완' 요청을 기록하지 않는 경우가 많다. 서버가 짓눌리고 있는 동안 로그는 깨끗해 보인다.
- 완료 기반 레이트 제한이 발동하지 않는다: 전형적인 레이트 제한은 완료된 요청을 센다. Rapid Reset은 완료 전 취소되므로 한도에 도달하지 않는다.
- 볼륨 완화는 무력: 이건 볼륨 공격이 아니다. 병목은 대역폭이 아니라 CPU다. '회선을 넓히는' 것은 무의미하다.
4. 2024년의 긴 꼬리: 엣지는 패치, 내부는 방치
많은 이가 패치로 끝이라 생각했다. 그러나 2024년 상반기도 금융·핀테크 기업에 대한 표적 공격이 이어졌고, 개별 은행·결제 사업자에서 초당 5,000만~1억 요청 피크가 API 게이트웨이 장애, 거래 타임아웃, 모바일 뱅킹 중단을 일으켰다. 근본 원인은 조직이 엣지 역방향 프록시에는 패치를 적용했으나 내부 로드 밸런서와 레거시 미들웨어의 미패치 HTTP/2 구현을 방치했기 때문——취약점의 '긴 꼬리'는 공개 후 수개월도 악용 가능했다.
5. 엔지니어를 위한 방어 체크리스트
- 요청 수가 아닌 프레임 단위 지표를 모니터링: 결정적 신호는 RST_STREAM과 완료 응답의 비율이다. 보통 RST_STREAM은 스트림 종료의 1% 미만이어야 하며, 급증은 강력한 공격 지표다.
- 엣지에서 연결당 스트림 상한과 RST 레이트 제한 적용.
- 모든 HTTP/2 컴포넌트 업그레이드: Nginx 1.25.3+, Apache 2.4.58+, Node.js 18.18.2/20.8.1+, Go 1.21.3+, HAProxy 2.8.4+ 등.
- L7에서는 행위 분석이 정적 규칙을 이긴다: '높은 취소율·낮은 완료율' 이상을 기준선 대비 탐지하고 IP를 무차별 차단하지 않는다.
결론
Rapid Reset은 L7 DDoS의 패러다임 전환을 상징한다. 공격자는 더 이상 대역폭 우위에 의존하지 않고 프로토콜 설계 결함을 파고들어 계산 비대칭성을 얻는다——소병력으로 대효과를 낸다. 공개 인터넷에서 HTTP를 제공하는 모든 조직에게 이것은 경종이다: '정상적인 프로토콜 동작'이라 믿는 것이 남의 무기가 될 수 있다. 방어 측의 진짜 답은 프로토콜 엣지에서 프레임 단위 식별과 자율 완화를 수행하는 아키텍처다.