1. 引言
近年来,我们最常接触的公共网络正遭受着各式各样的网络攻击,越来越多的人们关注到了网络设施的安全。拒绝服务攻击(DOS)和分布式拒绝服务攻击(DDOS)就是其中最具侵略性和破坏性的网络安全问题之一 [1] 。
拒绝服务攻击目的在于妨碍和阻止真正需要资源的用户得到应有的服务和资源。这里可以是一种带宽,也可以是一个网络服务系统。它主要是向受害主机发送大量的无用数据流量占用用户所需的所有服务资源,从而中断这些网络或服务器提供的服务。当DOS攻击流来自不同的源头时,我们称之为分布式拒绝服务攻击(DDOS)。
在DOS/DDOS攻击中,IP欺骗是一种很常见的恶意网络行为 [2] 。DOS/DDOS攻击随机的伪装IP头部的32位源地址,从而隐藏攻击源。IP回溯追踪的目的就是找出真正的IP源地址 [3] 。现在许多重大的服务都是依赖于互联网上的通信基础设施,一旦遭受DOS/DDOS攻击必将对其造成致命的危险。因此,如何预防DOS/DDOS的攻击或者将损失减到最小尤为重要。本文主要就针对DOS/DDOS攻击,基于ICMP扩展出一种更加有效的追溯方法。论文第一部分简要介绍了什么是DOS/DDOS功击;第二部分对几个重要的攻击追溯方法进行分析;第三部分提出本文改进方法的设计思想;第四部分重点对算法进行讲解;第五和第六部分是实验的验证结论和对以后研究的展望。
2. 研究背景
DOS/DDOS攻击的防御主要分四大类 [4] :攻击预防、检测、攻击源标记和回击。攻击源标记的目的就是在包含伪装信息的IP数据包源地址域分析找出真正的攻击源头。为了追踪IP包的路径,人们通过在中间媒介路由处标记数据包实现攻击路径重构 [5] 。中间媒介路由给一个或多个IP数据包生成ICMP回溯报文,并依托IP报文将这些ICMP信息报文发送到目的主机。受害主机利用接收到的ICMP回溯信息报文,对攻击路径进行重构,找到攻击源。
2.1. 攻击源识别
一旦入侵检测发现了一次攻击行为,最好的回击就是在攻击源阻止攻击流的继续入侵 [6] 。很不幸的是,相比伪装IP源地址是那么简单易行,追溯攻击源就没有什么简便实用的方法了。为了冲破这些限制,基于改良路由功能或修改当前协议的许多办法被人们所提出来,目的就是希望能支持IP的可追溯性。
2.2. IP追溯
IP追溯的设计思想是在路由器上以概率P对进入的数据包插入部分路径信息,目标主机通过这些路径信息重构出数据包的路径。当经过源地址和目的地址之间路由时,路由器以概率P插入它们的IP地址到进入的数据包中 [7] 。通过这些路径信息,目标主机能重构出数据包的路径。然而,在当前的互联网IP v4协议中并未预留有供携带追溯信息的特殊字段。所以用编程的方法将路径信息压缩到像IP头部中可用的16位标示字段是很难实现的。
2.3. ICMP信息回溯
介于IP追溯方法的不足,人们提出了ICMP信息回溯方法 [8] ,在此方法中,当IP数据包经过一个路由器时,为避免增加额外的数据流,路由器以一个极低的大约1/20000的概率P生成一个ICMP追溯报文即iTrace数据包 [8] 。路由器向目的地址和源地址都转发此ICMP数据包。在DOS/DDOS攻击中,目的节点可以运用这些信息追溯出攻击路径。另一方面,iTrace数据包提供的信息可以很好的发现反射式拒绝服务攻击的攻击源,因为iTrace数据包以一定的概率同时也发往攻击源IP地址。路由生成iTrace数据包时,通常包含以下几项内容:发送它的路由IP地址,前一跳和后一跳IP地址,和诱发它的数据包信息。可以看出,我们不需要将路径信息编码到IP报头,而是将它存储在ICMP报文中,并发送到下一跳路由。下一跳路由接收到iTrace数据包时检查IP包和iTrace数据包是否具有相同的路径,并以此判断是否生成新的iTrace数据包或添加路径信息到源IP中。
还有一种被动生成ICMP追溯报文的方法 [9] ,就是运用路由器中路由信息表和包推进表,分别在两个表中添加额外的标识位,以决定是否生成iTrace数据包。
2.4. 具有记忆路径的反向ICMP追溯
在原来的ICMP追溯方法中,因为生成iTrace数据包的概率不高,所以需要攻击数据包很多。再有靠近攻击者的路由器攻击率也不高,几乎不能够为真正需追踪的受害者提供高效的iTrace信息,而产生的iTrace信息也不大适合用于重构攻击路径。
在反向ICMP追溯方法中,我们主要是考虑提高那些能为受害者重构攻击路径提供更多有效信息的iTrace信息报文的生成机率。为此,改进了路由器中的路由信息表和包推进表。分别在两表项中添加了额外的标识位,用来标识是否真正需要为某个IP报文生成iTrace数据包和标明生成的iTrace数据包信息是否具有高效性。原理很简单,当路由信息表中增加的标识位为1时,我们认为需要生成iTrace数据包,相反为0则不需要。再检查包推进表中新增的标识位是否为1,1说明具有高效性,0那就对我们没有太大利用价值。如图1所示。
基于此,分离出两个不同的功能模块:决定模块和iTrace生成模块 [9] 。在决定模块中,当入侵检测系统(IDS)告知BGP路由器时,BGP路由会自动检测路由表中目的标识符,如果目的位为1,表明确实需要生成相应的iTrace信息。接着路由表内容会传到包推进表中,通过有效的标识符,可以决定此时生成的iTrace信息是否具有利用价值。以标识位置1为例。值为1表明此处产生的iTrace信息具有高效性,那么这个IP包的一个拷贝就会被发送到iTrace信息生成模块。在生成模块中,实现了上述选定IP包相应的iTrace信息的生成任务,将路径信息添加到ICMP追溯报文中,并发往下一端,之后将此位清零。
3. 增强有效ICMP追溯信息的概率
具有追忆路径功能的方法确实能增加那些能为受害者重构攻击路径的提供充足信息的有效报文的机

