ICMP隐蔽隧道攻击分析与检测(一)

 • ICMP协议介绍


 

一、定义

  

  1. 网际控制报文协议ICMP(Internet Control Message Protocol),是一种面向无连接协议,用于传输出错报告控制信息;
  2. 在TCP/IP协议簇中是一个重要子协议,通常被IP层或者更高层协议(TCP/UDP)使用,属于网络层协议;
  3. 主要用于IP主机和路由器之间传递控制消息,包括网络通不通,主机是否可达,路由是否可用等网络状态。

举例:ping 和 tracert是两个常用网络管理命令,ping 用来测试网络可达性,tracert 用来显示到达目的主机的路径。ping和 tracert 都利用 ICMP 协议来实现网络功能,它们是把网络协议应用到日常网络管理的典型实例。

 

二、原因 

  1. 由于IP协议数据传输天然存在不可靠无连接等特点,为了解决数据传输出现的问题,引入了ICMP协议;
  2. 这些控制消息并不传输用户数据,但是对于收集各种网络信息、诊断和排除各种网络故障以及用户数据的传递具有直观重要的作用;
  3. 在数据传输的过程中,IP提供尽力而为的服务,为了把数据包发送到目的地址尽最大努力,它并不对目的主机是否收到数据包进行验证,无法进行流量控制和差错控制。因此在数据包传输过程中,产生各种错误在所难免,为了更有效的转发IP数据包,提供数据包交付成功寄回,ICMP应运而生。

 

思考1:ICMP协议介于传输层和网络层之间,通常被IP层或者更高层协议(TCP/UDP)使用,那为啥属于网络层而不是传输层?

  1. ICMP 报文被封装在IP数据报中,作为IP数据报的数据部分,通过互联网传递
  2. 传输层协议关注从端到端发送数据并确保可靠性,而ICMP目的是确保将数据路由到正确的位置,实际上并不路由数据

 

三、ICMP数据帧

  • Type (类型):标识ICMP报文的类型;占用1字节

  • Code(代码):标识对应ICMP报文的代码,它与类型字段一起共同标识了ICMP报文的详细类型;占用1字节

  • Checksum(校验和):对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错,其计算方法和IP报头中的校验和计算方法一致;占用2字节

  • Header Other(首部其他部分):根据不同的报文类型而有不同的格式,有的是全0,有的则有其他的特殊格式。占用4字节,ICMP始终有8个字节的头部长度

  • Packet Content(数据部分):不同类型和子类型有不同的内容,占用4字节

 

目前定义类型详见下表,从类型值来看ICMP报文可以分为两大类:第一类是差错报文,第二类是查询报文

 

Type
Code
描述
报文类型
0-Echo响应 0 Echo响应报文 查询
3-目的不可达 0 目标网络不可达报文 差错
  1 目标主机不可达报文 差错
  2 目标协议不可达报文 差错
  3 目标端口不可达报文 差错
  4 要求分段并设置DF flag标志报文 差错
  5 源路由失败报文 差错
  6 未知的目标网络报文 差错
  7 未知的目标主机报文 差错
  8 源主机隔离报文 差错
  9 禁止访问的网络报文 差错
  10 禁止访问的主机报文 差错
  11 对特定的TOS网络不可达报文 差错
  12 对特定的TOS主机不可达报文 差错
  13 由于过滤 网络流量被禁止报文 差错
  14 主机越权报文 差错
  15 优先权终止生效报文 差错
5-重定向 0 重定向网络报文 差错
  1 重定向主机报文 差错
  2 基于TOS的网络重定向报文 差错
  3 基于TOS的主机重定向报文 差错
8-Echo请求 0 Echo请求报文 查询
9-路由器通告 0 路由通告报文 查询
10-路由器请求 0 路由器的发现/选择/请求报文 查询
11-ICMP超时 0 TTL超时报文 差错
  1 分片重组超时报文 差错
12-参数问题 0 IP报首部参数错误报文 差错
  1 丢失必要选项报文 差错
  2 不支持的长度报文 差错
13-时间戳请求 0 时间戳请求报文 查询
14-时间戳应答 0 时间戳应答报文 查询
15-信息请求 0 信息请求报文 查询
16-信息应答 0 信息应答报文 查询

 

四、ICMP请求/应答帧格式

 

Type(类型):表示ICMP报文类型,8表示Echo(ping)request

 

 0表示Echo(ping)reply

 

Code(代码):标识对应ICMP报文的代码,它与类型字段一起共同标识了ICMP报文的详细类型

 

Checksum(校验和):对ICMP报文数据部分在内的整个ICMP数据报的校验和

 

Identifier(标识符):用于表示ICMP进程,占用2字节(单进程内请求与应答报文Identifier字段保持一致 

 

Sequence Number(序列号):用于关联请求报文和应答报文(对应请求和应答报文的序列号相同),占用2字节

 

思考2:Identifier和Sequence number为何有BE、LE之分?

wireshark考虑到window系统与Linux系统发出的ping报文(主要指ping应用字段而非包含IP头的ping包)的字节顺序不一样(windows为LE:little-endian byte order,Linux为BE:big-endian),为了体现wireshark的易用性,开发者将其分别显示出来。

 

Packet Content(数据部分):标识ICMP的相关数据部分

 

posted @ 2023-03-31 10:59  巴韭特  阅读(552)  评论(0编辑  收藏  举报