ICMP攻击和基于ICMP的路由欺骗技术
一、 ICMP简介
ICMP的全称是Internet Control Message Protocol(网间报文控制协议),它是IP不可
分割的一部分,用来提供错误报告。一旦发现各种错误类型就将其返回原主机,我们平
时最常见的ping命令就是基于ICMP的。
|-------------------------------------------------------------
| |
| ------ ICMP ECHO request ------ |
| |HOST| -------------> |HOST| |
| | A | <----------------------- | B | |
| | | 如果存活或者没有过滤 | | |
| ------ 将返回ICMP RCHO REPLY ------ |
| |
--------------------------------------------------------------
这种机制就是我们通常所用的ping命令来检测目标主机是否可以ping到。
ICMP的统计信息包含收发的各种类型的ICMP报文的计数以及收发错误报文的计数。
利用"show statistics ICMP"可以察看各个统计信息。
显示 说明
Message 消息
Errors 错误消息
Destination Unreachable 目标不可到达消息
Time Exceeded 超时消息
Parameter Problems 参数错误消息
Source Quenchs 源抑制消息
Redirecrs 重定向消息
Echos Echo消息
Echo Replies Echo 响应消息
Timestamps 时间戳消息
Timestamp Replies 时间戳响应消息
Address Masks 地址掩码请求消息
Address Mask Replies 地址掩码响应消息
二、 ICMP攻击及欺骗技术
1、 ICMP攻击导致拒绝服务(DoS)
服务拒绝攻击企图通过使你的服务计算机崩溃或把它压跨来阻止你提供服务,服
务拒绝攻击是最容易实施的攻击行为。
由于在早期的阶段,路由器对包的最大尺寸都有限制,许多操作系统对TCP/IP栈
的实现在ICMP包上都是规定64KB,并且在对包的标题头进行读取之后,要根据该标题头
里包含的信息来为有效载荷生成缓冲区,当产生畸形的,声称自己的尺寸超过ICMP上限
的包也就是加载的尺寸超过64K上限时,就会出现内存分配错误,导致TCP/IP堆栈崩溃,
致使接受方当机。这就是所说的"ping of death",现在网络上很多号称能够致使系统死
机的软件都是基于这个原理,我们所熟悉的工具"Winnuke"就是一例。
对路由器而言,向Intel Express Switch或其后的主机发送一畸形的ICMP包可能
导致系统崩。通过本地或远程发送的畸形包能蒙骗服务器。当服务器收到畸形的ICMP包
时,它将继续检查才对,然而它将丢失所有的路由功能,而且不将检查其它连接了。主
要影响Intel Express Switch 500 系列。
另外,Windows也有拒绝服务漏洞,对 Win98 NT4/SP5,6 Win2K都有影响 ,当如
上系统受到非法碎片包包含不合法碎片 ICMP ECHOs (pings)和UDP packets攻击,Wind
ows系统会拒绝服务。直至CPU占用率达到100%,最后系统崩溃。(参见原程序)
ICMP重定向提供了一种相当有效的DoS。不象ARP入口,这些特定主机路由入口永
不过期。注意,攻击没有要求必须从局域网内发起,事实可以从广域网上发起。如果子
网所用DNS位于网关外,产生一个到该DNS的错误路由是很容易的,
通过在Pwin98下测试,由ICMP重定向包产生的路由都是掩码为255.255.255.255的
特定主机路由,没有办法产生诸如255.255.0.0这样掩码下的网络路由。此外,由ICMP重
定向包产生的路由还是会过期的,会被删除,但耗时很长。许多桌面操作系统线性搜索
自己的路由表,如果你利用ICMP重定向包加了太多特定主机路由到它们的路由表中,极
其容易造成系统的瘫痪。对于Unix系统,虽然搜索路由表时不是线性搜索,但过多的特
定主机路由会消耗大量的内存空间
下面是一个具体实例:
今年八月海信集团悬赏50万人民币测试防火墙,虽然结果是没有人能够拿到防火
墙后面的密码,但是防火墙遭到大量的ICMP攻击,导致防火墙的IP地址ping不通,造成
大量攻擂者以为海信公司言而无信,取消了测试,转而怒牵于海信公司主页,于是就有
了八月轰动全国IT界的海信主页被黑事件,下面是海信公司自己提供的防火墙遭攻击记
录:
攻击类型 攻击次数
1 ICMP攻击 334050
2 碎片攻击 25524
3 端口扫描 4365
4 WEB服务攻击 1227
5 UDP攻击 234
6 拒绝服务攻击 12
事实可以看到,造成海信服务器"拒绝服务"的绝大多数攻击来自于ICMP攻击。
2、 基于重定向(redirect)的路由欺骗技术
首先我们应该知道,微软的Windows98和NT系统都保持着一张已知的路由器列表,
列表中位于第一项的路由器是默认路由器,如果默认路由器关闭,则位于列表第二项的
路由器成为缺省路由器。
缺省路由向发送者报告另一条到特定主机的更短路由,就是ICMP重定向。攻击者
可利用ICMP重定向报文破坏路由,并以此增强其窃听能力。除了路由器,主机必须服从
ICMP重定向。如果一台机器想网络中的另一台机器发送了一个ICMP重定向消息,这就可
能引起其他机器具有一张无效的路由表。如果一台机器伪装成路由器截获所有到某些目
标网络或全部目标网络的IP数据包,这样就形成了窃听。
通过ICMP技术还可以抵达防火墙后的机器进行攻击和窃听。在一些网络协议中,
IP源路径选项允许IP数据报告自己选择一条通往目的主机的路径(这是一个非常不好,
但是又无可奈何的技术手段,多路径正是网络连接的精髓部分!)。攻击者试图与防火
墙后面的一个不可到达的主机A连接,只需在送出的ICMP报文中设置IP源路径选项,使报
文有一个目的地址指向防火墙,而最终地址是主机A。当报文到达防火墙时被允许通过,
因为它指向防火墙而不是主机A。防火墙的IP层处理该报文的源路径域并被发送到内部网
上,报文就这样到达了不可到达的主机A 。
我在查阅资料的时候,所有基于ICMP路由欺骗的技术都是停留在理论上的论述,
没有找到相关的具体攻击实例和原程序。
三、 防御方法
出于系统安全性的考虑,在ICMP中有八条配置命令,可以分别用来禁止或使能四种
类型的ICMP报文的发送。
ICMP echo enable ,ICMP echo disable,利用上面两条命令可以使能或禁止ICMP
的echo reply报文的发送。一旦禁止该类型的报文,从其他机器利用ping命令搜索该路
由器时,路由器将不作出反应。
ICMP mask enable,ICMP mask disable,利用上面两条命令可以使能或禁止ICMP的
Mask Reply报文的发送。当在路由器上禁止该类型的报文时,路由器对于来自其他机器
的mask reguest请求不作反应。
ICMP unreach enable,ICMP unreach disable,利用上面两条命令可以使能或禁止
Destination Unreachable报文的发送。当在路由器上禁止该类型的报文时,路由器对于
其无法转发的ip报文将不再向其源地址发送Destination Unreachable的报文。利用sho
w ICMP命令可以观察当前ICMP以上各项的设置。
ICMP redirect enable,ICMP redirect disable,利用上面两条命令可以使能或禁止I
CMP的重定向(redirect)报文的发送。当在路由器上禁止该类型的报文时,路由器对于可
能的路由错误不作反应。
避免ICMP重定向欺骗的最简单方法是将主机配置成不处理ICMP重定向消息,在Linu
x下可以利用firewall明确指定屏蔽ICMP重定向包。
另一种方法是验证ICMP的重定向消息。例如检查ICMP重定向消息是否来自当前正在
使用的路由器。这要检查重定向消息发送者的IP地址并效验该IP地址与ARP高速缓存中保
留的硬件地址是否匹配。ICMP重定向消息应包含转发IP数据报的头信息。报头虽然可用
于检验其有效性,但也有可能被窥探仪加以伪造。无论如何,这种检查可增加你对重定
向消息有效性的信心,并且由于无须查阅路由表及ARP高速缓存,所以做起来比其他检查
容易一些。
一台4.4BSD主机接收到ICMP重定向报文,为了防止失常的路由、主机或者恶意的入
侵者不正确的修改系统路由表,做了如下检查:
1. 新路由必须是直达的
2. 重定向包必须来自去往目标的当前路由
3. 重定向包不能通知主机用自己做路由(Pwin98不是这样的)
4. 被改变的路由必须是一条间接路由
因此若A和B在同一子网,A不可能利用ICMP重定向使B发往子网内IP的包流向自己。
但可以使B发往子网外IP的包流向自己。
结束语:
在本文撰写之初,我以为只要掌握ICMP的知识就够了,随着文章探讨问题的深入,我发
现"ICMP的隐蔽攻击技术"同IP地址欺骗,ARP欺骗,以及网络窃听分析(sniffing),还
有拒绝服务、系统漏洞、防火墙保护、入侵反跟踪等问题是密不可分的。ICMP作为IP协
议的一个辅助部分,它的隐蔽技术其实就是IP的隐蔽技术,这一点我在文中已经提及,
在此不再赘述,涉及其他同志课题的具体问题,我在此也没有过多的展开。在这短短几
千字的文章内,我不可能讲到ICMP攻击技术的方方面面,很多问题也分析得不够透彻,
有很多不足的地方,还请老师和同学指正。在此文的撰写过程中,我参考了大量的书籍
以及internet上的资料,书籍主要有:机械工业版的《INTERNET网络安全专业参考手册
》、《INTERNET防火墙与网络安全》、清华影印版的《TCP/IP网络互连技术II 设计与实
现》网上的资料多半来自于BBS:"白云黄鹤"、"水木清华"和"华南木棉"并感谢以上三个
大学的很多不知名的朋友给予我指点和帮助。
由于我自己对编程技术不是十分在行,本文中涉及的很多原程序我没有在文中加以讨论
,但我已经整理成册,需要的朋友我可以向你们提供。
2000/11/4
附录:原程序清单
1、 icmp.h
2、 icmp.in
3、 icredirect,c
4、 setmask.c
5、 icsetsrc.c
6、 icmp.c/Error Message/
7、 icerrok.c
8、 icsetbuf.c
9、 icsetdata.c
10、 ipredirect.c
以上参阅《TCP/IP网络互连技术II 设计与实现》ICMP一章
另外还有WINDOWS拒绝服务漏洞的原程序等。