掌桥专利:专业的专利平台
掌桥专利
首页

构建识别模型及攻击识别方法、装置、设备及存储介质

文献发布时间:2023-06-19 11:26:00


构建识别模型及攻击识别方法、装置、设备及存储介质

技术领域

本申请涉及网络技术领域,尤其涉及一种构建识别模型及攻击识别方法、装置、设备及存储介质。

背景技术

网页(Web)应用防火墙(简称WAF)作为目前市场上热门的安全产品,可以有效阻拦场景的结构化查询语言注入攻击(简称SQLI,英文全称Structured Query LanguageInjection;结构化查询语言,简称SQL,英文全称Structured Query Language),达到保护Web应用的目的。

目前,市场上大部分的WAF是基于规则匹配进行防护的,也有部分采用人工智能(AI)+规则相结合的方式进行防护。随着Web服务变得越来越复杂,相应的攻击方式也变得复杂起来,为了应对这一情况,WAF需要变得更加智能化。

AI赋能WAF已经成为目前WAF产品迭代的一个大趋势,越来越多的机器学习和深度学习模型被应用进WAF中,并且已经展现出了较好的效果。WAF中使用AI识别SQLI的方法,也在随着时间的推移和技术的更新不断变化,每种方法都会在生产环境中出现或大或小的问题,目前业内还没有统一的方法,各厂家也都在更新自身的技术水平。

已有的WAF识别SQLI的方法除了通用规则之外,较为智能化的方法就是采用开源的SQLI语义分析库,对请求报文进行语义分析后,通过二分查找算法对内置的8000多个SQLI特征进行匹配,直到将该报文识别为攻击,或者遍历所有的SQLI特征。

该方法存在的不足在于:在语料不够强大的情况下或者没有及时更新生产环境语料的情况下,会存在误报或漏报。

发明内容

本申请提供了一种构建识别模型及攻击识别方法、装置、设备及存储介质,用以有效识别SQLI攻击,降低误报或漏报。

第一方面,本申请实施例提供了一种构建识别模型的方法,包括:

获取结构化查询语言注入攻击的训练样本集合;

根据结构化查询语言的词库,对所述训练样本集合中每条样本进行分词处理,获得所述每条样本各自的分词后样本,并转换得到每条所述分词后样本各自的表示向量;

获取每条所述分词后样本各自对应的第一词嵌入向量;

获取所述词库中每个词条各自对应的第二词嵌入向量;

基于所述每条样本各自的所述表示向量和所述第一词嵌入向量,以及所述词库中每个词条各自的第二词嵌入向量,对预设的神经网络模型进行训练,得到所述结构化查询语言注入攻击的识别模型。

可选地,所述获取结构化查询语言注入攻击的训练样本集合,包括:

获取结构化查询语言注入攻击的原始训练样本集合;

对所述原始训练样本集合进行预处理,以得到所述训练样本集合;

其中,所述预处理包括:

去除所述原始训练样本集合的干扰数据;和/或

将所述原始训练样本集合中结构化查询语言的编码数据,解码为结构化查询语言的原始数据。

可选地,所述干扰数据包括以下至少一者:注释语句、特殊符号、重复样本、存在歧义的数据、单字符样本和单数字样本。

可选地,所述结构化查询语言的词库的构建过程包括:

提取词库构建样本集合中每条样本包含的单词、字符以及数字;

对提取到的所述单词、所述字符以及所述数字进行筛选处理后,得到所述词库包含的词条,并获取每个所述词条对应的索引值;

生成包含每个所述词条以及每个所述词条对应的索引值的所述词库。

可选地,所述获取每个所述词条对应的索引值,包括:

统计每个所述词条在所述样本中的出现频次;

按照所述出现频次从高到低的顺序,对每个所述词条进行排序,获得排序结果;

将所述词条在所述排序结果中的排名,作为所述词条的所述索引值。

可选地,所述根据结构化查询语言的词库,对所述训练样本集合中每条样本进行分词处理,获得所述每条样本各自的分词后样本,并转换得到每条所述分词后样本各自的表示向量,包括:

分别对每条所述样本进行以下处理:

根据所述结构化查询语言的词库,对所述样本进行分词处理,获得所述样本包含的各分词;

从所述词库中获取每个所述分词各自对应的索引值;

按照每个所述分词在所述样本中的出现次序,对每个所述分词对应的索引值进行排序;

将排序后得到的索引值序列,作为所述样本对应的表示向量。

可选地,所述第一词嵌入向量中包括基于频率的词嵌入向量;

所述基于频率的词嵌入向量包括计数向量,基于单个分词统计到的频率向量,以及基于n元语法统计到的频率向量中的至少一种。

可选地,获取所述分词后样本对应的第一词嵌入向量,包括:

统计所述词库中的每个词条各自在所述分词后样本中出现的次数,根据统计到的次数,得到所述分词后样本的计数向量;

