Slow HTTP Header DoS (Slowloris) 공격
1. 개요
Slow HTTP Header DoS는 공격자가 HTTP 프로토콜의 설계적 한계를 악용해 웹 서버의 연결 자원을 고갈시키는 서비스 거부(DoS) 공격이다. 이 공격은 Slowloris라는 이름처럼 "느린 속도"로 HTTP 요청을 전송하여 서버의 연결 자원을 소모시킨다.
Slowloris는 특히 Apache HTTP 서버와 같은 연결 기반 웹 서버에 큰 영향을 미치며, 웹 서버를 다운시키지 않고도 정상적인 사용자 요청을 차단한다. (애플리케이션 계층 공격)
2. 공격 원리
Slowloris는 HTTP 요청의 헤더 전송 속도를 조작하여, 서버가 연결을 오랫동안 유지하도록 강제하며, 이는 HTTP 프로토콜의 특성을 악용한 것이다.
① TCP 연결 생성 : 공격자는 서버와의 TCP 연결을 생성
② HTTP 요청 전송 : 공격자는 HTTP 요청의 헤더(Header)를 매우 느린 속도로 전송
예: 헤더 한 줄 전송 후, 일정 시간(예: 10초) 대기
③ 서버 자원 고갈 : 서버는 HTTP 요청이 완전히 끝날 때까지 연결을 유지하려고 하고, 결국 더 이상의 새로운 연결이 불가능함
④ DoS 효과 발생 : 공격자가 다수의 느린 연결을 생성하면, 서버는 정상적인 사용자 요청 처리가 불가능함
3. Slowloris 공격의 특징
- 적은 대역폭으로도 효과적인 공격 가능
- 서버를 완전히 다운시키지 않고 서비스 방해 유발
- 공격이 정당한 HTTP 요청처럼 보여 탐지하기 어려움
- 주로 Apache HTTP 서버, Nginx(초기 버전), Tomcat 등 연결 기반 웹 서버
- 연결 수 제한(Connection Limit)이 있는 서버
- 비교적 적은 리소스 소모 : 공격자는 몇 개의 요청만으로도 다수의 연결을 점유할 수 있음
4. 공격 과정
1) HTTP 요청의 예시
- Slowloris 공격에서 전송되는 요청은 일반적인 HTTP 요청처럼 보인다. 하지만 헤더 전송이 매우 느린 속도로 이루어진다
POST / HTTP/1.1
Host: target.com
User-Agent: Slowloris
Content-Length: 10000
- 공격자는 위처럼 요청 헤더를 전송한 뒤, "느리게" 추가 헤더를 보냅니다.
(예: 10초마다 한 줄씩 추가 헤더 전송)
Content-Type: application/x-www-form-urlencoded
2) 서버의 반응
- 서버는 요청이 완전히 끝나기를 기다리며 연결을 유지
- 공격자가 다수의 요청을 전송하면 서버의 연결 자원이 고갈
3) 실제 Slowloris 도구의 사용
- 공격자는 Slowloris 도구를 통해 여러 동시 연결을 생성
- Slowloris는 대량의 느린 HTTP 요청을 자동으로 전송
5. Slowloris 공격의 대응 방법
1) 서버 설정 변경
① 타임아웃 설정
- 서버의 Keep-Alive 및 연결 대기 시간을 줄인다
Apache 예시:
Timeout 10
KeepAliveTimeout 5
MaxKeepAliveRequests 100
② 최대 연결 수 제한
- 클라이언트 IP당 허용되는 최대 연결 수를 제한.
- Apache 모듈 설정(mod_limitipconn)
MaxClients 150
- Nginx 설정:
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
limit_conn conn_limit 5;
③ RequestRateLimit 설정 : 단일 클라이언트의 요청 속도를 제한
2) 방화벽 및 보안 솔루션
① DDoS 방어 솔루션
- Cloudflare, AWS Shield, Akamai 등의 클라우드 기반 DDoS 방어 서비스 사용
- Slowloris와 같은 저속 DoS 공격을 탐지하고 차단
② IPTables : 클라이언트당 동시 연결 수를 제한
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j DROP
③ ModSecurity : Apache/Nginx에 설치하여 HTTP 요청 패턴 분석 및 차단
3) 웹 애플리케이션 방화벽(WAF)
- 공격 패턴을 탐지하고 차단하는 WAF를 활용.
4) HTTP/2 프로토콜 전환
- HTTP/2는 연결당 다중 요청을 처리할 수 있어 Slowloris 공격의 영향을 크게 줄임.
6. Slowloris 공격 탐지 방법
- 로그 분석 : 서버 로그에서 "완료되지 않은 요청" 또는 "오래 지속되는 연결"을 분석
- 트래픽 모니터링 :Wireshark나 tcpdump와 같은 네트워크 트래픽 분석 도구를 사용하여 느린 요청 패턴을 탐지
- 이상 트래픽 경고 : 특정 IP에서 다수의 미완료된 연결을 감지