基于动态克隆选择算法的SQL注入攻击检测方法与流程

文档序号:15049744发布日期:2018-07-27 23:59阅读:175来源:国知局

本发明属于网络安全技术领域,特别是涉及一种基于动态克隆选择算法的sql注入攻击检测方法。



背景技术:

web安全是信息安全领域的研究热点之一,sql注入攻击(简称sqlias,sqlinjectionattacks)是一种web应用攻击,这种攻击的危害程度在近10年的十大最关键web应用安全风险中一直高居前三位。

目前防护sqlias的主要方法是架设web应用防火墙(webapplicationfirewall,简称waf),waf是基于异常规则库的检测机制,随着各种变种攻击的不断增加,其规则库会越来越庞大,导致其检测性能下降,而且更为严重的是它无法识别未知特征和各种变形攻击。基于此,有必要发明一种全新的动态sql注入攻击检测方法,以解决现有方法存在的上述问题。



技术实现要素:

本发明的目的在于提供一种基于动态克隆选择算法的sql注入攻击检测方法,解决现有waf检测性能下降以及无法识别未知特征和各种变形攻击的问题。

本发明所采用的技术方案是,基于动态克隆选择算法的sql注入攻击检测方法,按照以下步骤进行:

步骤s1:提取客户浏览器端提交的sql语句,把该sql语句提交给规则库检测模块进行“sqlias”快速模式匹配,如果匹配成功,表明该语句包含注入攻击代码,系统终止用户提交的请求;

步骤s2:将模式匹配失败的语句提交给动态检测模块进行更深层次的检测,在动态检测模块运行之前引入局部离群因子作为适应度函数来优化检测器之间的距离,从而构造高效的检测器来识别正常数据和异常数据;

步骤s3:运行动态检测模块进行检测;

步骤s4:调用克隆选择算法进行学习识别;

步骤s5:根据检测结果更新系统模块。

进一步的,所述步骤s1中,规则库检测模块的快速模式匹配方法具体步骤如下:

步骤s11:将空格分割后的sql查询语句以滑动窗口的形式和规则库中异常sql查询语句逐条进行比对,当查询语句中第1个单词的内容和规则库中的某个位置的单词内容相等时,计算该位置之后子串的长度,若该字串的长度和查询语句的长度不等,模式匹配失败,表明该sql语句可能是正常数据,也可能是未知的异常数据,需要动态检测模块进行更深入的检测;

步骤s12:若该字串的长度和查询语句的长度相等,且相似度高,表明该查询语句和规则库检测模块中的这条数据属于同一异常数据样本,模式匹配成功,系统拒绝sql查询,其中相似度的计算公式如下:

其中:u是待检测的sql查询语句,s[i]表示规则库模块列表中第i个异常数据模式,matchnum(u,s)是u和s中对应位置单词相等的个数,待检测的sql查询语句的长度用length(q)来表示,当similarity的值大于0.88时,认为相似度高。

进一步的,所述步骤s2中构造高效的检测器的步骤如下:

步骤s21:随机生成一批sql查询语句作为候选检测器,在该候选检测器中选取一条查询语句作为候选抗体x;

步骤s22:计算该候选抗体x与候选检测器中第i个抗体bi的欧氏距离disi,如果disi小于所有抗体的检测半径,表明成熟抗体落入“自我空间范围内”,因此删除x,继续取出下一个候选抗体;

步骤s23:如果disi大于任意一个抗体的检测半径,则计算候选抗体x与自我集合s中所有样本的欧式距离,并得出最小距离dismin;

步骤s24:如果最小距离dismin大于抗体bi的自我半径rbj,j=1,2,…,k,则将抗体加入到成熟检测器中,并将抗体的自我半径rbj调整为新的自我半径r′bj,新自我半径r′bj的计算公式如下:

r′bj=dismin-rbjj=1,2,...,k(2)

步骤s25:如果最小距离dismin小于抗体bi的自我半径rbj,j=1,2,…,k,则删除候选抗体x;

步骤s26:从该候选检测器中继续选取下一个抗体作为候选抗体x,重复步骤s21-s25操作;

步骤s27:在生成的成熟检测器中选定任一检测器di,为di选取k个邻居组成临域集合定义di与其临近点之间的距离为令dis-max(di)为其中最大的距离,令检测器di与其任一临近点之间的可达距离为令局部可达密度为:

