Slow HTTP GET/POST 공격
Slow HTTP GET/POST 공격은 웹 서버의 연결 자원을 오래 붙잡아 두어 서비스가 정상 동작하지 못하게 만드는 애플리케이션 계층(7계층) DoS 공격이다. 핵심은 요청을 “많이” 보내는 것이 아니라, “아주 천천히” 보내는 것이다.
일반적인 HTTP 공격(예: HTTP GET Flooding)은 짧은 시간에 많은 요청을 보내 서버의 CPU나 네트워크 대역폭을 소모시킨다. 반면 Slow HTTP 공격은 전혀 다른 방식이다. 공격자는 정상적인 HTTP 요청처럼 보이지만, 전송을 끝내지 않고 일부만 계속해서 유지한다. 서버는 요청이 아직 끝나지 않았다고 생각해 연결을 끊지 못하고, 그 연결을 계속 유지한다. 이 연결들이 누적되면 서버는 더 이상 정상 사용자 요청을 처리할 수 없게 된다.
Slow HTTP GET 공격부터 보자. 이 공격에서는 HTTP GET 요청의 헤더를 아주 느린 속도로 한 줄씩 전송한다. 예를 들어, 헤더를 다 보내지 않고 일정 시간마다 한 글자나 한 줄씩만 추가로 보내는 식이다. 서버는 “요청이 아직 전송 중”이라고 판단해 연결을 유지한다. 공격자는 이런 연결을 수백, 수천 개 동시에 유지해 서버의 연결 풀과 스레드를 고갈시킨다.
Slow HTTP POST 공격은 POST 요청을 이용한다. POST 요청은 서버가 클라이언트로부터 본문 데이터(Content-Length만큼)를 다 받을 때까지 기다린다. 공격자는 Content-Length는 크게 선언해 놓고, 실제 데이터는 아주 조금씩, 매우 느리게 전송한다. 그러면 서버는 본문이 다 올 때까지 해당 연결을 계속 붙잡아 두게 된다. 이 역시 서버의 세션과 스레드 자원을 소모시킨다.
이 두 공격의 공통적인 특징은 다음과 같다.
대량 트래픽이 필요 없다.
정상 HTTP 요청처럼 보인다.
서버의 연결, 세션, 스레드를 장시간 점유한다.
애플리케이션 계층(L7) DoS 공격이다.
그래서 네트워크 장비나 방화벽에서는 이 공격을 탐지하기가 매우 어렵다. 패킷 수나 대역폭은 크지 않기 때문이다. 대응을 위해서는 웹 서버 설정과 애플리케이션 계층 보호 장치가 필요하다. 예를 들어 요청 타임아웃을 짧게 설정하거나, 최소 전송 속도를 강제하거나, WAF(Web Application Firewall)를 통해 비정상적으로 느린 요청을 차단한다.
핵심만 정리하면 이렇다.
Slow HTTP GET/POST는 “느린 요청”을 이용한 L7 DoS 공격이다.
연결을 오래 유지해 서버 자원을 고갈시킨다.
대량 트래픽 없이도 공격이 가능하다.
대응은 WAF, 타임아웃 설정, 요청 속도 제한이다.