ICMP漏洞及防范

1 ICMP简介
ICMP全称Internet Control Message Protocol(Intemet控制报文协议),该协议是TCP/IP协议族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制报文。控制报文是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时会自动发送 ICMP报文。我们可以通过Ping命令发送ICMP回应请求报文(ICMP Echo-Request)并记录收到ICMP回应回复报文(ICMP Echo-Reply)。通过这些报文来对网络或主机的故障提供参考依据。ICMP是用IP封装和发送的,用来向IP和高层协议通报有关网络层的差错和流量控制情况,所有的路由器和主机都支持此协议。
1.1 ICMP报文

0:回应应答 3:目的不可达
4:源抑制 5:路由重定向
8:回应请求
11:分组超时 14:时间戳应答
17:地址掩码请求
18:地址掩码应答

ICMP报文的封装:封装在IP数据报中,如下图:

1.2 ICMP回应请求和应答

ICMP的请求、应答报文是一种双向信息查询报文,用于获取某些有用信息,以便进行故障诊断的网络控制。请求、应答报文共有3对。
①回应请求/应答报文(类型8/0):检测目的站点的可达性与状态。信源机向目的机传送一个回应请求报文,其中包含一个任选的数据区。目的机接收到请求报文后,向信源机发送相应的回应应答报文,其中包含了请求报文中的任选数据区的拷贝。如果成功地接收到正确的应答报文,则说明网络的分组转发和路由选择功能是正常的。在Unix等许多操作系统中,Ping命令的实现就是利用该报文实现的。
②时间戳请求与应答报文(类型13/14):在网络中实现时间同步和分组传送时间的估计。利用该报文可以估计两个结点之间的机器时间差,以便进行同步。但是,由于TCP/IP网络分组传送的随机性。用这种方式进行测量和同步是很不准确的。
③地址掩码请求与应答报文(类型17/18):用于获取目的主机所在网络的子网掩码,用于无盘系统在引导过程中获取自己的子网掩码。
1.3 ICMP差错报告
差错报告是单方向的:由路由器向信源主机报告(如图1)。对ICMP差错报文进行响应时,不会生成另一份ICMP差错报文,否则会永远循环下去。
1.ICMP差错报告类型:
①目的地不可达报告:网络不可达、主机不可达、协议和端口不可达等(见图4)
②超时报告
③参数出错报告

