Ping of Death


DoS 의 공격 기법 중 하나로 


OSI 3 Layer 프로토콜 중에는 ICMP를 이용하는 Ping 명령어가 있다. 많은 IT인들이 "Ping"이라는 명령어를 통해 특정 IP 에 대한 활성 여부를 체크한다.


물론 중간 혹은 수신 입장에서 ICMP를 차단한다면 응답이 없겠지만, 많은 분들이 호스트의 "Alive or Dead" 여부를 Ping으로 많이 사용 한다.


우선 Ping 을 실행하면 많은 내용들을 알 수 있다.


여러가지 정보들을 토대로 추정하면 "OS"를 추정할 수 있다.(물론 절대치는 아니다. 몇 개의 값으로 절대적인 정의를 내릴 만큼 보여지는 값이 유니크하지는 않다.)


추론 할 수 있는 근거는

TTL, 1 Packet 당 Data, 생성되는 패킷에 채워지는 데이터 내용 등이 있다.


자. 여기서 Ping of Death는 과도한 Ping 발생을 통해 수신자의 DoS 를 유발하는 것이다. 간단하지 않은가?

(본 내용에 나오는 IP는 직접 연결되지 않는 IP들이라 가리지 않습니다.)


 일반적인 Ping 명령어를 통해 1건 발생 시킨 결과.

기억해 둘 Point !!

Byte : 32  /  TTL : 64



 

 위의 Ping을 발췌한 wireshark 

Request TTL(Time To Live)과 Reply TTL이 다름을 알 수 있다.

이 내용으로 패킷을 발생시키는 호스트의 특성에 따라 TTL이 바뀜을 알 수 있다.



 

 (ICMP는 OSI 3 Layer 프로토콜로 4 Layer 이상의 정보가 없다.)



 

ICMP 의 하위 내용을 열어 DATA부분을 클릭하면 아래의 사각표와 같이 32bytes가 채워진 DATA가 무엇인지 확인이 가능하다.

32bytes데이터를 채우기 위해 a에서부터 z까지 소문자 알파벳으로 데이터를 채웠다.(중요함)



 

 ping으로 왜 dos 를 유발할 수 있는 지 개념을 잡기 위해 사이즈 증가 옵션을 알아본다.



 

 사이즈 최고치는 65500으로 설정이 가능하다.

(앞서 설명한적이 있지만 2의 지수승 증가 값들은 기억해두면 쉽게 기억할 수 있는 것들이 많다. 65536은 2^16 값이며, 이는 TCP Window Size. 여기서도 비슷한 값을 최대치로 설정되어 있음을 확인할 수 있다.)



 

 이 이미지는 Windows XP에서 발생 시킨 Ping이다. 위의 Windows 10과 같은 형태로 데이터를 채워 넣는다.



 

 역시나 마찬가지로 설정할 수 있는 최대 수치가 보인다.



 

 위는 Kali linux 에서 설정 가능한 ping 패킷 사이즈를 확인하였다.

옵션은 -s로 한다.



 

 윈도우 보다 최대치가 7 바이트 높다.



 

 Kali 에서 Ping을 발생시켜보았다.

송신자 TTL 이 64이며 수신자(윈도우)가 128의 TTL로 패킷이 생성되었음을 알 수 있다.

Kali의 경우 특수문자숫자의 조합으로 데이터를 채워 나감을 알 수 있다. 

아울러 64ttl로 채우는 리눅스의 경우와 윈도우의 128 ttl로 생성되는 경우가 있음을 확인할 수 있다.



 

 

 kali에서는 기본 ping 사이즈가 64byte설정됨을 확인할 수 있다.



 역시나 응답 또한 동일한 데이터를 채워넣어 보냄으로써 요청한 통신에 대한 응답임을 체크(중요)한다.
(물론 여기서 시퀀스라던지 id라던지 개념으로 요청과 응답의 쌍을 보는 기준이 더 있긴하다.)



 

 최대치인 65507로 사이즈를 설정하여 발송하여 보았다.

여기서 ping of death가 문제가 되는 이유를 설명할 수 있다.

(해당 계층 정보 등이 추가된 헤더가 8byte추가되어 65515 byte로 발송되었음을 확인할 수 있다.)



 

 실질적으로 문제를 유발하는 내용들이다. 위의 내용까지는 데이터 사이즈를 증가하여 발송해도 응답이 온 내용 결과

1개만의 메시지가 출력되는 데 실상은 전달되고 응답이 오는 패킷이 fragment된 갯수만큼 데이터를 채워서 전달한다.