Figure 1. Schematic diagram of reverse tracing
图1. 反向追溯示意图
率。然而,当普通用户和攻击者有着相同的路径时,想要区分不同的数据流,该方法就显得那么力不从心 [7] 。因为普通用户一样在用着相同的路由表和推进表。所以在特定入口选择的IP报文所产生的iTrace数据包并不一定都是来自攻击源。这种时候用于重构攻击路径提供的数据信息就并不那么可靠。下面我们就提出一种靠近攻击者路由也能增加有效iTrace信息报文生成的方法。
此方法是基于记忆路径反向追踪方法而提出的。我们都知道,攻击者的攻击频率肯定是要比普通用户访问的频率高得多。通过提高有效信息的总量,让我们能够更高更准确的重构攻击路径。
假设
是恰巧在平等情况下到相同目的地的数据包。
为选择数据包生成iTrace报文的概率,那么
。
假设
是选中攻击包生成iTrace信息报文的概率,那么
。
显然想要提高有效iTrace信息报文生成的概率,我们要做的就是减少选中普通正常数据包的概率,甚至将其概率尽量降为0。也就是
。
为了提高靠近攻击源的边界路由生成有效iTrace信息报文的概率,我们介绍一个算法,并对该算法进行实验分析。
4. 算法
在这部分中,我们重点对此算法思想进行讲解。图2是设计的算法。
算法先是根据目标位找出攻击进入接口,对进入流进行计数,检查所有攻击状态的信息是否接收,没有接收全,就通过计数器找到高频率进入的接口。这时关闭其他接口,在此期间选出攻击状态信息的报文生成追溯报文并发往下游路由。如果全部接收,就找到攻击接口同样也可以有效的选出攻击状态的信息报文。
算法的前提是假设攻击者比普通用户发送更多的数据包到目的主机,实际情况也是如此。我们只要找出此类数据流进入的接口,计算出该接口在特定时间内进入目的网络主机的数据包。计时器终止的时候,能很好的计算出进入数据包的进出频率。通常很少有网络主机是相距超过30跳的 [8] ,计时时间根据
路由下一跳数决定,具体时间计算公式是
。
因此每一个在攻击路径上的路由都需要计算它到受害主机的下一跳数。例如我们有一个路由,它到受攻击者的平均下一跳数为7,那么其计时时间为72 ms,它的下一跳路由的下一跳数为6,时间为83 ms。两路由间时间的差异为我们下一步算法通过上游路由位置到下游路由做出决定提供必要依据。在算法中,我们增强了状态信息报文功能,通过报文中定义一个新的标签来识别状态信息 [10] 。通信路由检测到一个流量攻击,刚经过攻击路径之间的第一个下游路由就给攻击流量标注为攻击的状态信息。有了状态信息,下游路由就能更好的决定下一步反馈信息。下一路由接到攻击状态信息,表明进入接口收到一个攻击流量,将路由表中目的标识位设为1。
一旦路由器发现路由表中的目的标识位为1,它就开始分类计时的为每个进入接口统计到受害者主机的推进包,在此期间,它还监听接收的状态信息。如果在此期间有任何的状态信息进来,它将停止并重新开始计数统计。计时终止后,路由器检查找出发送包到受害者频率最高的输入口并将其他的端口延迟100 ms。如果端口在延迟期间接收到别的状态信息,它也将停止延迟并重置延迟时间。之后路由根据攻击流向下游路由发送状态信息。在此情况下,路由器延迟除状态报文接口的其他接口,选择推进包,复制并发送到生成模块,产生iTrace信息报文。生成模块发送iTrace信息报文后,重置路由表和包推进表中的目的位。
5. 实验分析
在这部分,我们在CORE上,通过模拟实验对比分析改进方法的可行性。图3是我们假设的网络拓扑图。
我们通过一组的模拟实验来测试:

