一种异常流量检测方法
技术领域
本发明涉及计算机系统技术领域,尤其涉及一种异常流量检测方法。
背景技术
僵尸网络具有攻击方法简单、影响较大以及难以追查等特点,使得分布式拒绝服务攻击(DistributedDenialofService,DDoS,)得到快速壮大和日益泛滥。成千上万主机组成的僵尸网络为DDoS攻击提供了所需的带宽和主机,形成了规模巨大的攻击和网络流量,对被攻击网络造成了极大的危害。随着DDoS攻击技术的不断提高和发展,互联网服务提供商(InternetServiceProvider,ISP)、因特网内容提供商(InternetContentProvider,ICP)以及互联网数据中心(InternetDataCenter,IDC)等运营商面临的安全和运营挑战也不断增多,运营商必须在DDoS威胁影响关键业务和应用之前,对流量进行检测并加以清洗,确保网络正常稳定的运行以及业务的正常开展。
由于DDOS攻击的危害是巨大的,不仅会很快就使被攻击的服务器无法正常提供服务,甚至还会造成整个网络出现拥堵,严重时更会令到网络陷入瘫痪,影响同处于该网络中的其他服务器,所以及时找出网络中的攻击显得尤其重要。
目前的攻击检测方法一般使用固定阈值或者建立流量动态基线的方法,这两种方法都有很明显的缺点。固定阈值会因为阈值的设定过大或者过小造成误判和漏判;而如果使用流量动态基线,本来流量很小的目标因为基数小很容易会出现突发的情况而造成误判,流量大的目标又会因为变化幅度不大而可能会漏判。对于误报正常业务的突发流量,是这两种方法的共同缺陷。而流量动态基线在为每个新目标建立的初始阶段,是无法检测出攻击的,并且如果用攻击的流量来建立基线,甚至可能会出现往后都无法再检测发生在此目标上的攻击。
发明内容
有鉴于此,本发明实施例提供一种异常流量检测方法,以解决现有技术中的技术问题。
本发明实施例提供了一种异常流量检测方法,包括:
接收报文;
根据报文类型进行数量统计,存储至IP哈希数组,并在所述IP哈希数组中存储流量特征;
根据所述IP哈希数组中存储的报文数量信息,将数量排名前N位的报文的IP信息存储至排序数组中,N为自然数;
接收新IP信息,更新排名前N位的报文的IP信息并存储到排序数组;
在更新后的所述排序数组中,根据设定特征值校验对应类型的报文是否发生异常流量行为。
本发明实施例提供的一种异常流量检测方法,通过使用改良的最小二根堆算法实时计算出整个网络中流量等各项指标排名前列的目标,再对排名前列的目标加以行为分析准确地判定出这些目标是否发生了异常流量行为,本方法适用于任何一个网络中,同时能够把程序刚刚启动时发生的攻击也能检测出来,也能区分正常突发的业务流量。本发明实施例提供的异常流量检测方法正是解决固定阈值和流量动态基线等现有方法无法解决的漏报误报等问题,能够准确和及时地发现攻击,把误报率和漏报率大大降低。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1是本发明实施例一提供的一种异常流量检测方法流程图;
图2是本发明实施例一提供的一种异常流量检测方法具体过程流程图;
图3是本发明实施例二提供的一种异常流量检测方法流程图;
图4是本发明实施例三提供的一种异常流量检测方法流程图;
图5是本发明实施例三提供的一种异常流量检测方法具体过程流程图;
图6是本发明实施例四提供的一种异常流量检测方法流程图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
实施例一
图1为本发明实施例一中的一种异常流量检测方法流程图,本实施例提供了一种异常流量检测方法,该方法可以由任意执行流量检测的装置来执行,该装置可以通过软件和/或硬件实现。如图1所示,该方法包括:
S110、接收报文;
S120、根据报文类型进行数量统计,存储至IP哈希数组,并在所述IP哈希数组中存储流量特征;
示例性的,建立一个全局的IP哈希数组(HASH)用来统计IP流量等信息,所述IP哈希数组可以包含不同的变量来对IP流量等信息进行统计。优选的,所述IP哈希数组可以对IP流量包含的报文信息进行统计,例如:所述IP哈希数组可以包含变量SYN、ICMP以及UDP,分别用于统计同步报文(syn报文)数量、控制信息报文(icmp报文)数量以及用户数据报文(udp报文)数量。由于同步报文和控制信息报文流量特征比较单一,判断攻击比较简单,所以可以直接通过对这两种报文出现的频率做出判断,但用户数据报文流量特征多样,其出现频率再大都可能是正常的,所以用户数据报文需要根据其端口的出现频率、校验码的相同程度再加以判断,所述IP哈希数组还可以包含变量DNA,用于抽取用户数据报文流量特征,其成员可以包括多个,优选的,DNA成员可以包括CUR、SAME、REPLY以及TCP。
参见图2,基于上述方案,该操作包括:
S121、识别报文类型;
S122、如果所述报文类型为同步报文,则在所述IP哈希数组的第一流量特征中记录同步报文数量;
S123、如果所述报文类型为控制信息报文,则在所述IP哈希数组的第二流量特征中记录控制信息报文数量;
S124、如果所述报文类型为用户数据报文,则在所述IP哈希数组的第三流量特征中记录用户数据报文数量;
S125、从所述用户数据报文中提取流量特征,存储至所述IP哈希数组的第四流量特征中。
S130、根据所述IP哈希数组中存储的报文数量信息,将数量排名前N位的报文的IP信息存储至排序数组中,N为自然数;
示例性的,建立一个全局的排序数组(TOP数组)用来保存排名前N位的IP信息,初始化排序数组,所述排序数组的成员包括第一排序子数组(SYN)、第二排序子数组(ICMP)以及第三排序子数组(UDP),每个子数组成员的长度为N+1(第一个即下标为0的元素不使用),分别用于保存前N位报文的IP信息。进一步的,根据所述IP哈希数组中存储的报文数量信息,按照报文类型,以最小二根堆的形式将数量排名前N位的报文的IP信息存储至各排序子数组中。例如,排名前N位的同步报文的IP信息存储至第一排序子数组;排名前N位的控制信息报文的IP信息存储至第二排序子数组;排名前N位的用户数据报文的IP信息存储至第三排序子数组。
S140、接收新IP信息,更新排名前N位的报文的IP信息并存储到排序数组;
所述排序数组为动态数组,需要根据新IP信息的具体情况根据最小二根堆特性重新排序。
S150、在更新后的所述排序数组中,根据设定特征值校验对应类型的报文是否发生异常流量行为。
进一步的,所述设定特征值可以根据所在的网络环境中总流量的大小自行设定,例如设定为10000。当所在网络环境流量较大时可以设定较大的特征值,例如设定为100000,当所在网络环境流量较小时可以设定较小的特征值,例如设定为1000,所述特征值的设定比较灵活,可视具体情况而定,所述特征值的设定不单一。
本发明实施例一提供的异常流量检测方法,通过建立全局的IP哈希数组以及全局的排序数组,将IP信息的各项指标分别进行存储、排序以及流量检查分析,可以实时计算出整个网络中流量等各项指标排名前列的目标,再对这些排名前列的目标进行详细的行为检测,能够准确和及时地发现流量异常的情况,把误报率和漏报率大大降低。
实施例二
图3为本发明实施例二中的一种异常流量检测方法流程图,本实施例的技术方案以上述实施例一为基础,在实施例一的基础上作进一步的优化。
进一步的,根据所述IP哈希数组中存储的报文数量信息,按照报文类型,以最小二根堆的形式将数量排名前N位的报文的IP信息存储至各排序子数组中包括:
S310、根据所述IP哈希数组中存储的报文数量信息,按照报文类型,采用第一排序函数,通过向上遍历排序子数组保持所述排序子数组的最小二根堆特性;
S320、根据所述IP哈希数组中存储的报文数量信息,按照报文类型,采用第二排序函数,通过向下遍历排序子数组保持所述排序子数组的最小二根堆特性。
示例性的,所述排序数组中每个成员为一个最小二根堆,即所述排序数组中每个成员以完全二叉树的形式存在,以第一排序子数组为例:
假设TOP→SYN[i]为非叶子节点,则其左孩子为TOP→SYN[i*2],其右孩子为TOP→SYN[i*2+1],此时所述最小二根堆的第一个非叶子节点从1开始;
假设TOP→SYN[i]为非叶子节点,则其左孩子为TOP→SYN[i*2+1],其右孩子为TOP→SYN[i*2+2],此时所述最小二根堆的第一个非叶子节点从0开始;
假设TOP→SYN[i]为非叶子节点,则其左孩子为TOP→SYN[i*2-1],其右孩子为TOP→SYN[i*2],此时所述最小二根堆的第一个非叶子节点从2开始。
这里可以有很多种情况,只需保证从i-N+i的值都是所述最小二根堆的节点下标值,另外要求左孩子的节点下标值一定要比其父节点下标值大,右孩子的节点下标值比左孩子的节点下标值大。
设置所述第一排序函数和第二排序函数的目的是保持排序数组的最小二根堆特性。优选的,设置第一排序函数为top_up(j),第二排序函数为top_down(j),这两个函数的作用是假设当前排序数组已经具备最小二根堆特性,更新了位置j的值,假设新值比原来的值小,那么可能这个节点的新值会比其父节点的值小所以需要进行不断上移操作直到排序数组重新满足最小二根堆特性,这些操作由top_up(j)来完成,第一排序函数的作用即通过向上遍历排序子数组保持所述排序子数组的最小二根堆特性。相同原理的,top_down(j)的行为与top_up(j)相反,第二排序函数的作用即通过向下遍历排序子数组保持所述排序子数组的最小二根堆特性。
本发明实施例二提供的方法,使用最小二根堆对排序数组进行排序,保持排序数组的最小二根堆特性,子节点上只有左孩子和右孩子两种情况,使整个排序数组的排序关系简单明了。同时,当有新的IP信息进入时,使用第一排序函数或者第二排序函数,通过向上遍历或者向下遍历的方法对排序数组进行重新排序,逻辑清晰。
实施例三
图4为本发明实施例三中的一种异常流量检测方法流程图,本实施例的技术方案以上述实施例为基础,在上述实施例的基础上作进一步的优化。
进一步的,接收新IP信息,更新排名前N位的报文的IP信息并存储到排序数组包括:
S410、创建两个线程;
S420、第一线程负责在流入流出报文中抽取IP地址和报文类型(TYPE),存入IP哈希数组;
示例性的,如果报文类型为同步报文,则HASH[IP]→SYN+1,即在IP哈希数组中将同步报文数量加1;
否则,如果报文类型为控制信息报文,则HASH[IP]→ICMP+1,即在IP哈希数组中将控制信息报文数量加1;
否则,如果报文类型为用户数据报文,则HASH[IP]→UDP+1,即在IP哈希数组中将用户数据报文数量加1。
进一步的,如果IP存在于第三排序子数组中,则取出报文中的原端口(SPORT),目标端口(DPORT)和校验值(CHECK):
示例性的,如果源端口的值为某些特定值,例如,目前已经在网络中出现过的攻击的一些端口:123,1900,53,则HASH[IP]→DNA→REPLY+1,即在IP哈希数组中将DNA中的成员REPLY数量加1;
如果目标端口的值为某些特定值,例如,目前已经在网络中出现过的攻击的一些端口:22,80,443,则HASH[IP]→DNA→TCP+1,即在IP哈希数组中将DNA中的成员TCP数量加1;
如果CHECK=HASH[IP]→DNA→CUR,则HASH[IP]→DNA→SAME+1,否则,HASH[IP]→DNA→CUR=CHECK。即当校验值与IP哈希数组中DNA中的成员CUR取值相同时,在IP哈希数组中将DNA中的成员SAME数量加1,否则将IP哈希数组中DNA中的成员CUR赋值给校验值。
只要存在报文的流入流出,第一线程就开始工作,负责在流入流出报文中抽取IP地址和报文类型,存入IP哈希数组。
S430、第二线程负责遍历所述IP哈希数组,获取所述IP哈希数组中每一个IP信息,判断所述IP信息是否存在于相应的排序数组中。
若不存在,则将所述IP信息对应的流量特征与所述排序数组中首个IP信息对应的流量特征进行比较,如果比首个IP信息对应的流量特征大,则替换首个IP信息并调用第二排序函数;
若存在,则将所述IP信息的新的流量特征与所述排序数组中此IP信息的旧的流量特征做比较,并根据比较结果相应地调用第一排序函数或者第二排序函数,使排序数组保持最小二根堆特性,然后将所述新的流量特征和旧的流量特征进行比较,判断是否发生异常流量行为。
参见图5,优选的,基于上述方案,该操作包括:
S431、获取所述IP信息的流量特征SYN,判断所述IP信息是否存在于TOP→SYN中;
若不存在,则将所述IP信息的流量特征SYN与TOP→SYN数组中首个IP信息对应的流量特征SYN进行比较,如果比首个IP信息对应的流量特征SYN大,则替换首个IP信息,标记所述IP信息具备TOP_SYN属性(即存在于TOP→SYN数组中)并且把被替换的IP信息的TOP_SYN属性取消,然后调用top_down(j),使新的排序数组重新满足最小二根堆特性。
若存在,则将所述IP信息的新的流量特征SYN与TOP→SYN数组中此IP信息的旧的流量特征SYN做比较,如果新的流量特征SYN比旧的流量特征SYN小,则更新TOP→SYN[j]为所述新的流量特征SYN后调用top_up(j),否则更新TOP→SYN[j]为所述新的流量特征SYN后调用top_down(j)。
将所述新的流量特征SYN和旧的流量特征SYN进行比较,如果SYN前后两次差值大于某一设定特征值,例如:10000,则判断发生SYNFLOOD,存在异常流量行为。
S432、获取所述IP信息的流量特征ICMP,判断所述IP信息是否存在于TOP→ICMP中
若不存在,则将所述IP信息的流量特征ICMP与TOP→ICMP数组中首个IP信息对应的流量特征ICMP进行比较,如果比首个IP信息对应的流量特征ICMP大,则替换首个IP信息,标记所述IP信息具备TOP_ICMP属性(即存在于TOP→ICMP数组中)并且把被替换的IP信息的TOP_ICMP属性取消,然后调用top_down(j),使新的排序数组重新满足最小二根堆特性。
若存在,则将所述IP信息的新的流量特征ICMP与TOP→ICMP数组中此IP信息的旧的流量特征ICMP做比较,如果新的流量特征ICMP比旧的流量特征ICMP小,则更新TOP→ICMP[j]为所述新的流量特征ICMP后调用top_up(j),否则更新TOP→ICMP[j]为所述新的流量特征ICMP后调用top_down(j)。
将所述新的流量特征ICMP和旧的流量特征ICMP进行比较,如果ICMP前后两次差值大于某一设定特征值,例如:10000,则判断发生ICMPFLOOD,存在异常流量行为。
S433、获取所述IP信息的流量特征UDP,判断所述IP信息是否存在于TOP→UDP中;
若不存在,则将所述IP信息的流量特征UDP与TOP→UDP数组中首个IP信息对应的流量特征UDP进行比较,如果比首个IP信息对应的流量特征UDP大,则替换首个IP信息,标记所述IP信息具备TOP_UDP属性(即存在于TOP→UDP数组中)并且把被替换的IP信息的TOP_UDP属性取消,然后调用top_down(j),使新的排序数组重新满足最小二根堆特性。
若存在,则将所述IP信息的新的流量特征UDP与TOP→UDP数组中此IP信息的旧的流量特征UDP做比较,如果新的流量特征UDP比旧的流量特征UDP小,则更新TOP→UDP[j]为所述新的流量特征UDP后调用top_up(j),否则更新TOP→UDP[j]为所述新的流量特征UDP后调用top_down(j)。
将所述新的流量特征UDP和旧的流量特征UDP进行比较,由于用户数据报文类型攻击多样,需要对其进行细化分析,如果:
HASH[IP]→DNA→REPLY中REPLY前后两次差值大于某一设定特征值,例如:10000,则判断发生UDPFLOOD,存在异常流量行为;
HASH[IP]→DNA→TCP中TCP前后两次差值大于某一设定特征值,例如:10000,则判断发生UDPFLOOD,存在异常流量行为;
HASH[IP]→DNA→SAME中SAME前后两次差值大于某一设定特征值,例如:10000,则判断发生UDPFLOOD,存在异常流量行为。
即分别对IP哈希数组中DNA中的成员REPLY、TCP以及SAME前后两次差值与设定的特征值进行比较,判断是否发生了流量异常行为。
示例性的,可以定时设置启动第二线程,例如,可以设置第二线程每一秒钟启动一次。
本发明实施例三提供的方法,通过使用实时排名结合行为分析来检测攻击,判断是否发生异常流量行为,由于被攻击的目标的某一项指标必然在这项指标排名前列当中,实时排名能够找出可能存在攻击的目标,再加以行为分析准确地判定出这些目标是否发生了攻击,本方法适用于任何一个网络中,能够把程序刚刚启动时发生的攻击也能检测出来,也能区分正常突发的业务量,不会发生误判的情况。
实施例四
图6为本发明实施例四中的一种异常流量检测方法流程图,本实施例的技术方案以上述实施例为基础,在上述实施例的基础上作进一步的总结。
该方法包括如下步骤:
S601、建立全局IP哈希数组和排序数组;
所述IP哈希数组用来统计IP流量等信息,所述IP哈希数组可以包含变量SYN、ICMP、UDP以及DNA,分别用于统计同步报文数量、控制信息报文数量、用户数据报文数量以及抽取用户数据报文流量特征;所述排序数组用来保存排名前N位的IP信息。
S602、创建线程1;
S603、所述线程1负责接收报文并从其中获取IP地址和报文类型;
S604、判断报文类型是否为同步报文,若是,则执行S605,否则执行S606;
S605、HASH[IP]→SYN+1;
S606、判断报文类型是否为控制信息报文,若是,则执行S607,否则执行S608;
S607、HASH[IP]→ICMP+1;
S608、判断报文类型是否为用户数据报文,若是,则执行S609,否则返回执行S603;
S609、HASH[IP]→UDP+1;
S610、判断IP是否存在于TOP→UDP数组中,若是,则执行S611,否则返回执行S603;
S611、取出报文SPORT,DPORT,CHECK,取出IP成员DNA;
示例性的,由于用户数据报文流量特征多样,需要根据其端口的出现频率、校验码的相同程度再加以判断,优选的,选取SPORT、DPORT以及CHECK对用户数据报文进行细化分析。DNA,用于抽取用户数据报文流量特征,其成员可以包括多个,优选的,DNA成员包括CUR、SAME、REPLY以及TCP。
S612、判断SPORT的值是否为某些特定值,例如,目前已经在网络中出现过的攻击的一些端口:123,1900,53,若是,则执行S613,否则执行S614;
S613、DNA→REPLY+1;
S614、判断DPORT的值是否为某些特定值,例如,目前已经在网络中出现过的攻击的一些端口:22,80,443,若是,则执行S615,否则执行S616;
S615、DNA→TCP+1;
S616、判断CHECK是否等于DNA→CUR,若是,则执行S617,否则执行S618;
S617、DNA→SAME+1;
S618、DNA→CUR=CHECK;
S619、创建线程2;
S620、所述线程2负责遍历IP哈希数组获得当前IP对象A;
S621、依次取出对象A的成员SYN,ICMP,UDP表示为P;
S622、判断P是否存在于TOP→P数组中;若是,则执行S623,否则执行S634;
S623、得到P在TOP→P数组的位置j;
S624、判断A是否大于TOP[j];若是,则执行S625,否则执行S626;
S625、TOP→P[j]=P,调用top_down(j);
S626、TOP→P[j]=P,调用top_up(j);
S627、判断P是否为UDP,若是,则执行S628,否则执行S630;
S628、判断DNA成员REPLY,TCP,SAME是否任意一个大于设定特征值,例如:10000,若是,则执行S629;
S629、发生UDPFLOOD攻击;
S630、判断P是否大于设定特征值,例如:10000,若是,则执行S631;
S631、判断P是否为SYN类型,若是,则执行S632,否则执行S633;
S632、发生SYNFLOOD攻击;
S633、发生ICMPFLOOD攻击;
S634、判断P是否大于TOP→P[1],若是,则依次执行S635、S636以及S637;
S635、把TOP→P[1]原来的IP信息成员P的TOP属性取消;
S636、TOP→P[1]=P并且为P添加上TOP属性;
S637、调用top_down(1)。
本发明实施例四提供的方法,综合上述实施例的技术方案,全面细致地计算出整个网络中流量等各项指标排名前列的目标,再对排名前列的目标加以行为分析准确地判定出这些目标是否发生了异常流量行为,能够准确和及时地发现流量异常的情况,把误报率和漏报率大大降低。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。