【IT168 专稿】
懂得网络的人都知道我们常用Ping命令来检查网络是否畅通的一个简单的手段,可是这个Ping也能给Windows系统带来不可预测的灾难,那就是Ping入侵即是ICMP入侵,后果是相当严重的。所以这里我们要详细讨论一下ICMP攻击方法及防范措施。
ICMP攻击及欺骗技术
所谓:“知己知彼,百战不怠”,要学会防范就必须知道攻击是怎样的。使用ICMP攻击的原理实际上就是通过Ping大量的数据包使得计算机的CPU使用率居高不下而崩溃,一般情况下黑客通常在一个时段内连续向计算机发出大量请求而导致CPU占用率太高而死机。基于ICMP的攻击可以分为两大类,一是ICMP攻击导致拒绝服务(DoS);另外一个是基于重定向(redirect)的路由欺骗技术。
服务拒绝攻击是最容易实施的攻击行为,目前,基于ICMP的攻击绝大部分都可以归类为拒绝服务攻击,其又可以分成3个小类:
针对带宽的DoS攻击
针对带宽的DoS攻击,主要是利用无用的数据来耗尽网络带宽。Pingflood、pong、echok、flushot、fraggle 和 bloop是常用的ICMP攻击工具。通过高速发送大量的ICMP Echo Reply数据包,目标网络的带宽瞬间就会被耗尽,阻止合法的数据通过网络。ICMP Echo Reply数据包具有较高的优先级,在一般情况下,网络总是允许内部主机使用PING命令。
这种攻击仅限于攻击网络带宽,单个攻击者就能发起这种攻击。更厉害的攻击形式,如smurf和papa-smurf,可以使整个子网内的主机对目标主机进行攻击,从而扩大ICMP流量。使用适当的路由过滤规则可以部分防止此类攻击,如果完全防止这种攻击,就需要使用基于状态检测的防火墙。
针对主机的DoS攻击
针对主机的DoS攻击,主要是攻击操作系统的漏洞。“Ping of Death”及其相关的攻击利用主机操作系统的漏洞直接对目标主机发起攻击。
由于在早期的阶段,路由器对包的最大尺寸都有限制,许多操作系统对TCP/IP栈的实现在ICMP包上都是规定64KB,并且在对包的标题头进行读取之后,要根据该标题头里包含的信息来为有效载荷生成缓冲区,当产生畸形的,声称自己的尺寸超过ICMP上限的包也就是加载的尺寸超过64K上限时,就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使接受方当机。
根据这个原理,可以简单通过发送一个非法的ICMP Echo Request数据包,就可以使目标系统崩溃或重启。许多系统包括Windows、Unix、Macintosh ,甚至还有一些路由器和打印机,都容易遭受此类攻击。如果用户使用的操作系统的版本过于陈旧,请确保是否打好了补丁。这类攻击包括pinger、pingexploit、jolt、 jolt2、Sping、Ssping、IceNewk和 ICMPbug。一个能执行详细数据包完整性检测的防火墙可以防止所有这种类型的攻击。
针对连接的DoS攻击
针对连接的DoS攻击,可以终止现有的网络连接。针对网络连接的DoS攻击会影响所有的IP设备,因为它使用了合法的ICMP消息。Nuke通过发送一个伪造的ICMP Destination Unreachable或Redirect消息来终止合法的网络连接。更具恶意的攻击,如puke和smack,会给某一个范围内的端口发送大量的数据包,毁掉大量的网络连接,同时还会消耗受害主机CPU的时钟周期。
还有一些攻击使用ICMP Source Quench消息,导致网络流量变慢,甚至停止。Redirect和Router Announcement消息被利用来强制受害主机使用一个并不存在的路由器,或者把数据包路由到攻击者的机器,进行攻击。针对连接的DoS攻击不能通过打补丁的方式加以解决,通过过滤适当的ICMP消息类型,一般防火墙可以阻止此类攻击。
基于重定向(redirect)的路由欺骗技术
首先我们应该知道,微软的Windows98和NT系统都保持着一张已知的路由器列表,列表中位于第一项的路由器是默认路由器,如果默认路由器关闭,则位于列表第二项的路由器成为缺省路由器。缺省路由向发送者报告另一条到特定主机的更短路由,就是ICMP重定向。
攻击者可利用ICMP重定向报文破坏路由,并以此增强其窃听能力。除了路由器,主机必须服从ICMP重定向。如果一台机器想网络中的另一台机器发送了一个ICMP重定向消息,这就可能引起其他机器具有一张无效的路由表。如果一台机器伪装成路由器截获所有到某些目标网络或全部目标网络的IP数据包,这样就形成了窃听。通过ICMP技术还可以抵达防火墙后的机器进行攻击和窃听。
据笔者观察,目前所有基于ICMP路由欺骗的技术都是停留在理论上的论述, 没有找到相关的具体攻击实例和原程序。
配置防火墙以预防攻击
一旦选择了合适的防火墙,用户应该配置一个合理的安全策略。一般除了出站的ICMP Echo Request、出站的ICMP Source Quench、进站的TTL Exceeded和进站的ICMP Destination Unreachable之外,所有的ICMP消息类型都应该被阻止。
现在许多防火墙在默认情况下都启用了ICMP过滤的功能。如果没有启用,只要选中“防御ICMP攻击”、“防止别人用ping命令探测”就可以了。
配置系统自带的默认防火墙以预防攻击
虽然很多防火墙可以对PING进行过滤,但对于没有安装防火墙时我们如何有效的防范ICMP攻击呢?先面我们介绍一下配置一下系统自带的默认防火墙的预防攻击的方法。方法如下:
第一步:打开在电脑的桌面,右键点击“网上邻居→属性→本地连接→属性→Internet协议(TCP/IP)→属性→高级→选项-TCP/IP筛选-属性”。
第二步:“TCP/IP筛选”窗口中,点击选中“启用TCP/IP筛选(所有适配器)”。然后分别在“TCP端口、UDP端口和IP协议”的添加框上,点击“只允许”,后按添加按钮,然后在跳出的对话框输入端口,通常我们用来上网的端口是:80、8080,而邮件服务器的端口是:25、110,FTP的端口是20、21,同样将UDP端口和IP协议相关进行添加。
第三步:打开“控制面板→管理工具→本地安全策略”,然后右击“IP安全策略,在本地机器”选“管理IP筛选器和IP筛选器操作”,在管理IP筛选器和IP筛选器操作列表中添加一个新的过滤规则,名称输入“防止ICMP攻击”,然后按添加,在源地址选任何IP地址,目标地址选我的IP地址,协议类型为ICMP,设置完毕。
第四步:在“管理筛选器操作”,取消选中“使用添加向导”,添加,在常规中输入名字“Deny的操作”,安全措施为“阻止”。这样我们就有了一个关注所有进入ICMP报文的过滤策略和丢弃所有报文的过滤操作了。
第五步:点击“IP安全策略,在本地机器”,选择“创建IP安全策略-下一步-输入名称为ICMP过滤器”,通过增加过滤规则向导,把刚刚定义的“防止ICMP攻击”过滤策略指定给ICMP过滤器,然后选择刚刚定义“Deny的操作”,然后右击“防止ICMP攻击”并启用。
通过对注册表的修改以预防攻击
通过对注册表的修改我们可以使ICMP更安全。修改注册表主要有两种方式:
(A)禁止ICMP重定向报文
ICMP的重定向报文控制着Windows是否会改变路由表从而响应网络设备发送给它的ICMP重定向消息,这样虽然方便了用户,但是有时也会被他人利用来进行网络攻击,这对于一个计算机网络管理员来说是一件非常麻烦的事情。通过修改注册表可禁止响应ICMP的重定向报文,从而使网络更为安全。
修改的方法是:打开注册表编辑器,找到或新建“HKEY_LOCAL_Machine\System\CurrentControlSet\Services\TCPIP\Paramters”分支,在右侧窗口中将子键“EnableICMPRedirects”(REG_DWORD型)的值修改为0(0为禁止ICMP的重定向报文)即可。
(B)禁止响应ICMP路由通告报文
“ICMP路由公告”功能可以使他人的计算机的网络连接异常、数据被窃听、计算机被用于流量攻击等,因此建议关闭响应ICMP路由通告报文。
修改的方法是:打开注册表编辑器,找到或新建“HKEY_LOCAL_Machine\System\CurrentControlSet\Services\TCPIP\Paramters\Interfaces”分支,在右侧窗口中将子键“PerformRouterDiscovery”REG_DWORD型的值修改为0(0为禁止响应ICMP路由通告报文,2为允许响应ICMP路由通告报文)。修改完成后退出注册表编辑器,重新启动计算机即可。
ICMP常见的攻防战略大概就是如此,至于选择何种操作方式就因人而异了,大家视具体情况而定吧!