一种基于统计学方法的cc攻击检测的方法与流程

文档序号:19281783发布日期:2019-11-29 23:01阅读:507来源:国知局
一种基于统计学方法的cc攻击检测的方法与流程

本发明涉及信息安全领域异常检测技术领域,特别涉及一种基于统计学方法的cc攻击检测的方法。



背景技术:

cc(challengecollapsar)攻击是一种通过大量代理服务器发起的http请求的应用层ddos攻击,其原理是对一些消耗资源较高的页面不断的发起请求,以消耗服务器资源,导致web应用访问速度慢甚至造成服务器无法正常连接,其特点是攻击源ip很分散但又是真实的,而其数据包又是正常的请求行为,所以无法通过数据包本身的分析来检测cc攻击。

现有的防cc攻击一般是通过人为统计ip的访问频率,对访问的ip频率进行限制,或者设定一个全局的ip频率阈值,当某ip访问时超过该阈值就会被认定为攻击,基于阈值防cc攻击的方法的弊端是,无法确定适当的阈值,阈值过高无法拦住攻击,阈值过低又会导致频繁误封,影响使用者的正常使用体验。

现有的基于机器学习的cc攻击检测方法,是通过积累大量的访问请求数据,使用机器学习算法训练算法模型,给定阈值进行自动检测cc攻击。但这种方法的弊端是方法成熟前需要积累大量访问数据用以训练模型,使用过程中仍需要辅助优化模型效果。结合不同的业务场景,模型需要对应的调整,普适性不足。



技术实现要素:

本发明的目的是克服上述背景技术中不足,提供一种基于统计学方法的cc攻击检测的方法,通过对访问日志进行ip访问频率,连续时间间隔序列内访问频率进行统计,采用iqr异常检测算法进行快速高效的cc攻击检测。

为了达到上述的技术效果,本发明采取以下技术方案:

一种基于统计学方法的cc攻击检测的方法,包括以下步骤:

a.按照访问日志中的domain字段对访问请求进行分组,对于分组后的各组数据再按照客户端ip进行分组,并统计当前时间段每个相同domain下每个ip的访问次数;其中,访问日志中至少需要在单条日志数据中包含client_ip(访问客户端ip),domain(访问域名),timestamp(访问时间戳),三个维度的数据,实际中也可在此基础上增加数据维度,得到更高的精度;

b.设定访问上限值,判定当前时间段内相同domain下访问次数超过访问上限值的ip为访问次数过多ip;

c.计算该访问次数过多ip的平均访问阈值,若访问次数过多ip的当前时间段的访问次数超过平均访问阈值则判定访问次数过多ip为疑似异常ip;

d.对疑似异常ip的当前时间段内各次访问间的间隔时间进行计算,设定间隔阈值,若疑似异常ip的访问间的间隔时间小于间隔阈值则判定该疑似异常ip为访问过快ip;

本发明提供的基于统计学方法的cc攻击检测的方法,可有效克服现有人工统计封禁ip方法中操作不便,需要大量人工参与的不足,而使用机器学习方法又需要做数据积累和模型调整耗时的问题,过对访问日志进行ip访问频率,连续时间间隔序列内访问频率进行统计,采用iqr异常检测算法进行快速高效的cc攻击检测。

进一步地,所述步骤b中访问上限值的设定如下:

通过iqr离群值检测算法计算相同domain下在当前时间段内各ip访问次数构成的数据集合的上四分位数与下四分位数及上四分位数与下四分位数的差值即四分位距,则访问上限值=上四分位数+m*四分位距,其中,四分位距=上四分位数-下四分位数,m>0。

进一步地,所述步骤c中,访问次数过多ip的平均访问阈值的计算方式如下:

取访问次数过多ip前n天中同时段的访问次数数据,则加上今天同时段的访问次数数据即得n+1个访问次数数据,通过iqr离群值检测算法计算n+1个访问次数数据构成的数据集合的上四分位数与下四分位数及上四分位数与下四分位数的差值即四分位距,则平均访问阈值=上四分位数+m*四分位距,其中,四分位距=上四分位数-下四分位数,m>0。

进一步地,所述步骤d中具体为:

d1.通过iqr离群值检测算法计算疑似异常ip的当前时间段内各次访问间的间隔时间构成的数据集合的上四分位数与下四分位数及上四分位数与下四分位数的差值即四分位距;

d2.设定间隔阈值为n秒;

d3.若步骤d1计算得出的四分位距<n,则判定该疑似异常ip为访问过快ip。

进一步地,还包括步骤e,计算异常值,所述异常值用于表示访问过快ip的异常的置信度,所述异常值的计算方式如下:

异常值=异常值n1*0.5+异常值n2*0.5;

其中,异常值n1=min((访问过快ip当前时段的访问次数-访问上限值)/访问上限值,1);

异常值n2=min((访问过快ip当前时段的访问次数-平均访问阈值)/平均访问阈值,1);

具体的,计算所得的异常值符合:0<异常值≤1,且异常值越大表明异常ip存在异常行为的可能性越大。

