主动防御DDOS攻击,保护服务器端数据安全的核心是在发现可疑连接时,主动去鉴别这种连接是不是异常的,而不是被动等待更多的DDOS特征信息。在发现异常连接后,采用一种根据TTL字段和IP字段进行带宽限制的方法,以扼制有害数据,以达到主动防御DDOS攻击的目的。
1 主动检测方法
随着Internet用户上网带宽的增加和互联网上 DDOS黑客工具的不断发布,DDOS攻击的实施越来越容易,DDOS攻击事件正在呈上升趋势。由于商业竞争、打击报复和网络敲诈等多种因素,很多企业长期以来一直为DDOS攻击所困扰。随之而来的是客户投诉、法律纠纷、客户流失等一系列问题。因此,防御DDOS攻击,保护服务器端数据安全成为企业必须考虑的头等大事。在所有的DDOS防范方法中,受害服务器端的防范方法受到了最多的重视,在这一端最大的困难是发现DDOS攻击迹象时,已进入DDOS攻击的高峰期,此时很难采取有效的防范方法来抑制攻击的进行。本文提出的对策是尽量在早期发现DDOS攻击,再使用准确的带宽限制方法过滤恶意数据。
1.1 半开连接分析
在传送数据包之前,TCP协议需要用三次握手在客户端和服务器端之间建立连接。半开连接是指在服务器端收到客户端发出的SYN请求后,发出ACK/SYN,此时在服务器上保留一定的资源来记录此TCP连接状况,实际上在系统的内存中有一个专门的队列包含所有的半开连接,这个队列的大小是有限的,因而只要有意使服务器建立过多的半开连接就可以使服务器无法再响应新的TCP连接请求。在正常情况下,如果产生半开连接,是因为网络延迟或错误,比如第二次握手 (ACK/SYN)或第三次握手(ACK)的TCP包由于延迟或错误发生了丢失,这时在服务器端就会产生半开连接。通常为了保证服务质量,服务器会重试几次,重试的次数和重发的时间根据操作系统的不同而有所区别。
重发的目的是为了提高三次握手的可靠性,降低网络拥塞带来的损失,这种半开连接我们称做正常的半开连接。在SYN淹没攻击中,在受害服务器上也会产生大量的半开连接。在这种情况下,攻击者向受害服务器发送大量的伪造了源IP地址的SYN包。当接受到这样的SYN请求包后,服务器转到 “syn已接受”(syn-received)状态,然后根据源IP地址发送一个ACK/SYN包到客户端。然而这个源IP地址往往都是伪造的,因此这些 ACK/SYN包不会被应答,服务器保留这些半开连接,并重试数次。这种类型的半开连接和前面讨论的正常的半开连接是不同的。这些由DDOS攻击产生的半开连接被称为异常的半开连接。对于服务器来说,是很难靠其自身来判断哪一个半开连接是由网络拥塞造成的,哪一个是由DDOS攻击产生的。
避免此类DDOS 攻击的关键问题是区分正常的半开连接和异常的半开连接,对于异常的半开连接,对此连接发送RST指令重置此连接,释放系统资源。大多数正常的半开连接是由于网络拥塞造成的,而异常的半开连接却与网络拥塞没有必然联系。网络拥塞可以通过一些特征来发现,比如网络延时变长了,包的丢失率增加了,一些拥塞的路由器接近能力上限。如果这些信息能够被捕获,可以判断这些在服务器上的半开连接是属于正常的半开连接,否则属于异常的半开连接。
1.2 路由节点的延时测试方法
路由路径上结点的延时被一个叫做DARB(DelayProbing)的主动方法来探测。DARB方法沿着流量出去的方向,向着被探测目标发送具有特定 TTL(Time To Live,存[1]时间(TTL)是IP分组中的一个值,指示了一个IP包可以在网络上被路由器转发的次数。网络中的路由器通过察看这个值就可以判断这个 IP分组是不是已经在网络中停留了很久,进而决定是否要将其丢弃。出于多种原因,一个IP分组可能在很长一段时间内不能抵达目的地。例如:错误的路由有可能导致一个IP分组在网络中无限地循环。一种解决方法就是在一定时间后丢弃这个分组,然后发送一个信息通知这个分组的发送者,由它决定是否重发这个分组。 TTL的初始值一般是系统缺省值,它位于IP分组的头部,占用8个二进制位。最初设定TTL值的目的是让它来指定一段特定的时间(以秒为单位),当这段时间耗尽的时候就将这个分组丢弃。由于每个路由器至少会让这个TTL值减1,所以这个TTL值经常用来指定在一个分组被丢弃之前允许经过的路由器数。每个路由器收到一个分组后就将它的TTL值减1,一旦这个值被减为0,路由器就会丢弃这个分组,并发送一个ICMP信息给这个分组的最初的发送者。根据发送出去的包和收到返回的ICMP包的时间差值,我们可以计算出从此主机到该路由器的时间延时。通过设定不同的TTL值,可以得到探测主机到指定路由器的时间延时。
1.3 评估半开连接
当DARB方法返回延时结果时,需要评沽这些结果并将半开连接分为正常的半开连接或者是异常的半开连接。如果返回的结果有一个很大的延时值,意味该个半开连接有很大的可能性是由于网络拥塞造成的,如果返回一个很小的值,特别是接近0时,说明网络处于良好状态,一般是不会产生半开连接的,该半开连接将被认为是异常的,可能是由DDoS攻击造成的。
2基于TTL的带宽限制策略
当可疑半开连接达到一定数目时,DDOS警告将会发出,响应策略将会用来扼制恶意攻击流量。一个好的响应机制应该有以下特征:
1)能够准确地丢弃和限制攻击流量。一个精确的响应机制能丢弃或限制大部分的攻击数据包来减少DDOS攻击的危害。
2)较少的副作用。在对抗DDOS攻击时,保证服务器在被攻击期间也能向合法用户提供正常的服务,不会因为过滤攻击数据,而将大量的合法用户数据包丢弃。
3) 较低的执行开销。由于响应机制部署在受害者端,大量的流量聚集在这一端,如果响应机制本身需要较高的执行开销,它很难有效地处理大量数据,而且更严重的是重量级的响应机制本身也会成为DDOS的攻击目标。根据以上基本要求,在本文中提出一个简单有效的响应措施,为阻止攻击数据继续向受害服务器发送恶意数据包,采用对可疑数据限制带宽的方法。带宽限制规则基于TTL值和源IP地址的判别方法,利用IP包头的TTL字段的值和IP字段共同区分合法用户和恶意数据。
2.1TTL字段
目前大部分的防火墙基于IP地址和端口进行信息过滤,所以此类防火墙很难防范使用伪造源IP地址的攻击包。在DDOS攻击期间,攻击者通常选择一些无法到达的IP地址作为攻击包的伪造地址,以隐藏攻击源的真实身份,并使得阻止DDOS攻击更加困难,因此根据源IP地址和端口来阻止DDOS攻击是不可靠的方法。
本文提出使用TTL字段来制定带宽限制的规则。IP包头的TTL字段指示了该IP包被删除之前还可能被转发的次数。尽管攻击源可以在IP字段中伪造源IP地址,但很难控制该包在Internet上的路由路径。根据调查表明,端到端的路由路径是相对稳定的,在Internet上三分之二的路由路径在几天内,甚至几个星期内是不会变化的[2]。当多个包被从源端发送到目的端时,这些包的路由路径基本上是相同的,路由跳数(Hop)也是一致的,通常跳数信息指示了该包经过了多少路由器。
因此不管攻击者如何伪造源IP地址,从同一个攻击源来的攻击数据包将由同一个路由路径到达受害者端。以此观察为基础,包中的TTL 字段将会被用来构建数据流量的带宽限制规则。Internet上的每一个路由器在将一个包转发到下一个路由器之前会将TTL字段减1,如果攻击包从一个攻击源发出,并且具有相同的TTL值,那么这些包到达目的地之后将会有相同的TTL值。我们假设攻击者不会改变每一个包的TTL初始值,因为从目前DDOS 攻击工具来看,都没有改变初始TTL的机制。TTL的初始值和操作系统有关,比如当前的操作系统,如Windows、Linux、各种商业版的Unix都会使用固定的TTL值,如30、32、60、64、128、255等[3],这些值可以覆盖当前主流操作系统的TTL值。
由于攻击源的操作系统在攻击期间是不会变化的,因此从同一个攻击源发出的攻击包在经过相同的路由路径到达受害者端时,每个攻击包的TTL值依然会是相同的。在基于TTL带宽限制的规则中使用两个附加的表TTTL和TTTL2IP。当多个可疑的连接被DARB探测发现,DDOS警告将会发出,该可疑数据包的TTL值将会被提取至表TTTL 中。一个ACK第三次握手检测器将会部署在受害者端,用来检测第三次握手的数据包ACK。对于数据包P,用IPP来标识该包的源IP地址,TP来标识其 TTL值。当一个ACK包P被捕获,如果其TTL值在表TTTL中(TP∈TTTL),那么该包的TTL值和IP值(IPP和TP)将会插入表 TTTL2IP。此后一个包既使具有一个可疑的TTL值,也就是说该TTL值在表 TTTL 中 (TP ∈ TTTL ),但如果其 IP 地址在表 TTTL2IP 中,那么该包也不会被限制带宽,只有满足{P|(IPP,TP) TTTL2IP ∧ TP ∈ TTTL}条件的包才会被采取带宽限制。
2.2 DDoS响应系统的体系结构
DDoS响应系统的体系结构与策略响应系统的体系结构,半开连接快照部件将在每个预先定义的时间间隔后,对服务器上的连状况进行一次快照。当从服一务器连接中提取出那些存在时间比较长的半开连接这些半开连接进行探测,以确定这些半开连接是否和网络拥塞相关。如果有对应的网络拥塞特证,那么该半开连接被认为是正常的,如果没有对应的网络拥塞特征,则认为是异常的。ACK 检测器负责在进入流量中监视第三次握手ACK包,如果一个ACK包P的TTL值属于TTTL (TP ∈ TTTL), P的源IP地址会被记入表TTTL2IP中,因为P已经完成了一次完整的握手过程。
整个响应体系是一个协作的系统。带宽限制控制器,可疑半开连接检测器,ACK检测器同时工作以完成带宽限制的任务。当可疑半开连接检测器发现可疑的半开连接后,将会把该可疑半开连接中的TTL信息提取出来并存入表TTTL中。如果数据包满足条件{P|(IPP,TP)TTTL2IP∧TP∈TTTL},带宽限制器将会限制这些包的带宽,这三个部件协同工作以共同对抗恶意数据。