一种抵御拒绝服务攻击事件的网络安全保护方法

文档序号:7953255阅读:633来源:国知局
专利名称:一种抵御拒绝服务攻击事件的网络安全保护方法
技术领域
本发明涉及网络安全领域,尤其涉及一种防止网络安全因遭受拒绝服务攻击事件而出现网络崩溃现象的方法。
背景技术
互联网上出现的DDoS(Distributed Denial of Service)分布式拒绝服务攻击事件,甚至会使得一些大型网站都因遭受入侵而全面瘫痪。很多政府网站、ISP信息服务提供商、IDC托管机房、商业站点、游戏服务器、聊天网络等网络服务商长期以来一直被DDOS攻击所困扰,其主要影响是数据库无法正常使用,服务器被入侵机密资料丢失、以及一些连带问题。但是目前全球对DDoS攻击进行防范、预测和反击的研究工作还没有突破性的进展。
SYN/ACK Flood攻击作为其中最典型的拒绝服务攻击方式,其原理主要是通过向受害主机发送大量伪造源IP和源端口的TCP请求包,导致主机缓存资源因处理这些欺骗请求包被耗尽或因忙于发送回应包而拒绝服务,普通防火墙大多无法抵御此种攻击。常用的攻击方式有1、半连接攻击,通过许多僵尸主机不断地与受害服务器建立大量的TCP连接,直到服务器的内存等资源被耗尽而被拖跨,从而造成拒绝服务;2、反射式分布式拒绝服务,也称洪水方式的拒绝服务,以阻塞带宽为目的。黑客利用特殊的发包工具,首先把伪造了源地址的TCP连接请求包发送到那些被欺骗的计算机上,根据TCP三次握手的规则,这些计算机会向源IP发出SYN+ACK或RST包来响应这些请求。
抵御拒绝服务攻击较常用的方法,主要分为网关防火墙法、中继防火墙法和SYNcookies。如图1所示,为现有技术中的网关防火墙结构图。图中,按网络在防火墙内侧还是外侧将其分为内网、外网,其中内网是受防火墙保护的。
1、网关防火墙法网关防火墙抵御攻击的基本思想是对于内网服务器所发的SYN+ACK包,防火墙立即发送ACK包响应。当内网服务器接到ACK包后,从backlog队列中移出此半连接,连接转为开连接,TCP连接建成。该方法的缺点是当受到TCP攻击时,将使连接队列数目增加,但一般服务器所能承受的连接数量比半连接数量大得多。然而,由于服务器对连接数量也有限制,随着攻击时间和攻击强度的加大,就会超过全连接限制,最终导致拒绝服务。
2、中继防火墙法防火墙在向内网服务器发TCP包之前,首先完成与外网的三次握手连接,从而消除拒绝服务攻击的成立条件。该方法的缺点是此处,中继防火墙的作用就相当于一个TCP代理,代替了服务器去处理TCP攻击,TCP代理程序工作在用户层,处理半连接数量也是有限的,很容易被攻破。另外,由于增加了一次代理进行TCP的三层握手,不可避免的引起TCP连接的延迟。
3、SYN cookiesLinux/BSD都支持SYN cookies,它通过修改TCP协议的序列号生成方法来加强抵御拒绝服务攻击能力。该方法的缺点是某些TCP选项必须禁用,如大窗口等,另外,计算cookies有花销,当受攻击时严重消耗CPU资源,甚至导致死机。