其中:|nk(di)|表示临近集合中元素的个数;

步骤s28:计算得到局部离群因子:

其中:表示di的临近点的局部可达密度,lrd(di)为其自身局部可达密度;如果di的局部离群因子的值不小于1,表明其与其他临近检测器间的距离相当,重叠面积少,该检测器被保留;如果该值小于1,则表明该区域为密集度较大区域,检测器间重叠区域较大,删除该检测器;

步骤s29:重复上述步骤s27到s28,一直到成熟检测器的数目达到预期数值,则检测器训练成熟。

进一步的,所述步骤s3中,动态检测模块的进行检测的过程如下:

步骤s31:将检测细胞初始化为记忆检测抗体集合sm,然后读取从规则库检测模块中提交过来的可疑数据;

步骤s32:如果记忆检测抗体集合sm中的某个抗体的亲和力大于预设的阈值ε,说明该抗体识别数据抗原,这表明该数据是已知的异常数据,然后将该异常数据交给克隆选择算法学习识别;

选取加权欧几里得距离来表示亲和力,加权欧几里得距离越小,表明亲和力越高,抗体和抗原之间越“匹配”;加权欧几里得距离见公式(6),其中抗体的坐标用<λ1a1,λ2a2,…,λiai>表示,抗原的坐标用<λ1g1,λ2g2,…,λigi>表示;

步骤s33:如果记忆检测抗体集合sm中的所有抗体都不能识别该数据且该数据和所有检测抗体的亲和力都小于预设的阈值ε,说明该数据是正常数据,直接提交给数据库服务器执行;

步骤s34:如果记忆检测抗体集合sm中的所有抗体都不能识别该数据且该数据和检测抗体中的某个抗体的亲和力大于预设的阈值ε,说明该数据是异常数据,然后采用步骤s4的调用克隆选择算法学习识别。

进一步的,所述步骤s4中,克隆选择算法的执行过程如下:

步骤s41:根据公式(6)计算抗体集中所有抗体和待检测数据之间的亲和力;

步骤s42:选择和该异常数据的亲和力大于α的n个抗体进行克隆,假定克隆的总规模数为nc,则抗体ai的克隆数量为:

式中总克隆规模nc>n,int(.)为上取整函数,抗体ai的克隆数量qi和抗原亲和力f(ai)成正比;

步骤s43:对克隆后的抗体进行变异操作;

克隆后的抗体根据公式(8)对n个抗体进行变异:

式中是初始变异概率;为抗体ai的变异概率,f(ai)是抗体ai的亲和力,抗体ai的变异概率能够动态调节,且和亲和力f(ai)成反比;

步骤s44:随机产生若干个抗体,利用步骤s2构造高效检测器进行自体耐受处理,并将通过自体耐受处理后的抗体和克隆、变异后的抗体共同加入到记忆检测抗体集合sm中,从而实现免疫算法的二次应答。

进一步的,所述步骤s5中,根据检测结果更新系统模块具体步骤是,将检测出的异常数据直接丢弃,并给出系统异常警告提示,同时为了保持规则库的不断更新,将异常数据的样本添加到规则库匹配测模块列表中,便于系统下次快速识别该异常数据。

本发明的有益效果:与现有web应用防护墙检测和拦截sqlias的方法相比,为了达到理想的检测速度和良好的异常检测效果,本发明设计了基于快速模式匹配的规则库检测模块和基于克隆选择算法的动态检测模块相结合的模型框架。规则库模块通过分割sql查询语句统计分词数目的方法来比对正常数据和异常数据,既可有效减少异常规则库的数量,同时又显著提高了系统检测异常数据的速度;在动态克隆选择检测模块中改进了检测器算法的生成,提高了其检测效率,通过运行克隆算法对待检数据进行深层检测,克服了传统web应用防火墙依赖规则库而无法识别未知攻击和变种攻击的缺点,从而显著提高了系统的检测效率,提升了系统的应用价值。本发明既有效解决了现有web应用防火墙无法识别未知sqlias的问题,又显著提升了系统的检测时间,适用于sql注入攻击的检测。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明的流程图。

图2是本发明与web应用防火墙(waf)针对已知攻击特征样本的检测性能对比图。

图3是本发明与web应用防火墙(waf)针对未知攻击特征样本及其变种样本的检测性能对比图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