其中,所述计数向量的一行对应一条所述分词后样本,所述计数向量的一列对应所述词库中的一个词条,所述计数向量中的一个第j列元素的取值表示目标样本中出现目标词条的次数,所述目标样本为所述元素所在行对应的所述分词后样本,所述目标词条为所述词库中的第j个词条;

和/或

对所述词库中的每个词条进行以下处理:统计所述词条在所述分词后样本中出现的次数,根据统计到的次数以及所述分词后样本的总词数,获得所述词条对应的词频;获得所述训练样本集合中包含所述词条的目标样本数;根据所述目标样本数以及所述训练样本集合的样本总数,获得所述词条的逆文本频率指数;根据所述词条的词频和所述词条的逆文本频率指数,获得所述词条对应的元素值;

根据所述词库中每个所述词条对应的元素值,得到所述分词后样本的所述基于单个分词统计到的频率向量;

和/或

采用n元语法对所述词库重构为重构词库,以及采用n元语法对所述分词后样本的各分词进行重组,获得重构样本,对所述重构词库中的每个重构词条进行以下处理:统计所述重构词条在所述重构样本中出现的次数,根据统计到的次数以及所述重构样本的总词数,获得所述重构词条对应的词频;获得所述训练样本集合中包含所述重构词条的重构样本数;根据所述重构样本数以及所述训练样本集合的重构样本总数,获得所述重构词条的逆文本频率指数;根据所述重构词条的词频和所述重构词条的逆文本频率指数,获得所述重构词条对应的元素值;

根据所述重构词库中每个所述重构词条对应的元素值,得到所述重构样本的所述基于n元语法统计到的频率向量,作为所述分词后样本的所述基于n元语法统计到的频率向量。

可选地,所述获取所述词库中每个词条各自对应的第二词嵌入向量,包括:

对于所述词库中的每个词条进行以下处理:

将所述词条以及所述每条样本各自的分词后样本输入到Word2vec模型,获得所述Word2vec模型基于所述分词后样本中包含的、所述词条的上下文信息,预测得到的所述词条的第二词嵌入向量。

可选地,所述神经网络模型包括依次串接的输入层、嵌入层、全连接层和输出层,所述嵌入层所使用神经元的权重为,由所述每个词条各自对应的第二词嵌入向量所组成的矩阵,所述嵌入层所使用的神经元的参数固定;

所述基于所述每条样本各自的所述表示向量和所述第一词嵌入向量,以及所述词库中每个词条各自的第二词嵌入向量,对预设的神经网络模型进行训练,得到所述结构化查询语言注入攻击的识别模型,包括:

一次训练过程包括:

将每个所述样本的所述表示向量通过所述输入层输入到所述嵌入层的神经元,通过所述嵌入层的神经元,对所述表示向量叠加所述词库中每个词条各自的第二词嵌入向量所组成的矩阵后,获得所述样本对应的携带样本语义的抽象矩阵;

通过所述全连接层中的神经元,将每个所述样本的第一词嵌入向量叠加到对应的所述抽象矩阵中,得到每个所述样本对应的叠加后的抽象矩阵,并通过激活函数对所述叠加后的抽象矩阵进行预测得到一维矩阵;

通过所述输出层输出所述一维矩阵,所述一维矩阵中的元素用于指示所述样本的预测结果是否为结构化查询语言注入攻击;

根据每个所述样本的预测结果以及每个所述样本是否为结构化查询语言注入攻击的真实结果,计算预测误差;

判断所述预测误差是否大于预设误差值;

若是,将所述预测误差反向传播至所述全连接层,根据所述预测误差调整所述全连接层的参数后,返回执行下一次所述训练过程;

否则,将所述神经网络模型确定为所述识别模型。

第二方面,本申请实施例提供了一种攻击识别方法,包括:

获取请求报文中携带的结构化查询语句,作为待识别语句;

根据结构化查询语言的词库,对所述待识别语句进行分词处理,获得所述待识别语句的分词结果,并转换得到所述分词结果的表示向量;

获取所述分词结果对应的第一词嵌入向量;

将所述表示向量输入至识别模型,获得所述识别模型输出的识别结果;

根据所述识别结果,判断所述请求报文是否存在结构化查询语言注入攻击;

其中,所述识别模型为采用第一方面所述的方法构建得到,所述识别模型中的所述全连接层将所述第一词嵌入向量与所述嵌入层输出的抽象矩阵叠加。

第三方面,本申请实施例提供了一种构建攻击识别模型的装置,包括:

第一获取模块,用于获取结构化查询语言注入攻击的训练样本集合;

分词模块,用于根据结构化查询语言的词库,对所述训练样本集合中每条样本进行分词处理,获得所述每条样本各自的分词后样本,并转换得到每条所述分词后样本各自的表示向量;

第二获取模块,用于获取每条所述分词后样本各自对应的第一词嵌入向量;

第三获取模块,用于获取所述词库中每个词条各自对应的第二词嵌入向量;