패킷 사이즈 설정 값 / mtu 를 한다면 대략적인 fragment에 의한 갯수 숫자 계산이 가능하다.



 

전송된 하나의 패킷으로 보여지는 것이 실제로는 fragment되어 전송된다.

그리고 more fragment의 끝을 알리는 최종 패킷들만 icmp로 wireshark 검색이 되고 그 나머지는 icmp로 검색이 되지 않는다.(ip.addr==x.x.x.x로 검색가능)


마지막으로 kali에서는 큰 사이즈의 ping을 생성 시 특수문자로 시작하여 영대문자, 영소문자로 반복되는 데이터를 생성하여 채워나감을 알 수 있다.




여기까지가 일반적으로 윈도우, 리눅스에서 테스트 가능한 Ping of Death DoS에 대한 개념 이해이다.

위와 같은 특성으로 Ping 사이즈를 높여 과다로 발생 시킨다면, 수신자(공격대상) 입장에서는 수신한 만큼 동일한 데이터를 생성하여 전달하도록 되어 있으므로반복 데이터 생산하는 과정에서 부하가 발생된다.


오늘은 Ping 하나로 여러가지 정보들을 추측할 수 있다고 하였고, 사실상 공격자체만 보면 icmp 를 큰 사이즈로 과다 발생시키는 간단한 공격인데, 그 개념을 이해하기 위한 기초적인 부분들까지 설명하였다.


아울러 해당 공격을 방어하기 위해서 보안 장비들에서는 특정 사이즈 이상의 Ping 패킷이 발생될 경우 차단하는 형태로 방어를 할 수 있는 부분들이다.


아무쪼록 이러한 공격들을 학습하는 이유는 기본 개념의 이해를 통해 응용을 "좀 더 쉽게" 이해하고자 하는데 있다.



이번에는 DoS 의 한 종류인 Arp Spoofing을 이해하고자 한다. 늘 강의를 다니면서 부가 설명 하는 것은 기본을 이해하면 "응용"부터 학습하는 것보다 쉽다. 라고.. 물론 100%는 아니겠지만.. 어느정도는 맞다고 생각된다.


ARP SPOOFING

ARP Spoofing을 이해하기 위해서 우선 "ARP"와 "Spoofing"을 각각 이해해야 한다.


ARP - Address Resolution Protocol

=> ARP를 이해하기 위해서는 IP와 MAC 통신에 대해서 이해를 요구 한다. 

-> IP는 물리적 거리 무시하고 다른 브로드캐스트 도메인 영역과의 통신 시에도 사용될 수 있는 "OSI Layer 3" 주소 정도라는 것은 기억해야 하고,

-> MAC은 "OSI Layer 2"계층 주소이며, 같은 브로드캐스트 도메인 영역에서 통신하고자 할 때 사용되는 "필수"주소라는 중요한 것을 잊으시면 안된다.

-> 그리고 IP보다 MAC 이 우선 통신 주소로 이용되며, "중요"하다. IP는 달라도 MAC이 맞다면 패킷이 전달되고(핵심), IP가 맞아도 MAC이 다르다면 NIC에서부터 패킷 처리를 할 수 없으니까.

ARP는 IP를 알지만 "실질적인 패킷 전달을 하기 위해서" "MAC"주소를 필요로 하는데,(MAC주소를 모르면 패킷 전달 못하고, 통신이 안됨.) IP는 알지만 MAC을 모를 때 MAC을 알기 위한 과정이다. (라우팅에 대한 개념은 별개.)


Spoof - 사전적 의미를 보자.

ARP와 Spoof를 이해하면 기본적으로 "아 대충 뭐 그런거구나."라는 건 이해가 갈 내용이다.




자 다음은 실제 따끈따끈한 테스트 환경이다.


1. 패킷을 수집당할, 피해자, VICTIM의 PC IP이다.

IP : 1.1.1.139

MAC : 00-50-56-23-B2-C4

IP range : 24bit


2. 패킷을 수집할 Attacker, 피고인의 PC IP이다.

IP : 1.1.1.140

MAC : 00-0C-29-B6-13-D2

IP range : 24bit



3. 같은 네트워그 대역임을 확인시켜주기 위한 정보들이다. 



4. 공격 당하기 전 정상 상태의 VICTIM의 ARP정보이다.

(ARP 라는 것은 ARP 명령어를 통해 추가 정보를 확인하거나, 설정이 가능하다.)

