기본적인 ICMP Packet 분석
ICMP 패킷은 IP헤더 다음으로 ICMP Type, ICMP Code, ICMP Checksum 필드로 구성되어 있으며, 일부 ICMP 패킷은 정보나 메시지의 세부 사항을 제공하기 위해 추가적으로 ICMP Contents 필드를 포함한다.
ICMP Type | ICMP Code | ICMP Checksum |
ICMP Contents |
[그림.1 ICMP 패킷 구조]
특수한 경우에 사용되는 ICMP Contents 필드를 제외한 ICMP Type, ICMP Code, ICMP Checksum 필드에 대해 살펴 보자.
① ICMP Type
이 필드는 ICMP 메시지의 유형을 정의하며, ICMP 메시지 유형은 다음 표와 같다.
Type | Name |
0 | Echo Reply |
1 | Unassigned |
2 | Unassigned |
3 | Destination Unreachable |
4 | Source Quench |
5 | Redirect |
6 | Alternate Host Address |
7 | Unassigned |
8 | Echo |
9 | Router Advertisement |
10 | Router Solicitation |
11 | Time Exceeded |
12 | Parameter Problem |
13 | Timestamp |
14 | Timestamp Reply |
15 | Information Request |
16 | Information Reply |
17 | Address Mask Request |
18 | Address Mask Reply |
19 | Reserved (for Security) |
20-29 | Reserved (for Robustness Experiment) |
30 | Traceroute |
31 | Datagram Conversion Error |
32 | Mobile Host Redirect |
33 | IPv6 Where-Are-You |
34 | IPv6 I-Am-Here |
35 | Mobile Registration Request |
36 | Mobile Registration Reply |
37 | Domain Name Request |
38 | Domain Name Reply |
39 | SKIP |
40 | Photuris |
41 | ICMP messages utilized by experimental mobility protocols such as Seamoby |
42-255 | Reserved |
[표.1ICMP Type]
② ICMP Code
이 필드는 위의 ICMP Type들은 몇 가지의 Code를 가지고 있으며, 그 Code 값을 정의한다.
몇 가지 ICMP Type들의 Code값을 살펴보면 아래와 같다.
ICMP Type 3 : Destination Unreachable (목적지에 도달할 수 없음)
Codes | Description |
0 | Net Unreachable |
1 | Host Unreachable |
2 | Protocol Unreachable |
3 | Port Unreachable |
4 | Fragmentation Needed and Don't Fragment was Set |
5 | Source Route Failed |
6 | Destination Network Unknown |
7 | Destination Host Unknown |
8 | Source Host Isolated |
9 | Communication with Destination Network is Administratively Prohibited |
10 | Communication with Destination Host is Administratively Prohibited |
11 | Destination Network Unreachable for Type of Service |
12 | Destination Host Unreachable for Type of Service |
13 | Communication Administratively Prohibited |
14 | Host Precedence Violation |
15 | Precedence cutoff in effect |
ICMP Type 11 : Time Exceeded (시간 초과)
Codes | Description |
0 | Time to Live exceeded in Transit |
1 | Fragment Reassembly Time Exceeded |
더욱 자세한 코드 값에 대한 내용을 알고 싶다면, http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xml을 방문하여, 살펴 보기 바란다.
③ ICMP Checksum
이 필드는 ICMP 헤더의 손상 여부를 확인한다.
참고로 ICMPv6 내용을 알고 싶으면, http://www.iana.org/assignments/icmpv6-parameters를 방문하여, 살펴보기 바란다.
이제 실제로 와이어샤크(Wireshark)를 이용하여 캡쳐한 ICMP패킷을 보며, 위 내용을 바탕으로 패킷을 살펴 보자.
[그림.2]와 [그림.3]은 일반적인 ICMP Ping 테스트와 Tracerout의 내용이다.
[그림.2 Ping 요청]
[그림.2]의 내용을 살펴보면, ICMP Type 8번(Echo) 메시지를 보내며, ICMP Type 8번(Echo)에는 Code가 존재 하지 않기 때문에 Code는 0이라고 표시하였다.
[그림.3 Ping 응답]
Echo 대한 응답으로 ICMP Type 0번 (Echo reply) 메시지를 보내며, ICMP Type 0번(Echo reply) 또한 Code가 존재 하지 않기 때문에 Code는 0이라고 표시 하였다.
다음 [그림.4]은 ICMP Type은 3번이며, Code는 3번이다. 어떻게 해석하면 좋을지 생각해 보자.
[그림.4 해당 포트에 도달 할 수 없음]
결론은 해당 포트에 도달 할 수 없음을 의미한다. 즉, A라는 사람이 ICMP 패킷을 원하는 포트에 보냈을 때 그 포트가 Open이 되어 있지 않을 경우 [그림.4]와 같은 ICMP 패킷을 받는다. 이런 패킷이 다수 발생한다면, 서비스 구성상의 문제거나 UDP Port 스캔을 의심해 본다. 이렇듯 Type과 Code정보를 가지고, 해당 ICMP 패킷이 어떤 메시지를 알려주는지 확인할 수 있다.
참고
http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xml