一种基于负载预测的分布式拒绝服务攻击检测方法
技术领域
本发明涉及一种网络攻击检测方法,特别的,涉及一种基于负载预测的分布式拒绝服务攻击检测方法,属于网络安全技术领域。
背景技术
分布式拒绝服务(Distributed Denial of Service,DDoS)是在传统的拒绝服务(Denial of Serivce,DoS)攻击基础之上产生的一类攻击方式。它的原理与DoS相似,只是改变了单一DoS的一对一攻击方式,利用更多的傀儡机来发起进攻,以更大的规模来进攻受害者。DDoS攻击采用分布、协作的大规模攻击模式,给网络的正常运行带来了极大威胁。
典型的DDoS攻击可以分为两大类:直接DDoS攻击和反射式DDoS攻击。如图1所示。
图1(a)为直接DDoS攻击。攻击主机首先入侵大量的攻击从机,并在攻击从机上安装DDoS攻击守护进程,当攻击主机认为时机成熟时,发送攻击命令给攻击从机,攻击从机就会向目标主机发出大量的服务请求数据包,最终导致目标主机网络和系统资源耗尽,造成目标主机无法为正常用户提供任何服务,甚至导致系统崩溃。
图1(b)为反射式DDoS攻击。该攻击的模式是:攻击主机控制攻击从机,通过攻击从机向反射服务器发送大量伪造的数据包,这些伪造数据包的源IP地址均为所要攻击的目标主机的IP。反射服务器接收到伪造数据包后,依据包中的源IP发出相应的回应数据包。这样,目标主机的资源会被大量的回应数据包耗尽,无法为合法用户提供服务。
随着DDoS攻击软件如TFN,TFN2k等的出现,发起DDoS攻击更加容易。而且,为了对抗已有的DDoS攻击检测技术,攻击的形式也发生了变化,出现了采用反射式的DDoS攻击等新方式,使攻击的检测更为困难。
与其它的攻击相比,DDoS攻击具有以下特点:
◆采取了分布式的攻击手段,改变了传统的点对点攻击模式,使得攻击数据流呈现无规律状态;
◆通常使用常见的协议与服务,仅从协议与服务类型方面难以区分正常连接请求与恶意请求;
◆攻击数据包通常经过伪装,使用伪造的源IP地址,无法识别来源。
以上特点使得对DDoS攻击的检测十分困难。
有些机制可以用来对抗目前最流行的SYN Flooding型攻击,如SYN cache,SYN cookies等。但是,这些机制都是维护状态的,也就是每个TCP连接需要维护状态,并进行状态计算。而实验表明:攻击一个没有特别保护的商业网站的SYN速率至少需要达到14000Ps个SYN请求,如果将这些检测系统集成到网关设备上,显然会降低端到端TCP性能,导致建立连接的延时增加。
基于异常的检测是该类攻击最为有效的检测手段。异常检测的核心问题是如何实现负载正常状态的描述。目前普遍的做法是采集大量样本数据,基于统计或人工智能方法对样本数据进行分析,从中抽取正常模式。这种方式获得的正常行为描述完全依赖于历史数据,时效性差,以此为依据的异常判断准确性也必然受到影响。
文献《基于负载预测的分布式拒绝服务攻击检测方法研究》(科技导报.2005,23(9):11-13)提出一种基于负载预测的DDOS检测方法,首先预测待检测时刻的服务请求数,将其作为待测时段内正常服务请求的估计值,以此为参照判断异常,不仅可以明显提高检测准确性,而且可以缩减历史记录存储量。但该文献建立的小波-神经网络预测模型精度还不够高,影响检测响应时间。
发明内容
本发明的目的是基于负载预测的思想,通过构建高精度负载预测模型,提高攻击检测精度,并进一步提高DDoS攻击检测的时效性,保证在攻击造成不良影响之前有充分的时间进行防御。
本发明提供了一种基于负载预测的分布式拒绝服务攻击检测方法,该方法包括对服务器的负载值进行检测的步骤,使用检测值进行负载预测的步骤,将预测值与实际检测值比较,判断是否是异常点并采取措施的步骤,其中所述使用检测值进行负载预测的步骤包括:
1)使用基于小波包的预测方法进行一步预测,具体步骤为:
1.1对原始序列进行小波包分解与重构:设H(t)表示t时刻之前N个数据按时间顺序的排列,对原始序列H(t)进行L层小波包分解,从分解树中读取结点(L,0)~(L,2L-1-1),(1,1)的小波包分解系数,构成2L-1+1个信号分量;对各分支进行单支重构,重构后的2L-1+1个分支与原始序列的长度一致,记为H~Lj(j=0~2L-1-1)]]>和
1.2对
信号直接用AR线性模型进行预测;
1.3对
信号进行支持向量回归预测,即对各分支分别执行:
1.3.1数据准备:将该分支数据分为两部分,一部分作为训练数据,另一部分作为测试数据,将训练数据以n为步长组织为学习样本对(xi,yi);
1.3.2选取适当的支持向量机模型;
1.3.3根据确定的支持向量拓扑结构,利用训练数据集训练模型;
1.3.4利用测试数据集中的数据进行预测;
1.3.5根据预测结果进行模型评价,计算预测精度,如果精度满足预先设定的阈值,则结束算法,否则调整参数,重新训练模型;
1.4使用加权移动平均法对
分支数据进行预测;
1.5对各分支预测值进行合成,获得最后的预测结果;
2)使用基于SVR的预测方法进行一步预测,具体步骤为:
2.1数据准备:将原始负载数据分为两部分,一部分作为训练数据,另一部分作为测试数据,将训练数据以n为步长组织为学习样本对(xi,yi);
2.2选取适当的支持向量机模型;
2.3根据确定的支持向量拓扑结构,利用训练数据集训练模型;
2.4利用测试数据集Dte={dj}j=M+1N]]>中的数据进行单步预测;
2.5根据预测结果进行模型评价,计算预测精度,如果精度满足预先设定的阈值,则结束算法,否则调整参数,重新训练模型;
3)使用基于支持向量回归的非线性组合预测方法对两项单项预测结果进行组合,获得最终的主机负载预测结果,具体步骤为:
3.1数据准备:将原始主机负载数据分别输入到已训练好的基于小波包的预测模型和基于SVR的预测模型中,获得两个预测值集合;
3.2将训练数据以2为步长组织为如下表所示的学习样本对(xi,yi);
其中![]()
分别为使用基于小波包的预测模型和基于SVR的预测模型获得的预测值;
3.3选取适当的支持向量机模型;
3.4根据确定的支持向量拓扑结构,利用训练样本训练模型;
3.5将测试数据集中的数据输入模型,进行单步预测;
3.6根据预测结果进行模型评价,计算预测精度,如果精度不满足预先设定的阈值,则调整参数,重新训练模型。
本发明提出的基于负载预测的DDoS检测方法,以预测值作为未来时段内网络正常行为的描述,不需要了解攻击的细节,能够有效区分正常的负载增加与DDoS攻击所导致的异常负载增加,改进正常行为描述的时效性,提高攻击检测精度,并有效降低攻击发现延时。
附图说明
图1DDoS攻击示意图。
图2本发明提供的攻击检测方法的检测原理图。
图3基于小波包和SVR的非线性组合预测模型。
图4三层小波包分解树。
图5基于小波包的预测模型。
图6U00空间的小波包划分。
图7主机负载序列的三层DB4小波包分解与单支重构。
具体实施方式
下面结合附图对本发明所述方法做进一步的描述。
DDOS的攻击目标是网络内的重点服务器,对其负载本发明采用并发连接数作为衡量指标。对基于TCP的服务,并发连接数直接取Socket数,对DNS等采用UDP非连接协议的服务,可以采用虚拟连接的方式,把五元组(协议,源地址,源端口,目的地址,目的端口)相同的访问视为一个连接,效果是一样的。
设采样的时间间隔是Δt。令x(i)表示第i个观测点的并发数,X表示服务器并发连接时间序列,则
X={x(1),x(2),x(3),…,x(k),…}
根据X构造与预测相关的历史序列。
设与待预测时刻t相关的序列为H(t),则
H(t)={x(t-i),N≥i≥1}
其中H(t)表示t时刻之前N个数据按时间顺序的排列,称为历史序列。对序列中元素分别重新编号,则H(t)可表示为H(t)={hk}k=1N.]]>
利用本发明的技术方案,进行攻击检测的原理如图2所示。
本实施例考虑对历史序列H(t)={hk}k=1N]]>分别用基于小波包的预测和基于SVR的预测两种方法进行一步预测,然后将预测值进行组合,获得最终的预测结果,采用的基于小波包和SVR的非线性组合预测模型如图3所示。在实际应用中可以根据具体的需求将该机制应用于更多预测方法的组合。
图3中,
表示对历史序列用基于小波包的预测模型进行一步预测获得的预测值,
表示对历史序列用SVR方法进行一步预测获得的预测值,将这两个单项预测结果经支持向量回归组合之后,获得最终的预测值
本实施例的具体实施过程如下:
一、对服务器的负载值进行检测
该步骤是收集服务器负载值数据集的过程。该数据集合通常可以分为两部分:训练数据集和测试数据集。训练数据集主要用来构造训练模型的样本数据;测试数据集用来构造与预测相关的历史序列。
本实施例中的实验数据取自某高校校园网的一台WWW服务器,收集该主机在一段时间内的并发连接数,连续收集10个工作日,采样间隔取Δt=2s,构成数据集source。以下实验的数据均取自该数据集。
二、使用基于小波包的预测方法进行一步预测
1、预测模型
依据小波包分解理论:在小波包分解中,每一个高频系数向量也与低频部分的分解一样,被分解成两个部分,一维情况下产生的是一个完整的二叉树。如图4所示。
小波包分解树中任一个结点都可以读取其分解系数,这样,基于小波包分解的预测可以有更多的组合方式,并非一定用最底层结点,只要所选结点对应空间的直和刚好覆盖原始信号空间,又不互相重叠即可。如选择结点((3,0),(3,1),(2,1),(1,1)),就相当于按Mallat小波多分辨分析作空间剖分。
本实施例基于小波包理论的预测模型组合方式为:选择结点(3,0),(3,1),(3,2),(3,3),(1,1)。即在三层小波分解基础上,对第二层细节信号(结点(2,1))进一步分解。考虑到第一层细节信号(结点(1,1))是原始负载信号中的随机负载分量,是由偶发事件导致的负载增量,一般在整个负载中所占的比例很小,所以预测中不需要再对其进一步分解。
令H(t)表示原始负载序列,即t时刻之前N个负载数据按时间顺序的排列。
H(t)={hk}k=1N]]>
基于历史序列进行一步预测,预测hN+1的值,记为
。以三层小波包分解为例,预测模型如图5所示。
首先对历史序列H(t)进行三层小波包分解。从分解树中读取结点(3,0),(3,1),(3,2),(3,3),(1,1)的小波包分解系数,构成5个信号分量:
H3j={h3j,i},j=0,1,2,3;H11={h11,i}
为了使各分支的长度保持不变,对各分支进行单支重构,重构后的5个分支与原始序列的长度一致,即:
H~3j={h~3j,i,1≤i≤N},]]>j=0,1,2,3]]>H~11={h~11,i,1≤i≤N}]]>
分别对5个分支建立如图5所示的预测模型进行一步预测,获得5个预测值,将其合成得
2、预测过程
从source中取20.28万个数据作为实验原始数据,将其分为两组,前17.28万个数据为第一组,作为模型训练数据,最后的3万个数据为第二组,作为模型测试数据。
2.1小波包分解与重构
首先选择一个母小波,并确定分解层数L。本实施例选定分解层数L=3。
对原始序列进行小波包分解:
分解过程如图6所示。其中U00表示原始序列占据的总频带空间,Ujn表示第j尺度上的第n个子空间。
由图可知:
Uj-1n=Uj2n⊕Uj2n+1---(1)]]>
对应各子空间的序列用dj,n表示,则利用小波分解算法:
dlj,2n=Σhk-2ldkj-1,n---(2)]]>
dlj,2n+1=Σkkgk-2ldkj-1,n---(3)]]>
将小波包空间逐层细分。其中hn、gn分别是低通、高通分解滤波器系数。分解进行到第L层时,得到2L个信号分量。利用小波包重构算法:
dlj-1,n=Σk[h~l-2kdkj,2n+g~l-2kdkj,2n+1]---(4)]]>
对各信号分量重构,得到最终的信号分量。其中![]()
分别是低通、高通重构滤波器系数。
用
重新对各信号分量编号,则:
H(t)=H~0+H~1+···+H~2L-1---(5)]]>
图7为任意截取的一段负载序列经DB4小波包三层分解与重构后的结果。
工程上,小波包分解与重构可以用以下matlab程序段实现:
load newnum.dat;%将实验原始数据文件调入内存
s=newnum(1:202800);%将文件中实验数据放入变量s中
t=wpdec(s,3,′db4′,′sure′,1);%采用DB4小波对原始数据序列进行三层小波包分解
h1=wprcoef(t,[3,0]);
h2=wprcoef(t,[3,1]);
h3=wprcoef(t,[3,2]);
h4=wprcoef(t,[3,3]);
h5=wprcoef(t,[1,1]);%对各分支进行重构
dlmwrite(sh1.dat′,h1,″);
dlmwrite(sh2.dat′,h2,″);
dlmwrite(sh3.dat′,h3,″);
dlmwrite(′sh4.dat′,h4,″);
dlmwrite(′sh5.dat′,h5,″);%将各分支存储为数据文件
2.2
信号的自回归预测
图7中,H30比较平滑,较好地体现了负载的周期性,同时保持了与原负载序列完全相同的变化趋势且数值很接近,对该信号直接用AR线性模型预测。
AR模型的数学表达式为:
xt=φ1xt-1+φ2xt-2+...+φpxt-p+at (6)
其中,p为AR模型的阶数,φ1为模型的系数,为待估参数,at是白噪声。
用AR模型预测的最关键问题是确定模型阶数及参数。本实施例中,模型的参数采用LS(最小二乘)估计法,阶采用在一定范围内从低阶到高阶逐个拟合,利用最小信息准则(AIC)确定。
对信号分支
的模型选用AR(6),则
信号的自回归预测可以用以下matlab程序段实现:
load sh1.dat;%将H30的数据调入内存
test=30000;
y=h1(1:202800)/1000;%归一化实验数据
len=length(y)-test;
x=y(1:len);%取出训练数据
result=zeros(test, 1);%构建全零数组
p=6;%设定模型阶数
r=zeros(p,1);
for n=0:p-1
for t=1:len-p
r(p-n)=r(p-n)+x(t+p-n)*x(t);
end
r(p-n)=r(p-n)/len;
end
tt=0;
for t=1:len
tt=tt+x(t)*x(t);
end
tt=tt/len;
a=zeros(p,p);
for i=1:p
for j=1:i-1
a(i,j)=r(i-j);
a(j,i)=a(j,i);
end
a(i,i)=tt;
end
f=inv(a)*r;%AR模型的训练
nn=len;
for k=1:test
for i=1:p
result(k)=result(k)+y(nn-i+k)*f(i);
end
end %用最后的三万数据进行一步预测
result2=result*1000;
dlmwrite(′ARrh1.dat′,result2,″);%预测结果存盘
2.3
信号的支持向量回归预测
图7中,
的数值较小,具有较强的规律性,对负载周期内的波峰、波谷也有重要影响。本实施例对其采用支持向量回归预测。
支持向量回归的基本思想是通过一个非线性映射Ф将数据x映射到高维空间中,并在这个高维空间进行线性回归,则该线性回归就对应于低维输入空间的非线性回归。
用D={di}i=1N]]>表示任意一个分支信号,由t时刻前n个值预测t时刻的dt的问题可以表示为寻找如下对应关系F。
d^t=F(dt-n,dt-n+1,...,dt-1)---(7)]]>
对回归模型的训练来说,由N个训练样本就可以构建N-n个训练样本对,即输入(d1,d2,...,dn),对应的输出为dn+1;输入(d2,d3,...,dn+1),对应的输出为dn+2;...依此类推。
下面以
为例说明具体的算法实现过程,
除输入数据不同外,步骤均相同。具体算法步骤为:
2.3.1数据准备。将采集到的数据分为两部分,一部分作为训练数据,记为Dir={dj}j=1M]]>,另一部分作为测试数据,记为Dte={dj}j=M+1N]]>。首先将训练数据以n为步长组织为学习样本对(xi,yi),如表1所示。
表1SVR预测模型学习样本
将原始时间序列数据整理为特定格式。方法为:假设sh2.dat的前20个数据如下所示。
294 302 309 319 325 330 288 291 280 285 305 319 294 303 306 308 311 314 293 296
若以15为预测步长,则将原始数据整理为如下所示格式,存入文件sh2-2.dat。
308 1:294 2:302 3:309 4:319 5:325 6:330 7:288 8:291 9:280 10:285 11:305 12:319 13:294 14:303 15:306
311 1:302 2:309 3:319 4:325 5:330 6:288 7:291 8:280 9:285 10:305 11:319 12:294 13:303 14:306 15:308
314 1:309 2:319 3:325 4:330 5:288 6:291 7:280 8:285 9:305 10:319 11:294 12:303 13:306 14:308 15:311
293 1:319 2:325 3:330 4:288 5:291 6:280 7:285 8:305 9:319 10:294 11:303 12:306 13:308 14:311 15:314
296 1:325 2:330 3:288 4:291 5:280 6:285 7:305 8:319 9:294 10:303 11:306 12:308 13:311 14:314 15:293
每一行的含义是:用带序号的15个数据,预测出的值应该是每行的第一个数值。
2.3.2选取适当的支持向量机模型。支持向量回归算法主要由核函数、损失函数和容量控制因子确定。
目前常用的核函数有线性核函数、多项式核函数、高斯径向基核函数等,从这些核函数中选择一个最好的核函数,一种方法是通过比较各种核函数的VC维的上界,但这种方法要在非线性特征空间计算包含数据的超平面的半径。另一种方法是采用Cross validation(交叉校验)来选择核函数及其参数。免费软件包Libsvm就提供了该项功能。
损失函数选取Vapnik的ε不敏感损失函数,ε值根据具体应用的预测精度需求确定,在满足精度需求的前提下尽可能选取较大的ε值以减少计算量。
容量控制因子用来控制对超出ε的样本的惩罚程度。
本实施例中,H31~H33采用相同的ε-SVR模型,令损失函数ε=0.1,控制因子C=100,核函数选用最常用的高斯基径向核函数且取σ=50;
2.3.3根据确定的支持向量拓扑结构,利用训练数据集Dtr={dj}j=1M]]>训练模型。
工程上该部分可以直接调用libsvm程序包中的可执行文件,在DOS下完成:
svmtrain-s 3-t 2 -p 0.1-g 0.0002-c 100 sh2-2.dat msh2
其中,msh2为生成的训练模型
2.3.4利用测试数据集Dte={dj}j=M+1N]]>中的数据进行单步预测。
工程上可以如下实现:
svmpredict psh2.dat msh2 rsh2.dat
psh2.dat格式与sh2-2.dat一样,只是预测值位置可以填写任意数字,如下所示:
rsh2.dat为预测结果文件:
264.94 274.323 282.848 263.98 255.123 259.053 268.064 267.014 267.746 247.662 234.913
2.3.5根据预测结果进行模型评价。计算预测精度,如果精度满足预先设定的阈值,则结束算法,否则调整参数,重新训练模型。
2.4
信号的加权移动平均预测
依然沿用D={di}i=1N]]>表示分支信号,加权移动平均法的预测公式为:
d^n+1=(Σi=0m-1ωidn-i)/m---(8)]]>
式中
表示第n+1个采样点的负载预测值,m为移动平均的项数,即每次预测需要使用的观察值的个数,ωi为对应权值。预测时,n每次向前移动一步,就增加一个新近数据,去掉一个远期数据,得到一个新的m个数的平均数,这样不断地“吐故纳新”逐期向前移动。
采用加权移动平均模型,移动窗口定为5,则工程上可以用以下matlab程序段实现:
load sh5.dat;
s=sh5(1:202800);
len=length(s);
m=5;%设定阶数
w=[0.02 0.025 0.605 0.15 0.2];%设定权值
res=zeros(len,1);
for i=1:m
res(i)=s(i);
end
for i=m+1:len
forj=1:m
res(i)=res(i)+w(j)*s(i-m+j-1);
end
end%一步预测
rr=res(172801:202800);
dlmwrite(′MArh5.dat′,rr,″)%将预测结果存盘
2.5预测值合成算法
预测值合成可表示为:
h^1N+1=ψ(h~^30,N+1,h~^31,N+1,h~^32,N+1,h~^33,N+1,h~^11,N+1)---(9)]]>
其中,ψ为线性或非线性函数。
预测值合成方法很多,例如可以使用SVR方法对各分支的数据进行合成。最简单的是将各分支预测值直接对应相加,本实施例采用该方法。
三、使用基于SVR的主机负载预测方法进行一步预测
该方法与基于小波包的主机负载预测方法的预测算法过程2.3
信号的支持向量回归预测基本相同,只是输入为原始负载序列,输出为预测值
四、基于SVR的非线性组合预测
基于支持向量回归的主机负载非线性组合预测的原理为:首先确定待训练支持向量机的各项参数,然后将两种单项预测的预测结果组成二维的输入样本,对应的实际负载作为输出样本,用一定数量的输入输出训练样本对进行训练,使不同的输入向量得到相应的输出值,从而在各单项预测结果与实际负载值之间建立一种非线性映射关系,当训练及测试满足精度需求后,该系统就可以应用于主机负载非线性组合预测。
该预测算法的主要步骤为:
4.1数据准备
令H={h(i)}i=1N]]>表示收集到的原始主机负载数据,其中N表示数据个数。以n为预测步长,将这些数据分别输入到已训练好的基于小波包的预测模型和基于SVR的预测模型中,获得两个预测值集合,表示为:
H^1={h^1(i)}i=1M,]]>H^2={h^2(i)}i=1M,]]>其中,M=N-n,为预测值个数。
分别将数据集合
和
分为两部分,
H^11={h^1(j)}j=1K,]]>H^12={h^1(j)}j=K+1M;]]>
H^21={h^2(j)}j=1K,]]>H^22={h^2(j)}j=K+1M]]>
其中,
和
为训练数据集,
和
为测试数据集,K为训练数据个数。
本实施例中,训练数据文件格式如下:
291 1:290.11 2:291.01
308 1:308.2 2:308.00
其中,1:后面的数字为用基于小波包方法的预测结果,2:后面的数据是基于SVR方法的预测结果,每一行最前面的数字是实际负载值。
预测数据文件格式如下:
0 1:300.11 2:299.91
0 1:208.2 2:208.00
4.2构造训练样本
将训练数据以2为步长组织为学习样本对(xi,yi),如表2所示。
表2 SVR非线性组合预测模型学习样本
4.3选取适当的支持向量机模型。按照2.3.2中所述方法,确定核函数、损失函数和容量控制因子。
4.4根据确定的支持向量拓扑结构,利用训练样本训练模型。工程上该步骤实现方法参见2.3.3。
4.5将测试数据集H^12={h^1(j)}j=K+1M,]]>H^22={h^2(j)}j=K+1M]]>中的数据输入模型,进行单步预测。工程上该步骤实现方法参见2.3.4。
4.6根据预测结果进行模型评价。计算预测精度,如果精度满足预先设定的阈值,则结束算法,否则调整参数,重新训练模型。
五、将预测值与实际检测值比较,判断是否是异常点并采取措施
异常检测采用基于滑动窗口的方式实现。系统需要维护一个描述主机正常行为的历史窗口,记为Wh,窗口宽度为T。攻击检测流程为:
(1)初始化异常点计数器,使异常点数n=0;
(2)取检测时刻t前T个采样值作为Wh的初始值;
(3)利用Wh中的历史数据进行一步预测,获得t时刻的负载预测值,记为
(4)获取t时刻的实际负载值,记为ft;
(5)异常点的判定。比较
和ft,看是否满足以下条件:
|ft=f^t|≥K(t)·Max_error]]>
其中,K(t)为预先定义的与检测时刻相关的常数,Max_error为所采用预测模型的最大绝对值误差。
如果条件不满足,则将历史窗口Wh向右滑动一步,使ft进入窗口,并修改检测时刻t⇐t+1]]>,如果n>0,则执行n⇐0]]>,转(3);
如果条件满足,则判定该点是负载异常点,此时,执行n⇐n+1]]>,并判断是否n的值等于预先设定的异常点个数阈值N,如果是,则报警;否则,将历史窗口Wh向右滑动一步,以预测值
代替实际负载值ft进入窗口,并修改检测时刻t⇐t+1]]>,转(3)。
本实施例只给出了具有两种单项预测的组合方法,在实际应用中可以根据具体的需求将该机制应用于更多预测方法的组合。