第四获取模块,用于基于所述每条样本各自的所述表示向量和所述第一词嵌入向量,以及所述词库中每个词条各自的第二词嵌入向量,对预设的神经网络模型进行训练,得到所述结构化查询语言注入攻击的识别模型。

第四方面,本申请实施例提供了一种攻击识别装置,包括:

第一获取模块,用于获取请求报文中携带的结构化查询语句,作为待识别语句;

分词模块,用于根据结构化查询语言的词库,对所述待识别语句进行分词处理,获得所述待识别语句的分词结果,并转换得到所述分词结果的表示向量;

第二获取模块,用于获取所述分词结果对应的第一词嵌入向量;

第三获取模块,用于将所述表示向量输入至识别模型,获得所述识别模型输出的识别结果;

判断模块,用于根据所述识别结果,判断所述请求报文是否存在结构化查询语言注入攻击;

其中,所述识别模型为采用第一方面任一项所述的方法构建得到,所述识别模型中的所述全连接层将所述第一词嵌入向量与所述嵌入层输出的抽象矩阵叠加。

第五方面,本申请实施例提供了一种电子设备,包括:处理器、存储器和通信总线,其中,处理器和存储器通过通信总线完成相互间的通信;

所述存储器,用于存储计算机程序;

所述处理器,用于执行所述存储器中所存储的程序,实现第一方面任一项所述的构建攻击识别模型的方法,或者,实现第二方面所述的攻击识别方法。

第六方面,本申请实施例提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现第一方面任一项所述的构建攻击识别模型的方法,或者,实现第二方面所述的攻击识别方法。

本申请实施例提供的上述技术方案与现有技术相比具有如下优点:本申请实施例提供的该方法,通过构建结构化语言的词库,采用该词库对SQLI攻击的样本进行分词,分别获得分词后样本的表示向量以及第一词嵌入向量,并获得词库中每个词条的第二词嵌入向量,基于表示向量、第一词嵌入向量和第二词嵌入向量,对神经网络模型进行训练,得到能够识别SQLI攻击的识别模型。采用自然语言处理的方法对SQLI样本进行分析后构建识别模型,使得构建的识别模型能够实现对SQLI的低误报、低漏报,有效识别SQLI攻击。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。

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

图1A为本申请实施例中人工神经网络的结构示意图;

图1B为本申请实施例中识别模型应用的系统架构示意图;

图2为本申请实施例中构建识别模型的方法流程示意图;

图3为本申请实施例中结构化查询语言的词库的构建过程示意图;

图4为本申请实施例中得到表示向量的过程示意图;

图5为本申请实施例中获得基于单个分词统计到的频率向量的过程示意图;

图6为本申请实施例中获得基于n元语法统计到的频率向量的过程示意图;

图7为本申请实施例中CBOW模型结构示意图;

图8为本申请实施例中Skip gram模型结构示意图;

图9为本申请实施例中得到识别模型的过程示意图;

图10为本申请实施例中进行攻击识别的过程示意图;

图11为本申请实施例中构建攻击识别模型的装置结构示意图;

图12为本申请实施例中攻击识别装置的结构示意图;

图13为本申请实施例中电子设备结构示意图。

具体实施方式

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

首先,对本申请实施例所涉及到的技术名词进行以下说明:

SQLI,即SQL注入攻击,是通过将恶意的SQL语句,如SQL查询或添加语句,插入到应用的输入参数中,再在后台SQL服务器上解析该SQL语句执行攻击,它是目前黑客对数据库进行攻击的最常用手段之一。SQLI带来的威胁主要有如下几点:1.拆解后台数据库,盗取网站的敏感信息;2.绕过认证,例如绕过验证登录网站后台;3.可以借助数据库的存储过程进行提权等操作。

NLP,英文全称:Natural Language Processing,中文名称:自然语言处理,作为目前AI领域大热的研究方向,在信息安全等领域也显现出了其重要意义。近年来,随着预训练语言模型的逐渐成熟,语法标注、文本生成、语义逻辑推理、自动问答等为代表的自然语言处理任务的性能得到了巨大提升,这也为处理信息安全相关的文本内容分析提供了前所未有的技术支持。信息安全的相关文本内容中,虽然SQL语句不属于自然语言的范畴,但是NLP中文本处理的思想同样可以用于SQLI语句的分析。

词嵌入,作为文本处理的重要手段,其目标是将文本转化为计算机所认识的数字,这些数字又能够携带原文本所表达的信息。常用的词嵌入转化思想是通过字典将文本中的词映射为一个向量,基于这一思想,目前有很多种词嵌入方法,大致分为两类:1.基于频率的词嵌入向量,相关算法如计数向量、TF-IDF向量、共生矩阵向量等;2.基于预测的词嵌入向量,相关算法如Word2vec。

URL编码是一种浏览器用来打包表单输入的格式,作用是将字符转化为可在因特网上安全传输的格式。URL英文全称:Uniform Resource Locator,中文名称:统一资源定位。

