본문 바로가기

Network

[Tool][DoS] Slowloris, Slowread

# Slowloris, 헤더를 조금씩 보내면서 웹서버의 MaxClient 임계치까지 세션을 증가시키는 공격

Slowloris는 2009년 6월경에 나온 HTTP DoS툴로  HTTP 요청의 일부만 보내의 커넥션을 열어둔 채 소켓이 닫히지 않게 하지 위해 일정간격으로 헤더를 조금씩 보내는 공격이다. TCP 풀 커넥션을 만들기 때문에 TCP DoS는 아니다. 또한 GET Flooding도 아니다.  SYN Flood 와 유사하지만 HTTP기반이다.  Slowloris는 프로그램을 살짝 수정하고 웹서버가 지원해준다면, 이론적으로 UDP와 같은 다른 프로토콜에서도 동작한다.

Slowloris.pl를 다운로드 해서 *NIX 계열에서 실행해보자. 윈도우에서는 소켓 커넥션이 130개정도로 한계가 있어서 공격이 제대로 이루어 지지 않을 수도 있다. 이 부분은 추후 다시 실험해 볼 필요가 있다. 

# Slowread, 버퍼의 크기, TCP window size 조작하여 응답을 천천히 읽어 TCP연결을 지연시키는 공격

Slowread는 slowloris와 HTTP 차이가 있다면, 요청을 지연시키는것보다는 HTTP 요청을 적절히 보내고 응답을 천천히 읽으면서 세션을 오래 물고 있는것이다. Slowread와 이전공격의 차이를 햄버거 가게에서 주문하는 경우에 빗대어 Qualys에서 설명한 내용이 이해하는데 도움이 될것이다. 이전 공격기법들은, 주문하기에 앞서 무엇을 주문할지 몰라 대기하고 있는 형태였다면 slowread는 주문양은 이미 결정되었고 처리하는 과정에서 주문한 1000개의 햄버거 중 5개씩 천천히 받아간다는 의미이다. 

Slowread 공격 기법은 대부분의 웹서버가 연결지연을 제한하지 않는 사실을 이용한다. 데이터 흐름속에서 TCP 연결을 끊임없이 지연시킬 수 있는 방법은 TCP 윈도우 사이즈의 값을 조작해서 0 이나 작은 데이터를 받는것이다. TCP연결 지연 관련 쥐약점은 MS09-048, CVE-2008-4609, CVE-2009-1925, CVE-2009-1926에서 이미 보고된 바 있다.

slowhttptest 툴은 SO_RCVBUF 소켓 옵션을 이용하여 들어오는 버퍼의 크기를 조작하는 기법이다. 운영체제마다 정해진 크기는 다르다는 점에 유의해야 한다. 

TCP Window Scale option