DDoS 의 공격 방식에는 여러 가지 방식이 존재한다.


그 중 Application Layer 의 공격 종류 중 Slow Read Attack 혹은 Slow HTTP Read DoS 등으로 불리우는 공격에 대해서 알아보자.


우선 이 공격을 이해하기에 앞서 TCP에 대해서 이해를 요구하게 된다.

모든걸 다 할 순 없으니, 필요한 부분들만 설명하겠다.

"RFC 1323" 이 있다.

해당 문서의 제목은 "TCP Extensions for High Performance"  


여기에서는 TCP의 Window Size 에 대해서 언급한다.

(OS Windows 말고...)


Window Size라는 걸 간략하게 설명하자면, TCP 통신에 있어 통신 속도에도 영향을 줄 수 있고, 데이터를 주고 받을 때 이 값에 의한 크기 만큼 데이터를 주고 받는다.

이 값은 여러분들이 인터넷 속도 체크를 할때 TCP를 통한 속도 체크를 사용하는 방식에서도 영향을 준다.


아울러 이 값은 "랜덤 상태 조절"이 Default 값이다.


시작 -> 실행 or 윈도우 키 + R을 눌러 "CMD" 명령어를 입력하거나 커맨드 창을 열어 다음과 같이 입력해 보자.


"netsh interface tcp show global"

거기엔 OS의 언어에 맞게 옵션 값이 출력되는데, 한글 기준 "수신 창 자동 조정 수준"으로 표기가 된다.


이것이 TCP Window Size에 대한 옵션 값이며, 기본 Normal 로 자동 조정된다.


자, 이 값이 왜 중요할까?


 - 우리가 연결된 통신 경로를 통해 데이터를 주고 받음에 있어, 주고 받는 데이터의 경우에 따라 "사용되는 Hareware Resource"가 제각각이다.


어떤 녀석은 데이터 처리하기 위해 하드웨어 CPU, 메모리 등의 자원을 많이 쓸수도 있고, 가벼운 녀석도 있을 것이고..


그러면 이 Window 값이 만약 고정이라면? 내가 1만큼 수신 처리가 가능한데 100만큼이 고정 값으로 되어 있다면?


반대로 100만큼 처리가 가능한데 1만큼씩만 처리하기 위해 수신된다면?


무조건 고정적으로 하는 값은 상황에 따라 옳지 못한 설정 값이 된다. 그래서 기본 자동으로 되어 있으며, 통신에 따라 자동으로 "Window Size"를 조정하여 데이터를 송수신하며, 처리에 병목이 생기지 않도록 조절한다.


그럼 해당 공격은 거의 이해가 끝났다고 볼 수 있다.




이건 내가 강의할 때 만든 자료 중 한 페이지이다.


여기서 진상고객은 "Client, HTTP 서비스 요청자 또는 공격자"가 되시겠다.

카페직원은 당연히 "Server, HTTP 서비스 제공자 또는 Victim"이 되시겠다.


이 공격은 "TCP 통신의 정상 과정"을 "악용" 하는 공격이다.(차후 여러가지를 올리겠지만, 정상적인 통신과정을 조작하거나, 악용하는 공격들이 굉장히 많다.


과정은 이렇다. 기본적으로 Application Layer공격은 "세션이 수립된 상태" 즉 3 Way Handshaking이 끝나고, TCP Connection 상태 정보에 "Established" 상태에서 발생된다.(기본적으로 중요한 개념이다. 기억해두자.)


이후 HTTP 어떤 페이지의 정보를 요청하고자 할 때 공격자는 자신이 요구하는 페이지 정보와 자기가 얼마만큼 "처리가 가능한지"에 대해서 TCP Window Size를 지정하여 발송한다.

 TCP Window Size 예시 1

RFC 1323에 정의된 Window Size 크기에 대한 설명

 

 


공격자가 악의적으로 해당 WIndow Size에 대한 값을 "작게" 설정하여 또는 "0"으로 설정하여 요청을 보낸다면?


서버 입장에서는 정상적인 요청에 해당 Window Size에 의해 세션은 수립된 상태이나, 강제적으로 단절 시키거나 하지는 못하고, "세션 연결"을 유지하게 된다. 이때 Client 입장에서도 세션이 끊어지지 않도록 하기 위한 데이터를 간간히 보낸다.


실제 이 패킷들은 흔히 알고 있는 Flooding류 공격에 대비하여 패킷 사이즈가 크거나, 많은 대역폭을 잡아먹거나 하질 않는다.


그래서 정상적인 통신과의 구분 방법이 "모호"하다고 할 수 있다.


 

Kali 에 slowhttptest를 설치 해 봤다.

 


해당 공격 테스트를 위한 예시 명령어.(실제 회사 원격 지원 서버 페이지로 공격)

 

 예전엔 잘 죽었는데, 잘 버틴다.

초당 50건의 연결을 하고, 10000 건의 연결 공격에서 현재 4090 개 연결


 

 

해당 공격패킷을 실제 pcap으로 발췌한 내용.

[TCP ZeroWindow] 가 눈에 들어온다.


해당 공격은 그럼 방어하려면 어떻게 해야 할까?

여러가지 DDoS 공격 대응 솔루션들이 있지만, 기본적으로 해당 공격이 어떤 형태로 발생되는 지를 먼저 이해할 필요가 있다.

그리고 서버 자체에서 이 공격을 해결할 수 있으리라고 생각하는 것은 큰 오산.


난 늘 그렇다. 공격을 방어하려면. 그 공격을 이해해야 하고, 그 공격을 이해하기 위해 응용이 되기 이전 기본을 이해할 필요가 있다고...










+ Recent posts