发明内容
本发明正是为了解决上述现有技术所存在的缺陷,而提出一种抵御拒绝服务攻击事件的网络安全保护方法,在基于数据链路层的设计的防护模块,过滤具有拒绝服务攻击性的TCP包,通过构成一个模块级混合型防火墙,实现对服务攻击的主动防护。
本发明所提出的一种抵御拒绝服务攻击事件的网络安全保护方法,在数据链路层设计了防护模块,通过对接收的来自各种IP地址的网络TCP请求包进行判断,以实现对拒绝服务攻击包的过滤,该方法包括以下步骤第一步,防火墙截获外网客户端发向内网服务器TCP数据包,实现第一层防护处理,通过第一层防护的TCP数据包,进入第二层防护处理;第二步,将通过第一层防护进入第二层防护的TCP数据包,与合法连接记录链表中的相关内容进行匹配,有匹配项的,则视为正常的TCP数据包,可直接交给内核处理;第三步,对于在合法的IP地址连接记录链表中没有匹配项的TCP数据包,则根据最近一段时间内进行TCP包的流量统计如果流量统计结果为正常,则该TCP数据被视为正常的数据包,交给内核处理;如果流量统计结果为不正常,则根据TCP数据包的源IP地址,查找自定义的TCP数据包链表,如有匹配项,将其加入合法链表中,并将该TCP包交给内核去处理;如果没有匹配项,那么将该TCP包记录到自定义链表结构中,并将该TCP包丢弃。
与已有技术相比,本发明能够对无论哪种攻击工具进行的拒绝服务攻击,进行主动防御,真正的达到了内核主动防御的防护效果,达到了预期的目的。该方法不但大大的增加了防火墙的处理性能而且充分的利用了TCP/IP协议的特点用全新的设计思想,几乎该算法模块可以通用于所有的防火墙中。


