一种基于人工神经元网络的SQL漏洞检测方法与流程

文档序号:12365206阅读:790来源:国知局
一种基于人工神经元网络的SQL漏洞检测方法与流程
本发明涉及一种基于人工神经元网络的SQL漏洞检测方法,属于计算机软件领域。
背景技术
:近年来,随着Web应用的广泛使用,Web安全问题也日益突出。SQL注入(SQLInjection)漏洞已成为Web应用中普遍存在的安全隐患之一,它是指攻击者利用Web应用系统用户输入和信息上传的动态特性,将一些恶意数据或代码上传到Web应用系统中,并使这些恶意数据或代码在Web应用系统的服务器端或客户端执行,从而造成Web应用目标系统崩溃、数据被篡改和泄露。由于目前多数的Web应用都采取了应用程序与数据库访问的交互式结构,即用户提交输入,应用程序根据输入构建SQL语句提交给数据库管理系统,执行后将结果返回给用户。SQL漏洞的产生是由于部分开发人员编写Web应用时,多关注业务逻辑,疏于验证用户输入,导致恶意的用户的输入嵌入在SQL语句中,欺骗服务器端执行,以获取超越权限的数据和使用功能,从而导成数据库信息的泄露等严重后果。因此,对SQL漏洞的检测是非常必要的。通过调研国内外流行的SQL漏洞检测技术,我们发现目前存在的主要缺点是误报率和漏报率较高,精度较差。本文提出的方法是利用大量已知的SQL漏洞注入数据和人工神经元网络算法来训练产生SQL语句漏洞分析模型,可提高检测的精度,减少检测的时间。本方法的设计是基于这样一种观察:虽然SQL注入漏洞可能有多种样式,但是其攻击种类仍然是有限的,而且其中包含了大量相似的关键词和组合语句。如果对攻击的种类进行总结和分类,并设计一个能够自主学习的模型,通过大量的样本训练就能够得到一个比较准确的SQL注入漏洞检测模型,用来分析SQL语句是否可能含有注入攻击。本文基于这个思路,在对现有SQL注入式漏洞进行分析研究的基础上,提出了利用人工神经元网络技术建立SQL注入式漏洞分析和检测模型的方法。该方法充分应用了人工神经网络的自主学习功能,先把大量已知的SQL注入样本和对应的应识别的结果输入人工神经网络,并结合神经元网络算法来训练SQL注入漏洞的模型,网络就会通过自学习功能,慢慢学会识别类似的SQL语句,并可检测用户输入的SQL是否可能带来SQL注入攻击。与其它检测方法相比较,该模型建立之后,无需再次建立检测模型,即可对语句直接进行分析检测,因此具有更快的检测速度和更高的准确率。目前,已有的利用人工神经元网络进行SQL注入检测的工作有基于贝叶斯网络的SQLassiede方法,该方法是通过在Web应用程序和SQL数据库之间添加一个贝叶斯网络模型,当Web应用提交查询命令,生成的SQL语句传给贝叶斯网络模型,通过贝叶斯算法和正则匹配来实现对SQL语句的检测。虽然贝叶斯网络的时间复杂度比较低,比较容易实现,但是其分类性能不是很好,所以对于SQL注入检测的误报率也比较高。另外,该方法使用了字符串直接进行训练,这需要很长的时间,使得时间响应性变变差。本文提出的基于人工神经网络系统可以解决分类不准确的问题,同时,通过将SQL语句中的关键字组合而成的字符串为特征向量,来减少匹配的时间,从而改善漏洞检测的响应时间。综上所述,为了更好地进行SQL漏洞检测,需要实现以下两个方面的功能:①利用人工神经元网络技术建立SQL注入式漏洞的分析算法和分析模型。②高效的模型实现及其部署机制。技术实现要素:本发明的内容为:1)提出了一个基于人工神经元网络的SQL注入式漏洞分析和检测模型,降低了漏洞检测的误报率,减少了检测的时间。2)提出了一种通过将Web应用提交的SQL语句转换为特征向量组的SQL漏洞判定方法,因为样本中包含有多种SQL注入的语句,所以训练生成的模型检测的SQL注入的类型很多。3)通过在Web应用程序和数据库中间加一个代理来实现分析和检测过程,无需对Web应用代码进行修改,且可方便开发人员的调试和修改。4)对相关模型和判断方法进行了测试,验证了其有效性。为达到以上发明目的,经过研究讨论和反复实践,本系统确定最终方案如下。一种基于人工神经元网络的SQL漏洞检测方法,实现本方法的为基于神经元网络的检测模型,该模型由SQL语句分析模块和人工神经元网络检测模块组成。(1)SQL语句分析模块SQL语句分析模块的主要功能是将Web应用提交的SQL语句转换一个特征向量组r,r是由0和1组成的特征向量。通过对SQL注入攻击语句的分类研究,本方法将r设计为由12个ri组成。如果ri=1,则说明SQL语句中包含关键字;如果ri=0,则说明SQL语句中不包含某一关键字。定义C代表某一语句是否为SQL注入语句,并定义:若该语句是SQL注入语句,C的值为1,若该语句不是SQL注入攻击语句,C值为0。如此,每一条SQL查询语句都能够用特征向量r和C来表示。语句分析模块实现的功能就是将SQL语句转换为特征向量,然后再将得到的特征向量提交给人工神经元网络检测模块进行分析与检测。(2)人工神经元网络模块人工神经元网络模块是该模型的核心部分,本发明设计的人工神经网络模型是由四层组成的,其中包含4个隐藏层、12个输入和1个输出。该模块用来训练、验证和测试SQL语句相关的数据,通过不断改变内部的权值,得到一个稳定权值的人工神经网络检测模型。人工神经训练模块的输入矩阵、目标矩阵和神经元网络的设计如下:1)输入矩阵:这个矩阵是由n×12的逻辑矩阵组成的,其中矩阵的元素由0或者1组成的。其中的0代表错误,1代表正确。2)目标矩阵:这个矩阵是由n×1的逻辑矩阵组成的,其中矩阵的元素由0或者1组成。其中的0代表错误,1代表正确。3)神经元网络:该神经网络的中间层是由4个隐藏层组成的,该层利用输入矩阵和输出矩阵来对数据进行训练、验证和测试。基于人工神经网络的验证模块的样本矩阵、输出矩阵的设计如下:1)样本矩阵:这个矩阵是从输入矩阵得到的数据,然后组成一个n×12的逻辑矩阵。2)输出矩阵:这个矩阵包含了一个n×1的逻辑矩阵,由输入样本矩阵输入训练好的神经网络,然后预测得到的输出值,把输出值存到矩阵中,就可以得到该输出矩阵。运行环境本发明的人工神经网络采用BP神经元网络模型,用Java语言实现,在Windows64位系统上编写,在Windows64位系统上正常运行。软件系统可根据实际情况改变的内容由于本系统具有较强的通用性,在设计之初就考虑到了对其它操作系统的支持,可以很好的实现跨平台移植。附图说明图1系统总体架构(按模块)图2神经元网络模型具体实施方式本系统由SQL语句分析模块和人工神经元网络模块两个部分组成。系统架构如图1所示。SQL语句分析模块SQL语句分析模块的主要功能是将Web应用提交的SQL语句转换一个特征向量组r,r是由0和1组成的特征向量。通过对SQL注入攻击语句的分类,本模块将r设计为由12个ri组成,i代表个数。如果ri=1,则说明SQL语句中包含关键字;如果ri=0,则说明SQL语句中不包含某一关键字。若C代表某一语句是否为SQL注入语句,并定义:若该语句是SQL注入语句,C的值为1,若该语句不是SQL注入攻击语句,C值为0。这样一来,每一条SQL查询语句都可以用特征向量r和C来表示。语句分析模块实现的功能就是将SQL语句转换为特征向量,然后再将得到的特征向量提交给人工神经元网络分析模块进行分析。语句分析模块中包含SQL注入关键词表,该表中存放有SQL语句组合注入的关键词,当用户输入某一查询语句时,该模块通过正则匹配该表的关键词,找到该语句对应的特征序列的位置,将该位置的值标为1。匹配完成后,就可以得到该语句的特征序列。具体的特征向量对应的攻击关键词如表1所示。表1攻击关键词对应的特征向量特征向量SQL注入攻击中的关键词r1CreateTabler2SelectUNIONr3InsertIntor4DeleteFromr5UpdateSetr6Or=r7And=r8DropTabler9--r10/**/r11Load_filer12Information_schema某条SQL语句中含有下列关键词'CreateTable','DropTable'和'And=',则根据表中对应的位置,将生成的特征向量中的相应位置标记为1。其中:由于'CreateTable'对应r1的位置则r1标记为1,'DropTable'对应r8位置,r8位置标记为1,'And='对应r7位置标记为1。由于其他的攻击字符没有出现,则其他的位置标记为0;最后得到的特征向量组r(1000000110000)。这样设置特征向量的好处是方便扩展,对于新的攻击关键词,能够更好的扩展。另外,为便于字符串匹配,本模块也提供了转换大小写的功能、转换ASCII码、去掉重复的关键词功能,以方便将SQL注入攻击语句转换为简单明了的语句。漏洞检测模块神经元网络模块是该模型的核心部分,本文设计的神经网络模型是由4层组成的,其中包含4个隐藏层、12个输入和1个输出。该模块用来训练、验证和测试数据,通过不断改变内部的权值,得到一个稳定权值的模型。本文设计的神经网络模型如图2所示。本文的训练模块的输入矩阵、目标矩阵和神经元网络的设计如下:(1)输入矩阵:这个矩阵是由n×12的逻辑矩阵组成的,其中矩阵的元素由0或者1组成的。其中的0代表错误,1代表正确。(2)目标矩阵:这个矩阵是由n×1的逻辑矩阵组成的,其中矩阵的元素由0或者1组成的。其中的0代表错误,1代表正确。(3)神经元网络:该神经网络的中间层是由4个隐藏层组成的,该层利用输入矩阵和输出矩阵来对数据进行训练、验证和测试。具体步骤如算法1描述:验证模块验证模块的样本矩阵、输出矩阵的设计如下:(1)样本矩阵:这个矩阵是从输入矩阵得到的数据,然后组成一个n×12的逻辑矩阵。(2)输出矩阵:这个矩阵包含了一个n×1的逻辑矩阵,由输入样本矩阵输入训练好的神经网络,然后预测得到的输出值,把输出值存到矩阵中,就可以得到该输出矩阵。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1