如何防止基于ICMP的网络攻击 |
|||||||||||||||||||||||||||||||||||||||
许多网络攻击都基于ICMP协议。在下面这篇文章里,我们将首先介绍ICMP协议,然后探究常见的基于ICMP的网络攻击,最后分析防火墙怎样才能够防止和减轻这种攻击所造成的危害。 如何防止基于ICMP的网络攻击 ■作者:Nathan Ashelman ICMP(Internet控制消息协议, Internet Control Message Protocol)协议用来给IP协议提供控制服务,允许路由器或目标主机给数据的发送方提供反馈信息。需要发送反馈信息的情况包括:数据包不能被发送到目标主机,路由器缓冲区溢出导致数据包被删除,路由器想要把流量重定向到另外一个更短的路由上等。ICMP协议是IP协议的一部分,任何实现了IP协议的设备同时也被要求实现ICMP协议。 ICMP协议的格式如图1所示,ICMP协议头位于IP数据包头之后,使用类型和代码来区分不同的控制消息。到现在为止,人们已经定义了27种不同的ICMP类型。ICMP代码用来区分不同的ICMP子类型,图2列出了常用的ICMP类型。ICMP数据位于ICMP协议头之后,不同的ICMP类型对应的数据的长度也不相同。通常ICMP数据包含原始数据包的信息、被报告的错误或者用来测试的数据。
图2:常用的ICMP消息类型
ICMP类型属于PING命令,可以测试网络的连通性。一个ICMP Echo Request可以包含64K的数据,它被发送后,接收方会返回一个ICMP Echo Reply,返回的数据中包含了接收到的数据的拷贝。 常见的ICMP攻击 基于ICMP的攻击可以分为三类,并且都可以归类为拒绝服务攻击(DoS, Denial of Service):针对带宽的DoS攻击,利用无用的数据来耗尽网络带宽;针对主机的DoS攻击,攻击操作系统的漏洞;针对连接的DoS攻击,可以终止现有的网络连接。 Pingflood、pong、echok、flushot、fraggle 和 bloop是常用的ICMP攻击工具。通过高速发送大量的ICMP Echo Reply数据包,目标网络的带宽瞬间就会被耗尽,阻止合法的数据通过网络。ICMP Echo Reply数据包具有较高的优先级,在一般情况下,网络总是允许内部主机使用PING命令。这种攻击仅限于攻击网络带宽,单个攻击者就能发起这种攻击。更厉害的攻击形式,如smurf和papa-smurf,可以使整个子网内的主机对目标主机进行攻击,从而扩大ICMP流量。使用适当的路由过滤规则可以部分防止此类攻击,如果完全防止这种攻击,就需要使用基于状态检测的防火墙。 “Ping of Death”及其相关的攻击利用主机操作系统的漏洞直接对目标主机发起攻击。通过发送一个非法的ICMP Echo Request数据包,就可以使目标系统崩溃或重启。许多系统包括Windows、Unix、Macintosh ,甚至还有一些路由器和打印机,都容易遭受此类攻击。如果用户使用的操作系统的版本过于陈旧,请确保是否打好了补丁。这类攻击包括pinger、pingexploit、jolt、 jolt2、Sping、Ssping、IceNewk和 ICMPbug。一个能执行详细数据包完整性检测的防火墙可以防止所有这种类型的攻击。 针对网络连接的DoS攻击会影响所有的IP设备,因为它使用了合法的ICMP消息。Nuke通过发送一个伪造的ICMP Destination Unreachable或Redirect消息来终止合法的网络连接。更具恶意的攻击,如puke和smack,会给某一个范围内的端口发送大量的数据包,毁掉大量的网络连接,同时还会消耗受害主机CPU的时钟周期。还有一些攻击使用ICMP Source Quench消息,导致网络流量变慢,甚至停止。Redirect和Router Announcement消息被利用来强制受害主机使用一个并不存在的路由器,或者把数据包路由到攻击者的机器,进行攻击。针对连接的DoS攻击不能通过打补丁的方式加以解决。通过过滤适当的ICMP消息类型,防火墙可以阻止此类攻击。 选择合适的防火墙 有效防止ICMP攻击,防火墙应该具有状态检测、细致的数据包完整性检查和很好的过滤规则控制功能。 状态检测防火墙通过跟踪它的连接状态,动态允许外出数据包的响应信息进入防火墙所保护的网络。例如,状态检测防火墙可以记录一个出去的PING(ICMP Echo Request),在接下来的一个确定的时间段内,允许目标主机响应的ICMP Echo Reply直接发送给前面发出了PING命令的IP,除此之外的其他ICMP Echo Reply消息都会被防火墙阻止。与此形成对比的是,包过滤类型的防火墙允许所有的ICMP Echo Reply消息进入防火墙所保护的网络了。许多路由器和基于Linux内核2.2或以前版本的防火墙系统,都属于包过滤型,用户应该避免选择这些系统。 新的攻击不断出现,防火墙仅仅能够防止已知攻击是远远不够的。通过对所有数据包进行细致分析,删除非法的数据包,防火墙可以防止已知和未知的DoS攻击。这就要求防火墙能够进行数据包一致性检查。安全策略需要针对ICMP进行细致的控制。因此防火墙应该允许对ICMP类型、代码和包大小进行过滤,并且能够控制连接时间和ICMP包的生成速率。 配置防火墙以预防攻击 一旦选择了合适的防火墙,用户应该配置一个合理的安全策略。以下是被普遍认可的防火墙安全配置惯例,可供管理员在系统安全性和易用性之间作出权衡。 防火墙应该强制执行一个缺省的拒绝策略。除了出站的ICMP Echo Request、出站的ICMP Source Quench、进站的TTL Exceeded和进站的ICMP Destination Unreachable之外,所有的ICMP消息类型都应该被阻止。下面是针对每个ICMP消息类型的过滤规则的详细分析。 Echo Request和Reply(类型8和0):允许Echo Request消息出站以便于内部用户能够PING一个远程主机。阻止入站Echo Request和出站Echo Reply可以防止外部网络的主机对内部网络进行扫描。如果您使用了位于外部网络的监视器来监视内部网络,就应该只允许来自于特定外部IP的Echo Request进入您的网络。限制ICMP Echo包的大小可以防止“Ping Floods”攻击,并且可以阻止那些利用Echo Request和Reply来“偷运”数据通过防火墙的木马程序。 Destination unreachable (类型3): 允许其入站以便于内部网用户可以使用traceroute。需要注意的是,有些攻击者可以使用它来进行针对会话的DoS攻击,如果您曾经历过类似的攻击,也可以阻止它。阻止出站的ICMP Destination unreachable消息,因为它可能会泄漏内部网络的结构。不过有一个例外,对于那些允许外部网络通过TCP访问的内部主机(如位于DMZ区的Web服务器)发出的Destination unreachable,则应该允许它通过。为了能够支持“Path MTU Discovery”,您应该允许出站的“Packet Too Big”消息(类型3,代码4)到达那些主机。 Source quench(类型4):阻止其入站,因为它可以作为一种DoS攻击,能够降低发送者的发送速度。允许其出站以便于内部主机能够控制发送端发送数据的速度。有些防火墙会忽略所有直接发送到防火墙端口的Source Quench消息,以防止针对于防火墙的DoS攻击。 Redirect、Router announcement、 Router selection(类型5,9,10):这些消息都存在潜在危险,因为它们可以用来把数据重定向到攻击者的机器。这些消息都应该被阻止。 TTL exceeded(类型11):允许其进站以便于内部用户可以使用traceroute。“firewalking”使用很低的TTL值来对网络进行扫描,甚至可以通过防火墙对内网进行扫描,所以应该禁止其出站。一些防火墙可以阻止TTL值小于设定值的数据包进入防火墙。 Parameter problem(类型12):禁止其入站和出站。通过使用一个能够进行数据包一致性检查的防火墙,错误和恶意的数据包都会被阻塞。(翻译:高武) |