→ ICMP를 사용하면 에러 메시지 전달과 네트워크 연결상태( 거의 연결 여부만) 등을 확인할 수 있다.
ping
traceroute (윈도우 에서만!!!, 리눅스에서는 UDP를 사용한다)
1번 홉 → 라우터1 IP
2번 홉 → 라우터2 IP
3번 홉 → 라우터3 IP
...
ICMP 응답을 기반으로 구성한 경로를 알 수 있다.
주의 : 리눅스에서는 traceroute할 때 udp를 사용한다.
ICMP는 정보를 알려주는 역할이라서 공격자 입장에서 매우 유용함
ping을 하게 되면 살아있는 호스트들은 ICMP echo reply을 주기 때문에 ping을 통해 아이피 대역을 훑으면서 살아있는 호스트들을 탐지할 수 있다.
따라서 보안목적으로 ping을 막아두기도 한다.
traceroute도 중간 라우터들의 ip를 알 수 있게 되기 때문에 네트워크 구조도 들킬 수 있다.
따라서 보안 목적으로 네트워크 구조를 숨김.
추가적으로 ping Flood같은 DDOS공격은 ICMP Echo request기반으로 오기 때문에 해당 공격등을 막기 위해서도 ICMP를 차단하거나 제한하기도 한다.
# eth0 인터페이스에서 목적지가 내 IP인 ICMP 패킷을 캡처하고, 결과를 icmp.pcap 파일로 저장
# -i eth0 : 캡처할 네트워크 인터페이스 지정
# icmp : ICMP 패킷만 필터링 (ping 등)
# dst host <내 IP> : 목적지가 내 IP인 패킷만 캡처
# -w icmp.pcap : 캡처한 패킷을 icmp.pcap 파일로 저장 (Wireshark 등으로 분석 가능)
sudo tcpdump -i 캡쳐할인터페이스 icmp and host <내 IP> -w icmp.pcap

다른 호스트에서 ping 172.32.0.158로 패킷을 보냈고, 정상적으로 받았다.
저장된 icmp.pcap을 와이어 샤크에서 확인해보자

ICMP request와 ICMP reply가 차례대로 와있는것을 볼 수 있다.