정보 보안을 공부하면서 ICMP 프로토콜의 Type과 Code에 대한 정리와 암기에 대한 필요성을 느낌
ICMP란?
ICMP란 Internet Control Message Protocol의 약자로 네트워크 장치 간에 오류 메시지나 상태 정보를 전달하는 데 사용되는 프로토콜
메시지 유형을 의미하는 Type 필드와 유형별 세부 내용을 담고 있는 Code 필드로 이루어져 있음
기능
- Error-Reporting Message 기능
: 전송 중 오류 발생 시 에러 메시지를 생성하여 응답
- Query Message 기능
: 네트워크 상태를 진단하기 위한 쿼리 요청 및 응답 메시지 생성
프로토콜 구조

- Type(8 bits) : ICMP 메시지의 유형/용도
- Code(8 bits) : Type의 세부 내용으로 Type과 Code가 조합되어 ICMP 메시지의 목적과 용도를 나타냄
- CheckSum(16 bits) : ICMP 메시지 오류를 검사하기 위한 값
- Rest of the header : Type과 Code에 따라 추가되는 헤더
- Data section : 데이터가 위치하는 영역
주요 ICMP 메시지
Error-Reporting
Type3 [Destination Unreachable]
해당 목적지에 도달할 수 없음을 의미
목적지 도달 불가 사유에 따라 다양한 Code(상세 유형)으로 구성되어있음
Code 1 ( Host Unreachable )
: 최종 단계의 라우터가 목적지 호스트로 패킷 전송에 실패한 경우
Code 2 ( Protocol Unreachable )
: 목적지 호스트에서 특정 프로토콜을 사용할 수 없는 경우
Code 3 ( Port Unreachable )
: 목적지 호스트에 해당 UDP 포트가 열려있는 않은 경우, TCP의 경우에는 포트가 열려있지 않으면 TCP RST를 반환 함
Code 4 ( Fragmentation needed and don't fragment was set )
: IP 패킷의 단편화가 필요하지만 , IP 헤더의 Don't fragment(DF) 플래그가 설정되어 단편화 할 수 없는 경우
Type5 [Redirection]
라우팅 경로가 잘못되어 새로운 경로를 이전 경유지 또는 호스트에게 알려주는 메시지
- ICMP Redirection 공격 시 이용되는 메시지이기도 함
Type11 [Time Exceeded]
타임 아웃이 발생하여 IP 패킷이 폐기되었음을 알리는 메시지
타임아웃 사유는 Code를 통해 알 수 있음
Code 0 ( Time To Live exceeded in Transit )
: IP 패킷이 최종 목적지에 도달하기 전에 TTL값이 0이 되어 해당 패킷이 폐기되었음을 알리는 메시지
Code 1 ( Fragment reassembly time exceeded )
: IP 패킷 재조합 과정에서 타임아웃이 발생하여 해당 IP 데이터그램이 모두 폐기되었음을 알리는 메시지
- 일반적으로 IP 데이터그램의 일부 단편이 전송과정에서 손실된 경우 재조합에 실패하여 발생함
Query 메시지
: 별도의 Code는 없으며 이외의 쿼리 타입들은 거의 사용되지 않음
Type 8 [Echo Requset]
네트워크 장치 간에 연결이 제대로 되어 있는지 확인하기 위해 발송되는 메시지 ping 명령어 실행 시 목적지 호스트에 전송됨
Type 0 [Reply]
Echo Request에 대한 응답으로 전송되는 메시지 목적지 호스트가 Echo Request를 수신했음을 발신자에게 알림
ICMP 리다이렉트
ICMP Redirection 메시지(Type 5)를 이용하여 패킷 경로를 악의적으로 재설정하는 공격
- ICMP Redirection 메시지를 수신한 호스트는 자신의 라우팅 테이블에 특정 목적지로 나가는 gateway 주소를 변경함
- 이를 이용하여 공격자가 원하는 형태의 ICMP Redirection 메시지를 만들어 특정 목적지로 가는 패킷을 공격자로 향하도록 함
ARP Redirect와 차이점
ARP Redirect는 희생자의 ARP Cache Table정보를 변조하여 스니핑하는 것이고, ICMP Redirection는 희생자의 라우팅 테이블을 변조하여 스니핑한다는 차이점이 있음
대응방법
- ICMP Redirection 메시지에 의해 라우팅 테이블이 변겨되지 않도록 ICMP Reidirect 옵션을 해제
- 현재 대부분의 OS에서 보안상의 이유로 ICMP Redirection 옵션을 기본적으로 해제하고 있음
- 리눅스 커널 파라미터 중 ICMP Redirection 설정인 accept_redirects를 0으로 설정 (0 은 허용 안함)