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 패킷이 발생될 경우 차단하는 형태로 방어를 할 수 있는 부분들이다.


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



+ Recent posts