( 1 ) Slowloris 공격 설명
Slowloris 공격은 단일 시스템이 최소한의 대역폭과 관련없는 서비스 및 포트에 대한 부작용을 발생시켜 웹서버를 다운시키는 서비스 거부 공격 유형임.
즉, 낮고 느린 OSI 7 Layer DoS 공격 유형임.
2007년에 Security Focus 사이트에 Adrian Ilarion Ciobanu 님께서 Slowloris 공격 유형에 대한 설명을 게시함.
링크 :
HTTP 프로토콜 구조(RFC 2616)에 의거하여 HTTP 메시지의 헤더와 바디(데이터)를 2번의 개행문자(CRLF)로 구분되며 헥사값으로 \0d\0a\0d\0a 임.
만약 공격자가 2번의 개행문자 없이 HTTP 메시지를 웹서버로 전달하게 되면 웹서버는 HTTP 헤더 정보가 다 수신하지 않은 것으로 판단하여 연결을 유지하게 됨.
Slowloris 공격을 이용하여 다수의 불안전한 메시지를 전달하여 웹서버는 다른 클라이언트에 대한 정상적인 연결을 제공하지 못하게 되어 서비스 장애가 발생하게 됨.
즉, 최대 동시 연결 풀을 채우고 결국 다른 클라이언트의 추가 연결 시도를 거부함.
( 2 ) Slowloris 공격 실습
1. 메타스플로잇 프레임워크(Metasploit Framework)에서 아래와 같이 Slowloris 공격을 실습함.
Metasploit 프레임워크 콘솔 접속
msfconsole
search 명령어를 통해 Slowloris 명명식 검색
search slowloris
해당 Slowloris 공격 모듈를 사용하는 명령어 입력
use auxiliary/dos/http/slowloris
Slowloris 공격 모듈의 옵션 확인 명령어 입력
show options
Slowloris 공격 모듈의 옵션 설정 명령어 입력
(여기서는 피해자 서버 설정 및 소켓 사용 카운트값 설정)
set rhosts xxx.xxx.xxx.xxx
set sockets xxxx
공격 실행 명령어
exploit
2. 피해자 웹서버로 가는 패킷 덤프를 확인한 결과, 1번의 개행문자(CRLF)로 비정상적인 요청을 계속해서 시도함.
3. 브라우저에서 피해자 웹서버 페이지를 확인한 결과, 평소대비 접속 지연시간이 높음을 확인함.
( 3 ) Slowloris 공격 방어
1. mod_reqtimeout 모듈 사용
mod_reqtimeout 모듈은 Apache HTTP Server 2.2.15 버전 이후부터 기본적으로 포함되어 있음.
이를 사용하여 클라이언트에서 HTTP 요청 헤더 및 HTTP 요청 본문을 수신하기 위한 제한 시간을 설정할 수 있음.
결과적으로 클라이언트가 구성된 시간 내에 헤더 또는 본문 데이터를 보내지 못하면 서버에서 408 REQUEST TIMEOUT 오류 응답값을 보냄.
다음은 mod_reqtimeout 과 함께 사용할 수있는 구성의 예임.
<IfModule mod_reqtimeout.c>
RequestReadTimeout header=20-40,MinRate=500 body=20-40,MinRate=500 </IfModule> |
위의 구성은 클라이언트에게 헤더 데이터 전송을 시작하는 데 최대 20 초를 제공함.
클라이언트는 초당 500 바이트의 전송 속도로 헤더 데이터를 보내야 하며 최대 40 초 동안 이를 수행할 수 있음.
또한, 클라이언트에게 메시지 본문 데이터 전송을 시작할 수 있는 최대 20 초를 제공함.
클라이언트는 초당 500 바이트의 전송 속도로 메시지 본문 데이터를 보내야 하며 최대 40 초 동안 이를 수행할 수 있음.
2. mod_qos 모듈 사용
mod_qos 모듈은 Apache HTTP 서버에 대한 서비스 확장의 품질임.
다른 HTTP 요청에 다른 우선 순위를 할당할 수 있는 제어 메커니즘을 구현함.
다음은 Slowloris 공격을 완화하기 위해 mod_qos 모듈을 구성하는 방법의 예임.
<IfModule mod_qos.c>
# handle connections from up to 100000 different IPs
QS_ClientEntries 100000
# allow only 50 connections per IP
QS_SrvMaxConnPerIP 50
# limit the maximum number of active TCP connections to 256
MaxClients 256
# disables keep-alive when 180 (70%) TCP connections are occupied
QS_SrvMaxConnClose 180
# minimum request/response speed
# (deny clients that keep connections open without requesting
anything)
QS_SrvMinDataRate 150 1200 </IfModule> |
위의 구성 설정은 최대 100,000 개의 IP 연결을 추적하고 TCP 연결 수를 최대 256 개로 제한함.
또한, 각 IP 주소를 최대 50 개 TCP 연결만 허용하고 180 개 이상 TCP 연결을 사용할 때는 HTTP KeepAlive 를 비활성홤.
마지막으로 연결당 최소 초당 150 바이트 이상 요청해야 하며 도달하면 연결을 초당 1200 바이트로 제한함.
3. mod_security 모듈 사용
mod_security 모듈은 Apache HTTP 서버와 함께 사용할 수 있는 오픈 소스 웹어플리케이션 방화벽(WAF)임.
특정 기능을 수행하기 위해 적용될 수 있는 규칙을 사용함.
Slowloris 공격을 완화하기 위해 다음 규칙을 사용할 수 있음.
SecRule RESPONSE_STATUS "@streq
408" "phase:5,t:none,nolog,pass,
setvar:ip.slow_dos_counter=+1, expirevar:ip.slow_dos_counter=60,
id:'1234123456'"
SecRule IP:SLOW_DOS_COUNTER "@gt
5" "phase:1,t:none,log,drop, msg:'Client Connection Dropped due to high number of slow DoS alerts', id:'1234123457'" |
위 규칙은 Apache HTTP 서버가 408 상태 코드를 트리거하는 시기를 식별하고 이것이 발생한 횟수를 추적함.
모듈은 데이터를 IP 기반 영구 저장소에 보관하므로 요청 간에 상관 관계가 있을 수 있음.
이 이벤트가 60초 동안 5회 이상 발생한 경우 해당 IP 주소의 후속 요청은 지정된 기간 동안 삭제됨. (위 예시는 5분)
4. Snort 패턴 생성 및 대응
아래와 같이 Snort 패턴을 등록하여 대응함.
해당 패턴은 1번의 개행문자만 접근 시도시 탐지하는 패턴임.
alert tcp any any -> any any (msg:"KOROMOON_Slowloris Attack Detected "; content:"GET"; content:"HTTP/1."; pcre:"/[^\x0d\x0a]\x0d\x0a$/";)
참고 사이트 :
https://en.wikipedia.org/wiki/Slowloris_(computer_security)
https://kb.mazebolt.com/knowledgebase/slowloris-attack/
https://web.archive.org/web/20090822001255/http://ha.ckers.org/slowloris/
http://aces.snu.ac.kr/manual/mod/mod_reqtimeout.html
https://www.acunetix.com/blog/articles/slow-http-dos-attacks-mitigate-apache-http-server/
https://docs.cpanel.net/knowledge-base/security/how-to-mitigate-slowloris-attacks/
https://operatingsystems.tistory.com/entry/Slowloris-DoS-Tool
============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.
댓글 없음:
댓글 쓰기