法律状态公告日
法律状态信息
法律状态
2023-03-10
未缴年费专利权终止 IPC(主分类):H04L29/06 专利号:ZL2010101332542 申请日:20100326 授权公告日:20121212
专利权的终止
2012-12-12
授权
授权
2011-03-23
实质审查的生效 IPC(主分类):H04L29/06 申请日:20100326
实质审查的生效
2011-01-26
公开
公开
技术领域
本发明涉及网络安全技术领域,具体涉及一种基于Bloom Filter(即布隆过滤器)和开源内核防御SYN Flood攻击(DDoS攻击的一种,即TCP连接请求泛洪攻击)的方法。
背景技术
拒绝服务攻击(DoS)和分布式拒绝服务攻击(DDoS)是目前常用的网络攻击方式,这种攻击通过发送大量伪造的服务请求,消耗被攻击网络的带宽和受攻击主机的服务资源,从而使得正常的服务请求得不到响应。特别是SYN Flood攻击,由于它利用了TCP/IP协议(Transmission ControlProtocol/Internet Protocol的简写,传输控制协议/因特网互联协议)存在的固有的漏洞,所以现有的协议体系对此攻击毫无免疫力。当前对这种攻击采取的防御手段主要有入侵检测、包过滤、限制半连接数量、缩短操作系统维护半连接的时间长度、利用防火墙作TCP连接的中间代理以及增加资源的方法,如增加网络带宽、增加服务器并同时应用负载均衡技术等,但是这些方法的数据包的存储结构有待改进,而且没有考虑操作系统内核层与用户层的交互,以致对大规模DDoS攻击,基本束手无策。
Bloom Filter是一个广泛应用于网络环境下的高效存储匹配结构,具有占有内存小,匹配速度快等优点,其原理就是利用多次哈希运算在达到快速存储匹配的同时提高匹配的准确率。如附图1所示,初始状态时,Bloom Filter是一个包含m位的位数组,每一位都置为0。为了表达S={x1,x2,…,xn}这样一个n个元素的集合,如附图2所示,Bloom Filter使用k个相互独立的哈希函数(Hash Function),它们分别将集合中的每个元素映射到{1,…,m}的范围中。对任意一个元素x,第i个哈希函数映射的位置hi(x)就会被置为1(1≤i≤k)。在判断y是否属于这个集合时,如附图3所示,我们对y应用k次哈希函数,如果所有hi(y)的位置都是1(1≤i≤k),那么我们就认为y是集合中的元素, 否则就认为y不是集合中的元素。原始的Bloom Filter结构由于采用单一位数组,因此存在误报率大的问题,而且无法存储成对的元素,本发明改进了Bloom Filter结构,降低了误报率,使之适合存储成对的元素,达到了防御SYNFlood攻击的目的。
发明内容
本发明的目的是提供一种防御SYN Flood攻击的方法。
本发明是通过如下方式实现的:
一种基于Bloom Filter和开源内核防御SYN Flood攻击的方法,其特征在于:包括以下步骤:
第一步,遭受SYN-Flood攻击判断;
设置记录时间段,在设置记录时间段内在用户空间检测TCP连接请求包速率,取最小值作为阀值t的初始值;
设置一个单位长度为10的循环数组,数组第n项记录前n秒内TCP连接请求包的个数,记录最近10秒内连接请求包的个数,对此数组求平均值得到最近10秒内SYN包的平均速率,当这个速率超过阀值t时判断系统当前遭受SYN-Flood攻击,再转第2步;否则转第5步;
第二步,构建用户层Bloom Filter结构;
对处于连接状态下的TCP数据包,取其I P地址字段和TTL字段作为可信IP和TTL记录,利用改进的Bloom Filter组织成高效匹配结构;
对所有的TCP数据包,取数据包中的源IP地址字段和源端口字段,并使用查看当前网络联机状态的命令查看包含此源IP地址和源端口的TCP连接是否处于ESTABLISHED状态,对于处于ESTABLISHED状态的TCP数据包取其源IP地址字段和TTL字段,并使用下面的方法构建Bloom Filter结构;
构造2个2048位的一维数组和1个2048*8位的二维数组,其中数组每项为1位。初始状态时把整个数组的每项置为0,为了存储源IP地址A.B.C.D和TTL值总共5个字节的元素,使用ELFHash、RSHash、JSHash、PJWHash这样4个相互独立的哈希函数,用ELFHash哈希函数对IP地址的前两个字节A和B进行运算,即将A和B转换成两个字符,用ELFHash对其进行哈希运算,并将哈希值 对m取模,映射到第1个一维数组;用RSHash哈希函数对IP地址的C和D字节进行运算,并将哈希值对m取模,映射到第二个一维数组;用JSHash哈希函数对IP地址四个字节进行运算,并将运算后的哈希值对m取模,映射到二维数组的第一列的第k个位置,并记录下位置k,同时用PJWHash哈希函数对TTL值进行哈希,将哈希值对n取模,映射到二维数组的第k行。映射时,把映射的位置置为1,构建好Bloom Filter结构后转第3步;
第三步,更新内核层可信IP地址和TTL数据,启用内核层数据包过滤;
当检测到SYN包速率超过阀值t时,用户层通过内核通信方式通知内核开启数据包过滤器,同时把记录的可信IP地址和TTL记录通过内核通信方式发送至内核层组织成Bloom Filter结构,再转第4步;
具体的用户层和内核层通信方式如下:
通信数据包结构包含包头和包数据两部分,包头部分的nlmsg_type字段标志着数据包的类型,用户层发往内核层数据包定义nlmsg_type为4时代表关闭内核层数据包过滤,nlmsg_type为5时开启内核层数据包过滤,此两种类型的数据包无需携带数据,nlmsg_type为1时用户层传送可信IP地址和TTL记录,同时携带数据部分,数据部分为u_packet_info结构体,此结构体包含改进的Bloom Filter结构体三个位向量的一个字节以及字节序号;内核层发往用户层的数据包定义nlmsg_type为2,携带数据为k_packet_info结构体,该结构体包含通过或丢弃信息、源IP、目的IP、TTL、源端口、目的端口;
第四步,内核层根据可信IP地址和TTL记录过滤TCP SYN数据包;
取TCP连接请求包中的IP地址字段和TTL字段,用第二步中构造BloomFilter结构的方法对IP地址和TTL进行哈希操作,在对IP地址进行哈希操作时,如果每个哈希值映射到m位数组的对应位置是1则进行TTL检测,否则丢弃该数据包;
TTL检测:如果对TTL进行哈希操作后映射到二维数组对应位置为1则放行该数据包,否则丢弃;
第五步,停止内核层数据包过滤;
当检测到SYN包速率未超过阀值t并由记录可信IP地址和TTL记录后,停止数据包的过滤,用户层发送关闭命令到内核层数据包过滤模块。
所述Bloom Filter结构为每一个哈希函数对应一个数组并且利用二维数组的方式存储双变量。
利用内核层和用户层协同处理。
采用本发明可以达到如下的有益效果:
1.通过改进Bloom Filter原始的单一数组对应多个哈希函数的结构,采用一个哈希函数对应一个一维数组或二维数组的结构,有效降低了误报率,在保证准确率的前提下提高了存储和查找数据包的效率,使得本方法可以有效防御SYN Flood攻击。
2.通过结合开源操作系统内核层和用户层协同处理来解决内核层效率高但不适宜处理复杂程序和用户层跟内核协议栈不紧密的问题,从而提高了对数据包的处理效率。
附图说明
图1是初始化的Bloom Filter结构。
图2是Bloom Filter存储操作示意图。
图3是Bloom Filter查找操作示意图。
图4是改进的Bloom Filter结构。
图5是用Netlink机制定义的数据包结构。
图6是实施例网络拓扑图。
具体实施方式
下面结合实施例对本发明做进一步说明:
实施例
以H3C MSR 30-40路由器(带OAP单板)平台为例,此例为路由器部署方式。
如图6所示是本例网络拓扑图,H3C MSR 30-40Router是华为3Com面向企业网络的产品。OAP(Open Application Platform)中文名为开放应用平台,是Hangzhou Huawei-3Com公司为新兴业务提供的开放 式应用平台。每一个OAP单板拥有自己的处理器、存储器、内外网络接口以及与路由器的接口。单板上运行独立的Linux系统。
在本例中,保护的是DMZ区域,Internet上的流量流经OAP单板时进行过滤。先在OAP单板运行的Linux系统上作如下准备:
在用户层安装libpcap包(libpcap是unix/linux平台下的网络数据包捕获函数包);在内核层注册协议栈HOOK(钩子函数,通过该函数可以获得协议栈中的所有数据包)函数。
OAP单板上部署动作如下:
1、遭受SYN-Flood攻击判断;
在30分钟内对用户空间TCP连接请求包进行统计,计算出每10秒内TCP连接请求包的个数,取最小值作为阀值t的初始值,如105;
设置一个单位长度为10的循环数组,数组第i项的值设为前i秒内TCP连接请求包的个数,记录最近10秒内连接请求包的个数,对此数组求平均值得到最近10秒内SYN包的平均速率,当这个速率超过阀值105时判断系统有可能遭受SYN-Flood攻击,再转第2步;否则转第5步;
2、构建用户层Bloom Filter结构;
对处于连接状态下的TCP数据包,取其IP地址字段和TTL字段作为可信IP和TTL记录,利用改进的Bloom Filter组织成高效匹配结构;
对最近10秒内的TCP数据包,取数据包中的源IP地址字段和源端口字段,并使用查看当前网络联机状态的命令查看包含此源IP地址和源端口的TCP连接是否处于ESTABLISHED状态,对于处于ESTABLISHED状态的TCP数据包取其源IP地址字段和TTL字段,并使用下面的方法构建Bloom Filter结构;
因为图1所示的Bloom Filter结构只用了一个一维数组存储一个变量,而本方法要求存储IP地址和TTL两个变量,所以如图4所示,构造2个2048位的一维数组和1个2048*8位的二维数组,其中数组每项为1位。初始状态时把整个数组的每项置为0,因为图2中所有哈希函数哈希后映射到同一个一维向量,这样有很大的误判率,因此为了存储源IP地址A.B.C.D和TTL值总共5个字节的元素,使用ELFHash、RSHash、JSHash、PJWHash这样4个相互独立的 哈希函数,用ELFHash哈希函数对IP地址的前两个字节A和B进行运算,即将A和B转换成两个字符,用ELFHash对其进行哈希运算,并将哈希值对m取模,映射到第1个一维数组;用RSHash哈希函数对IP地址的C和D字节进行运算,并将哈希值对m取模,映射到第二个一维数组;用JSHash哈希函数对IP地址四个字节进行运算,并将运算后的哈希值对m取模,映射到二维数组的第一列的第k个位置,同时用PJWHash哈希函数对TTL值进行哈希,将哈希值对n取模,映射到二维数组的第k行。映射时,把映射的位置置为1;构建好BloomFilter结构后转第3步;
3、更新内核层可信IP地址和TTL数据,启用内核层数据包过滤;
用户层通过内核通信方式通知内核开启数据包过滤器,同时把记录的可信IP地址和TTL记录通过内核通信方式发送至内核层组织成内核层的BloomFilter结构,再转第4步;
具体的用户层和内核层通信方式如下:
如图5所示,通信数据包结构包含包头和包数据两部分,包头部分的nlmsg_type字段标志着数据包的类型,用户层发往内核层数据包定义nlmsg_type为4时代表关闭内核层数据包过滤,nlmsg_type为5时开启内核层数据包过滤,此两种类型的数据包无需携带数据,nlmsg_type为1时用户层传送可信IP地址和TTL记录,同时携带数据部分,数据部分为u_packet_info结构体,此结构体包含改进的Bloom Filter结构体三个位向量的一个字节以及字节序号;内核层发往用户层的数据包定义nlmsg_type为2,携带数据为k_packet_info结构体,该结构体包含通过或丢弃信息、源IP、目的IP、TTL、源端口、目的端口;
4、内核层根据可信IP地址和TTL记录过滤TCP SYN数据包;
与如图3所示的方法不同,因为本方法使用的是改进型Bloom Filter,存储了两个变量,采用了二维数组和一维数组,因此查找方法也不一样,取TCP连接请求包中的IP地址字段和TTL字段,用第2步中构造用户层BloomFilter结构的方法对IP地址和TTL进行哈希操作,在对IP地址进行哈希操作时,如果每个哈希值映射到m位数组的对应位置是1则进行TTL检测,否则丢 弃该数据包;
TTL检测:如果对TTL进行哈希操作后映射到二维数组对应位置为1则放行该数据包,否则丢弃;
5、停止内核层数据包过滤;
记录可信IP地址和TTL记录后,停止数据包的过滤,用户层发送关闭命令到内核层数据包过滤模块停止内核层数据包过滤。
具体的记录可信IP地址和TTL记录的方法如下:对最近10秒内的数据包,取数据包中的源IP地址字段和源端口字段,并使用查看当前网络联机状态的命令查看包含此源IP地址和源端口的TCP连接是否处于ESTABLISHED状态,对于处于ESTABLISHED状态的TCP数据包取其源IP地址字段和TTL字段作为可信IP地址和TTL记录。
机译: 基于内核的功耗以及隔离和防御新兴电源攻击
机译: 拒绝服务攻击防御系统,拒绝服务攻击防御方法和拒绝服务攻击防御程序
机译: 服务不可能攻击防御系统,服务不可能攻击防御方法和服务不可能攻击防御程序