基于动态克隆选择算法的sql注入攻击检测方法,流程如图1所示,按照以下步骤进行:

步骤s1:提取客户浏览器端提交的sql语句,把该sql语句提交给规则库检测模块进行“sqlias”快速模式匹配,如果匹配成功,表明该语句包含注入攻击代码,系统终止用户提交的请求;

步骤s2:将模式匹配失败的语句提交给动态检测模块进行更深层次的检测,在动态检测模块运行之前引入局部离群因子作为适应度函数来优化检测器之间的距离,从而构造高效的检测器来识别正常数据和异常数据;

步骤s3:运行动态检测模块进行检测;

步骤s4:调用克隆选择算法进行学习识别;

步骤s5:根据检测结果更新系统模块。

其中,步骤s1中,规则库检测模块是基于异常规则的黑名单检测机制,其原理是统计以空格作为分隔符的sql查询语句的单词数目,若该语句被注入了恶意代码,其单词数目必然与注入之前不相同。规则库检测模块的快速模式匹配方法的具体步骤如下:

步骤s11:快速模式匹配方法将空格分割后的sql查询语句以滑动窗口的形式和规则库中异常sql查询语句逐条进行比对,当查询语句中第1个单词的内容和规则库中的某个位置的单词内容相等时,计算该位置之后子串的长度,若该字串的长度和查询语句的长度不等,模式匹配失败,表明该sql语句可能是正常数据,也可能是未知的异常数据,需要动态检测模块进行更深入的检测;

步骤s12:若该字串的长度和查询语句的长度相等,且相似度高,表明该查询语句和规则库检测模块中的这条数据属于同一异常数据样本,模式匹配成功,系统拒绝sql查询,其中相似度的计算公式如下:

其中:u是待检测的sql查询语句,s[i]表示规则库模块列表中第i个异常数据模式,matchnum(u,s)是u和s中对应位置单词相等的个数,待检测的sql查询语句的长度用length(q)来表示,当similarity的值大于0.88时,认为相似度高。

所述步骤s2中构造高效的检测器的步骤如下:

步骤s21:随机生成一批sql查询语句作为候选检测器,在该候选检测器中选取一条查询语句作为候选抗体x;

步骤s22:计算该候选抗体x与候选检测器中第i个抗体(表示为bi)的欧氏距离disi,如果disi小于所有抗体的检测半径,表明成熟抗体落入“自我空间范围内”,因此删除x,继续取出下一个候选抗体;

步骤s23:如果disi大于任意一个抗体的检测半径,则计算候选抗体x与自我集合s中所有样本的欧式距离,并得出最小距离dismin;

步骤s24:如果最小距离dismin大于抗体bi的自我半径rbj(j=1,2,…,k),则将抗体加入到成熟检测器中,并将抗体的自我半径rbj调整为新的半径r'bj,新半径r'bj的计算公式如下:

r'bj=dismin-rbj(j=1,2,…,k)(2)

步骤s25:如果最小距离dismin小于抗体bi的自我半径rbj(j=1,2,…,k),则删除候选抗体x;

步骤s26:从该候选检测器中继续选取下一个抗体作为候选抗体x,重复步骤s21-s25操作;

步骤s27:在生成的成熟检测器中选定任一检测器di,为di选取k个邻居组成临域集合

定义di与其临近点之间的距离为令dis-max(di)为其中最大的距离,令检测器di与其任一临近点之间的可达距离为令局部可达密度为:

其中:|nk(di)|表示临近集合中元素的个数;

步骤s28:计算得到局部离群因子:

其中:表示di的临近点的局部可达密度,lrd(di)为其自身局部可达密度。如果di的局部离群因子的值不小于1,表明其与其他临近检测器间的距离相当,重叠面积少,该检测器被保留;如果该值小于1,则表明该区域为密集度较大区域,检测器间重叠区域较大,删除该检测器;

步骤s29:重复上述步骤,一直到成熟检测器的数目达到预期数值(2万个成熟抗体),则检测器训练成熟。

所述步骤s3中,动态检测模块的进行检测的过程如下:

步骤s31:将检测细胞初始化为记忆检测抗体集合sm,然后读取从规则库检测模块中提交过来的可疑数据;

步骤s32:如果记忆检测抗体集合sm中的某个抗体的亲和力大于预设的阈值ε,说明该抗体识别数据抗原,这表明该数据是已知的异常数据,然后将该异常数据交给克隆选择算法学习识别;

