SlowLoris
GET 방식의 메소드는 헤더의 데이터 구분을 CRLF을 이용한다. 0D 0A 가 두번 들어가면 헤더의 끝을 나타내는데..
의도적으로 한번만 넣어서 헤더의 끝을 맺지 않음으로 서버는 헤더가 끝날때까지 지속적으로 기다리게 만든다.
익히 알려진 slowloris 공격 툴은 헤더에 X-a: b 를 전송하고 Content-Length가 42byte 라는 특징이 있다.
:: 공격에 취약한 서버
- Apache 1.x, 2.x, squid
:: 공격에 취약하지 않은 서버
- lighttpd, IIS6.0, IIS7.0, nginx, varnishd, J5K.
공격툴로 테스트를 해보면 아래와 같이 펜더가 나온다.
공격 진행중 패킷을 보면 CRLF(0d 0a) 를 한번만 보내 헤더의 끝을 맺지 않음을 알 수 있다.
slowloris의 특징인 Content_Length: 42 와 X-a: b 도 보인다.
이와 같이 공격을 수행하면 "X-a: b\r\n"의 불완전 헤더를 지속적으로 보내어 SYN->SYNACK를 반복하고 서버 측에서 FIN 패킷을 보내지 않아 계속 패킷을 기다리는 상태가 되어 결국 서비스 거부상태가 된다.
apache의 경우 실제 공격시에는 로그가 남지 않으며 공격을 멈추면 아래와 같이 로그가 남는다.
# error_log
[error] server reached MaxClients setting, consider raising the MaxClients setting
failed: error reading the headers
failed: error reading the headers
failed: error reading the headers
failed: error reading the headers
# access_log
"GET / HTTP/1.1" 400 308
"GET / HTTP/1.1" 400 308
"GET / HTTP/1.1" 400 308
"GET / HTTP/1.1" 400 308
:: 대응방안
-. Timeout 설정 변경(가장 현실적인 방법)
httpd.conf 에서 Timeout 300 ==> 5 이하로 변경 (5초동안 연속된 패킷이 오지 않을 경우 timeout시킴)
-. iptables의 connection limit(커넥션 제한) 설정
# iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP
'Security' 카테고리의 다른 글
FTP Active/Passive 정리 (0) | 2017.01.06 |
---|---|
ubuntu 환경에 SNORT & BASE & Metasploit 설치 (0) | 2017.01.06 |
포트 스캐닝으로부터 OS 정보 숨기기 (0) | 2017.01.06 |
R.U.D.Y DDoS (0) | 2017.01.05 |
윈도우 로그온 유형 (0) | 2016.12.29 |