arp -a 의 경우 현재 해당 단말의 arp 목록 정보를 확인한다. 각 시스템들마다  arp 확인이 가능한 경우 제 각각의 명령어들이 존재한다.



5. 우선 갈취하는 정보는 ftp로 테스트를 진행하였다.

(FTP : File Transfer Protocol, 파일 송수신간 사용되는 어플리케이션)

아래는 FTP 서비스를 열어둔 서버의 로그(시간이 다르지만 양해바란다. 당연히 시스템 시간 문제 없을 줄 알았다...ㅠㅠ)


6. 실제 arp spoofing에 의해 공격당해 발생된 시스템의 arp 정보 내용

arp spoofing은 수집하고자 하는 대상의 arp정보를 강제로 갱신토록 하여 수집한다.

이는 (별도의 보안 시스템이 설정된 경우를 제외.) 일반적으로 정상적인 정보 갱신을 이용하거나 할 때, 시스템의 운영체제와는 별개의 문제로

정보가 유출될 수 있다. 

arp 정보의 침해를 받아 공격자의 MAC 주소와 1.1.1.139가 바라보는 Gateway의 MAC주소가 같아졌다.
그로 인해 실제 패킷이 GW가 아닌 1.1.1.140에게 전달되는 것이다.

위의 패킷 덤프 내용을 보면 공격자 1.1.1.140(00-0C-29-B6-13-D2)가 각 두 피해자 1.1.1.2(GW), 1.1.1.140(VICTIM)에게 자신이 중간에서 가로채기 위한 ARP Reply 패킷을 발송하고 있다.

이로 인해 각 두 피해자는 ARP Reply 값에 의해 ARP 정보가 갱신되는 것이다.



7. 실제 공격을 통해 유출된 FTP 로그인 패스워드 정보(일부러 틀린 값을 입력하였고, 해당 내용이 평문 그대로 갈취 되었다.)

해당 도구는 Cain & Abel이라는 도구를 이용하였으나, arp spoofing을 이용할 수 있는 도구는 여러 종류이다.




대응방안.

간단하다.

보안 솔루션(NAC 또는 ARP+IP를 고정할 수 있는 무언가)을 사용하거나 End user, 단말 단에서는 ARP -S 등의 명령어를 통해 Static 한 값으로 등록하여 사용한다.

대부분 Static 은 Dynamic보다 우선시 된다.

하지만 "오타"를 조심하자.




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 공격 대응 솔루션들이 있지만, 기본적으로 해당 공격이 어떤 형태로 발생되는 지를 먼저 이해할 필요가 있다.

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


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










최근,

파트장으로서 파트원 개개인 별 정보보안기사 실기 까지 최종 패스를 목표로 개인의 실력을 가늠할 겸 철저히 주관식 문제를 만들어 보았었다.

해당 문제들에 대한 풀이를 작성해 보고자 한다.

  1. Denial of Service(이하 DoS) 에 대해서 간략히 설명하고, DoS 의 공격 종류 대표적 6가지를 간단하게 설명하시오.

우선 DoS란 DoS 뒤에 Attack을 붙여 DoS 공격 등으로 많이 이야기 한다.

말 그대로 서비스의 거부. 정상적인 서비스 제공을 방해하는 공격 또는 행위를 의미.

  • 여기서 서비스는 주로 여러분이 컴퓨터의 설치된 어플리케이션을 통해. 또는 브라우저를 통해 이용하는 네트워크 기반으로 제작된 어떤 컨텐츠를 이용하는 모든 것을 포함한다.

내가 늘 강의 때 "DoS" 를 설명하는 이유는 다음과 같은 이유에서이다.

  1. "기본 또는 표준(여기서는 DoS가 되겠다.)"을 이해해야 응용이 되는 공격 행위를 이해하기 쉽다.

DoS를 이해하고 D(istributed)DoS, Dr(eflect)DoS 등을 이해하는 것은 쉬우나 아무것도 모르는 상태에서 DDoS, DrDoS만 접하고 이해하고자 한다면 당연히 어려울 수 밖에 없다.

IT 중 정보보호 분야를 업으로 살아가지만, 늘 어려운 점은 그거다.

  • IT를 함에 있어서 새로운 공부를 하기 위해 "A"라는 용어를 이해하기 위해서 "B"라는 용어를 이해해야 하고, "B"를 다시 이해하기 위해서 "C"를 이해해야 하는 용어의 끝없는 이어짐....
  • 그 점이 IT에 있어서 가장 힘든 점이 아닐까 한다.(물론 어디든 다 고만고만하겠지..)
  • 아울러 많은 단축용어들이 그 원문의 뜻을 해석해보면 이해해 도움이 되는 것도 많다.

