SDN网络中基于神经网络的DDoS检测方法及系统
技术领域
本发明涉及网络安全技术领域,特别涉及一种SDN网络中基于神经网络的DDoS检测方法及系统。
背景技术
在云计算、大数据的时代,海量的数据存储、处理都需要高性能的服务器来支撑,而云计算其实就是虚拟化出资源池以后的应用,是以虚拟化技术为基础的。云计算、虚拟化都需要集中化控制,而SDN最重要的三个概念是:可编程(开放的API接口)、控制平面与数据平面分离,以及集中式控制模型。基于SDN的网络架构可以更容易地实现网络虚拟化,从而为服务大数据相关业务提供支撑。然而,分布式分布式拒绝服务攻击(Distributed Denialof Service,DDoS)一直都是网络安全领域的重点研究对象,它在日常工作中严重威胁了网络安全的发展,对网络环境的影响巨大。DDoS攻击者先通过扫描整个网络,寻找网络中存在协议漏洞或某些问题的主机,然后利用这些漏洞来控制大量的主机同时向攻击目标发送各种请求,消耗攻击目标的系统资源,使得被攻击目标没有能力为合法用户提供相应的服务。分布式拒绝服务攻击有多种类型,按拒绝对象可分为带宽消耗型攻击和资源消耗型攻击,带宽消耗攻击是受害主机在DDoS攻击下,存在大量的数据报文流向受害主机,受害主机的网络接入带宽被耗尽,而系统资源消耗攻击是受害主机的系统资源(存储资源和计算资源)被大量占用,甚至发生死机,两种类型的攻击可能单独发生,也可能同时发生。而常见的DDoS攻击有TCP SYN FLOOD攻击、ACK FLOOD攻击、ICMP攻击、UDP FLOOD攻击。在2016年美国发生的断网事件,攻击者利用协议漏洞发动大规模的DDoS攻击使得美国国内DNS服务商Dyn公司所属的服务器宕机,从而无法为合法用户的正常请求提供服务。在国内,DDoS攻击也是越来越频繁,据国家互联网应急服务中心(CNCERT)统计,使用TCP、UDP和ICMP的发动攻击的比例大幅增长。从上述事件来看,无论是当前网络存在的局限性还是利益的驱使,诸多原因造成了目前DDoS攻击愈演愈烈的现状。为了从根本上解决当前网络安全问题需要采用新的网络架构和网络协议。
近年来,随着SD—WAN等网络新技术的崛起,越来越多的网络研究者开始在将人工智能的方法应用到SDN的DDoS检测之中。例如,他们提出的一种通过自组织映射检测DDoS检测方法。作者提出的一种使用SVM的DDoS检测方法,还有利用SDN架构,通过修改OpenFlow交换机来赋予安全监测功能的NIDS。上述的方法虽然在一定时间段对DDoS检测的研究起到一定的推动作用。但是,或多或少还是会在某些方存在不足。例如,第一种使用SVM检测DDoS的方法只是利用少量数据样本中进行训练,它无法检测出多种方式结合的新型攻击,并且检测准确率也有待提高,更重要的是在实际场景中,DDoS数据量常常都20G甚至更高,所以这种方法实际效果并不好。第二种通过修改OpenFlow交换机在网络流量入口实现DDoS检测,这种做法确实能针对DDoS流量最及时处理,但是这会大大增加成本并且违背了控制与转发平面相分离的解耦和原则。
多数DDoS检测是基于入侵检测原理,采用机器学习的算法直接检测,如果没有发生DDoS攻击而却进行这样复杂又增加负载的DDoS检测,这样会大大降低网络利用率。
发明内容
为了能在不严重影响网络效率情况下又提高检测的精度,本发明提出一种SDN网络中基于神经网络的DDoS检测方法及系统,所述方法包括:
收集、分析Openflow交换机发送给OpenFlow控制器的packet_in数据包;
对接收到的packet_in包进行数据包的解析,提取出数据包的所有字段及相应的值;
基于三支决策原理,利用朴素贝叶斯的概率模型获得异常警报的阈值,计算数据包所处类型的概率,并根据该概率进行异常报警;
在异常预警发出时,收集OpenFlow流表信息,并将采集的OpenFlow流表存储到数据库或文件中;
对收集到的流表信息进行处理,提取出原始的特征,结合DDoS攻击特征,构建出多维特征向量组;
对构建出多维特征向量组进行增量学习,通过主成分分析的方法进行空间映射,形成新的特征向量,将新的特征向量将作为深度神经网络的输入,训练得到深度神经网络;
将实时的数据包输入深度神经网络,即可对数据进行DDoS检测,得出攻击类型。
进一步的,基于三支决策原理,利用朴素贝叶斯的概率模型获得异常警报的阈值包括设置可疑流量阈值和异常流量阈值,判断数据包所处类型的概率是否大于可疑流量阀值,若大于则该数据包的为可疑数据包,并判断数据包所处类型的概率是否大于异常流量阈值,若大于则该数据包为异常数据包;若该数据包为异常流量数据包则,若该数据包为可疑流量数据包则,在计算出贝叶斯概率之后,通过设定几组可疑流量阈值和异常流量阈值并对比相应分类的正确率来选择最优的可疑流量阈值和异常流量阈值的取值。
进一步的,对构建出多维特征向量组进行增量学习包括:
对多维特征向量进行数据标准化以及归一化预处理;
计算预处理之后的多维特征向量的协方差矩阵,表示为:
对协方差矩阵进行奇异值分解SVD,最后进行空间映射,得到进行增量学习之后的一些特征;
其中,D表示预处理之后的多维特征向量;m表示样本数目;Xi为第i个样本的向量表示。
进一步的,将新的特征向量将作为深度神经网络的输入,训练得到深度神经网络包括:神经网络是由输入层、隐藏层、输出层组成,深度神经网络的训练包括信号的前向传播,即从输入层经过隐藏层、最后到达输出层的传播过程以及误差的反向传播调节隐藏层到输出层的权重和偏置,即从输出层到隐藏层、最后到输入层调节输入层到隐藏层的权重和偏置;
前向传播过程包括神经元接收来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将于神经元的阈值比较,然后通过激活函数处理以产生神经元的输出;
反向传播过程包括以误差平方和作为目标函数进行反向迭代;计算参数的方法则采用梯度下降法,即计算所有参数的梯度;当全局误差小于阈值,则结束训练,否则将继续迭代训练。
本发明提出一种SDN网络中基于神经网络的DDoS检测系统,包括packet_in信息提取模块、异常预警模块、流表信息收集模块、信息处理模块以及检测模块,其中:
packet_in信息提取模块用于提取packet_in包中的源IP地址、目的IP地址信息;
异常预警模块用于三支决策原理,利用朴素贝叶斯的概率模型获得异常警报的阈值,计算数据包所处类型的概率低于阈值,则发出异常预警;
流表信息收集模块用于收集DDoS检测所需要的OpenFlow流表数据;
信息处理模块用于对收集的OpenFlow流表数据进行标准化、归一化、降维的数据操作;
基于深度神经网络的检测模块用于在第一检测阶段发出异常报警之后,利用神经网络的方法进一步进行深入检测,分析是发生哪一类攻击。
本发明一方面以三支决策为理论依据,结合贝叶斯概率计算方法预估发生异常的阈值,在软件定义网络中可以较快对网络中异常信息进行判断并发出预警,且对网络不会造成太大的负载,另一方面通过增量学习之后形成新的特征向量组将为DNN检测方法的输入,这样能进一步的判断出是否发生DDoS。
附图说明
图1为本发明SDN网络中基于神经网络的DDoS检测方法流程图;
图2为本发明SDN网络中基于神经网络的DDoS检测系统框架示意图;
图3为本发明实施例中主成分分析的方法进行空间映射形成新的特征向量的过程;
图4为本发明SDN网络中基于神经网络的DDoS检测系统的基于深度神经网络的检测模块的工作流程图;
图5为本发明基于深度神经网络的检测模块中神经网络前向传播过程示意图;
图6为本发明SDN网络中基于神经网络的DDoS检测系统中交换机与控制器信息交互示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提出一种基于神经网络的SDN的DDoS检测方法,如图1,包括以下步骤:
收集、分析Openflow交换机发送给OpenFlow控制器的packet_in数据包;
对接收到的packet_in包进行数据包的解析,提取出数据包的所有字段及相应的值;
基于三支决策原理,利用朴素贝叶斯的概率模型获得异常警报的阈值,计算数据包所处类型的概率,并根据该概率进行异常报警;
在异常预警发出时,收集OpenFlow流表信息,并将采集的OpenFlow流表存储到数据库或文件中;
对收集到的流表信息进行处理,提取出原始的特征,结合DDoS攻击特征,构建出多维特征向量组;
对构建出多维特征向量组进行增量学习,通过主成分分析的方法进行空间映射,形成新的特征向量,将新的特征向量将作为深度神经网络的输入,训练得到深度神经网络;
将实时的数据包输入深度神经网络,即可对数据进行DDoS检测,得出攻击类型。
如图3,在软件定义网络的环境下,数据包的转发是基于OpenFlow控制器根据全网的信息给OpenFlow交换机下发的流表进行转发,当大量数据包没有流表项匹配时,OpenFlow交换机将数据包封装成paket_in数据包给控制器,所以,发生DDoS攻击时,控制器会收到大量的packet_in包。
主机或者服务器与OpenFlow交换机、SDN控制器之间的信息交互如图2,在SDN中,主机发送数据到网络,当数据到OpenFlow交换机时,如果OpenFlow交换机中有匹配项,则执行匹配条目中指令集合。如果没有相应的匹配项,则OpenFlow交换机将数据包封装成paket-in数据包通过SDN控制器与OpenFlow交换机之间的安全通道传送至控制器。控制器对收到的packet-in数据包进行处理、分析、检测(这里就是文中所述检测部分)。当检测出有DDoS,SDN控制器会下发packet-out数据包(OpenFlow流表)至OpenFlow交换机进行清理。
packet_in包至少包括源IP地址、目的IP地址这两个能判断异常的特征,收集、分析Openflow交换机发送给OpenFlow控制器的packet_in数据包包括:
对监听的OpenFlow协议的消息的处理,表示为:
net.floodlightcontroller.core.IListener.Command receive(IOFSwitch sw,OFMessage msg,FloodlightContext cntx)
该语句负责对Packet_in消息进行处理,其中sw是代表交换机,msg是交换机的信息,cntx是控制器上下文;
存储数据包packet-in的类型,表示为:
List<String>PacketInType(IOFSwitch sw,OFMessage m,Ethernet eth)
该语句对packet_in消息判断是单播、组播、广播、以太网类型并提取出数据链路层至传输层的信息;
统计解析是UDP协议的packet-in的数据包的数目,表示为:
getPACKET_IN_UDP_Count()
该语句是统计收到packet_in数据包的个数。
基于三支决策原理,利用朴素贝叶斯的概率模型获得异常警报的阈值包括设置可疑流量阈值和异常流量阈值,判断数据包所处类型的概率是否大于可疑流量阀值,若大于则该数据包的为可疑数据包,并判断数据包所处类型的概率是否大于异常流量阈值,若大于则该数据包为异常数据包;若该数据包为异常流量数据包则,若该数据包为可疑流量数据包则,在计算出贝叶斯概率之后,通过设定几组可疑流量阈值和异常流量阈值并对比相应分类的正确率来选择最优的可疑流量阈值和异常流量阈值的取值。
目前的DDoS检测方法多数是将其视为二分类问题,即判断该流量是正常还是异常。在实际的情况中,这种观点没有考虑到行为本身的特性。例如,如果在网络中发送一种探测网络带宽或测试负载的数据包,对于发送该数据包的人来说他的目的是测量网络带宽和负载,但对于网络本身而言这实质上就是一种干扰网络正常运行的攻击行为,更极端一点,如果数据包一直进行被发送那么其性质就变成DDoS攻击。在学术界中有学者提出的三支决策理论,认为在实际决策过程中,对于具有充分把握接受或拒绝的事物能够立即作出快速的判断;对于哪些不能立即作出决策的事物,人们往往会推迟对事件的判断,即:延迟决策。那么,针对上述问题,提出一种基于三支决策与神经网络混合检测模型。
假设X是一个3元检测模型,X=(U,A=S∪L,f),其中U={object1,object2,object3,…,objectn}为每一个pkt_in数据包对象,A表示pkt_in数据包对象的属性,其中S={v1,v2,v3,…,vn}是每一个对象的解析后的属性字段,vn是一个对象解析后的第n个属性字段,L是该对象的检测标签,f是检测的决策函数。
设状态集
表示正常和异常两种状态,对于每一个pkt_in数据包对象object,如果是正常行为则object∈T,反之则
而决策函数f这里是基于朴素贝叶斯分类器。最后引入一组阈值α和β,根据三支决策理论。对DDoS预检测的正(POS)、负(NEG)、边界域(BND)有如下定义。
POS={object∈U,P(T|object)≥α}
NEG={object∈U,P(T|object)≤β}
BND={object∈U,β≤P(T|object)≤α}
上式表示object划分为正域、负域、边界域的条件。P(T|object)≥α表示是正常的流量,P(T|object)≤β表示是异常流量,β≤P(T|object)≤α表示可疑的流量。
在上述表达式中决策函数f是贝叶斯公式,并假设每个属性vi之间相互独立。
在上述公式中,其中n是属性字段的数目,objecti则表示pkt_in对象在第i个字段属性的取值;object表示数据包;T表示数据包为正常;P(T|object)表示数据包为正常情况的概率;P(T)表示数据包为正常情况的先验概率;P(object|T)表示数据包为正常情况的后验概率;P(object)表示全概率;P(objecti|T)表示对于数据包object的每一个属性objecti相互独立的条件下,数据包为正常的概率。
α和β阈值的设定:在计算出贝叶斯概率之后,通过设定几组α、β的阈值并对比相应分类的正确率来选择最优的α和β的取值。
在选择最优的α和β的取值时,考虑准确率、精确率、召回率以及F值,通过自适应调整α和β的值,当准确率、精确率、召回率以及F值平衡最优时的值即为选择的最优的α和β,其中:
准确率(正确率)=(TP+TN)/总样本;
精确率=TP/(TP+FP);
召回率=TP/(TP+FN);
F值=精确率*召回率*2/(正确率+召回率);
其中,TP表示真正类,即若一个实例是正类,且被预测成为正类;TN表示真负类,即一个实例是负类,且被预测成为负类;FP表示假正类,即一个实例是负类,且被预测成为正类;FN表示假负类,即一个实例是正类,且被预测成为负类。
在发出异常警报之后,对可疑流量和正常流量进行进一步检测,控制器Floodlight定期向OpenFlow交换机发送流表请求报文ofp_flow_status_request,OpenFlow交换机收到之后会发送ofp_flow_status_reply;基于这一原理,可以在linux上编写shell脚本来周期性的收集流表信息。在设置采样周期时应注意,采样周期设置太长,流表信息不具有连续性,设置的太短,则会增加控制器负载。
将采集到的流表信息数据重定向到某个文件之中,然后对原始流表信息进行数据处理。FlowData作为一个原始信息的封装类,其中包含duration、packets、bytes、idle_timeout、idle_age、protocol、src_port、dst_port、ip_src、ip_dst等属性,用来封装解析过后的特征。
JsonArray是一个Json存储Josn数据类型的数组,getasJsonObject方法则是为获取数组内的每一个Json对象并以JsonObject的方式存储。最后处理之后的数据,用FlowData进行封装并写入到文件之中。
将处理之后的数据进行特征的提取,持续时间Duration、数据包数目n_packet、数据包字节n_byte、空闲时间idle_timeout、未命中时间Idle_age、协议protocol、源IP地址src_ip、目的IP地址dst_ip、源端口Src_port、目的端口dst-port为提取的原始特征。
借助语义分析的思想,采用集成学习的方法对数据集进行处理,提取出能够较好分区DDoS的特征,语义分析的一般在文档分类中应用很广泛,它的目的是分析出上下文中词与词之间的关系,挖掘文档之中潜在的主题。对于不同的语言单位,语义分析的任务各不相同。在词的层次上,语义分析的基本任务是进行词义消歧(WSD),在句子层面上是语义角色标注(SRL),在篇章层面上是指代消歧,也称共指消解。在特征选择方面,对一些词义相近的特征标签或者依赖关系很近的几个标签,我们可以借助语义分析的思路对其进行“词义消歧”,去除一些冗余的特征,挖掘出一些重要的主题特征。在集成学习中,Bagging与随机森林能很好地匹配语义分析的思路,使我们能够选择出一些比较好的特征。
进一步在决策树的训练过程中引入了随机属性选择。这就与用潜在语义分析索引LSI方法寻找文本主题特征思想类似。在选择最优特征属性的过程中,随机森林算法会对基决策树的每个结点,从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性的用于划分。
Bagging算法的描述如下:
在上述算法中,T个含m个训练样本的采样集,D表示数据集,(xn,yn)表示一组训练数据,其中xn表示输入数据,yn表示输入数据的真实标签;Dbs表示采样后的数据集;基于每个采样样本集训练出一个基学习器ht(x),再将这些基学习器进行结合得到H(x)。
本文使用随机森林算法提取DARPA 2007数据集中一些重要特征,再利用提取的最优特征并结合在软件定义网络中采集的流表信息,构建出适用于在软件定义网络环境中进行DDoS检测的特征;优选的,本发明根据Bagging算法在DARPA 2007数据集中选取的特征为grnff、grsd、Abpf、crsp、crdp;最后整合流表的原始特征,形成多维度的DDoS特征向量组。
增量学习能让机器学习进一步具有自学习能力,并且能针对实际状态下的变化做出相应调整,使模型更加智能化,同时能提高收敛速度。本设计将增量学习算法运用到DDoS检测之中,增量学习的引入使得DDoS检测模型可以实现动态的、多样化的、连续的数据学习过程。
在本设计中,使用的是比较典型的增量学习的算法-基于主成分分析的增量算法。将形成的多维度的DDoS特征向量组进行基于主成分分析的增量学习,包括以下步骤:
对多维特征向量进行数据标准化以及归一化预处理;
计算预处理之后的多维特征向量的协方差矩阵,表示为:
对协方差矩阵进行奇异值分解SVD,最后进行空间映射,空间映射过程如图4,是一个多维向量降维的过程,得到进行增量学习之后的特征;
其中,D表示预处理之后的多维特征向量;m表示样本数目;Xi为第i个样本的向量表示。
这些经过增量学习之后形成的特征向量将作为DNN检测算法的输入。
深度神经网络(DNN)由输入层、隐藏层、输出层组成。深度神经网络在监督学习主要分为两个阶段。第一个阶段是信号的前向传播,从输入层经过隐藏层,最后到达输出层。第二阶段是误差的反向传播,从输出层到隐藏层,最后到输入层,依次调节隐藏层到输出层的权重和偏置,输入层到隐藏层的权重和偏置。
深度神经网络的算法流程如图5,在前向传播过程中,如图6,神经元接收来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值将于神经元的阈值比较,然后通过激活函数处理以产生神经元的输出。
在深度神经网络中反向传播的过程中,以误差平方和
作为目标函数进行反向迭代。计算参数的方法则采用梯度下降法,即计算所有参数的梯度(偏导数)
最后,当全局误差小于阈值,则结束训练,否则将继续迭代训练。在测试集中表现很好的模型将作为软件定义网络中DDoS检测模型,会对未知DDoS攻击类型的样本有一个比较好的预测。
本发明提出一种基于集成学习和神经网络的SDN的DDoS检测系统,包括packet_in信息提取模块、异常预警模块、流表信息收集模块、信息处理模块以及检测模块,其中:
packet_in信息提取模块用于提取packet_in包中的源IP地址、目的IP地址信息;
异常预警模块用于三支决策原理,利用朴素贝叶斯的概率模型获得异常警报的阈值,计算数据包所处类型的概率低于阈值,则发出异常预警;
流表信息收集模块用于收集DDoS检测所需要的OpenFlow流表数据;控制器Floodlight定期向OpenFlow交换机发送流表请求报文ofp_flow_status_request,OpenFlow交换机收到之后会发送ofp_flow_status_reply,基于这一原理,我们可以在linux上编写shell脚本来周期性的收集流表信息;
信息处理模块用于对收集的OpenFlow流表数据进行标准化、归一化、降维的数据操作;在该模块中,将采集到的流表信息数据重定向到某个文件之中,然后对原始流表信息进行数据处理。FlowData作为一个原始信息的封装类,其中包含duration、packets、bytes、idle_timeout、idle_age、protocol、src_port、dst_port、ip_src、ip_dst等属性,用来封装解析过后的特征;优选的,在本实施例中,JsonArray是一个Json存储Josn数据类型的数组,getasJsonObject方法则是为获取数组内的每一个Json对象并以JsonObject的方式存储,最后处理之后的数据,用FlowData进行封装并写入到文件之中;
基于深度神经网络的检测模块用于在第一检测阶段发出异常报警之后,利用神经网络的方法进一步进行深入检测,分析是发生哪一类攻击。
本发明系统的构架如图2,packet_in信息提取模块主要用于提取packet_in包中的源IP地址、目的IP地址信息,可采用以下方法:
1.net.floodlightcontroller.core.IListener.Command receive(IOFSwitchsw,OFMessage msg,FloodlightContext cntx)
功能:该方法负责对Packet_in消息进行处理,其中sw是代表交换机,msg是交换机的信息,cntx是控制器上下文;实现的代码表示为:
上述代码在SDN控制器内部进行模块开发,这个函数的就是用来监听SDN控制与OpenFlow交换机之间的信息,当捕获的OFMessage是Packet-in类型时,对其进行处理,解析数据链路层、网络层、运输层这三层包含的信息(MAC地址、IP地址、运输层协议、端口号)。
2.List<String>PacketInType(IOFSwitch sw,OFMessage m,Ethernet eth)
该方法对packet_in消息判断是单播、组播、广播、以太网类型并提取出数据链路层至传输层的信息。
3.getPACKET_IN_UDP_Count()
该方法是统计收到packet_in数据包的个数。
异常预警模块基于三支决策,具体实现是概率粗糙集-朴素贝叶斯的方法对阈值进行预估。当新的pkt_in数据包被解析后,计算贝叶斯概率与被划分为负域和边界域的阈值进行比较,如果属于负域、边界域则将标志flag置为0并发出异常警报,具体包括以下流程:
其中,P(T|oi(vj))表示表示该第i个object(数据包)属于T(正常)的贝叶斯概率;oi表示第i个object(数据包);POS(T)表示正域集合;oi(vj)表示;NEG(T)表示负域集合;BND(T)表示边界域集合。
在发出异常警报之后,就会进入第二阶段,即基于深度神经网络的检测模块,这个阶段主要目的将异常情况分类,方法部分已对深度神经网络进行说明,此处不再赘述。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。