Information Security
Slow 계열 공격 유형 실습 본문
1. Slow HTTP Header DoS 공격(Slowloris)
1) 개요
- 공격자가 만약 요청 헤더의 끝, 즉 빈 라인을 전달하지 않고 지속적으로 천천히 불필요한 헤더 필드 정보를 전달하면 웹서버는 요청 헤더부를 모두 수신해야 요청 메시지 처리가 가능하기 때문에 이를 모두 수신할 때까지 연결 상태를 유지하면서 대기하게 된다. 이런 방식으로 다수의 연결을 지속시키게 되면 대상 웹 서버의 연결 자원이 모두 소진되어 정상적인 요청을 받을 수 없는 상태가 된다.
- 이와 같은 방식으로 HTTP 요청 헤더 정보를 조작해서 서비스 거부 공격을 수행하는 것을 Slow HTTP Header DoS, 일명 Slowloris 공격이라 한다.
- Slow 계열의 공격 특징 중에 하나는 기존의 다량의 트래픽을 발생시키는 DDoS 공격기법과는 달리 웹서버와의 연결 상태를 지속시키는 방식이기 때문에 연결자원을 소진시킬 정도의 트래픽만을 필요하므로 저대역폭 공격이라는 특징이 있다.
2) 공격 실습
- 공격자가 10초 간격으로 Pragma:13458이라는 의미 없는 헤더 필드와 개행(0x0d0a)이 보이며 예상한대로 빈 라인은 전송하지 않고 있다. 웹서버는 추가 헤더 필드가 있는 것으로 판단하고 연결을 지속하면서 대기한다.
- 10초 간격의 패킷을 보아도 Pragma 헤더 필드만을 전송할 뿐 빈 라인은 전송하지 않으면서 연결을 지속시킨다.
- 해당 TCP 연결에 대한 전체 스트림 정보를 살펴보면, 의미 없는 pragma 헤더 필드만을 계속 전송하면서 빈 라인을 전송하지 않고 연결을 지속시키고 있음을 볼 수 있다.
2. Slow HTTP POST DoS(RUBY) 공격
1) 개요
- 공격자는 Content-Length를 비정상적으로 크게 설정한 후 매우 소량의 데이터를 지속적으로 천천히 웹서버에 전송하면 웹서버는 Content-length 헤더 필드에 명시된 크기만큼 데이터를 모두 수신하기 위해 연결 상태를 유지하면서 대기하게 된다. 이런 방식으로 다수의 연결을 지속시키게 되면 대상 웹서버의 연결 자원이 모두 소진되어 정상적인 요청을 받을 수 없는 상태가 된다.
- 이와 같이 POST 방식으로 데이터를 전송하면서 Content-length 헤더 필드와 전송 데이터를 조작해 서비스 거부 공격을 수행하는 것을 Slow HTTP POST DoS 일명 RUDY 공격이라 한다.
2) 공격 실습
- Content-length 헤더 필드에 100000bytes라는 큰값을 설정한 것이 보이고, content-type 헤더 필드를 마지막 헤더 필드로 하여 빈라인이 추가된 것을 확인할 수 있다. 메시지 헤더부가 정상적으로 끝났기 때문에 Slowloris 공격과는 무관하다는 것을 예측 할 수 있다.
- 100000bytes 라는 데이터를 전송한다고 했지만 실제 전송 데이터는 10초 간격으로 "A=" 만 전송하고 있으며 웹서버 입장에서는 아직도 수신할 데이터가 많이 남아있기 때문에 연결을 지속시키면서 다음 요청을 대기한다.
3. Slow HTTP Read DoS 공격
1) 개요
- TCP 헤더의 window 필드가 수신측에서 수신 가능한 여유 공간의 크기를 담아서 송신측에게 전달하는 헤더 필드이다.
만약 수신측의 수신 버퍼에 여유 공간이 0이 되면 Window 필드를 0으로 설정한 "zero window packet"을 전달하고, 이를 수신한 송신측에서는 일정 시간 대기후 수신측 상태를 확인하기 위한 "zero window probe packet"을 전달한다.
이를 수신한 수신측에서는 여유 공간이 생겼다면 해당 공간의 크기만큼 window 필드를 설정하여 응답하고 여전히 여유공간이 없다면 "zero window packet"으로 응답한다.
- 공격자는 이러한 TCP 흐름 제어 특성을 이용해서 HTTP 요청을 보낸 후 window 크기를 조작하여 0인 "zero window packet"을 지속적으로 서버 측에 전달하여 서버가 요청에 대한 응답 메시지를 전송하지 못하고 연결을 지속적으로 유지하도록 한다. 이런 방식으로 다수의 연결을 지속시키게 되면 대상 웹서버의 연결 자원이 모두 소진되어 정상적인 요청을 받을 수 없는 상태가 된다.
※ Slow HTTP Header/POST 공격 대응책
1) 동일한 출발지 IP에서 동시에 연결할 수 있는 연결개수에 대한 임계치를 설정한다.
ex) iptables -A INPUT -p tcp --dport 80 -m conlimit --conlimit-above 30 -j DROP
: 30개 초과 동시 연결에 대해 차단
2) 연결 타임아웃 설정을 통한 차단
- 클라이언트와 웹서버 간에 아무런 데이터 송수신 없이 세션을 유지하는 시간에 대한 타임아웃을 설정하여 연결을 종료한다.
- Apache 웹서버의 경우 httpd.conf의 TImeout 지시자를 120에서 5로 설정한다.
- 이 방안에는 일정한 한계가 있다.
3) 읽기 타임아웃 설정을 통한 차단
ex) apache httpd.conf 파일
<IfModule reqtimeout_module>
RequestReadTimeout header=5 body=10
</IfModule>
- 위 설정을 살펴보면, 요청 헤더 정보가 5초 이내에 모두 수신되지 않거나 (slowloris대응), 요청 바디 정보가 10초 이내에 모두 수신되지 않으면(Ruby 대응) 오류 응답한다.
'§IT > 정보보안기사-네트워크' 카테고리의 다른 글
ARP Spoofing공격 (0) | 2020.05.18 |
---|---|
IP 프로토콜 (0) | 2020.05.17 |
SSL/TLS (전송계층 보안) (0) | 2020.05.17 |
Hulk DoS 공격 & Hash DoS 공격 (0) | 2020.05.14 |
IPsec(IP security) (0) | 2020.05.14 |