일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Operating System
- Shell code
- wargame
- 네트워크
- PWN
- 웹해킹
- OS
- Buffer Overflow
- System
- system hacking
- stack overflow
- Spring Framework
- 운영체제
- Lord of BOF
- pwnable
- 정보보안기사 실기
- Spring
- 해킹
- webhacking.kr
- SQL
- Payload
- Pwnable.kr
- 정보처리기사 실기
- hacking
- 워게임
- BOF
- LOB
- 정보보안기사
- webhacking
- Spring MVC
- Today
- Total
DongDD's IT
ICMP - ICMP message, error reporting, query message 본문
ICMP
ICMP
- Network Layer에 있는 protocol 중 하나
- error reporting, query message에 사용되는 protocol
- Router가 packet을 버리는 경우나 error로 인해 제대로 전송되지 않았을 때 Sender에게 알려주기 위해 사용
다른 프로토콜과 같은 형태로 IP data부분에 ICMP message가 들어가고 header가 붙으면서 encapsulation됨
ICMP Message
ICMP도 다른 Protocol과 비슷한 형태로 구성되어 있음
error가 발생했을 때 report하기 위해 이러한 형태로 ICMP packet을 구성한다.
1) 왼쪽 IP header : source address를 통해 어디서 error가 발생한지 알 수 있음
2) ICMP Type : error의 종류를 알 수 있음
3) IP header : 원래 보내려던 곳의 IP address를 알 수있음 (어떤 IP에 보내려한 것이 error가 났는 지 알 수 있음)
4) 8 bytes : TCP header부분의 8bytes를 의미
-> 어떤 application(port)에 보내려했는지 알 수 있음
-> sequence number를 보고 몇 번째 packet이 전송 실패했는지 알 수 있음
1. Error-reporting message
1) Destination-unreachable (Type 3)
- 여러가지 원인에 의해 error가 발생할 때 reporting 해줌
-> strcit-source 옵션 사용 시 기재된 route를 갈 수 없을 때 packet을 버리고 ICMP 전송
-> no fragmentation 옵션 사용 시 MTU로 인해 더 이상 분할 없이 갈 수 없을 때 버리고 ICMP 전송
-> link가 깨져서 더 이상 전송할 수 없을 때 ICMP 전송
-> destination의 port가 열리지 않았을 경우 ICMP 전송
-> 이러한 종류를 Code number를 통해 알 수 있음
2) Source-quench (Type 4)
- 네트워크가 Congestion(혼잡)인 경우 packet을 버리고 ICMP를 전송
-> TCP에서는 혼잡 제어를 하고 Layer 3에서는 ICMP를 통해 보고만 함
3) Time-exceeded (Type 11)
- Router가 TTL을 감소시킨 후 0이 됐을 때 packet을 버리고 ICMP 전송
- destination에서 모든 fragment가 도착하지 않은 채로 time-out 됐을 때 모든 fragment를 버리고 ICMP 전송
4) Parameter-problem (Type 12)
- IP헤더에 문제가 있을 때 packet을 버리고 ICMP 전송
5) Redirection message
- 위와 같이 A->B로 전송할 때 R2를 거치면 빠르지만 R1을 거쳐서 packet을 돌아가는 경우 ICMP를 이용해 rediection이 가능함
- R1으로 packet이 온 경우 R1 router가 source에게 R2로 가라는 경로를 알려줌
-> ICMP를 통해 routing table 수정
- 같은 local network에서의 잘못된 경로만 detect 가능
2. Query message
1) echo-request message (Type 8 : request, Type 0 : reply)
- host나 router가 보낼 수 있음
- 상대방 network를 확인할 때 사용(Network Layer 작동 여부)
- 흔히 알고 있는 ping이라는 프로그램이 이 원리를 사용함(echo request, echo reply)
2) Timestamp message (Type 13 : request, Type 14 : reply)
- Network Layer에서 RTT를 측정할 때 사용함
- Original timestamp, Receive timestamp, Transmit timestamp가 들어 있음
- Receive - Original을 통해 Network에서 걸린 시간 측정 가능
- timestamp message를 통해 두 개의 다른 기기의 클락을 동기화시킬 수 있음
ICMP Debugging tool
1. ping
- timestamp를 이용해 RTT측정을 할 수 있게 해주는 툴
2. traceroute
- TTL을 하나씩 늘려가며 해당 경로에 있는 router들의 주소를 알 수 있음
- TTL = 1 -> 첫 번째 hop에서 ICMP 전송, TTL = 2 -> 두 번재 hop에서 ICMP 전송
-> ICMP를 이용한 공격이 많아 현재는 막아놓은 곳이 많아서 ICMP 사용이 어려울 수 있음