각설하고 DoS란 제공되는 어떠한 서비스를 정상적으로 이용하지 못하도록 하는 공격 또는 행위를 말한다면, 기본적으로 "정보보호개론"등의 도서에 포함되는 DoS 는 다음 6가지를 대표적 행위로 설명들 한다.(전부가 아니라 대부분 설명할 때...물론 더 있다.)

  1. ARP Spoofing

  2. Ping Of Death

  3. SMURF

  4. LAND Attack

  5. TCP Syn Flooding

  6. Tear Drop

위 6가지는 다른 응용된 요즘의 공격들을 이해하기에 앞서 필수적으로 학습하고 이해하는 것이 필요하다고 판단된다.

금일 자료에서는 해당 내용에 대해서 각 세부적으로 Packet Dump 된 내용들을 본다던지 하는 등을 하지는 않을 것이다.

사실 위의 6가지를 이해함에 있어서도 OSI  7 Layer를 어느정도 이해하는 부분은 필요하다. 그 점은 위에서 언급했던 것과 같이 "A"를 이해하기 위해 "B"를 이해해야 하는 그런.......

가. ARP Spoofing

  • ARP는 Address Resolution Protocol의 약자(주소, 해결, 프로토콜?)
  • resolve
    (이미지 출처 : 네이버 영어사전 검색 결과)
  • 여기에서 ARP 는 OSI 2 layer와 3 layer의 내용을 이해해야 한다.
  • ARP 는 같은 네트워크 영역의 다른 대상과 통신을 하기 위해 필요로 하는 정보를 파악하기 위한 프로토콜이며, "IP"는 알고 있으나, 실질적인 통신을 위한 주소 "MAC"를 얻어내기 위한 행위이다.
  • Spoofing은 직접 공격에 해당되며, (간접 공격은 Sniffing)
  • spoof의미
    (이미지 출처 : 네이버 영어사전 검색 결과)
  • 정리하자면 그렇다. ARP의 IP -> MAC을 얻고자 하는 과정에서 "MAC"주소를 조작하여
  • "A" : 공격 대상(Victim)
  • "B" : 공격자(Attacker)
  • "C" : 통신 대상
  • 의 과정에서 "A" 가 "C"와 통신을 하고자 할 때, "B"가 중간에서
    "A"와"C"의 "MAC"주소를 서로에게 조작 / 전달하여 실질적으로 "A"는 "B"와 "C"도 "B"와 통신을 하게 되는 형태를 의미한다.
  • 그렇게 함으로써 "B"는 "A"와 "C"의 통신 내용을 가로채거나 내용을 조작하여 원하는 데이터를 얻는다.

나.  Ping of Death

  • 죽음의 Ping???
  • 이 공격은 간단하다. 전형적인 과부하 발생 DoS 공격인데 Ping(ICMP를 이용, OSI 3 layer)을 발생시키는데, 해당 Ping에 데이터의 크기를 "크게"만들어 전송하여 정상적인 서비스를 제공하지 못하도록 하는 공격을 말한다.
  • Ping은 윈도우 / 유닉스 / 리눅스 같은 OS에서 기본적으로 명령어가 동일한 명령어 중 하나이다.(대부분 비슷하나 조금씩 다를 수 있다.)
  • 일반적으로 OSI 3 layer의 값을 통해 해당 Host의 Alive, Dead 상태를 파악하기 위한 용도로 많이 사용한다.(하지만 절대적인 것은 아니다.)
  • 이때 Ping은 윈도우에서는  "l"옵션, 리눅스에서는 "s"옵션을 통해 데이터의 기본 크기를 조작하여 사용할 수 있다.
  • Ping은 하나의 크기가 대략적으로 65000byte(2^16, 이 값은 앞으로도 많이 보여질 값의 크기이다.) 정도로 최대 설정이 가능한데, 이는 일반적인 1500 "MTU(한번에 전송가능한 최대 패킷 사이즈)"를 생각하면 65000일 경우 기본적으로 65,000 / 1500을 계산하면 약 43.X가 나오는데 올림 계산하여 한번의 명령으로 44개의 패킷이 발생된다. 물론 그에 대한 응답 또한 44개가 정상적으로 회신되어져 와야 한다.
  • 이 처럼 Tool을 이용하여서든, 혹은 bat명령어를 통해 ping의 정상적인 옵션을 이용하던 Ping의 크기를 늘려 과다한 패킷을 발생시킬 수 있다. 이러한 공격을 Ping of Death라고 한다.
  • 세부적으로 학습 시에는 Packet Dump등을 통해 OS를 추정한다거나, TTL을 이해한다거나 하는 요소를 세부적으로 설명할 예정.