人工神经网络,简称ANN,英文全称Artificial Neural Network,也称为神经网络,是一种模仿生物神经结构和功能的模型,通过它产生对目标函数的近似估计。神经网络由大量的人工神经元联结进行计算,它能根据输入信息的变化而改变自身内部结构,是一种自适应系统。在统计学习方法中神经网络既可以用来做监督学习模型,也可以用来做非监督学习模型。

人工神经网络的大致结构如图1A所示。神经网络由输入层(input)、隐藏层和输出层(output)组成。隐藏层由一层或者多层组成。图中每个圆圈代表了一个神经元,每个神经元都有对应输入的权值w、偏移量b和一个激活函数组成,其中w,b为神经元的参数。如果采用S型生成曲线(Sigmoid)作为激活函数,则神经元之间的信息传递公式为y=sig(w*x+b),x是指向此神经元的输入信息,y为此神经元的输出信息,sig表示S型生成曲线。神经网络由输入层沿着箭头的方向传递信息,直到产生输出结果。

神经网络通过正向传播和反向传播两个过程来确定每个神经元的参数,正向传播过程中信息沿着图中箭头的方向传递信息,神经网络在一定范围内初始化参数,经过信息传递后得到相应误差值,如果误差不能满足所要求的精度,便会进入反向传播过程。反向传播过程将输出反馈给前一层的每个神经元,通过误差信号逐渐调整每个神经元的参数,将参数朝着使误差信号变小的方向调整。经过训练,不断减小误差信号,得到最终用于分类的神经网络模型。

本申请实施例中,基于自然语言处理的思想,提出了一种构建用于识别SQLI攻击的识别模型的方法,通过该方法构建的识别模型可以应用于如图1B所示的系统架构中。该系统架构中包括终端10和服务器11,其中,服务器11中配置采用该方法构建得到的识别模型。

终端10向服务器发起请求报文;

服务器11获取终端10发送的请求报文,在该请求报文中携带结构化查询语句时,采用该识别模型对该结构化查询语句进行SQLI攻击识别。

本申请第一实施例中,如图2所示,构建识别模型的具体方法流程如下:

步骤201,获取结构化查询语言注入攻击的训练样本集合。

一个可选实施例中,获取结构化查询语言注入攻击的训练样本集合的具体过程包括:获取结构化查询语言注入攻击的原始训练样本集合;去除该原始训练样本集合的干扰数据,以及将该原始训练样本集合中结构化查询语言的编码数据,解码为结构化查询语言的原始数据,得到该训练样本集合。

其中,干扰数据可以包括以下至少一者:注释语句、特殊符号、重复数据、存在歧义的数据、单字符样本和单数字样本。需要说明的是,不属于SQLI的数据均可以归为干扰数据,此处仅为举例说明,如果还有其他可能对SQLI识别造成干扰的数据,也在干扰数据的范围内。

具体地,原始训练样本集合中包括收集到的恶意样本,该恶意样本包括从网络上收集到已公开的、具有影响力、较为典型的SQLI样本,以及,在业务场景应用中收集到的SQLI样本。例如,该SQLI样本中包括开源的SQLI语义分析库,数据库厂商官方的样本库等,共86781条样本。

在获取到原始训练样本集合后,对该原始训练样本集合中的样本进行预处理,以对该原始训练样本集合中的样本数据进行清洗,该预处理主要包括以下处理过程:

去除原始训练样本集合中样本中的注释语句、特殊符号、存在歧义的数据;去除原始训练样本集合中的重复样本、单字符样本和单数字样本;和/或将原始训练样本集合中带有转码或转义等编码数据的样本,将该样本解码为结构化查询语言的原始数据。

将进行以上处理后的原始训练样本集合,作为步骤201中得到的训练样本集合。

例如,采用URL编码后的样本表示如下:

