一、ICMP功能介绍
ICMP(Internet Control Message Protocal)是一种差错和控制报文协议,不仅用于传输差错报文, 还传输控制报文,但是ICMP只是尽可能交付,提供的服务是无连接、不可靠的,并不能保证数据包可以成功的抵达目的地,同样的ICMP也没有验证机制,这也给了攻击者可乘之机。
ICMP的信息是通过IP协议进行传输,它是一种网络层协议,它对网络信息进行一种反馈,主要功能可以概括为①确认数据包可以送往目的IP地址 ②报告IP数据包无法送往的原因。
ICMP有两个非常重要的工具—ping和traceroute,下面小编将介绍这两种工具的具体用法以及工作流程。
二、ping命令及其相关问题
1、工作流程
ping 命令会发送一份ICMP回显请求报文(ICMP Echo Request)给目标主机,并等待目标主机返回ICMP回显应答(ICMP Echo Reply)。ICMP协议要求目标主机在收到请求消息之后,必须返回ICMP应答消息给源主机,基于这一点,如果源主机在一定时间内收到了目标主机的应答,则表明两台主机之间网络是可达的。但是这也同样使得黑客能发动Dos攻击,这一点我们在后面会讲述其过程。
总而言之,ping是用来探测网络中两台主机之间是否可达的工具,ping工具的运行流程如下:
①.源主机ICMP协议工作
假设有两台主机,小李的主机IP地址为192.168.4.1,小伍的主机IP地址为192.168.4.2,小李想知道网络是否可达小伍的主机,于是他在自己windows主机的cmd上输入命令:ping 192.168.4.2。输入该命令后,主机A会构建一个 ICMP的请求数据包(ICMP Echo Request),然后 ICMP协议会将这个数据包以及目标IP192.168.4.2等信息一同交给IP层协议;
②.IP层工作
IP层协议得到这些信息后,将源地址192.168.4.1、目标地址192.168.4.2、再加上一些其它的控制信息,构建成一个IP数据包;
③.数据链路层工作
IP数据包构建完成后,还需要通过ARP协议找到相应的MAC地址,并且把目标地址与源地址的MAC地址一并交给数据链路层,组装成一个数据帧,将它们传送出出去;
④.目标主机ICMP协议工作
当小伍的主机收到这个数据帧之后,会首先检查它的目标MAC地址是不是本机,如果是就接收下来处理,否则直接丢弃。接收之后会检查这个数据帧,将数据帧中的IP数据包取出来,交给本机的IP层协议,然后IP层协议检查完之后,再将ICMP数据包取出来交给ICMP协议处理,当这一步也处理完成之后,就会构建一个ICMP应答数据包ICMP Echo Reply,回发给小李的主机;
⑤.计算时间并显示结果
在一定的时间内,如果小李的主机收到了应答包,则说明它与小伍的主机之间网络可达,如果没有收到,则说明网络不可达。除了监测是否可达以外,还可以利用应答时间和发起时间之间的差值,计算出数据包的延迟耗时,如下图“时间=xxx”所示。
2、几种常见的ICMP报文类型
通过上述ping工具的介绍,我们知道了两类ICMP报文,ICMP Echo Request报文以及ICMP Echo Reply报文,其中ICMP Echo Request的类型值为8,ICMP Echo Reply的类型值为0。但其实ICMP不仅仅只有这两种报文,这两种报文都是属于ICMP中的询问报文,其余的ICMP报文类型小编总结如下:
①.差错报告报文
类型值为3时:表示终点不可达,顾名思义也就是说IP数据包送不到对方手上。
类型值为4时:表示源点抑制,意思是说,送的太快了,希望对方能慢点送过来。
类型值为11时:表示超时,与源点抑制相反,这个是嫌弃对方送的太慢了。
类型值为5时:表示路由重定向,告知对方下次应将数据报发送给另外的路由器。
类型值为12时:表示参数问题,路由器或目的主机收到的数据报的首部中的字段的值不正确时,就丢弃该数据报,并向源站发送参数问题报文
②.询问报文
类型值为8或者0时:表示回送(Echo)请求或应答。
类型值为13或14时:表示时间戳(Timestamp)请求或应答。
注意:以下情况下,并不会产生差错报告报文!
1.ICMP差错报文,例如ICMP源点抑制报文超时了,此时不会再额外发送一条ICMP报文告知超时的差错。但是ICMP查询报文可能会产生ICMP差错报文!
2.目的地址是广播地址或多播地址的IP数据报
3.作为链路层广播的数据报,这两条都是说的广播
4.不是IP分片的第一片,只有第一片出错才会产生差错报告报文
5.源地址不是单个主机的数据报。即源地址不能为零地址、环回地址、广播地址或多播地址。
3、ICMP Dos攻击
A.第一类ICMP Dos攻击针对带宽,是利用无用的数据来耗尽网络带宽 ,如ICMP Smurf,Smurf在IP协议安全协议的那篇文章中讲解过,都是伪造受害主机的源地址,向网络的广播地址发送大量的ping包,目标系统都很快就会被大量的echo reply信息淹没。
ICMP Dos的工作原理是ICMP协议要求目标主机在收到请求消息之后,必须返回ICMP应答消息给源主机,不理解的同学可以看看小编的这篇文章:
网络安全·第一天·IP协议安全分析-CSDN博客
B.第二类ICMP Dos攻击针对连接,这类方法可以终止现有的连接,如Nuke,通过发送一个伪造的类型为3的ICMP终点不可达的差错报告报文来终止合法的连接。
4、ICMP重定向攻击
这个攻击与IP源路由欺骗很相似,黑客利用类型值为5的ICMP路由重定向差错报告报文来改变主机的路由表。自己伪装成路由器,向目标机器发送重定向消息,使目标机器的数据报发送至自己的主机上,从而实现监听、会话劫持或拒绝服务攻击。
5、死亡之ping
这类攻击像极了小朋友耍赖的方式,给大家讲一个我小时候的经历,小编在初中时,同学们都有自己的小帮派,我当时想融入其中一个小帮派,并且被这个小帮派拉入了qq群中。但是后来,这个小帮派里面的人对我都不大友好,总是拉偏架,我在qq上争不过他们,于是就开始了“刷屏”,来恶心他们。当时qq的一条消息最长大概是四千多个字,小编长按句号键,直到抵达字数上限后发出。就这么发了几条长信息之后,群里的那些人崩溃了,他们的手机也变得一卡一卡的,小编也成功的被移除了群聊。
死亡之ping的原理同样是刷屏,不断的给目标主机发送长度为65500字节的ping报文,对方阅读这条消息时带宽会有所损耗,当多条很长的ping报文发过去时,会将目标主机的带宽消耗殆尽,从而崩溃。
6、ICMP类攻击的防范
首先,Nuke与重定向攻击都是利用的ICMP差错报告报文,我们可以阻止其它类型的ICMP通信,这可以在一定程度上防范ICMP出错。同时,还可以设置允许向外(目标为单台主机)发送 ICMP 响应请求,并允许向内发送响应答复消息(目标为预先定义的主机)。说白了就是,只允许本主机ping别人,而不允许别人ping自己,颇有种宁教我负天下人,休教天下人负我的意思。
三、traceroute命令
traceroute是常用的网络排错工具,用于定位数据包在转发的过程中,经过了哪些路由器,并告知主机每一跳路由器的ip地址。在windows的环境下,如果我们想追踪ip地址为192.168.4.2的主机,则相应的命令的格式为:tracert 192.168.4.2
traceroute的原理是:主机首先发出 TTL=1 的3个UDP数据包,抵达第一个路由器后,将 TTL 减1,此时TTL的值为0,不再继续转发此数据包,而是返回一个ICMP超时差错报文,主机可以从超时报文中提取出数据包所经过的第一个网关地址。然后又发出一个TTL=2的3个UDP数据包,可利用ICMP超时报文获得第二个网关地址,依次递类推,逐渐增加TTL的值,主机便可以获取沿途所有网关的地址。
好的,本期的博客到这里就结束啦,如果觉得小编写的还不错,麻烦给小编一个免费的点赞和收藏可以吗?