首页 > 范文大全 > 正文

拒绝服务防御技术在IXP处理器平台的实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇拒绝服务防御技术在IXP处理器平台的实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

[摘要] 本文介绍了分布式拒绝服务防御技术中SYN Cookie的原理,提出一种改进目前嵌入式Linux中SYN Cookie技术的思路,并在基于INTEL ixp网络处理器的硬件平台上,得到了实践和验证。

[关键词] 分布式拒绝服务嵌入式LINUX路由器Intel IXP处理器

在目前的因特网体系结构中,网络安全一直是一个不容被忽视的问题,在各类网络环境中,SYN Flood是一种非常危险而常见的DDoS攻击方式,而能够有效防范SYN Flood攻击的手段并不多,SYN Cookie是其中最著名的一种,笔者在设计一个基于IXP1200的路由器软件时,对SYN Cookie技术实现进行了相关实践。

一、SYN Flood攻击和SYN Cookie原理

SYN Flood攻击是一种典型的拒绝服务型攻击,它利用的是TCP协议的三次握手过程进行的攻击。TCP协议规定,如果一端想向另一端发起连接,它需要首先发送TCP SYN 包到对方,对方收到后发送一个TCP SYN+ACK包回来,发起方再发送TCP ACK包回去,这样三次握手就结束了。我们把TCP连接的发起方叫作”TCP客户机”,TCP连接的接收方叫作“TCP服务器”,值得注意的是在TCP服务器收到TCP SYN request包时,在发送TCP SYN+ACK包回TCP客户机前,TCP服务器要先分配好一个数据区专门服务于这个即将形成的TCP连接,这种连接状态称半开连接。在最常见的SYN Flood攻击中,攻击者在短时间内发送大量的TCP SYN包给受害者,这时攻击者是TCP客户机,受害者是TCP服务器,受害者会为每个TCP SYN包分配一个特定的数据区,只要这些SYN包具有不同的源地址,这将最终导致系统不能正常工作。

SYN Cookie是对TCP服务器端的三次握手协议做一些修改,专门用来防范SYN Flood攻击。它的原理是,在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。在收到TCP ACK包时,TCP服务器再根据那个cookie值检查这个TCP ACK包的合法性。如果合法,再分配专门的数据区进行处理。

二、Linux内核中SYN Cookie实现技术分析

在Linux内核中对SYN Flood有很好的防护,在每一个sock中都有一个tcp_opt选项。在tcp_opt中有一个tcp_listen_opt,这里存储的是这个sock在LISTEN状态下时保存的一些选项,其中有一个open_request结构的数组,数组长度为TCP_SYNQ_HSIZE(512),最多可以同时开启512个半开连接。当这个数组满了时,新来的open_request会顶替掉一个老的open_request。但问题是,这种处理方法会在面对SYN Flood攻击时丢掉正常的连接请求。SYN Cookie的作用恰恰是保证在面对SYN Flood攻击时,一方面能够拒绝非法的TCP连接请求,一方面正常连接可以被建立。Linux内核对TCP流程的处理主要在tcp_ipv4.c文件中的函数实现。

上面介绍的就是Linux中对SYN Cookie的实现方式,合法的TCP连接请求一定可以通过SYN Cookie流程。

三、基于IXP1200网络处理器的SYN Cookie技术研究

从上文介绍可以看到,Linux中的SYN Cookie机制主要功能是防止本机遭受SYN Flood攻击,但在笔者实践中,不仅需要让设备自身对SYN Flood攻击免疫,而且还要保护它后面所有对外开放TCP端口的主机免受攻击。

为此,我们利用原SYN Cookie原理在内网和外网之间实现TCP三次握手过程的。

在LINUX系统S收到来自外网的SYN包时,它并不直接转发,而是缓存在本地,再按照原来SYN Cookie的机制制作好一个针对这个SYN包的SYN+ACK包,注意,这个SYN+ACK包中的ack顺序号为特制的cookie值c,更重要的是这个包的的源地址被伪造成了S的地址。这样C会接收到这个SYN+ACK包,并认为是从S反馈回来的。于是C再响应一个ACK包,并认为与S的TCP连接已经建立起来。这时防火墙F收到这个ACK包,按照前面的描述的SYN Cookie原理来检查这个ACK中的ack顺序号。如果认为合法,F将本地缓存的来自C的SYN包发送给S,这时S会响应一个SYN+ACK包到C,其中也携带一个seq号, 我们设为c`。当然这个包不会到达C,而是由防火墙F截取,F根据这个包中的序列号等信息,造一个ACK包响应到S。这时的情况是:C认为自己已经与S建立了TCP连接;S认为自己与C建立了TCP连接。以后的TCP数据内容可以直接穿过防火墙F,在S和C之间交互。

它相当于在TCP Server与TCP Client之间实现了对三次握手协议的。第一次”三次握手”在TCP Client与LINUX系统之间进行,第二次”三次握手”在LINUX系统与TCP Server之间。

四、结束语

通过对LINUX下SYN Cookies的分析和在IXP平台下的实践,我们改进了SYN Cookies的工作机制,就是当服务器从特定主机接收到一个SYN请求时,它返回给主机一个SYN-ACK包,但是服务器并不立即进入SYN_RECD状态,而是根据参数通过一个哈希函数计算所需要的初始连接序列字,这样,在三次握手过程中,当第三个数据包返回时,服务器只需检查序列字是否和计算的哈希函数结果值相匹配,从而防止同一个发起者稍后重新使用相同的序列字。

参考文献:

[1]沈清等:基于SYN Cookie下防分布式拒绝服务攻击算法的分析与实现.计算机应用,2005.12

[2]林闯等:基于Intel网络处理器的路由器队列管理:设计、实现与分析.计算机学报,2003.09

[3]贺冰琰姜帅:基于网络处理器IXP1200的路由查找功能的微码实现[J].现代计算机, 2007,(01)