一种基于机器学习的SQL注入检测方法、数据库安全系统与流程

文档序号:15462778发布日期:2018-09-18 18:34阅读:2238来源:国知局
本发明属于数据网络安全
技术领域
,尤其涉及一种基于机器学习的SQL注入检测方法、数据库安全系统。
背景技术
:目前,业内常用的现有技术是这样的:SQL是结构化查询语言(StructuredQueryLanguage)的简称,是一种用于操作数据库的语言。SQL注入是指通过把特定SQL命令插入到HTTP请求中,达到欺骗服务器以执行恶意SQL命令目的,从而窃取、篡改或者恶意删除数据。传统上,防护SQL注入主要在两个阶段进行。第一是在Web服务源码编写阶段进行防护,开发人员在编写源码时遵循防范SQL注入的经验性指导原则,使用“检查参数格式”,“过滤特殊字符”,“绑定参数”等方式使得SQL注入失效。但是这种方式的有效性取决于开发人员的安全防范知识水平的高低,往往容易留下不易察觉的漏洞。第二是在Web服务运行阶段进行防护,也就是部署入侵检测系统。传统的入侵检测系统有两种:基于程序分析的SQL注入检测系统。对Web服务程序进行分析,包括静态分析和动态分析两种策略。静态分析是分析源代码,找出潜在的安全漏洞。动态分析是在程序运行时完成,通过编写特定的测试用例来测试程序。缺点是必须获知Web应用的源代码,而且分析覆盖率不能得到保障,容易出现漏测。基于特征匹配的SQL注入方法。建立当前数据库服务的特征语法树,从中提取出合法的SQL语句语法树,然后进行模式匹配,如果被检测的SQL语句不符合合法模式就产生警告。但是这种方法需要预先知道源代码,并且进行大量人工工作来分析出合法SQL模式。或者通过分析大量SQL注入实例,生成非法SQL语句的匹配模型,然后对实际运行的SQL语句进行模式匹配,如果被检测SQL语句符合非法模型,则判定为SQL注入。这种方法无需获知应用的源代码。但是这种方法的成功率高度依赖非法模型的全面性和准确性。需要耗费大量人工分析,并且容易出现检测遗漏。综上所述,现有技术存在的问题是:需要获取Web服务源代码,或者需要耗费大量人工分析构建合法或者非法SQL的匹配模型。解决上述技术问题的难度和意义:要准确地探测出恶意的SQL请求并不容易,特别要重视检测的误报率。如果系统的误报率过高,那么它的判断结果就不能作为过滤SQL请求的依据,否则容易出现正常HTTP请求被拦截,影响Web服务的正常运行。针对该难点,本发明采用机器学习的方法,提取大量SQL注入请求和正常请求的统计学特征,训练分类模型,将检测误报率降低到1%以下。系统运行过程中判定的SQL注入请求会被存储到SQL注入样例库,可以作为日后的训练素材,对分类器进行重新训练,以提高检测系统的性能。因此,本发明是一个能够持续学习,不断提高精度的SQL注入检测系统。技术实现要素:针对现有技术存在的问题,本发明提供了一种基于机器学习的SQL注入检测方法、数据库安全系统。本发明是这样实现的,一种基于机器学习的SQL注入检测方法,所述基于机器学习的SQL注入检测方法从HTTP请求中提取参数,通过词法分析,语法分析生成样本的语法树,提取出语法树以及URL的特征,采用支持向量机的机器学习算法进行训练;将训练好的分类模型部署在Web服务与客户端之间,对生产环境中的HTTP请求进行分类,当判断出HTTP请求中含有SQL注入攻击时发出告警并阻断该请求。进一步,所述基于机器学习的SQL注入检测方法包括:步骤一,获取机器学习的训练数据集;步骤二,对原始HTTP请求进行去噪和解码,得到请求字符串;步骤三,使用词法分析工具对步骤二中得到的请求字符串进行自动词法分析,记录下分析出的SQL关键词;步骤四,使用语法分析工具对步骤二中得到的解码后的字符串进行自动语法分析,形成语法树;步骤五,特征提取。统计原始HTTP请求的特征,词法分析结果的特征以及步骤四中语法树的特征,并组合这三种类型的特征作为样本的特征向量;步骤六,使用支持向量机算法对步骤五提取出的特征向量进行训练;生成一个SVM二分类器;步骤七,将训练好的SVM二分类器以及预处理和特征提取模块部署在Web服务器与客户端之间,对HTTP请求进行特征提取和分类;当判定HTTP请求含有SQL注入攻击行为时,发出告警,阻断该请求;并将可疑请求存入SQL注入攻击样例库。进一步,所述步骤一中构建SQL注入样例库,收集含有SQL注入攻击的HTTP请求样例以及正常HTTP请求样例,进行标记,作为机器学习的训练素材。进一步,所述基于机器学习的SQL注入检测方法包括:训练阶段和检测阶段;所述训练阶段具体包括:(1)对训练数据集的每条HTTP请求提取参数;并利用词法分析和语法分析生成语法树;(2)统计语法树的特征以及原始HTTP参数中的其他特征,将特征结合起来作为原始HTTP请求的特征向量;(3)使用支持向量机的算法对训练数据集的特征向量进行训练,形成一个分类器模型;所述检测阶段具体包括:(1)对训练数据集的每条HTTP请求提取参数;并利用词法分析和语法分析生成语法树,对实际应用环境中收到的HTTP请求提取参数,进行词法分析和语法分析生成语法树;(2)统计语法树的特征以及原始HTTP参数中的其他特征,将特征结合起来作为原始HTTP请求的特征向量,统计语法树的特征以及原始HTTP请求中的其他特征,将这些特征结合起来作为HTTP请求的特征向量;(3)将待分类的HTTP请求的特征向量输入到分类器模型,得到分类结果;(4)如果分类结果认为该HTTP请求含有SQL注入攻击,则启动告警和阻断机制。本发明的另一目的在于提供一种所述基于机器学习的SQL注入检测方法的基于机器学习的SQL注入检测系统,所述基于机器学习的SQL注入检测系统包括:训练阶段模块,用于对训练数据集的每条HTTP请求提取参数;并利用词法分析和语法分析生成语法树;统计语法树的特征以及原始HTTP参数中的其他特征,将这些特征结合起来作为原始HTTP请求的特征向量;使用支持向量机的算法对训练数据集的特征向量进行训练,形成一个分类器模型;检测阶段模块,用于对实际应用环境中收到的HTTP请求提取参数,进行词法分析和语法分析生成语法树;统计语法树的特征以及原始HTTP请求中的其他特征,将特征结合起来作为HTTP请求的特征向量;将待分类的HTTP请求的特征向量输入到分类器模型,得到分类结果;分类结果认为该HTTP请求含有SQL注入攻击,则启动告警和阻断机制。本发明的另一目的在于提供一种应用所述基于机器学习的SQL注入检测方法的信息数据处理终端。本发明的另一目的在于提供一种应用所述基于机器学习的SQL注入检测方法的计算机程序。综上所述,本发明的优点及积极效果为:本发明对后台信息依赖低,仅仅需要获取Web服务接收到的HTTP请求,无需获知Web服务的源码;本发明部署难度低,可以部署在Web服务端与客户端之间,作为一个流量过滤器;本发明具有良好的准确性,实验准确度高达99.5%,误报率低于0.8%;本发明具有持续学习的能力,因为检测器识别出的SQL注入请求会被保存到SQL注入攻击样例库,部署在不同设备上的检测器能够收集大量的SQL注入样例,经过去重后可以作为继续训练的素材,持续提高检测器的识别精度,降低误报率;本发明具有良好的扩展性,本方法只需获取足够多的其他种类恶意请求的样例,就可以训练出针对其他种类Web攻击(如XSS攻击,WebShell攻击)的检测器。这些检测器可以级联使用,构建出一套能够过滤多种Web攻击的防火墙。附图说明图1是本发明实施例提供的基于机器学习的SQL注入检测方法流程图。图2是本发明实施例提供的基于机器学习的SQL注入检测方法实现流程图。图3是本发明实施例提供的HTTP请求样本的抽象语法树示意图。图4是本发明实施例提供的检测器部署图示意图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。本发明用机器学习的算法训练一个检测模型并将该模型部署在Web客户端与服务端之间,对HTTP请求进行分类,判断它是否含有SQL注入攻击。如图1所示,本发明实施例提供的基于机器学习的SQL注入检测方法包括以下步骤:S101:获取机器学习的训练数据集。构建SQL注入样例库,收集含有SQL注入攻击的HTTP请求样例以及正常HTTP请求样例,进行标记,作为机器学习的训练素材;S102:对原始HTTP请求进行去噪和解码,得到请求字符串;S103:使用词法分析工具对步骤S102中得到的请求字符串进行自动词法分析,记录下分析出的SQL关键词;S104:使用语法分析工具对步骤S102中得到的解码后的字符串进行自动语法分析,形成语法树;S105:特征提取。统计原始HTTP请求的特征,词法分析结果的特征以及步骤4中语法树的特征,并组合这三种类型的特征作为样本的特征向量;S106:使用支持向量机算法对步骤S105提取出的特征向量进行训练;生成一个SVM二分类器;S107:将训练好的SVM二分类器以及预处理和特征提取模块部署在Web服务器与客户端之间,对HTTP请求进行特征提取和分类。当判定HTTP请求含有SQL注入攻击行为时,发出告警,阻断该请求。并将该可疑请求存入SQL注入攻击样例库。下面结合具体实施例对本发明的应用原理作进一步的描述。如图2所示,本发明实施例提供的基于机器学习的SQL注入检测方法分为两个阶段,第一阶段是模型训练阶段;第二阶段是模型部署与检测阶段。首先介绍模型训练阶段的步骤:步骤一,对接收到的HTTP请求进行预处理。对编码过的query进行解码,得到原始的query字符串。假设原始的HTTP请求是:%28SELECT%20%2a%20FROM%20USER%20WHERE%20Id%3D1%20OR%201%3D1%29;经过URLDECODE之后得到的请求字符串是:(SELECT*FROMUSERWHEREId=1OR1=1);这显然是一条利用关键词OR进行SQL注入的语句。步骤二,对步骤一中得到的query字符串进行词法分析,得到SQL关键词为SELECT…FROM,WHERE,以及OR,一共是3对。步骤三,对步骤一中得到的请求字符串进行语法分析,生成的语法树如图3所示。可以统计出子树的个数为3,首节点的类型为SELECT,树高(不包括根节点)为4,节点数(不包括根节点)为12,首个子树节点数为2。步骤四,对步骤一-步骤三的结果的特征进行拼接,形成可以得到如表1所示的特征向量。表1序号特征值1样本长度622空格字符占原始样本比例7/623数字字符占原始样本比例3/624特殊字符占原始样本比例13/625关键词数量36样本语法树子树的个数37样本语法树的高度48样本语法树的节点个数129样本语法树首子树节点数210样本语法树首节点类型SELECT步骤五,训练分类器模型。选择线性核函数,使用支持向量机算法进行训练。当SVM二分类器训练好之后,进入模型部署与检测阶段:步骤六,分类器部署与测试,如图4所示,将数据特征采集模块和分类器部署在Web服务端和客户端之间,客户端向Web服务器发送的请求首先经过数据特征采集得到特征向量,然后将该特征向量输入分类器进行处理,分类器能分辨请求是否含有SQL注入攻击,若含有SQL注入攻击,就阻断该请求,不让它到达Web服务端,并将该疑似恶意请求存入SQL注入攻击样例库中的疑似攻击表;同时向客户端返回一个警告消息。下面结合测试对本发明的应用效果作详细的描述。为了对本发明的性能进行评估,下面对模型训练和测试进行仿真。仿真使用Python语言,采用scikit-learn库中的SVM分类器模型,核函数选择线性核函数K(x,y)=x·y。实验使用标记好的5507条含有SQL注入攻击的HTTP请求(标记为1),和23322条不含SQL注入攻击的HTTP请求(标记为0)充分混合作后作为训练和测试数据。选出17297条作为训练数据集,11532条作为测试数据集。在实验中,测试数据经过预处理和特征提取后输入到训练好的SVM二分类器中,分类器输出1表示样本含有SQL注入攻击,分类器输出0表示样本不含SQL注入攻击。将分类器对测试数据集的判断结果与实际标记进行对比能够得出本系统的检测精确度。实验结果如表2所示,可见检测准确度达到了99.5%,检测效果较高。表2在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用全部或部分地以计算机程序产品的形式实现,所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输)。所述计算机可读取存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘SolidStateDisk(SSD))等。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1