本发明属于网络信息安全
技术领域:
:,更具体地,涉及一种基于哈希算法的异常流量并行检测方法及系统。
背景技术:
::最早的网络在实验室的环境中提出,用于相互信任的终端之间进行通信,发展至今,已然成为了沟通全球的工具。随之而来的,也是发明之初没有考虑到的各类安全问题:发送方和接收方的可信度需要证实,通信内容的加密性需要保障、可靠性需要验证。为了解决这些问题,通信双方传递的数据包就成为了安全分析的重要对象。不信任方发送的数据、黑客进行攻击的数据、泄漏隐私信息的数据等都可以被判定为网络中的恶意流量,在内部网络和外部网络之间,设置一道遵循有效安全访问策略的检测工具,可以适时地阻止恶意流量的出入。防火墙便基于这样的需求被提出,它是一种介于内部网络和外部网络之间,为局域网和全球互联网提供安全保障的安全系统。然而,防火墙也有其自身的局限性——无法检测不经过防火墙的数据,以及对内部的攻击抵抗性较差,于是入侵检测系统作为对防火墙技术的补充,成为又一重要的安全保障技术。异常流量检测系统是入侵检测系统的分支。现有的异常流量检测系统主要包括基于误用检测技术和基于异常检测技术的两类系统,其中基于误用检测技术的异常流量检测系统是建立在对已知网络入侵规则或模式的数据库上,通过与已知异常规则的匹配来判断当前流量是否合法。误用检测几乎不存在误检测,能够做到对已知模式的准确匹配,在实现上多采用模式匹配的技术。基于异常检测技术的异常流量检测系统是建立在入侵行为作为异常行为子集的前提下,通过检测行为是否偏离正常模型状态来分辨异常行为,在实现上多采用机器学习的技术。然而,上述现有的异常流量检测系统均存在一些不可忽略的缺陷:第一、基于误用检测技术的异常流量检测系统对已知入侵规则库的依赖性很强,需要有足够大的匹配标准库,从而降低漏报率,然而匹配速率就会随之下降;第二、基于异常检测技术的异常流量检测系统对于已知异常行为的判断并不完全准确,并且现有的机器学习在异常流量检测系统上的应用效果尚且欠佳,无法达到满意的检测效果。技术实现要素:针对现有技术的以上缺陷或改进需求,本发明提供了一种基于哈希算法的异常流量并行检测方法,其目的在于,从并行和调度的角度,解决模式匹配规则库过大带来的匹配速率慢的问题,在通过异常流量检测提高设备安全性的同时,通过哈希算法分散性检测数据包,结合多核协作降低异常流量包重复检测率;同时实现降低漏报率和提高检测速率,更快向设备端进行异常报警,从而采取相应措施。。为实现上述目的,按照本发明的一个方面,提供了一种基于哈希算法的异常流量并行检测方法,包括以下步骤:(1)主节点设置计数器i=1以及检测轮数k=1;(2)主节点接收客户端从外部网络发往内部网络的数据包并将其存储在缓存区中,并判断该数据包与预先建立好的第i个数据派发表中数据包总数之和是否超过阈值nmax,如果是则进入步骤(4),否则进入步骤(3);(3)主节点对缓存区中的数据包进行数据清洗,以得到数据清洗后的数据包,并将数据清洗后的数据包存储在作为当前数据派发表的第i个数据派发表中;(4)主节点判断是否所有从节点都处于检测完成状态,若是则将当前数据派发表发给每个从节点,并进入步骤(5),否则返回步骤(3);(5)主节点设置轮数k=k+1,并对作为非当前数据派发表的第1-i个数据派发表进行遍历,逐一读取其中的正常数据包,将其发送到内部网络;(6)主节点设置计数器i=1-i;并判断是否继续进行检测,若是则进入步骤(7),否则过程结束;(7)从节点接收作为当前数据派发表的第1-i个数据派发表,根据该数据派发表中数据包编号初始化预先在内存中建立的检测情况表,同时将各个数据包编号对应的检测情况设置为未检测,并得到第k轮检测的数据包总数n,初始化检测情况表中检测情况为已检测的数据包数ndetec=0,并判断是否收到其他从节点发送的异常数据包,若是则将该异常数据包的信息录入检测情况表中,并进入步骤(8),否则直接进入步骤(8);(8)从节点判断检测情况表中是否还存在检测情况为未检测的数据包,若是则进入步骤(9),否则进入步骤(12);(9)从节点根据哈希算法从检测情况表中获取检测情况为未检测的数据包的数据包编号;(10)从节点通过步骤(9)中得到的检测情况为未检测的数据包的数据包编号查找当前数据派发表(即第1-i个数据派发表),以得到该数据包编号对应的数据包,根据模式匹配算法将该数据包与本节点划分到的规则库中的异常规则逐一进行模式匹配,并判断模式匹配是否成功,若是则说明该数据包为异常数据包,立即停止检测,并进入步骤(11),否则说明该数据包为正常数据包,并返回步骤(8);(11)从节点将步骤(10)中得到的异常数据包的数据包编号、以及与该异常数据包匹配的异常规则类型一起作为异常数据包信息发送给所有从节点和主节点,并将该数据包在检测情况表中的检测情况修改为异常类型,并将检测情况表中检测情况为已检测的数据包数ndetec增加1,返回步骤(8);(12)从节点向主节点发送包括其节点编号的数据包信息,以通知主节点该编号对应从节点已完成第k轮数据包检测;(13)主节点接收从节点发送的数据包信息,并判断其中是否包括从节点的节点编号,若是则进入步骤(14),否则说明该数据包信息是异常数据包信息,进入步骤(15);(14)主节点根据数据包信息中的节点编号,将检测状态表中相应节点编号所对应的检测状态设置为检测完毕,以得到更新后的检测状态表,然后返回步骤(4);(15)主节点根据步骤(11)中从节点发送的异常数据包信息,将第k轮的当前数据派发表中对应的数据包内容和数据包的异常类型一起发送至异常存储区;并在当前数据派发表中将该数据包的数据包编号及数据包内容删除,从而得到更新后的数据派发表datatable_(1-i)作为非当前数据派发表,并返回步骤(4)。优选地,缓存区是预先建立在服务器的内存中,其大小是mb级别;预先在服务器的内存中建立有两个数据派发表,分别表示为datatable_0和datatable_1,并由数据包编号和数据包内容组成,最多可以存放nmax条数据。优选地,数据清洗包括删除长度不规范的数据包,删除格式不规范的数据包,删除无用的符号,并删除重复的数据。优选地,主节点通过读取预先建立在内存中的检测状态表来判断所有从节点是否处于检测完成状态;检测状态表用于记录所有从节点的检测状态,由从节点的编号和当前检测状态组成,表格大小为2×m,其中m表示从节点总数;当检测状态表中所有从节点检测状态都为检测完成,则标志第k轮检测已经完成,可以继续派发k+1轮的数据派发表。优选地,检测情况表是每个从节点维护的反映每组数据包的检测情况的表,由数据包编号和该数据包在该节点中的检测情况组成,检测情况分为未检测、已检测和异常类型三种,检测情况表只能由本节点进行读写。异常数据包的信息包括异常数据包的数据包编号和对应的检测情况中的异常类型,当一个从节点检测到某个数据包为异常时,将会把该异常数据包的信息发送给其他从节点和主节点,将该异常数据包的检测情况录入检测情况表;优选地,步骤(9)具体包括以下子步骤:(9-1)根据当前从节点编号a、从节点总数m、检测情况表中检测情况为已检测的数据包数ndetec、冲突次数di和第k轮检测的数据包总数n计算得到键值x;(9-2)将步骤(9-1)得到的键值x作为哈希函数h(x)的输入,得到哈希值j;(9-3)获取检测情况表中哈希值等于j的数据包编号,并判断该数据包编号在检测情况表中对应的检测情况是否为未检测,若是则获取该未检测的数据包的数据包编号,同时将检测情况表中检测情况为已检测的数据包数ndetec增加1,然后进入步骤(10),否则将冲突次数di增加1,并返回步骤(9-1);按照本发明的另一方面,提供了一种基于哈希算法的异常流量并行检测方法,包括以下步骤:第一模块,其设置于主节点,用于设置计数器i=1以及检测轮数k=1;第二模块,其设置于主节点,用于接收客户端从外部网络发往内部网络的数据包并将其存储在缓存区中,并判断该数据包与预先建立好的第i个数据派发表中数据包总数之和是否超过阈值nmax,如果是则进入第四模块,否则进入第三模块;第三模块,其设置于主节点,用于对缓存区中的数据包进行数据清洗,以得到数据清洗后的数据包,并将数据清洗后的数据包存储在作为当前数据派发表的第i个数据派发表中;第四模块,其设置于主节点,用于判断是否所有从节点都处于检测完成状态,若是则将当前数据派发表发给每个从节点,并进入第五模块,否则返回第三模块;第五模块,其设置于主节点,用于设置轮数k=k+1,并对作为非当前数据派发表的第1-i个数据派发表进行遍历,逐一读取其中的正常数据包,将其发送到内部网络;第六模块,其设置于主节点,用于设置计数器i=1-i;并判断是否继续进行检测,若是则进入第七模块,否则过程结束;第七模块,其设置于从节点,用于接收作为当前数据派发表的第1-i个数据派发表,根据该数据派发表中数据包编号初始化预先在内存中建立的检测情况表,同时将各个数据包编号对应的检测情况设置为未检测,并得到第k轮检测的数据包总数n,初始化检测情况表中检测情况为已检测的数据包数ndetec=0,并判断是否收到其他从节点发送的异常数据包,若是则将该异常数据包的信息录入检测情况表中,并进入第八模块,否则直接进入第八模块;第八模块,其设置于从节点,用于判断检测情况表中是否还存在检测情况为未检测的数据包,若是则进入第九模块,否则进入第十二模块;第九模块,其设置于从节点,用于根据哈希算法从检测情况表中获取检测情况为未检测的数据包的数据包编号;第十模块,其设置于从节点,用于通过第九模块中得到的检测情况为未检测的数据包的数据包编号查找当前数据派发表(即第1-i个数据派发表),以得到该数据包编号对应的数据包,根据模式匹配算法将该数据包与本节点划分到的规则库中的异常规则逐一进行模式匹配,并判断模式匹配是否成功,若是则说明该数据包为异常数据包,立即停止检测,并进入第十一模块,否则说明该数据包为正常数据包,并返回第八模块;第十一模块,其设置于从节点,用于将第十模块中得到的异常数据包的数据包编号、以及与该异常数据包匹配的异常规则类型一起作为异常数据包信息发送给所有从节点和主节点,并将该数据包在检测情况表中的检测情况修改为异常类型,并将检测情况表中检测情况为已检测的数据包数ndetec增加1,返回第八模块;第十二模块,其设置于从节点,用于向主节点发送包括其节点编号的数据包信息,以通知主节点该编号对应从节点已完成第k轮数据包检测;第十三模块,其设置于主节点,用于接收从节点发送的数据包信息,并判断其中是否包括从节点的节点编号,若是则进入第十四模块,否则说明该数据包信息是异常数据包信息,进入第十五模块;第十四模块,其设置于主节点,用于根据数据包信息中的节点编号,将检测状态表中相应节点编号所对应的检测状态设置为检测完毕,以得到更新后的检测状态表,然后返回第四模块;第十五模块,其设置于主节点,用于根据第十一模块中从节点发送的异常数据包信息,将第k轮的当前数据派发表中对应的数据包内容和数据包的异常类型一起发送至异常存储区;并在当前数据派发表中将该数据包的数据包编号及数据包内容删除,从而得到更新后的数据派发表datatable_(1-i)作为非当前数据派发表,并返回第四模块。总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:(1)由于本发明采用了步骤(11)到步骤(15),其提出了一种的多节点并行、通信合作的异常流量检测方法,在保证了正常入侵检测系统功能的同时,通过节点间信息共享解决异常数据包在其他节点重复检测的问题,具有快速检测的效果,能及时发现异常流量并进行告警隔离,同时也加快了正常流量检测的速度,提高了整体流量检测的效率。(2)由于本发明采用了步骤(9),其基于哈希算法对各从节点对数据包的选择进行优化,尽可能让各从节点分散性检测数据包,降低各从节点同一时间段检测到同一数据包的概率,间接降低异常数据包的重复检测率,加快检测速度。附图说明图1是本发明基于哈希算法的异常流量并行检测方法的应用环境图;图2是本发明基于哈希算法的异常流量并行检测方法的基本架构图;图3是本发明基于哈希算法的异常流量并行检测方法的流程图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。本发明的基本思路在于,通过规则库并行,将单个流量包需要匹配的规则库均分到多个从节点中,同时采用多节点协作的方式,当某一从节点检测到一数据包为异常流量时,将这一信息也通知给其他从节点,而哈希算法则给从节点提供了分散性选取数据包检测的算法,降低各从节点同时检测同一数据包的概率。多节点协作和哈希算法结合降低了从节点对已(被其他从节点)判断为异常数据包重复检测的概率,提高检测速率。进一步来说,异常流量检测系统由多个节点组成,其中节点分为主节点和从节点,主节点负责对拦截到的数据包进行清洗、派发和重新转发,从节点负责接收主节点派发的数据包并对其进行异常检测。如图1所示,是本发明基于哈希算法的异常流量并行检测方法的应用环境图,本发明的方法是应用在连接于外部网络(例如internet)和内网(例如intranet)之间的服务器上,该服务器中包括一个主节点和多个从节点,可以抓取和拦截所有发向本内网的数据包。如图2和图3所示,本发明提供了一种基于哈希算法的异常流量并行检测方法,包括以下步骤:(1)主节点设置计数器i=1以及检测轮数k=1;(2)主节点接收客户端从外部网络发往内部网络的数据包并将其存储在缓存区中,并判断该数据包与预先建立好的第i个数据派发表中数据包总数之和是否超过阈值nmax,如果是则进入步骤(4),否则进入步骤(3);在本步骤中,缓存区是预先建立在服务器的内存中,其大小是mb级别。在本发明中,预先在服务器的内存中建立有两个数据派发表,分别表示为datatable_0和datatable_1。数据派发表大小为2×n(其中n表示第k轮检测的数据包总数),由数据包编号和数据包内容组成,最多可以存放nmax条。对datatable_0的数据包编号和表地址进行派发后,从节点可以从该表中读取数据包内容,同时需要在检测完成后对表中剩余http数据包进行转发,因此需要一直维护和使用正在检测的数据派发表datatable_0,故将下一次需要派发的数据存储到datatable_1中,下一次派发了datatable_1的数据包后,再将数据读取到datatable_0中,以此类推,交替进行。程序具体运行时,根据计数器i区分哪个数据派发表用于读取,哪个数据包用于存储新数据包。在本发明中,阈值nmax的取值范围在10~10000,优选为3600。(3)主节点对缓存区中的数据包进行数据清洗,以得到数据清洗后的数据包,并将数据清洗后的数据包存储在作为当前数据派发表的第i个数据派发表中;具体而言,数据清洗主要包括删除长度不规范的数据包(即不为4的倍数),删除格式不规范的数据包(例如缺少协议号等),删除无用的符号(即除了希望保留的符号之外的其余符号,例如空格、回车等),并删除重复的数据。(4)主节点判断是否所有从节点都处于检测完成状态,若是则将当前数据派发表发给每个从节点,并进入步骤(5),否则返回步骤(3);具体而言,主节点通过读取预先建立在内存中的检测状态表来判断所有从节点是否处于检测完成状态。检测状态表是记录所有从节点检测状态的表,由从节点的编号和当前检测状态组成,表格大小为2×m,其中m为从节点总数。当检测状态表中所有从节点检测状态都为检测完成,则标志第k轮检测已经完成,可以继续派发k+1轮的数据派发表。(5)主节点设置轮数k=k+1,并对作为非当前数据派发表的第1-i个数据派发表进行遍历,逐一读取其中的正常数据包,将其发送到内部网络;具体而言,正常数据包是指不包含任何异常规则的数据包,异常数据包是指包含某一异常规则的数据包。(6)主节点设置计数器i=1-i;并判断是否继续进行检测,若是则进入步骤(7),否则过程结束;具体来说,由于此时计数器改变,为了维持当前数据派发表的指向不变,当前数据派发表的说法也从第i个数据派发表变化为第1-i个数据派发表,但实际数字并未改变。(7)从节点接收作为当前数据派发表的第1-i个数据派发表,根据该数据派发表中数据包编号初始化预先在内存中建立的检测情况表(即用数据派发表中数据包编号给检测情况表中的数据包编号赋值),同时将各个数据包编号对应的检测情况设置为未检测,并得到第k轮检测的数据包总数n(即第1-i个数据派发表中的数据包总数),初始化检测情况表中检测情况为已检测的数据包数ndetec=0(其用于表示已经检测数据包数),并判断是否收到其他从节点发送的异常数据包,若是则将该异常数据包的信息录入检测情况表中,并进入步骤(8),否则直接进入步骤(8);具体而言,检测情况表是每个从节点维护的反映每组数据包的检测情况的表,由数据包编号和该数据包在该节点中的检测情况组成,大小为2×n,检测情况分为未检测、已检测和异常类型三种,检测情况表只能由本节点进行读写;具体而言,异常数据包的信息包括异常数据包的数据包编号和对应的检测情况中的异常类型,当一个从节点检测到某个数据包为异常时,将会把该异常数据包的信息发送给其他从节点和主节点;将该异常数据包的检测情况录入检测情况表,即将检测情况表中相应数据包的检测情况修改为对应的检测情况;(8)从节点判断检测情况表中是否还存在检测情况为未检测的数据包,若是则进入步骤(9),否则进入步骤(12);(9)从节点根据哈希算法从检测情况表中获取检测情况为未检测的数据包的数据包编号;具体而言,本步骤具体包括以下子步骤:(9-1)根据当前从节点编号a、从节点总数m、检测情况表中检测情况为已检测的数据包数ndetec、冲突次数di(每次检测前初始化为0)和第k轮检测的数据包总数n计算得到键值x;具体而言,键值x的计算方法如下所示:x=a+ndetec·m+di(9-2)将步骤(9-1)得到的键值x作为哈希函数h(x)的输入,得到哈希值j;具体而言,哈希函数h(x)由键值x和第k轮检测的数据包总数n计算得到,如下所示:j=h(x)=xmodn(9-3)获取检测情况表(即哈希算法中的哈希表)中哈希值等于j的数据包编号,并判断该数据包编号在检测情况表中对应的检测情况是否为未检测,若是则获取该未检测的数据包的数据包编号,同时将检测情况表中检测情况为已检测的数据包数ndetec增加1,然后进入步骤(10),否则将冲突次数di增加1,并返回步骤(9-1);(10)从节点通过步骤(9)中得到的检测情况为未检测的数据包的数据包编号查找当前数据派发表(即第1-i个数据派发表),以得到该数据包编号对应的数据包,根据模式匹配算法将该数据包与本节点划分到的规则库中的异常规则逐一进行模式匹配,并判断模式匹配是否成功,若是则说明该数据包为异常数据包,立即停止检测,并进入步骤(11),否则说明该数据包为正常数据包,并返回步骤(8);具体而言,本步骤中使用的模式匹配算法是bm(boyer-moore)算法。具体而言,每个从节点在模式匹配时比较的异常规则,是由系统初始化时对总规则库根据从节点数量均匀划分得到的。(11)从节点将步骤(10)中得到的异常数据包的数据包编号、以及与该异常数据包匹配的异常规则类型一起作为异常数据包信息发送给所有从节点和主节点,并将该数据包在检测情况表中的检测情况修改为异常类型,并将检测情况表中检测情况为已检测的数据包数ndetec增加1,返回步骤(8);(12)从节点向主节点发送包括其节点编号的数据包信息,以通知主节点该编号对应从节点已完成第k轮数据包检测;(13)主节点接收从节点发送的数据包信息,并判断其中是否包括从节点的节点编号,若是则进入步骤(14),否则说明该数据包信息是异常数据包信息,进入步骤(15);(14)主节点根据数据包信息中的节点编号,将检测状态表中相应节点编号所对应的检测状态设置为检测完毕,以得到更新后的检测状态表,然后返回步骤(4);(15)主节点根据步骤(11)中从节点发送的异常数据包信息,将第k轮的当前数据派发表中对应的数据包内容和数据包的异常类型一起发送至异常存储区;并在当前数据派发表中将该数据包的数据包编号及数据包内容删除,从而得到更新后的数据派发表datatable_(1-i)作为非当前数据派发表,并返回步骤(4)。总而言之,本发明能提高规则库并行情况下的模式匹配效率,通过多核协作增加单位时间内检测的流量包数量,解决规则库过大带来的检测速率底下的问题,在降低漏报率的同时提高检测速率,更快进行异常报警,从而采取相应措施。本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12