图1为现有技术中网络防火墙结构示意图。
图2为本发明的带有防护模块的网络数据包处理流程图。
图3为本发明的网桥模式的工作流程图。
具体实施例方式
本发明所提出的防护模块在受到拒绝服务攻击时启动并进行主动防护,其具体做法是根据拒绝服务攻击的特点,攻击发生时TCP请求包的数量瞬时会变得很大,所以本发明中通过采用对TCP请求包流量进行统计的方式,来判定网络是否受到攻击。系统首先根据TCP包头信息判断是何种类型的数据包,从而统计每秒钟到达TCP请求包的个数,防火墙一旦检测出TCP流量超过服务器正常处理的限制时,启动防护模块处理TCP请求包,而当TCP流量恢复到网络正常情况下时,防火墙就不再启动防护模块,仍然允许客户机与服务器直接进行TCP连接。
防护模块设计基于数据链路层,具体做法是在数据链路层实现对自定义数据结构进行查询,并结合拒绝服务攻击的防护算法。
这样一来无论遇到哪种形式的拒绝服务攻击,只要系统检测到TCP流量不正常就会启动防护模块,无需借助其他入侵检测工具和扫描工具,也无需人为干预系统会自动识别合法与非法的数据包,实现了主动防护拒绝服务攻击的效果,图2是本发明的网络数据包处理流程图。与现有技术区别之处在于,本发明在网络驱动与IP地址的网络过滤之间的数据链路层上,增加了一个用于抵御服务攻击的防护模块。并且,在Linux系统将网卡设置成网桥的工作模式,网卡接收到数据包后,经过的网络协议层次如图3所示。
本发明所提出的抵御拒绝服务攻击事件的网络安全保护方法,包括以下步骤第一步,防火墙截获外网客户端发向内网服务器TCP数据包,调用第一层防护代码首先进行防护处理,将包长是40或其他非法TCP请求包丢掉;第二步,将通过第一层防护进入第二层防护的TCP数据包,与合法连接记录链表中的相关内容进行匹配,有匹配项的,则视为正常的TCP数据包,可直接交给内核处理。
第三步,对于合法连接记录链表中没有匹配项的TCP数据包,则根据最近一段时间内进行TCP包的流量统计如果流量统计结果为正常,则该TCP数据被视为正常的TCP数据包,交给内核处理;如果流量统计结果为不正常,则根据TCP数据包的源IP地址,查找自定义的TCP数据包链表,如有匹配项,将其加入合法链表中,并将该TCP包交给内核去处理;如果没有匹配项,那么将该TCP包记录到自定义链表结构中,并将该TCP包丢弃。
下面通过一具体实例,进一步说明本发明的技术方案和实现原理。
本发明是基于Linux 2.6内核而开发的,通用于其他操作系统内核。Linux 2.6内核采用的一种提高网络处理效率的技术(NAPI技术),它的核心概念就是不采用中断的方式读取数据,而代之以首先采用中断唤醒数据接收的服务程序,然后用POLL的方法来轮询数据,Linux 2.6内核的netif_rx函数中提供了专门的POLL方法--process_backlog来处理轮询的方法;process_backlog调用netif_receive_skb向上层提交数据。而netif_receive_skb中嵌入了handle_bridge用于把数据包skb送入网桥模块处理。
为实现在驱动程序之后且在调用网桥模块之前进行数据包过滤,以提高内核处理效率,最合适的位置就是在调用netif_receive_skb函数前调用本发明的包过滤函数,因此,把我们的算法主要函数lyg_firewall放到process_backlog函数调用netif_receive_skb之前。
通过改进Linux内核源代码,将算法实现在Linux2.6的内核源代码网络部分,具体位置是/net/core/dev.c文件,修改dev.c文件的process_backlog函数,在函数中调用lyg_firewall()根据函数返回结果处理数据包,如果函数返回值是LYG_DROP,将数据包释放,释放方法是调用kfree_skb(skb);否则,netif_receive_skb(skb)会将该数据包给内核进一步处理。
本发明的防护模块共分两层结构防护第一层防护,利用数据包长度判定法进行非法TCP请求包的判定及过滤。对于包长是40字节的非正常TCP请求包丢弃,并且对包长不是40字节的TCP请求包进行流量统计,如果流量超过每秒50个TCP请求包,而且包长是某一个固定值,又不是合法操作系统下发送TCP请求的合法包长如64、60、48字节,那么将这些包丢弃。
第二层防护,利用TCP连接请求超时重传机制辨别真假连接的办法,当防火墙收到任何地址任何端口发来的第一次TCP请求都将端口、地址和接收时间纪录并将这个TCP数据包丢弃,特定时间内防火墙再次收到这个地址发来的端口一致并且未超时的数据包那么就将其转发给服务器,并认为这次连接是真实的。
从TCP协议三次握手的特点出发,分析正常TCP连接时发包的特点,发起TCP连接的主机会向目的主机发送TCP请求包,然后等待目的主机返回SYN+ACK包,如果在一定时间内源主机未能收到SYN+ACK数据包,那么就会认为TCP包已经丢失,并且重新发送TCP数据包,当连续3次发送TCP包都没有能够收到SYN+ACK应答,就认为该目的主机不可达并放弃数据传输。
当前各种伪地址拒绝服务攻击都是在最短时间内利用多线程来向服务器发送大量TCP包,造成服务器系统资源耗尽,无法响应合法TCP请求。但是这种攻击往往不会等待SYN+ACK应答,也就是说,攻击者使用IP地址只发送一个TCP请求便改变到其他IP地址进行攻击,因此,可以认为,如果在一段时间内,目标机收到了两个相同IP地址的TCP请求,就认为这个IP地址合法。TCP/IP协议里规定的第一次超时时间是5.8秒,第二次超时重传时间是24秒,而经过抓包试验测得结果是一般的http连接和ftp连接都在0.8秒内有第二个TCP请求重发。所以我们可以在延迟0.8秒后断定IP地址合法,而防护代码只在受到拒绝服务攻击时才启用,所以在受到攻击时,在延迟0.8秒后将请求发送给服务器,防止服务器拒绝服务攻击。
为了得到合法的IP地址,每收到一个IP地址发来的TCP请求,就要记录下该IP地址,并将该TCP包丢弃,我们设定在6秒内,再次收到该IP地址发来的TCP请求,就将这个IP地址加入到一个合法IP链表中去。对每一个收到的TCP包,如果在合法IP链表中能够匹配到相同项,就认为该数据包合法,并让其通过,否则记录其IP地址,然后丢掉。在合法链表的IP地址节点,在记录后的存活时间是6秒,时间到将被从链表中删除。
要记录合法IP,首先要记录每一个到达的TCP包的IP地址,如果使用一个普通的链表记录这些IP地址,当受到伪地址的SYN flood攻击时,随着攻击的进行链表会越来越长,而IP地址有255×255×255×255这么多,可见当受到伪地址攻击时,CPU每收到一个TCP请求包都需要对这个巨大的链表进行查找,而受到攻击时,伪地址TCP请求包一般都在每秒钟一万个以上,合法TCP请求包只有几个或几十个,所占比例极小,而为了匹配到比例极小的合法TCP请求,需要对每个TCP请求包对这个巨大的链表进行匹配操作,这将严重消耗系统资源,造成防火墙响应慢甚至防火墙系统瘫痪,阻塞所有数据包。那么黑客实际上以另外一种形式对服务器进行了拒绝服务攻击。
因此,本发明设计了一个新的链表结构,该链表分四层,将IP地址的分为4段,每段代表32位IP地址中的8位,链表的四层对应IP地址的四段,将IP地址其分别记录到4个不同链表的节点中去,每个节点分别指向下一层链表的表头,形成一个四层链表每层表指向上层节点的链表套链表的数据结构。
假设,当一个新的TCP包到达时,设其IP地址为192.168.0.1,首先去第一层链表中进行查找,即查找192,如果找到192,那么就顺着该节点去查找以该节点作为表头的子链表即第二层链表找到168的节点,然后顺着这个节点找一个它为表头的第三层链表中找到0,一直找到第4层链表,如果在第4个链表中也找到了与1匹配的选项,那么就认为该IP在链表中匹配成功。否则,将该IP作为新的节点插入到链表,插入链表时按层次建立分段IP的节点并作为下层链表的表头。
使用这样一个链表,只需要搜索4组链表就可以得到结果,也就是说,最多也只需要255×4次链表操作。该方法与普通链表所采用的算法相比,已经大大简化。
基于Linux2.6内核开发的用于防护拒绝服务攻击模块,工作在Linux系统内核网络协议栈的底层,随内核工作而工作,从原理上解决拒绝服务攻击,无论哪种攻击工具进行拒绝服务攻击,主动防御拒绝服务系统都能抵御。真正的做到了内核主动防御的防护效果,达到了预期的目的。
尽管受到拒绝服务攻击时,主动防御系统资源有所消耗,但是对网络正常使用没有任何影响,没有一个TCP拒绝服务攻击包通过防御系统,达到了预期防护拒绝服务攻击的目的,按理论值计算在100MB网络中TCP包包长为64字节情况下,攻击包每秒最多达到(100×1024×1024/64)164万个,结果表明,主动防御系统可以保证其正常网络传输同时可以防御小于等于160万/秒的拒绝服务攻击。唯一美中不足之处就是防御系统的资源消耗根据攻击强度的加大略微有所提高,实际防护效果是根据防御系统的CPU处理速度、主板的总线速度、内存的速度来决定。其测试结果已经远远优于部分国内/国际的专业防火墙抗拒绝服务攻击产品。
权利要求
1.一种抵御拒绝服务攻击事件的网络安全保护方法,在数据链路层设置防护模块,通过对接收的来自各种IP地址的TCP类型的数据包进行判断,以实现对拒绝服务攻击包的过滤,该方法包括以下步骤第一步,防火墙截获外网客户端发向内网服务器TCP类型数据包,进行第一层防护处理,通过第一层防护的TCP类型数据包,进入第二层防护处理;第二步,将通过第一层防护进入第二层防护的TCP数据包,与合法连接记录链表中的相关内容进行匹配,有匹配项的,则视为正常的数据包,可直接交给内核处理;第三步,对于在合法的IP地址连接记录链表中没有匹配项的TCP数据包,则根据最近一段时间内进行TCP包的流量统计如果流量统计结果为正常,则该数据被视为正常的TCP数据包,交给内核处理;如果流量统计结果为不正常,则根据TCP数据包的包头信息,源IP地址,查找自定义的TCP数据包链表,如有匹配项,将其加入合法链表中,并将该TCP数据包交给内核去处理;如果没有匹配项,那么将该TCP包记录到自定义链表结构中,并将该TCP数据包丢弃。
2.如权利要求1所述的抵御拒绝服务攻击事件的网络安全保护方法,其特征在于,所述防火墙截获外网客户端发向内网服务器TCP数据包,实现第一层防护处理,更进一步包含利用数据包长度判定法进行非法TCP请求包的判定及过滤。对于包长是40字节的非正常TCP请求包丢弃,对包长不是40字节的TCP请求包进行流量统计,如果包长是某一个固定值的TCP包流量超过每秒50个,又不是合法操作系统下发送TCP请求的包长,那么将这些TCP数据包丢弃。
3.如权利要求1所述的抵御拒绝服务攻击事件的网络安全保护方法,其特征在于,所述第二层防护处理,更进一步包含当防火墙收到任何地址任何端口发来的第一次TCP请求都将端口、地址和接收时间纪录并将这个TCP数据包丢弃,特定时间内防火墙再次收到这个地址发来的端口一致并且未超时的数据包那么就将其转发给服务器,并认为这次连接是真实的。
4.如权利要求1所述的抵御拒绝服务攻击事件的网络安全保护方法,其特征在于,所述IP地址被定义为四层的链表结构,该链表分四层,将IP地址的分为4段,每段代表32位IP地址中的8位,链表的四层对应IP地址的四段,将IP地址分别记录到4个不同链表的节点中去,每个节点分别指向下一层链表的表头,形成一个四层链表每层表指向上层节点的链表套链表的数据结构。
5.如权利要求1所述的抵御拒绝服务攻击事件的网络安全保护方法,其特征在于,所述检查所接收的TCP数据是否与合法的IP地址连接记录链表相匹配的步骤,更进一步包含当一个新的TCP请求包到达时,首先在第1层链表中进行查找;如果找到第1个相同节点,根据该节点查找以该节点作为表头的第2层链表,如果找到第二个相同的节点,则根据这第2个相同节点查找一个以该节点为表头的第3层链表,找到第3个相同的节点,一直找到第4层链表,如果在第4个链表中也找到了与它匹配的选项,则该IP在链表中匹配成功;否则,将该IP作为新的节点插入到链表,插入链表时按层次建立分段IP的节点并作为下层链表的表头。
6.如权利要求1所述的抵御拒绝服务攻击事件的网络安全保护方法,其特征在于,该方法基于Linux内核,并通用于各种系统内核,位于网络协议栈的底层。
7.如权利要求1所述的抵御拒绝服务攻击事件的网络安全保护方法,其特征在于,所述合法操作系统下发送TCP请求的合法包长为64字节、60字节或48字节。
全文摘要
一种抵御拒绝服务攻击事件的网络安全保护方法,在数据链路层设计了防护模块,通过对接收的来自各种IP地址的TCP请求包进行判断,以实现对拒绝服务攻击的过滤,该方法包括以下步骤防火墙截获外网客户端发向内网服务器TCP数据包,实现第一层防护处理,通过第一层防护的TCP数据包,进入第二层防护处理,检查所接收的TCP类型数据是否在合法的IP地址连接记录链表中有匹配项。有匹配项的,则视为正常的数据包,可直接交给内核处理;没有匹配项的TCP数据包,则先对其在一定时间段内进行包的流量统计。本发明能够主动防御无论哪种攻击工具进行的拒绝服务攻击,真正做到了内核主动防御的防护效果。
文档编号H04L12/56GK1822593SQ20061001333
公开日2006年8月23日 申请日期2006年3月20日 优先权日2006年3月20日
发明者赵洪宇, 刘亚光, 朱睿 申请人:赵洪宇
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1