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

打印 上一主题 下一主题

主题 532|帖子 532|积分 1596

 • ICMP协议介绍

 
一、定义


  

  • 网际控制报文协议ICMP(Internet Control Message Protocol),是一种面向无连接协议,用于传输出错报告控制信息;
  • 在TCP/IP协议簇中是一个重要子协议,通常被IP层或者更高层协议(TCP/UDP)使用,属于网络层协议;
  • 主要用于IP主机和路由器之间传递控制消息,包括网络通不通,主机是否可达,路由是否可用等网络状态。
举例:ping 和 tracert是两个常用网络管理命令,ping 用来测试网络可达性,tracert 用来显示到达目的主机的路径。ping和 tracert 都利用 ICMP 协议来实现网络功能,它们是把网络协议应用到日常网络管理的典型实例。
 
二、原因 


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

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



  • Type (类型):标识ICMP报文的类型;占用1字节
  • Code(代码):标识对应ICMP报文的代码,它与类型字段一起共同标识了ICMP报文的详细类型;占用1字节
  • Checksum(校验和):对包括ICMP报文数据部分在内的整个ICMP数据报的校验和,以检验报文在传输过程中是否出现了差错,其计算方法和IP报头中的校验和计算方法一致;占用2字节
  • Header Other(首部其他部分):根据不同的报文类型而有不同的格式,有的是全0,有的则有其他的特殊格式。占用4字节,ICMP始终有8个字节的头部长度
  • Packet Content(数据部分):不同类型和子类型有不同的内容,占用4字节
 

目前定义类型详见下表,从类型值来看ICMP报文可以分为两大类:第一类是差错报文,第二类是查询报文
 
TypeCode描述报文类型0-Echo响应0Echo响应报文查询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请求0Echo请求报文查询9-路由器通告0路由通告报文查询10-路由器请求0路由器的发现/选择/请求报文查询11-ICMP超时0TTL超时报文差错 1分片重组超时报文差错12-参数问题0IP报首部参数错误报文差错 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的相关数据部分


 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

干翻全岛蛙蛙

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表