다. SMURF

이 공격은 최근의 공격들을 보았을 때 무조건 * 100 이해해야 함이 옳다고 본다.

갑자기 왠 파란 꼬꼬마를 여기서 언급하느냐 라고 할 수 있는데, 최근 발생한 Memcached DrDoS 라던지, 각종 Amplified(증폭) 공격과 관련해서는 이 개념을 이해하면 훨씬 쉽게 접근(?) 할 수 있다고 판단된다.

여기서 Amplified

  • 증폭.png
    (이미지 출처 : 네이버 영어사전 검색 결과)

SMURF 공격 자체는 사실 같은 Broadcast 영역으로 한정된다. 하지만 이 또한 응용을 통해 전세계 공인IP로 연결된 모든 곳에는 "정상적인 통신 요청 방법"을 악용할 수 있는 형태로 응용되어져 있다.

SMURF 공격은

  • ICMP Request를 발생시킬 때, "출발지 주소= 요청자 주소"를 "Victim IP"로 조작하여 패킷을 발생시키며, 이 Request 패킷의 목적지는 "Broadcast 주소"이다.
  • 그로 인해 Class로 가정할 때, 최대 254개(0에서 255까지 "256"개의 IP 중 "0" Network Address, "255" Broadcast Address를 제외한 254개의 IP가 ICMP Request로 부터 응답할 수 있다.
  • 위의 "나" 항목에서 Ping of Death를 생각해보자.
  • 정상 명령어를 이용하여 입력한 Ping을 크기 수정을 통해 SMURF 공격을 발생시켰다면?
  • 단순 계산만 하더라도 65,000 / 1500 = 44개 라고 가정
  • 44 * 254 = 11,176개. bat등으로 혹은 단순 손으로 생성해낸다고 해도......규모가 큰 네트워크 환경일수록 서브넷을 업무별 용도별 등으로 분리해야 하는 경우는 이러한 무분별한 Broadcast 발생에 의한 네트워크 부하 증가도 고려대상이다.
  • 여튼 SMURF란 요청하지 않은 응답을 수신하며 그를 처리하다 서비스 거부에 빠지게 되는 공격을 말한다.

라. LAND Attack

  • LAND는 사전적 의미를 보면 명사와 동사로 구분된다.(영알못이라 그냥 네이버 어학사전 투척한다.)
  • 랜드.png(이미지 출처 : 네이버 영어사전 검색 결과)
  • 이 공격에서는 동사의 의미로 사용된 것으로 추정된다.
  • 자 이 공격은 간단하다. 우선 이 공격 또한 "주소"가 조작된 패킷이 유입되어 서비스 거부에 빠지게 되는 공격인데, "출발지 주소"와 "목적지 주소"를 "Victim" 주소로 하여 조작하여 패킷을 발생시키고, 이 패킷을 받은 Victim은 서비스 거부에 빠지게 되었었다.(현재는 단순 LAND IP 공격은 통하지 않는 다는 것.)
  • 하지만 늘 응용 공격을 생각할 필요가 있다. (정상적인 NTP 요청을 참고.)

마. TCP Syn Flooding

제일 설명이 길어질지도 모르는 공격 종류이다. 초기에 나는 이 공격을 단순히 Syn Flag가 활성화된 TCP 패킷이 과다로 유입되는 공격인줄로만 알았다. (물론 일부는 맞다.) 하지만 이를 완벽히 이해하기 위해서는 지겹게 들었던 3Way Handshaking을 반드시 이해해야 하고, 더불어 나아가서는 서버의 TCP 세션 정보(특히나 HTTP)의 저장 방법에 대한 내용도 이해할 필요가 있다.

  • 나중에 상세히 다시 분석하겠지만 우선 3Way Handshaking, TCP 방식의 통신을 하기 위해서 반드시 거쳐야 할 "세션 수립" 과정
  • 어떠한 TCP 데이터라도 이 과정을 거치지 않고 바로 TCP 통신에 대한 정보를 요청하거나 전달할 수는 없다.
  • 데이터를 상호 송수신 하기 위한 선행 과정이 3way Handshaking 이다.
  • 3Way와 공격의 개념은 다음과 같다.

1) 통신 요청자는 Syn Flag만 활성화된 TCP 패킷을 보낸다.