进一步地,还包括步骤f,计算滚动平均异常值rolling_score,若步骤e中计算的异常值为在当前检测时间窗口t1得出的异常值为threat_score_t1,设定滚动时间为delta_t,则下一个检测时间窗口t2对应的检测时间段为t2=t1+delta_t,且检测时间窗口t2在t2时间段内获取数据并检测出的异常值为threat_score_t2,检测时间窗口tn在tn时间段内获取数据并检测出的异常值为threat_score_tn,则滚动平均异常值rolling_score的计算公式为:本发明的方法中通过对同一个ip在同一个域名domain下的计算出的异常值按照时间窗口t进行滚动平均,从而在长时间范围上提升检出率,降低误报,计算所得的滚动平均rolling_score能够辅助判断异常ip在长时间上的表现是否是真正存在异常行为,通过rolling_score值的指示能为我们减少误报,提高精度带来很大帮助,rolling_score值越大则异常可能性越高。

本发明与现有技术相比,具有以下的有益效果:

本发明的基于统计学方法的cc攻击检测的方法,结合了现有技术中两种常用方法(背景技术中所介绍的)的优势,通过脚本对访问请求日志中ip的访问频率进行快速统计,采用异常数据检测算法如iqr算法等对统计数据进行计算得出ip离群值,从而计算发起cc攻击的ip的可能性分值,并在滑动窗口时间内计算平均分值,降低误封风险,而无须依赖机器学习模型,实现快速投放使用,在各业务场景下无须细致调整也能正常使用;

同时,本发明的方法在应急性cc攻击防范中使用效果犹为突出,可在企业安全建设中应急响应时使用,亦可作为企业在做日常值班的机器学习模型建立起来之前的过渡和之后的备份系统使用,且同时也可做低成本低耗费实现cc攻击自动检测的选择。

附图说明

图1是访问日志数据分组预处理示意图。

图2是历史数据统计示意图。

图3为间隔时间统计示意图。

具体实施方式

下面结合本发明的实施例对本发明作进一步的阐述和说明。

实施例:

实施例一:

一种基于统计学方法的cc攻击检测的方法,包括以下步骤:

步骤1.按照访问日志中的domain字段对访问请求进行分组,如图1所示,对于分组后的各组数据再按照客户端ip进行分组,并统计当前时间段每个相同domain下每个ip的访问次数;其中,访问日志中至少需要在单条日志数据中包含client_ip(访问客户端ip),domain(访问域名),timestamp(访问时间戳),三个维度的数据,实际中也可在此基础上增加数据维度,得到更高的精度。

如本实施例中,分组后统计得到域名www.example.com,每个ip的访问次数分别为1,3,4,2,5,6,2,2000。

步骤2.设定访问上限值,判定当前时间段内相同domain下访问次数超过访问上限值的ip为访问次数过多ip。

具体为:通过iqr离群值检测算法计算相同domain下在当前时间段内各ip访问次数构成的数据集合的上四分位数与下四分位数及上四分位数与下四分位数的差值即四分位距,则访问上限值=上四分位数+m*四分位距,其中,四分位距=上四分位数-下四分位数,m>0。

如本实施例中即对1,3,4,2,5,6,2,2000通过iqr离群值检测算法求取访问上限值,且最后得出2000大于访问上限值,则将这个数据对应的ip单独提取出来。

具体的,上述步骤1及步骤2可通过软件编程直接实现,其中,其核心代码表示如下:

数据按domain分组,获得多个dataframe

dfs=df.groupby('domain')

对每个分组得到的df再根据ip分组

_df=dfs.groupby('ip')

统计某个domain下面每个ip的访问次数

ip_2_visit_count={ip:_df.shape[0]forip,_dfin_df}

计算异常数据

upper_limit_1=reject_outliers(ip_2_visit_count.values())

其中,通过上述程序计算得出的upper_limit_1是一个上限值,当一个时间段内访问次数超过upper_limit_1时即认为该ip在用一个检测时间窗口内访问次数过多,则可判定为访问次数过多ip。

步骤3.计算该访问次数过多ip的平均访问阈值,若访问次数过多ip的当前时间段的访问次数超过平均访问阈值则判定访问次数过多ip为疑似异常ip。其中,访问次数过多ip的平均访问阈值的计算方式如下:

如图2所示,取访问次数过多ip前n天中同时段的访问次数数据,则加上今天同时段的访问次数数据即得n+1个访问次数数据,通过iqr离群值检测算法计算n+1个访问次数数据构成的数据集合的上四分位数与下四分位数及上四分位数与下四分位数的差值即四分位距,则平均访问阈值=上四分位数+m*四分位距,其中,四分位距=上四分位数-下四分位数,m>0。

