'slowhttptest'를 이용한 HTTP_SlowRead 공격

2017. 3. 21. 00:30보안 & 해킹/정보 보안


Slowhttptest를 이용한 DoS 공격 모음


1. 'slowhttptest'를 이용한 HTTP GET 플러딩 공격(a.k.a slowloris)

http://whackur.tistory.com/34


2. 'slowhttptest'를 이용한 HTTP_ Slowbody 공격 (a.k.a RUDY)

http://whackur.tistory.com/35


3. 'slowhttptest'를 이용한 HTTP_SlowRead 공격

http://whackur.tistory.com/37



1. 목적


-HTTP Slow Read 공격


-HTTP Slow Read 공격 기법을 이용한 DoS공격 실습




2. 이해


http://cafe.naver.com/kalilinux/396 을 먼저 읽어보자.


공격자는 TCP 세그먼트 헤더 중 윈도우 크기(Window Size) 항목을 최소로 설정해 웹 서버가 데이터를 느리게 응답하도록 함으로서 연결을 계속 유지한다. 이 과정에서 과부하를 유발시키는 공격이 바로 HTTP Slow Read 공격이다. 이전에 소개한 공격은 HTTP 헤더 항목을 조작해 과부하를 유발시키는 방식인 반면 슬로우 HTTP 리드 공격은 TCP 헤더 항목을 악용한 방식이라고 할 수 있겠다.




3. SlowRead 공격 실습



피해자 환경 : Ubuntu server 14.04_shopping mall 설치

공격자 환경 : 칼리리눅스2 / 2016.2



http://whackur.tistory.com/34 에서 옵션값에 대한 설명을 알 수 있다.


공통 옵션 설명은 생략하겠다.


아래는 Slow read 공격에 대한 특정 옵션이다.


Slow read specific options:
 
  -k num          number of times to repeat same request in the connection. Use to
                  multiply response size if server supports persistent connections (1)
  -n seconds      interval between read operations from recv buffer in seconds (1)
  -w bytes        start of the range advertised window size would be picked from (1)
  -y bytes        end of the range advertised window size would be picked from (512)
  -z bytes        bytes to slow read from receive buffer with single read() call (5)


-k num // 한번의 연결에 보내는 다중요청 연결 수이다. 쉽게 말해서 HTTP pipeline 요청 수이다. 

HTTP pipeline이란 1999년 HTTP 1.1 버전 이후에 나온 기술로 하나의 세션에서 다수의 요청을 보내는 기술이다. HTTP 2.0이후 버전에서는 multiplexing 이라는 기술로 대체되었다. 실습에서는 디폴트값인 1로 하기 위해 생략하도록 한다. 전반적인 response 크기를 늘리기 위해 3~5 정도로 늘려서 옵션을 줄 수 있다.


Pipeline 통신의 특징



-n // 패킷 정보를 읽는 것을 고의로 늦추는 옵션이다. 

-x, -y // 초기 SYN 패킷의 window size 범위

-z // 각 read 요청에 대한 수신 버퍼 사이즈



공격 옵션은 다음과 같다.



slowhttptest -X -c 1000 -r 200 -w 10 -y 20 -n 5 -z 32 -g -o slowread -p 3 -u http://192.168.10.132

-X // Slow Read 공격 옵션이다.

-p 3 // 인증(Probe)을 위한 패킷을 3초마다 송신한다.




공격 수행 후 화면이다.








패킷분석을 하기 힘들어 분석용으로 다시 공격을 시도했다.


1
slowhttptest --1 -200 -10 -20 -5 -32 --o slowread -3 -u http://192.168.10.132/
cs


Connection 옵션인 -c를 1개만 주었다.


그리고 패킷 캡쳐 전 Capture Filter 옵션을 주도록 한다.


Capture Filter 옵션은 'host 192.168.10.128 and host 192.168.10.132'를 이용하면 두 ip주소로 통신하는 과정만 캡쳐하게 된다.


이후의 패킷의 특징을 보자. 



전달하는 도중 수신자의 slow read로 인해 내용이 끊겨있다.






Persistance를 위해 3초 간격으로 인증패킷을 날리는 것이 보인다. -p 3 옵션의 영향을 받는 부분이다.




Window size = 0 , Len = 0 인 패킷을 계속 보냄.







4. 방어책


-공격 후에 관리자가 공격을 감지하기 어렵다. 합법적인 요청이 보내지기 때문에 signature 기반의 IDS는 불가능할 것으로 예상된다.


-타임 아웃과 Connection 생성 속도를 제어할 수 있다면 예방할 수 있다.


-비정상적으로 작은 Window Size를 가진 SYN 패킷을 차단한다.


-퍼포먼스가 실제로 많이 떨어지지 않는다면 pipelining을 사용하지 않는다.




5. 실습 첨부파일


slowread.csv

slowread.html

slowread.pcapng

slowread_only1conn.pcapng

slowread_onlyhost.pcapng