路由器防御Dos攻击的新方法
DoS (Denial of Service)攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。
dos攻击的方法很多,但它们都具有一些共同的典型特征,例如:使用欺骗的源地址、使用网络协议的缺陷、使用操作系统或软件的漏洞、在网络上产生大量的无用数据包消耗服务资源等。因此,要防御dos攻击,就必须从这些攻击的特征入手,分析其特征,制定合适的策略和方法。
Smurf攻击的特征描述
Smurf攻击是根据它的攻击程序命名的,是一种ICMP echo flooding攻击。
在这样的攻击中,ping包中包含的欺骗源地址指向的主机是最终的受害者,也是主要的受害者;而路由器连接的广播网段成为了攻击的帮凶(类似一个放大器,使网络流量迅速增大),也是受害者。
防御Smurf攻击的方法
根据Smurf攻击的特征,可以从两个方面入手来防御Smurf的攻击:一是防止自己的网络成为攻击的帮凶即第一受害者 ;二是从最终受害者的角度来防御Smurf攻击。下面就从这两个方面来讨论防御的的测路和方法。
一、拒绝成为攻击的帮凶
Smurf要利用一个网络作为“流量放大器”,该网络必定具备以下特征:
1、路由器允许有IP源地址欺骗的数据包通过 ;
2、路由器将定向广播(发送到广播地址的数据包)转换成为第二层(MAC层)的广播并向连接网段广播 ;
3、广播网络上的主机允许对ping广播作出回应 ;
4、路由器对主机回应的ping数据流量未做限制 ;
所以,可以根据以上四点来重新规划网络,以使自己的网络不具备会成为“流量放大器”的条件 。
防止IP源地址欺骗
IP源地址欺骗可以应用在多种不同的攻击方式中,例如:TCP SYN flooding、UDP flooding、ICMP flooding等。
伪造的源地址可以是不存在(不允许在公网上发布)的地址,或者是最终攻击目标的地址。
在UDP flooding中,攻击者则是通过连接目标系统的changen端口到伪造源地址指向的主机的echo端口,导致changen端口产生大量的随机字符到echo端口,而echo端口又将接收到的字符返回,最后导致两个系统都因耗尽资源而崩溃。
注意:为了防御UDP flooding,我们必须防止路由器的诊断端口或服务向管理域之外的区域开放,如果不需要使用这些端口或者服务,应该将其关闭。
防止IP源地址欺骗的最有效方法就是验证源地址的真实性,在Cisco路由器上,我们可以采用下列两种方法:
a、在网络边界实施对IP源地址欺骗的过滤
阻止IP源地址欺骗的一个最简单有效的方法是通过在边界路由器使用向内的访问列表,限制下游网络发进来的数据包确实是在允许接受的地址范围,不在允许范围的数据将被删除。同时,为了追溯攻击者,可以使用log记录被删除的数据信息 。
b、使用反向地址发送
使用访问控制列表在下游入口处做ip限制,是基于下游ip地址段的确定性 。但在上游入口处,流入数据的ip地址范围有时是难于确定的。在无法确定过滤范围时,一个可行的方法是使用反向地址发送(Unicast Reverse Path Forwarding)。
反向地址发送是Cisco路由器的新版IOS提供的一项特性,简称uRPF。
uRPF的工作原理是:当路由器在一个接口上收到一个数据包时,它会查找CEF(Cisco Express Forward)表,验证是否存在从该接收接口到包中指定的源地址之间的路由,即反向查找路径,验证其真实性,如果不存在这样的路径就将数据包删除。
相比访问控制列表,uRPF具有很多优点,例如:耗费CPU资源少、可以适应路由器路由表的动态变化(因为CEF表会跟随路由表的动态变化而更新),所以维护量更少,对路由器的性能影响较小。
uRPF是基于接口配置的,配置命令如下:
(config)# ip cef
(config-if)# ip verify unicast reverse-path
注意:uRPF的实施,CEF必须是全局打开,并在配置接口上也是启用的。
禁止定向广播
在Smurf攻击中,攻击者将ping数据包发向一个网络的广播地址,例如:192.168.1.255。大多数情况下,路由器在接收到该广播包之后,默认会将这个第三层广播转换成第二层广播,即将192.168.1.255转换成为以太网的FF:FF:FF:FF:FF:FF 。而该广播网段上的所有以太网接口卡在接收到这个第二层广播之后,就会向主机系统发出中断请求,并对这个广播作出回应,从而消耗了主机资源,并且做出的回应可能造成对源地址所指目标的攻击。
所以,在绝大多数情况下,应该在边界路由器上禁止定向广播,使用以下接口命令禁止
(config)# no ip directed-broadcast
注:在绝大部分情况下,是不需要使用路由器的定向广播功能的,会使用定向广播的特例也有,例如,如果一台SMB或者NT服务器需要让一个远程的LAN能够看到自己,就必须向这个LAN发送定向广播,但对于这种应用可以通过使用WINS服务器解决。
禁止主机对ping广播作出反应
当前绝大部分的操作系统都可以通过特别的设置,使主机系统对于ICMP ECHO广播不做出回应。
通过阻止“放大器”网络上的主机对ICMP ECHO(ping)广播做出回应,可以阻止该广播网络成为攻击的帮凶。
限制icmp echo的流量
当大量的数据涌入一个接口的时候,即使使用了访问策略对ICMP包进行了删除,接口还是可能会因为忙于不断删除大量数据而导致接口不能提供正常服务。
与被动的删除数据相比,一个主动的方法是,在接口上设置承诺速率限制(committed access rate,简称CAR),将特定数据的流量限制在一个范围之内,允许其适量的通过,同时保证了其它流量的正常通过。
例:使用CAR限制ICMP echo flooding
!建立访问列表,分类要过滤的数据
access-list 102 permit icmp any any echo
access-list 102 permit icmp any any echo-reply
!在接口上配置CAR,将ICMP echo流量
!限制在256k,允许突发8k
interface Serial3/0/0
rate-limit input access-group 102 256000 8000 8000 conform-action transmit exceed-action drop
二、受害者的策略
由Smurf攻击产生的攻击数据流量在经过了“放大器网络“放大之后,当到达最终攻击目标时,数据流量可能是非常巨大的。为了保护被攻击的系统免于崩溃,我们可以采取以下两种策略:
使用控制访问列表过滤数据
在最终攻击目标的网络边界路由器上使用访问控制列表,拒绝将ping攻击数据包发往被攻击的主机。但这是一个粗努的方法,因为当你在路由器上完全限制了发往被攻击主机的ping数据包之后,其它希望正常通过的ping数据包也将无法通过。另外,在边界路由器上使用访问控制列表过滤ping数据之后,虽然可以保护路由器连接的内部网络免受攻击,但攻击的数据还是会大量涌入路由器,导致路由器接口的阻塞。
使用CAR限制速率
在最终攻击目标的网络边界路由器上使用CAR限制是一种更为可取的方法。通过CAR可以将流入网络的某一类数据包的总流量限制在一定的范围,从而可以保证其它数据的正常通过。
结论
本文讨论的基于路由器配置来防御dos攻击的方法在实际应用中有非常显著的效果。当前绝大部分的网络仍然使用路由器作为边界连接设备,所以本文阐述的方法具有普遍实施的意义。