Figure 3. Network topology with attackers
图3. 含攻击者的网络拓扑

Figure 4. Comparison of effective packet ratio
图4. 有效数据包比率对比
1) 单个攻击源和单个受攻击服务器,
2) 多个攻击源和单个受攻击服务器,
3) 多个攻击源和多个受攻击服务器。
在上面模拟情况中已经涵盖了普通用户同攻击者利用相同路径发送数据包获取受攻击者服务的情况。在第一种单个攻击源攻击受害者主机的情况,好比仅节点0攻击节点7。其攻击路径是0→36→1→3→4→5→6→7。图显示了到受害者路径上的路由检测出的有效数据包的百分比。
通过图4我们能看出,接近攻击源和受害者主机的路由所检测出的有效数据包明显增多。在同原来的方法相比,靠近攻击源的路由器R1在新方法检测出有效数据所占的百分比比原来的方法多了近10%,这说明我们提出的方法是有很大效果的。最后通过我们对多个攻击源攻击单个服务器,多个攻击源攻击多个服务器的两种情况进行的再验证,也同样说明我们新方法在增加有用信息数据包方面是高效。在这就不过多赘述。
6. 结束语
此论文中,我们在研究以前追溯方法的基础上提出了一种能有效提高生成icmp追溯报文的方法,通过更多的有效icmp追溯报文的数据,更加准确的定位攻击源,找到攻击者,为防御DOS/DDOS攻击提供重要依据。在今后过程中,我们将重点研究如何更加准确的分配缓存区的延迟时间,从而使我们的方法达到最佳性能 [11] 。