2.ICMP差错报告的能力是有限的:
①ICMP实现网络中诊断信息的交换,并不能提高IP分组传输的可靠性。仅仅是报告了网络的问题;
②ICMP提供差错报告的功能,但并没有严格规定对于某种差错应该采取何种差错处理措施 ;
③路由器并不能发现所有的传输错误。
1.4 ICMP源抑制(类型4)(Source Quench)
通过限制信源主机发送IP分组的速率来降低拥塞的方法。
源抑制的三个阶段:路由器发现拥塞,并向源端发送ICMP源抑制报文;信源主机逐步降低发往目的主机的分组发送速率;拥塞解除后,信源主机逐步恢复原有的分组发送速率。
1.5 ICMP重定向(类型5)
在转发分组时路由器同时检查被转发分组。一旦发现其使用非最优路径.则向信源发送重定向报文,指出去往目的端的最佳路径。重定向机制用于同一个网络中的主机和路由器之间。
TCP/IP网中路由选择是由路由器和主机上的路由表决定,而路由表示反映了网络的拓扑结构。网络拓扑发生变化时,路由表也需要根据网络中新的路由信息来进行相应的调整。路由器获得路由信息的方法是利用路由协议,在路由器之间定期交换路由信息。而主机获得路由信息的方法是利用ICMP的重定向报文。
主机在启动时其缺省的路由表(通常保存在缓存中)通常不是最优的,网络变化的信息也应该通知给主机。ICMP重定向机制给主机提供了一种获得网络配置信息的机制。
2 基于ICMP的攻击
ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。
2.1 Ping of Death
黑客利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“Ping of Death”(死亡之Ping)攻击。“Ping of Death”攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致 TCP/IP堆栈崩溃,致使主机死机。
2.2 ICMP攻击导致拒绝服务(DoS)攻击
向目标主机长时阃、连续、大量地发送ICMP数据包,也会最终使系统瘫痪。它的工作原理是利用发出ICMP类型8的echo-request给目的主机,对方收到后会发出中断请求给操作系统,请系统回送一个类型0的echo-reply。大量的 ICMP数据包会形成“ICMP风暴”或称为“ICMP洪流”,使得目标主机耗费大量的CPU资源处理,疲于奔命。这种攻击被称为拒绝服务(DoS)攻击,它有多种多样具体的实现方式。
1.针对宽带的DOS的攻击
主要是利用无用的数据来耗尽网络带宽。通过高速发送大量的ICMP echo -reply数据包,目标网络的带宽瞬间就会被耗尽,组织合法的数据通过网络。ICMP echo-reply数据包具有较高的优先级,在一般情况下,网络总是允许内部主机使用Ping命令。
2.针对连接的DOS攻击
针对连接的DOS攻击,可以终止现有的网络连接。它使用合法的ICMP消息影响所有的IP设备。Nuke通过发送一个伪造的ICMP Destination Unreachable或Redirect消息来终止合法的网络连接。更具恶意的攻击如puke和smack,会给某一个范围内的端口发送大量的数据包,毁掉大量的网络连接,同时还会消耗受害主机CPU的时钟周期。
3.Smurf攻击
首先,攻击者会先假冒目的主机(受害者)之名向路由器发出广播的ICMP echo-request数据包。因为目的地是广播地址,路由器在收到之后会对该网段内的所有计算机发出此ICMP数据包,而所有的计算机在接收到此信息后,会对源主机(亦即被假冒的攻击目标)送出ICMP echo-reply响应。如此一来,所有的 ICMP数据包在极短的时间内涌入目标主机内,这不但造成网络拥塞,更会使目标主机因为无法反应如此多的系统中断而导致暂停服务。除此之外,如果一连串的ICMP广播数据包洪流(packet flood)被送进目标网内的话,将会造成网络长时间的极度拥塞,使该网段上的计算机(包括路由器)都成为攻击的受害者。
1)下面详细介绍Smurf攻击的过程:
1>黑客锁定一个被攻击的主机(通常是一些Web服务器);
2>黑客寻找可做为中间代理的站点,用来对攻击实施放大(通常会选择多个, 以便更好地隐藏自己,伪装攻击);
3>黑客给中间代理站点的广播地址发送大量的ICMP包(主要是指Ping命令的回应包)。这些数据包全都以被攻击的主机的IP地址做为IP包的源地址;
4>中间代理向其所在的子网上的所有主机发送源IP地址欺骗的数据包;
5>中间代理主机对被攻击的网络进行响应。
举例解释一下:假设黑客拥有调制解调器,或者其它的能快速上网方式,能以1Mbps的速度向中间代理机器发送ICMP数据包;再假设中间代理站点有150台主机对这些ICMP包做出了反应。这样,一下子就有150Mbps的攻击数据从中间代理拥向被攻击的主机。黑客可以控制这个过程直到他自己连接到中间代理机器上,并且控制中间代理持续向被攻击主机发送ICMP包。
2)如何防止网络遭受Smurf攻击:
首先,通过在路由器上使用输出过滤,就可以滤掉源欺骗的IP数据包,从而阻止从网络中发起的Smurf攻击。在路由器上增加这类过滤规则的命令如下:
Access-list 100 permit IP {你的网络号} {你的网络子网掩码} any
Access-list 100 deny IP any any
在你局域网的边界路由器上使用这一访问列表的过滤规则,就可以阻止你的网络上的任何人向局域网外发送这种源欺骗的IP数据包。
其次,停止你的网络做为中间代理。如果没有必须要向外发送广播数据包的情况,就可以在路由器的每个接口上设置禁止直接广播,命令如下:
no ip directed-broadcast
还有,如果你的网络比较大,具有多个路由器,那么可以在边界路由器上使用以下命令:
ip verify unicast reverse-path
让路由器对具有相反路径的ICMP欺骗数据包进行校验,丢弃那些没有路径存在的包。最好是运行Cisco快速转发(Cisco Express Forwarding ,CEF)或者其它相应的软件。这是因为在路由器的CEF表中,列出了该数据包所到达网络接口的所有路由项,如果没有该数据包源IP地址的路由,路由器将丢弃该数据包。例如,路由器接收到一个源IP地址为1.2.3.4的数据包,如果CEF路由表中没有为IP地址1.2.3.4提供任何路由(即反向数据包传输时所需的路由),则路由器会丢弃它。
3)遭受Smurf攻击时的防护:
如果你的主机不幸成为了Smurf攻击的目标,在这儿可以找到很多种方法来限制这种拒绝服务攻击造成的影响。在最近新进修改的Cisco IOS操作系统中,被访问列表所拒绝的数据包直接就被丢弃(其丢弃速度几乎接近于硬件速度)。不过每秒钟每个列表行有两个数据包例外,这就是向中间代理回送ICMP不可达消息的数据包。因此,如果你不想做为别人Ping的目标,那么在边界路由器上就直接可以阻塞掉。激活这个列表的命令是:
ip icmp rate-limit unreachable
如果必须允许Ping命令,你可以通过使用命令访问速率(Committed Access Rate ,CAR)来限制ICMP的流量。以下列出了其它Cisco IOS的例子:
config t
Access-list 100 permit icmp any{你的网络号}{你的网络子网掩码} echo-reply
Access-list 100 permit icmp any {你的网络号}{你的网络子网掩码}echo Interface e1
Rate-limit input access-group 100 512000 8000 8000 conform action transmit exceed action drop
这个例子限制ICMP的传输速率不能超过512Kbps,突发速率不能超过8000bits。所有多出的包将被丢弃。可以有多个速率限制命令同时添加到一个接口上,可以对不同的数据包进行不同的速率限制。
4)查找黑客:
对发起Smurf攻击的机器的定位非常困难,但并不是不可能的。为了跟踪这类拒绝服务攻击的真正源头,可以采取以下几步:
确定中间代理的IP地址空间,并与他们的网络管理员取得联系。记住你看到的这些包是从中间代理那儿来的,并不是从真正黑客处来的。那些以被攻击的主机的IP地址为源IP地址的进入该网络的数据包,就是黑客使用的源地址欺骗数据包。
从这些数据包上取得源IP地址欺骗的物理地址,并用这些物理地址做一下ip arp(适用于Cisco IOS),得到的结果就是源IP地址欺骗来的最后一跳节点的IP地址。与他们的管理员取得联系。
重复以上几步,直到你找到与跟踪的物理地址相同的路由器。
5)总结:
通过过滤输出数据流,可以使你的网络免受Smurf这类攻击;通过适当地限制广播流量,就可以防止你的网络被利用成为中间代理。如果你遭到攻击,可用以上办法把灾难降低到最小的手段,同时可以跟踪敌人。Smurf攻击是具有破坏性的,但是合理正确的准备就可以最大限度地降攻击传播的性能和影响力。
2.2 基于重定向(redirect)的路由欺骗技术
攻击者可利用ICMP重定向报文破坏路由,并以此增强其窃听能力。除了路由器,主机必须服从ICMP重定向。如果一台机器想网络中的另一台机器发送了一个ICMP重定向消息,这就可能引起其他机器具有一张无效的路由表。如果一台机器伪装成路由器截获所有到某些目标网络或全部目标网络的IP数据包,这样就形成了攻击和窃听。
3 ICMP攻击防范措施
虽然ICMP协议给黑客以可乘之机,但是ICMP攻击也并非防不胜防的。只要在网络管理中未雨绸缪,提前做好准备,就可以有效地避免遭受ICMP的攻击。
对于利用ICMP产生的拒绝服务攻击可以采取下面的方法:一、在路由器或主机端拒绝所有的ICMP包(对于Smuff攻击:可在路由器禁止IP广播);二、在该网段路由器对ICMP包进行带宽限制(或限制ICMP包的数量),控制其在一定的范围内。
避免ICMP重定向欺骗的最简单方法是将主机配置成不处理ICMP重定向消息,另一种方法是路由器之间一定要经过安全认证。例如,检查ICMP重定向消息是否来自当前正在使用的路由器,要检查重定向消息发送者的IP地址并校验该IP地址与ARP高速缓存中保留的硬件地址是否匹配。ICMP重定向消息应包含转发IP数据报的报头信息,报头虽然可用于检验其有效性,但也有可能被窥探并加以伪造。无论如何,这种检查可增加对重定向消息有效性的信心,并且由于无须查阅路由表及ARP高速缓存,所以执行起来比其他检查容易一些。



自定义分类:
网络安全
 
贡献者:
ztjqd
Copyright © 1999-2024 C114 All Rights Reserved | 联系我们 | 沪ICP备12002291号-4