2) 서비스 제공자는 Syn에 대한 응답으로 Syn과 Ack에 대한 응답을 보낸다.

3) 통신 요청자는 Ack로 응답을 함으로써 상호간 TCP 세션 수립이 완성되며 데이터를 송수신 할 수 있다.

여기서 공격은 2번 항목에서 부터 이해를 요구하게 된다. Listen 중인 TCP Port라면 Syn+Ack으로 응답을 주게끔 되어 있다. 하지만 닫혀진 포트로 Syn 패킷이 유입되었다면, RST 패킷이 응답되어져 가 세션이 끊기게 되어있다.

  • 공격의 경우 Attacker는 Syn Flag 패킷만 과다로 보내는 데, 정상적으로 Listen 중인 Port로 요청이 유입될 때, 기존 서버는 해당 요청 정보를 바로 저장한다.(Backlog Queue라는 개념이 있다.)
  • 서버는 이 요청 정보를 Syn 만으로 저장하다보니 이후에 3Way가 이루어졌던, 이루어지지 않았던 정보를 저장하는 공간이 가득차버려 더이상 정상적인 요청을 대응할 수 없게 되는 것이다.(TCP의 구조 특성 상 패킷이 유입되었을 때 다음 패킷이 유입되기까지 대기 하는 시간이 있다.)
  • 이러한 점을 노려 Syn 만 과다로 발생 시키고, 최종적으로 Ack를 발생시키거나, 세션의 단절을 알리거나 하지 않는 행위로 Victim이 서비스를 정상적으로 제공할 수 없는 상태로 빠뜨리는 것이다.

바. Tear Drop

우선 "Tear"와 "Drop"의 사전적 의미를 보자.

  • 티어드랍.png
    (이미지 출처 : 네이버 영어사전 검색 결과)
  • 드랍.png
    (이미지 출처 : 네이버 영어사전 검색 결과)
  • 찢어버린다니...;
  • 구멍을 뚫고 떨어지다. 라는 의미로 이해해보자. 가 아니라 이건 그냥 톱니 바퀴를 연상해보자
  • 데이터가 전송될 때 앞에서 MTU에 의해서 패킷 하나가 전송할 수 있는 단위가 한정적이다. 라는 걸 언급하였다. 그렇다면 우리가 컴퓨터에서 사용되는 GB 급의 파일들은 어떻게 전송되는 것일까?
  • 물론, 네트워크로 전송될 때는 분할되어 잘개 잘개 쪼개어져서 전송된다. 그것을 다시 합쳐서 하나로 만드는 것.
  • 이때 이 잘개 잘개 쪼개진 애들이 하나로 합쳐지기 위해서는 "순서번호" 라는 것과 "데이터의 시작과 끝" 위치가 중요한데, 톱니바퀴는 그 톱니 아귀아귀 마다 "딱 딱" 맞춰져야만 돌아간다. 넘쳐도, 모자라도 정상적으로 돌아가지 않게 된다.
  • 데이터 전송 또한 마찬가지이다. "원래의 데이터가 분할되어 전송되고, 다시 수신자가 그 데이터를 원래의 데이터로 합쳐 원본 파일로 만들어내기 위해서는" 전송 된 데이터의 앞, 뒤 연결고리가 맞아떨어져야 한다.(정확하게)
  • 조작을 통해 Offset이라는 것을 수신자가 정상적으로 재 조합 하지 못하도록 하는 공격이 Tear Drop이다.
  • 결국 한줄로 요약하자면, 분할 전송된 데이터를 재조합하지 못하도록 조작된 패킷을 전송.

이렇게..DoS 의 기본적인 6가지 개념을 간단하게(?) 설명해 보았다.

여기 이 아주 오래된 개념 조차도 단어의 연결고리는 무한대에 가깝게 이어질 것이다...T_T

앞으로 주기적으로 포스팅을 할 예정이고, 기존의 네이버 블로그는 완전히 접었다.

오글거리는 자조적인 멘트 적으려다 여기서 이만.

파이썬도 공부해야되는데...

#DoS #DDoS #DrDoS #ARP #Spoofing #Ping of Death #SMURF #LAND Attack #TCP Syn Flooding #Tear Drop #MAC #Memcached #Amplified #Broadcast #backlog Queue #3way Handshaking #Listen Port

+ Recent posts