722. 슬로우로리스 (Slowloris / HTTP GET 지연 공격)

핵심 인사이트: 1분에 햄버거를 100만 개 주문해서 알바생을 기절시키는 것이 일반 DDoS라면, 슬로우로리스는 딱 50명이 식당에 들어가서 "햄버거 하나 주시고요... 음... 10초 뒤에... 그리고... 음..."이라며 하루 종일 카운터에서 말을 더듬는 공격이다. 뒤에 있는 진짜 손님 1,000명이 주문을 못 하고 돌아가게 만드는, 조용하지만 가장 치명적인 인내심 파괴 공격이다.

Ⅰ. Slowloris (슬로우로리스) 공격의 개념

  • 개념: 대량의 트래픽을 쏟아붓는(Volumetric) 전통적인 DDoS와 달리, 아주 적은 수의 패킷만으로 웹 서버(Apache 등)와의 HTTP 연결(세션)을 수십 분~수 시간 동안 의도적으로 끊지 않고 질질 끌어서, 서버의 연결 가능 슬롯(Connection Pool)을 모두 고갈시키는 응용 계층(L7) 타겟형 DoS 공격입니다.
  • 동작이 너무 느릿느릿해서 공격 탐지기(IPS)에 잘 걸리지 않아, 느림보 원숭이인 '슬로우로리스'라는 이름이 붙었습니다.

Ⅱ. 공격의 핵심 원리: 개행 문자 누락 악용 🌟

웹 브라우저가 서버에 HTML 페이지를 달라고 조르는 HTTP GET 요청의 허점을 파고듭니다.

1. 정상적인 HTTP GET 요청

  • 클라이언트는 HTTP 헤더 끝에 "내 편지는 여기까지야!"라는 의미로 빈 줄 하나(개행 문자: \r\n\r\n)를 반드시 찍어서 보냅니다.
  • 서버는 이 빈 줄(\r\n\r\n)을 받아야 비로소 "아, 주문이 끝났구나. 이제 결과물을 보내줘야지" 하고 세션을 닫고 다음 손님을 받습니다.

2. 해커의 꼼수 (끝나지 않는 주문)

  1. 해커는 타겟 서버에 접속해 HTTP GET 요청을 시작합니다.
  2. 그런데 고의로 마지막의 빈 줄(\r\n\r\n)을 빼고, 그냥 \r\n만 보내거나 의미 없는 헤더 쪼가리를 10초에 한 개씩 찔끔찔끔 보냅니다.
  3. 서버는 "어? 아직 편지가 다 안 끝났네? 내가 기다려야지" 하고 해커와의 연결을 끊지 못하고 메모리(Session)에 계속 물고 대기합니다. (서버 자원 낭비)
  4. 해커가 이런 '말 더듬는 좀비' 1,000마리를 만들어 서버에 붙여놓으면, 서버는 1,000명의 말을 끝까지 다 들어주기 위해 모든 연결 슬롯(Thread/Process)을 다 소진해 버립니다.
  5. 결국 정상적인 고객이 접속하려 해도, 서버는 "지금 1,000명 주문받고 있어서 꽉 찼으니 기다리세요!"라며 서비스를 거부(DoS)하게 됩니다.

Ⅲ. 아파치(Apache) 서버의 취약점

  • 슬로우로리스는 유독 과거의 Apache 웹 서버에 치명적이었습니다.
  • 아파치는 클라이언트 1명이 접속할 때마다 무거운 스레드(Thread/Process) 1개를 통째로 할당하는 구조(Prefork 방식)였기 때문에, 해커 몇 백 명만 달라붙어도 금방 스레드가 말라죽었습니다.
  • 반면 최신 Nginx나 Node.js처럼 '이벤트 기반(Event-driven)' 방식의 비동기 서버들은 수만 명이 동시에 말을 더듬어도 CPU를 낭비하지 않고 가볍게 무시할 수 있어 이 공격에 내성이 강합니다.

Ⅳ. 방어 대책

  1. Timeout(타임아웃) 강제 단축: 방화벽이나 웹 서버 설정에서, "10초 안에 \r\n\r\n(끝맺음)이 안 오면 무조건 연결을 강제로 끊어버리고 쫓아내라!"라고 타임아웃 제한 시간을 팍 줄입니다.
  2. 동시 접속 제한: 하나의 동일한 IP 주소에서 동시에 50개 이상의 세션을 물고 있으면 비정상으로 간주하고 해당 IP를 차단(Limit)합니다.

📢 섹션 요약 비유: 슬로우로리스 공격은 패스트푸드점에서 진상 손님이 주문을 질질 끄는 것입니다. 진상 손님 5명이 5개의 주문 카운터를 전부 차지하고 서서는, "콜라 하나 주시고요...(1분 침묵)... 감자튀김도...(1분 침묵)..." 하면서 계속 카운터 알바생을 붙잡아 둡니다. 폭력을 쓴 것도 아니고 목소리를 지른 것도 아니지만(대역폭 공격 아님), 알바생 5명이 모두 진상들에게 묶여버리는 바람에, 뒤에 서 있는 정상적인 손님 수백 명은 햄버거를 하나도 사지 못하고 돌아가게 되는 끔찍한 서비스 거부(DoS) 사태가 터집니다.