如本实施例中将上述一个时间段内访问次数为2000的ip的前七天中在于今天同一时段内(如都取13:50至14:00时间段)的访问数据提取出来,则得出该ip在前7天该时段内的访问数据分别为1800,1234,1900,2000,2344,3422,1789,则对1800,1234,1900,2000,2344,3422,1789,2000这8个数通过iqr离群值检测算法求取平均访问阈值,且最后得出2000小于访问平均访问阈值,则可认为这个ip下面可能有多个客户端,即当前访问数据正常。

若在提取时,该ip在前7天该时段内的访问数据分别为0,0,0,0,0,0,0,则对0,0,0,0,0,0,0,2000这8个数通过iqr离群值检测算法求取平均访问阈值,且最后得出2000大于平均访问阈值,则判定当前ip的数据出现了异常,并将该访问次数过多ip判定为疑似异常ip。

具体的,上述步骤3可通过软件编程直接实现,其中,其核心代码表示如下:

last_days_visit_counts=list(get_recent_days_visit_count(df_l_l[1:],domain,ip))

计算异常值

upper_limit_2=reject_outliers(last_days_visit_counts)

计算出来的upper_limit_2是一个上限值,超过该值即认为上一步中得到访问次数过多ip今天当前时段内的访问次数比前面几天的历史表现中突然大量增加。

步骤4.如图3所示,对疑似异常ip的当前时间段内各次访问间的间隔时间进行计算,设定间隔阈值,若疑似异常ip的访问间的间隔时间小于间隔阈值则判定该疑似异常ip为访问过快ip,具体包括:

步骤4.1.通过iqr离群值检测算法计算疑似异常ip的当前时间段内各次访问间的间隔时间构成的数据集合的上四分位数与下四分位数及上四分位数与下四分位数的差值即四分位距;

步骤4.2.设定间隔阈值为n秒,n值可根据具体业务特性进行设定,本实施例中为n的取值为3;

步骤4.3.若步骤4.1计算得出的四分位距<n,则判定该疑似异常ip为访问过快ip。

如本实施例中,具体为对疑似异常ip今天当前时段内的2000次访问进行频率统计,如果疑似异常ip的访问间的间隔时间小于3秒则判定该疑似异常ip为访问过快ip,即认为这个ip一直在持续不断的进行访问。

具体的,上述步骤4可通过软件编程直接实现,其中,其核心代码表示如下:

ts=get_visit_ts()->获取访问的timestamp序列

ts=sorted(ts)

deltas=ts[1:]-ts[:-1]

q1,q3=np.percentile([25,75],deltas)

如果(q3-q1)<3,说明这个ip大部分访问都很集中,可以认为该ip有访问过快的行为。

步骤5.计算异常值,所述异常值用于表示访问过快ip的异常的置信度,所述异常值的计算方式如下:异常值=异常值n1*0.5+异常值n2*0.5;

其中,异常值n1=min((访问过快ip当前时段的访问次数-访问上限值)/访问上限值,1);异常值n2=min((访问过快ip当前时段的访问次数-平均访问阈值)/平均访问阈值,1);具体的,计算所得的异常值符合:0<异常值≤1,且异常值越大表明异常ip存在异常行为的可能性越大。

即经过前4个步骤逐步筛选后,检出的ip我们认为极大可能就是异常ip,则在步骤5中即进行计算异常值,本实施例中,异常值以threat_score表示,且

threat_score=min((visit_count-upper_limit_1)/upper_limit_1,1)*0.5+min((visit_count-upper_limit_2)/upper_limit_2,1)*0.5。

其中,min((visit_count-upper_limit_1)/upper_limit_1,1)即表明异常ip在步骤2中访问次数visit_count高于上限值upper_limit_1的偏离程度;min((visit_count-upper_limit_2)/upper_limit_2,1)即表明异常ip在步骤3中访问次数visit_count高于上限值upper_limit_2的偏离程度。

结合以上两个值,加权0.5,即可得到异常值threat_score,需要注意的是0<threat_score<=1,threat_score值越大表明异常ip存在异常行为的可能性越大。

上述步骤以软件程序实现时,核心代码如下:

threat_score=min((visit_count-upper_limit_1)/upper_limit_1,1)*0.5+min((visit_count-upper_limit_2)/upper_limit_2,1)*0.5。

步骤6,计算滚动平均异常值rolling_score,若步骤5中计算的异常值为在当前检测时间窗口t1得出的异常值为threat_score_t1,设定滚动时间为delta_t,则下一个检测时间窗口t2对应的检测时间段为t2=t1+delta_t,且检测时间窗口t2在t2时间段内获取数据并检测出的异常值为threat_score_t2,检测时间窗口tn在tn时间段内获取数据并检测出的异常值为threat_score_tn,则滚动平均异常值rolling_score的计算公式为:

本发明的方法中通过对同一个ip在同一个域名domain下的计算出的异常值按照时间窗口t进行滚动平均,从而在长时间范围上提升检出率,降低误报,计算所得的滚动平均rolling_score能够辅助判断异常ip在长时间上的表现是否是真正存在异常行为,通过rolling_score值的指示能减少误报,提高精度带来很大帮助,rolling_score值越大则异常可能性越高。

可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1