F****%27)%2c(1%2c2%2c3%2c4%2c5%2c(SELECT+IF+((ASCII(SUBSTRING(se_games.admin_pw%2c1%2c1)%3d%271%27)+%26+1%2c+benchmark(20000%2cCHAR(0))%2c0)+FROM+se_games))%2f*;

将该样本解码还原后得到如下SQL语句:

F****'),(1,2,3,4,5,(SELECT IF((ASCII(SUBSTRING(se_games.admin_pw,1,1)='1')&1,benchmark(20000,CHAR(0)),0)FROM se_games))/*。

步骤202,根据结构化查询语言的词库,对训练样本集合中每条样本进行分词处理,获得每条样本各自的分词后样本,并转换得到每条该分词后样本各自的表示向量。

需要说明的是,分词处理是NLP的重要步骤,通过分词处理将句子、段落、文章等长文本,分解为以字词为单位的数据结构,方便后续的处理分析工作。SQLI样本中的语句不属于自然语言范畴,无法按照目前主流的中文分词或英文分词的方法来实现。如果按照单个字符来分词的话粒度太小,无法表达完整含义,例如字符”a”会在”and”、”admin”中出现,但是会表达出完全不同的SQL语句。而以语句为粒度则又粒度太大,语句中承载的信息太多,不适用于后面的文本分析。所以对SQLI的分词需要建立相应的词库,依照该词库来对样本进行分词。

一个可选实施例中,如图3所示,结构化查询语言的词库的构建过程包括:

步骤301,提取词库构建样本集合中每条样本包含的单词、字符以及数字;

步骤302,对提取到的单词、字符以及数字进行筛选后,得到词库包含的词条,并获取每个词条对应的索引值;

步骤303,生成包含每个词条以及每个词条对应的索引值的词库。

其中,词条的索引值,是用于唯一标识词库中的该词条。该索引值的配置方式可以有多种,只需要满足词库中各词条的索引值唯一即可。

一个可选实施例中,获取每个词条对应的索引值的具体过程,包括:统计每个词条在所述样本中的出现频次;按照该出现频次从高到低的顺序,对每个词条进行排序,获得排序结果;将词条在排序结果中的排名,作为该词条的索引值。

按照词条的出现频次,确定词条的索引值,将出现频次高的词条排列在词典靠前的位置,使得能够在查词库时,常用的分词能够被快速索引到,提高分词的效率。

其中,提取词库构建样本集合中每条样本包含的单词、字符以及数字后,将提取到的各单词、字符以及数字作为初始词条,得到初始词库。对该初始词库中的词条进行筛选处理,可以是人工筛选,得到能够表征SQLI语义的词条,使用筛选处理后的词条,构成最终使用的词库。

例如,“1=1”在SQLI中通常作为判定为真的依据;“#”常作为SQLI中的注释字符;“rlike”作为SQLI中的模糊匹配标志;“@”为局部变量标识;“@@”为全局变量标识。如筛选后得到的词库为[“1=1”,“#”,“rlike”,“@@”,“@”]。

一个可选实施例中,如图4所示,在获得结构化查询语言的词库后,根据结构化查询语言的词库,对训练样本集合中每条样本进行分词处理,获得每条样本各自的分词后样本,并转换得到每条分词后样本各自的表示向量,包括:

分别对每条样本进行以下处理:

步骤401,根据结构化查询语言的词库,对样本进行分词处理,获得该样本包含的各分词;

步骤402,从词库中获取每个分词各自对应的索引值;

步骤403,按照每个分词在该样本中的出现次序,对每个分词对应的索引值进行排序;

步骤404,将排序后得到的索引值序列,作为该样本对应的表示向量。

例如,假设一个样本为“select-sin(((@version)),2from bar where”,经过分词后得到该样本的表示向量[34,69,5,11,88,324,513,66],也就是对分词结果[“select”,“-sin”,“@”,“version”,“2”,“from”,“bar”,“where”]中的每个分词,查找词库中的索引值,将查到的索引值替换相应分词后,得到该表示向量。

通过获得样本的表示向量,将样本数学化,便于后续运算时使用。

步骤203,获取每条分词后样本各自对应的第一词嵌入向量。

一个可选实施例中,第一词嵌入向量中包括基于频率的词嵌入向量;基于频率的词嵌入向量包括计数向量,基于单个分词统计到的频率向量,以及基于n元语法统计到的频率向量中的至少一种。

其中,计数向量英文表示为Count-Vector,计数向量能够将文字转换为方便机器学习模型处理的数字。

一个可选实施例中,获得计数向量的具体过程包括:统计词库中的每个词条各自在分词后样本中出现的次数,根据统计到的次数,得到该分词后样本的计数向量。计数向量的一行对应一条分词后样本,计数向量的一列对应词库中的一个词条,计数向量中第j列元素的取值表示目标样本中出现目标词条的次数,目标样本为元素所在行对应的分词后样本,目标词条为词库中的第j个词条。

例如,假设词库为[“select”,“form”,“bar”,“where”],一个样本为“selectselect from from from bar where”,转化为该样本的计数向量[2,3,1,1]。可以理解的是,此处仅是为了便于理解,假设词库中仅有4个token,应用中词库中包含的token的数量远远大于4,如词库中包含63000个token,则计数向量的列数为63000。

一个可选实施例中,采用词频(TF)-逆文本频率指数(IDF),计算得到基于单个分词统计到的频率向量。与计数向量不同,采用TF-IDF计算得到的频率向量中,不仅考虑单个样本中分词的出现频率,而且还考虑了在整个词库中该分词出现的频率。

如图5所示,对于一个样本,获得基于单个分词统计到的频率向量的具体过程包括:

步骤501,对词库中的每个词条进行以下处理:统计词条在分词后样本中出现的次数,根据统计到的次数以及分词后样本的总词数,获得该词条对应的词频;获得训练样本集合中包含该词条的目标样本数;根据目标样本数以及训练样本集合的样本总数,获得该词条的逆文本频率指数;根据该词条的词频和该词条的逆文本频率指数,获得该词条对应的元素值;

步骤502,根据词库中每个词条对应的元素值,得到分词后样本的基于单个分词统计到的频率向量。

也就是说,TF=(词在该样本中出现的次数)/(该样本的总词数)。

IDF=log(N/n),N为样本总数,n为出现过该词的样本数。

例如,共有两个样本:“select from bar where”,“1union select version()”。

对于该两个样本,“select”的TF均为1/4=0.25;“select”的IDF为log(2/2)=0;则“select”对应两个样本的TF-IDF=0.25*0=0。

对于第二个样本,“union”的TF为1/4=0.25;“union”的IDF为log(2/1)=0.69;则“union”对应第二个样本的TF-IDF=0.25*0.69=0.17。

按照该方式计算出各个样本中每个分词的TF-IDF后,即可获得该样本的频率向量。

在得到每个样本的频率向量后,可以整合得到一个总的频率向量,该总的频率向量的一行对应一条分词后样本,该频率向量的一列对应词库中的一个词条。

一个可选实施例中,采用TF-IDF(n-gram),计算得到基于n元语法统计到的频率向量。与TF-IDF获取频率向量的方法类似,区别在于使用的词库不是单个token组成,而是以多个token组成。由于基于单个token得到的频率向量,并不能表征样本的上下文语义,采用多个token得到的频率向量,会携带token的上下文语义,以更加准确地描述样本。例如n取值为2,采用2-gram,样本中的“select from”会作为一个token,采用TF-IDF计算得到频率向量。

其中,对n的取值并不做具体限定,只需要满足n大于1,且不大于预设值即可,通过设置预设值,避免计算量过大。

如图6所示,获得基于n元语法统计到的频率向量的具体过程包括:

步骤601,采用n元语法对词库重构为重构词库,以及采用n元语法对分词后样本的各分词进行重组,获得重构样本,对重构词库中的每个重构词条进行以下处理:统计重构词条在重构样本中出现的次数,根据统计到的次数以及重构样本的总词数,获得该重构词条对应的词频;获得训练样本集合中包含该重构词条的重构样本数;根据重构样本数以及训练样本集合的重构样本总数,获得该重构词条的逆文本频率指数;根据该重构词条的词频和该重构词条的逆文本频率指数,获得该重构词条对应的元素值;

步骤602,根据重构词库中每个重构词条对应的元素值,得到重构样本的基于n元语法统计到的频率向量,作为分词后样本的基于n元语法统计到的频率向量。

在得到每个样本的基于n元语法统计到的频率向量后,可以整合得到一个总的频率向量,该总的频率向量的一行对应一个重构样本,该频率向量的一列对应重构词库中的一个重构词条。

步骤204,获取词库中每个词条各自对应的第二词嵌入向量。

一个可选实施例中,获取词库中每个词条各自对应的第二词嵌入向量,包括:对于词库中的每个词条进行以下处理:

将词条以及每条样本各自的分词后样本输入到Word2vec模型,获得该Word2vec模型基于该分词后样本中包含的、该词条的上下文信息,预测得到的该词条的第二词嵌入向量。该第二词嵌入向量能够表征该词条的上下文语义。

其中,Word2vec模型包括连续词袋模型或跳字模型,或者同时包括连续词袋模型和跳字模型。

具体地,Word2vec模型包括连续词袋模型(英文全称为Continuous bag ofwords,简称为CBOW)和跳字模型(Skip gram)。在使用时可以通过设置仅使用CBOW模型或Skip gram模型。CBOW模型和Skip gram模型均是浅层神经网络模型。

其中,CBOW模型结构如图7所示,该模型用于通过给定的该词条的上下文预测该词条,该上下文可以是一个词条或一组词条,即CBOW模型用词条周围的词预测该词条,从而得到该词条的第二词嵌入向量。

具体地,将词条以及每条样本各自的分词后样本输入到训练得到的CBOW模型,该CBOW模型从每条分词后样本中,抽取该词条的上下文分词,基于该词条的上下文分词,预测得到该词条,将得到该词条时该CBOW模型的网络参数,作为该词条的第二词嵌入向量。

训练该CBOW模型的过程为:将词条以及每条样本各自的分词后样本输入到初始的CBOW模型中,该CBOW模型从每条分词后样本中抽取该词条的上下文分词,基于该词条的上下文分词,预测得到预测词条,如果该预测词条与该词条不一致,则调整该CBOW模型的网络参数,直至预测词条与该词条一致为止。重复该训练过程,直至预测准确率达到设定比率值后,得到能够应用的CBOW模型。

其中,Skip gram模型结构如图8所示,Skip gram模型则与CBOW模型相反,在给定词条的情况下,预测该词条的上下文,从而得到该词条的第二词嵌入向量。

具体地,将词条以及每条样本各自的分词后样本输入到训练得到的Skip gram模型,该Skip gram模型预测该词条的上下文,在预测得到的该词条的上下文,与从分词后样本中抽取的该词条的上下文一致时,将该Skip gram模型的参数作为该词条的第二词嵌入向量。

训练该Skip gram模型的过程为:将词条以及每条样本各自的分词后样本输入到初始的Skip gram模型,该Skip gram模型预测该词条的上下文,将预测得到的该上下文,与从分词后样本中抽取的上下文进行比较,在两者不一致时,调整该Skip gram模型的网络参数,直至预测到的上下文与抽取的上下文一致。重复该训练过程,直至预测的准确率高于设定比率值时,得到能够应用的Skip gram模型。

步骤205,基于每条样本各自的表示向量和第一词嵌入向量,以及词库中每个词条各自的第二词嵌入向量,对预设的神经网络模型进行训练,得到结构化查询语言注入攻击的识别模型。

一个可选实施例中,神经网络模型包括依次串接的输入层(Input)、嵌入层(embedding)、全连接层和输出层(Output)。

嵌入层所使用神经元的权重为,由每个词条各自对应的第二词嵌入向量所组成的矩阵,嵌入层所使用的神经元的参数固定。

具体地,如图9所示,基于每条样本各自的表示向量和第一词嵌入向量,以及词库中每个词条各自的第二词嵌入向量,对预设的神经网络模型进行训练,得到结构化查询语言注入攻击的识别模型,包括:

步骤901,将每个样本的表示向量通过输入层输入到嵌入层的神经元,通过嵌入层的神经元,对表示向量叠加词库中每个词条各自的第二词嵌入向量所组成的矩阵后,获得每个样本对应的携带样本语义的抽象矩阵;

步骤902,通过全连接层中的神经元,将每个样本的第一词嵌入向量叠加到对应的抽象矩阵中,得到每个样本对应的叠加后的抽象矩阵,并通过激活函数对该叠加后的抽象矩阵进行预测得到一维矩阵;

步骤903,通过输出层输出该一维矩阵,该一维矩阵中的元素用于指示该样本的预测结果是否为结构化查询语言注入攻击;

步骤904,根据每个样本的预测结果以及每个样本是否为结构化查询语言注入攻击的真实结果,计算预测误差;

步骤905,判断该预测误差是否大于预设误差值,若是,执行步骤906,否则,执行步骤907;

步骤906,将该预测误差反向传播至全连接层,根据该预测误差调整全连接层的参数后,返回执行步骤901;

步骤907,将该神经网络模型确定为识别模型。

其中,输入到输入层中的表示向量的长度为预设值,对于长度小于该预设值的表示向量,用零补齐,例如,该预设值为300维。

其中,该识别模型可以采用函数RELU作为激活函数。在输出层得到一维矩阵后,可以通过例如Softmax层对该一维矩阵进行正规化处理。具体地,在正规化处理后的一维矩阵中可以包括两个元素,该两个元素分别表示输入样本为SQLI攻击的概率和输入样本不为SQLI攻击的概率(即为正常样本的概率),当表示输入样本为SQLI攻击的概率大于预设概率时,可以判定该输入样本为SQLI攻击,否则判定该输入样本不为SQLI攻击。

其中,神经元的信息传递函数y=f(w*x+b),w、b具体可以是以矩阵形式表示的神经元的参数。

通过设定神经元的参数w、b,使得最终输出一维矩阵,并且矩阵中的元素为用于预测是否SQLI攻击的概率值。

一个可选实施例中,训练得到该识别模型后,采用测试样本集合对识别模型进行测试,该测试样本集合与训练过程中所使用的训练样本集合,共同构成用于构建词库的构建词库样本集合。

按照与识别模型构建过程类似的过程,对测试样本集合中的每个样本进行SQLI识别,根据识别的结果对识别模型的SQLI识别效果进行评价。

评价标准包括准确率、召回率和精准率。

准确率(Accuracy):准确率表示在给定测试集上,网络模型正确分类的样本数与总样本数之比。

召回率(Recall):召回率表示在给定测试集上,网络模型预测正确的SQLI样本数与实际SQLI样本数之比。

精确率(Precision):精确率表示在给定测试集上,网络模型预测正确的SQLI样本数与分类器预测为SQLI的样本数之比。

其中,TP表示正确分类的正样本数,TN表示正确分类的负样本数,FP表示错误分类的正样本数,FN表示错误分类的负样本数。

本申请实施例提供的该方法,通过构建结构化语言的词库,采用该词库对SQLI攻击的样本进行分词,分别获得分词后样本的表示向量以及第一词嵌入向量,并获得词库中每个词条的第二词嵌入向量,基于表示向量、第一词嵌入向量和第二词嵌入向量,对神经网络模型进行训练,得到能够识别SQLI攻击的识别模型。采用自然语言处理的方法对SQLI样本进行分析后构建识别模型,使得构建的识别模型能够实现对SQLI的低误报、低漏报,有效识别SQLI攻击。

如图10所示,基于以上所构建的识别模型,进行攻击识别的具体过程如下:

步骤1001,获取请求报文中携带的结构化查询语句,作为待识别语句;

步骤1002,根据结构化查询语言的词库,对所述待识别语句进行分词处理,获得所述待识别语句的分词结果,并转换得到所述分词结果的表示向量;

步骤1003,获取所述分词结果对应的第一词嵌入向量;

步骤1004,将所述表示向量输入至识别模型,获得所述识别模型输出的识别结果,该识别模型中的全连接层将第一词嵌入向量与嵌入层输出的抽象矩阵叠加;

步骤1005,根据所述识别结果,判断所述请求报文是否存在结构化查询语言注入攻击。

基于同一构思,本申请实施例中提供了一种构建攻击识别模型的装置,该装置的具体实施可参见方法实施例部分的描述,重复之处不再赘述,如图11所示,该装置主要包括:

第一获取模块1101,用于获取结构化查询语言注入攻击的训练样本集合;

分词模块1102,用于根据结构化查询语言的词库,对所述训练样本集合中每条样本进行分词处理,获得所述每条样本各自的分词后样本,并转换得到每条所述分词后样本各自的表示向量;

第二获取模块1103,用于获取每条所述分词后样本各自对应的第一词嵌入向量;

第三获取模块1104,用于获取所述词库中每个词条各自对应的第二词嵌入向量;

第四获取模块1105,用于基于所述每条样本各自的所述表示向量和所述第一词嵌入向量,以及所述词库中每个词条各自的第二词嵌入向量,对预设的神经网络模型进行训练,得到所述结构化查询语言注入攻击的识别模型。

基于同一构思,本申请实施例中提供了一种攻击识别装置,该装置的具体实施可参见方法实施例部分的描述,重复之处不再赘述,如图12所示,该装置主要包括:

第一获取模块1201,用于获取请求报文中携带的结构化查询语句,作为待识别语句;

分词模块1202,用于根据结构化查询语言的词库,对所述待识别语句进行分词处理,获得所述待识别语句的分词结果,并转换得到所述分词结果的表示向量;

第二获取模块1203,用于获取所述分词结果对应的第一词嵌入向量;

第三获取模块1204,用于将所述表示向量输入至识别模型,获得所述识别模型输出的识别结果,所述识别模型中的所述全连接层将所述第一词嵌入向量与所述嵌入层输出的抽象矩阵叠加;

判断模块1205,用于根据所述识别结果,判断所述请求报文是否存在结构化查询语言注入攻击。

基于同一构思,本申请实施例中还提供了一种电子设备,如图13所示,该电子设备主要包括:处理器1301、存储器1302和通信总线1303,其中,处理器1301和存储器1302通过通信总线1303完成相互间的通信。其中,存储器1302中存储有可被至处理器1301执行的程序,处理器1301执行存储器1302中存储的程序,实现如下步骤:

获取结构化查询语言注入攻击的训练样本集合;

根据结构化查询语言的词库,对所述训练样本集合中每条样本进行分词处理,获得所述每条样本各自的分词后样本,并转换得到每条所述分词后样本各自的表示向量;

获取每条所述分词后样本各自对应的第一词嵌入向量;

获取所述词库中每个词条各自对应的第二词嵌入向量;

基于所述每条样本各自的所述表示向量和所述第一词嵌入向量,以及所述词库中每个词条各自的第二词嵌入向量,对预设的神经网络模型进行训练,得到所述结构化查询语言注入攻击的识别模型。

或者

获取请求报文中携带的结构化查询语句,作为待识别语句;

根据结构化查询语言的词库,对所述待识别语句进行分词处理,获得所述待识别语句的分词结果,并转换得到所述分词结果的表示向量;

获取所述分词结果对应的第一词嵌入向量;

将所述表示向量输入至识别模型,获得所述识别模型输出的识别结果,所述识别模型中的所述全连接层将所述第一词嵌入向量与所述嵌入层输出的抽象矩阵叠加;

根据所述识别结果,判断所述请求报文是否存在结构化查询语言注入攻击。

上述电子设备中提到的通信总线1303可以是外设部件互连标准(PeripheralComponent Interconnect,简称PCI)总线或扩展工业标准结构(Extended IndustryStandard Architecture,简称EISA)总线等。该通信总线1303可以分为地址总线、数据总线、控制总线等。为便于表示,图13中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

存储器1302可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器1301的存储装置。

上述的处理器1301可以是通用处理器,包括中央处理器(Central ProcessingUnit,简称CPU)、网络处理器(Network Processor,简称NP)等,还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在本申请的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,当该计算机程序在计算机上运行时,使得计算机执行上述实施例中所描述构建识别模型的方法,或者,攻击识别方法。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行该计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。该计算机可以时通用计算机、专用计算机、计算机网络或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、微波等)方式向另外一个网站站点、计算机、服务器或数据中心进行传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质(例如软盘、硬盘、磁带等)、光介质(例如DVD)或者半导体介质(例如固态硬盘)等。

需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。

相关技术
  • 构建识别模型及攻击识别方法、装置、设备及存储介质
  • 识别模型构建方法、语音识别方法、电子设备及存储介质
技术分类

06120112922733