上述步骤中抗体和抗原的编码采用长度为7的整数编码机制,抗体的编码形式如公式(5)所示,其中ai(i=1,2,...,7)分别表示sql关键字、数据库特征关键字及数据库连接符、特殊字符、特殊字符前缀、特殊函数运算符、大写字符和数字字符的出现频率,λi(i=1,2,…,7)表示这7种类型字符的权值,设置权值是因为不同类型的字符所体现出来的恶意攻击程度是不一样的。

上述步骤中抗体和抗原之间的亲和力是基于抗体抗原之间结构的相似性,本方法根据编码特征,选取加权欧几里得距离(euclidean)来表示亲和力,加权欧几里得距离越小,表明亲和力越高,抗体和抗原之间越“匹配”(相似)。加权euclidean距离见公式(6),其中抗体的坐标用<λ1a1,λ2a2,…,λiai>表示,抗原的坐标用<λ1g1,λ2g2,…,λigi>表示。

步骤s33:如果记忆检测抗体集合sm中的所有抗体都不能识别该数据且该数据和所有检测抗体的亲和力都小于预设的阈值ε,说明该数据是正常数据,直接提交给数据库服务器执行;

步骤s34:如果记忆检测抗体集合sm中的所有抗体都不能识别该数据且该数据和检测抗体中的某个抗体的亲和力大于预设的阈值ε,说明该数据是异常数据,然后采用步骤s4的调用克隆选择算法学习识别;

所述步骤s4中,克隆选择算法的执行过程如下:

步骤s41:根据公式(6)计算抗体集中所有抗体和待检测数据之间的亲和力;

步骤s42:选择和该异常数据的亲和力大于α的n个抗体进行克隆,假定克隆的总规模数为nc,则抗体ai的克隆数目为:

式中总克隆规模nc>n,int(.)为上取整函数,抗体ai的克隆数量qi和抗原亲和力f(ai)成正比;

步骤s43:对克隆后的抗体进行变异操作;

克隆后的抗体根据公式(8)对n个抗体进行变异:

式中是初始变异概率;为抗体ai的变异概率,f(ai)是抗体ai的亲和力,抗体ai的变异概率能够动态调节,且和亲和力f(ai)成反比;

步骤s44:随机产生若干个抗体,利用上述步骤s2构造高效检测器进行自体耐受处理,并将通过自体耐受处理后的抗体和克隆、变异后的抗体共同加入到记忆检测抗体集合sm中,从而实现免疫算法的二次应答。

所述步骤s5中,根据检测结果更新系统模块具体是,将检测出的异常数据直接丢弃,并给出系统异常警告提示,同时为了保持规则库的不断更新,将异常数据的样本添加到规则库匹配测模块列表中,便于系统下次快速识别该异常数据。

图2是本发明与web应用防火墙(waf)针对已知攻击特征样本的检测性能对比图。图2表明本发明在检测已知攻击特征的样本数据时,其检测时间要比waf的检测时间短,并且对样本数据的正确识别率也较waf高;图3是本发明与web应用防火墙(waf)针对未知攻击特征样本及其变种样本的检测性能对比图。图3表明waf几乎不能识别未知攻击特征样本及其变种样本,而本发明对未知攻击特征样本及其变种样本的识别率可以达到35%-80%,而且随着样本数量的增加,其识别率明显得到了提升,这得益于免疫算法的自我学习能力。

本发明提升了现有web应用防火墙对sql注入攻击的检测性能并解决了其无法识别未知特征和各种变形攻击的问题。一种基于动态克隆选择算法的的sql注入攻击检测方法,该方法分别设计了基于快速模式匹配的规则库检测模块和基于克隆选择算法的免疫识别模块,基于黑名单机制的规则库检测模块通过统计sql语句的单词数目的变化来快速识别已知sql注入攻击,同时在检测过程中采用滑动窗口机制提升了其检测效率;动态克隆选择算法引入局部离群因子作为适应度函数来优化检测器之间的距离,从而提高了检测器的检测效率,通过对已知攻击样本的克隆和变异操作提升了系统检测变种攻击的能力。该方法设计的规则库检测模块和克隆选择识别模块相互配合、共同作用,既可以检测未知特征和各种变形的sql注入攻击,又提升了系统的检测效率。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

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