본문 바로가기

정보보안/네트워크 보안

[네트워크 기본학습] ICMP 프로토콜

ICMP 프로토콜

① 개념

  • 3계층의 IP 프로토콜은 신뢰할 수 없는 프로토콜이라 전송상테에 대한 관리가 이루어지지 않는다.
  • 이러한 IP 프로토콜의 전송상태에 대한 관리를 해주는 것이 ICMP프로토콜이다.
  • IP 패킷 전송 중 에러 발생 시 에러 발생 원인을 알려주거나 네트워크 상태를 진단해주 는 기능을 제공해준다.
    • Error-Reporting Message 기능 : 전송 중 오류 발생 시 여러 메시지를 생성하여 송신자에게 응답
    • Query Message 기능 : 네트워크 상태를 진단하기 위한 쿼리 요청(ping) 및 응답 메시지 생성
  • ICMP 메시지는 메시지의 유형을 의미하는 Type 필드와 유형별 세부 내용을 담고 잇는 COde 필드로 구성이 된다.

 

② 구조

Type
(8bit)
Code
(8 bit)
Checksum
(16bit)
Rest of the header
Data section
  • Type : ICMP 메시지의 유형/용도
  • Code : Type의 세부내용. 같이 조합되어 ICMP의 목적과 용도를 나타낸다.
  • Checksum : ICMP 오류 검사 값
  • Rest of the header : Type 과 Code에 따라 추가되는 헤더
  • Data Section : 데이터가 위치하는 영역 

 

③ 주요 ICMP Error-Reportiong 메시지

  1. (Type 3) Destination Unreachable
    • 해당 목적지에 도달할 수 없음을 의미
    • 목적지 도달 불가 사유에 따라 다양한 Code로 구성되어있다.
      • Code 1(Host Unreachable) : 최종 단계의 라우터가 목적지 호스트로 패킷 전송에 실패
      • Code 2(Protocol Unreachable) : 목적지 호스트에서 특정 프로토콜을 사용할 수 없는 경우
      • Code 3(Port Unreachable) : 목적지 호스트에 해당 UDP 포트가 열려있지 않은 경우 (TCP는 TCP RST 패킷 반환)
      • Code 4(Fragmenatation needed and don't fragment was set) : IP 패킷의 단편화가 필요하지만 IP 헤더의 Don'tfragment(-1-) 플래그가 설정도어 단편화할 수 없는 경우 라우터에 의해 반환
  2. (Type 5) Redirection
    • 라우팅 경로가 잘못되어 새로운 경로를 이전 경유지 또는 호스트에게 알려주는 메시지
    • ICMP Redirect 공격 시 이용하는 메시지
  3. (Type 11) Time exceeded
    • 타임아웃이 발생하여 IP 패킷이 폐기되었음을 알리는 메시지
    • 타임아웃 사유는 Code를 통해 알 수 있다.
      • Code 0(Time to Live exceeded in Transit) : IP 패킷이 최종 목적지에 도달하기 전에 TTL 값이 0이 되어 해당 패킷이 폐기되었음을 알리는 메시지
      • Code 1(Fragment reassembly time exceeded) : IP 패킷 재조합 과정에서 타임아웃이 발생하여 해당 IP 데이터그램이 모두 폐기되었음을 알리는 메시지. 일반적으로 IP 데이터그램의 일부 단편이 전송 과정에서 손실될 경우 재조합에 실패하여 발생

④ 주요 ICMP Query 메시지

  1.  Echo Request(Type 8) and Reply(Type 0)

 

⑤ 관련 공격

  • ICMP 리다이렉트 공격
    • ICMP Redirection(Type 5)를 이용해 패킷 경로를 악의적으로 재설정하는 공격
    • ICMP Redirection 메시지를 수신한 호스트는 자신의 라우팅 테이블에 특정 목적지로 가는 gateway 주소를 변경하는데 공격자는 이를 이용하여 자신이 원하는 형태의 ICMP Redirection 메시지를 만들어 특정 목적지로 가는 패킷을 공격자로 향하도록 한다.
    • ARP 리다이렉트와 차이는 ARP Redirect는 희생자의 ARP Cache Table 정보를 변조하여 스니핑 하는 것이고, ICMP Redirect 는 희생자의 라우팅 테이블을 변조하여 스니핑하는 차이가 있다.
    • 변조된 게이트웨이 주소를 확인하려면 netstat -rn 을 통해 확인이 가능하며, 실제 default gateway가 공격자의 IP로 위조된 경우 ICMP 리다이렉트 공격을 받은 것이다.
    • 대응방법 : ICMP Redirect 옵션을 해제한다. (기본적으로 요즘 OS에는 다 되어있음) , 리눅스의 경우 accept_redirects=0으로 설정.