CN110581864B - 一种sql注入攻击的检测方法及装置 - Google Patents
一种sql注入攻击的检测方法及装置 Download PDFInfo
- Publication number
- CN110581864B CN110581864B CN201911091759.4A CN201911091759A CN110581864B CN 110581864 B CN110581864 B CN 110581864B CN 201911091759 A CN201911091759 A CN 201911091759A CN 110581864 B CN110581864 B CN 110581864B
- Authority
- CN
- China
- Prior art keywords
- sql
- risk value
- injection attack
- preset
- neural network
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1408—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
- H04L63/1416—Event detection, e.g. attack signature detection
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1441—Countermeasures against malicious traffic
- H04L63/1466—Active attacks involving interception, injection, modification, spoofing of data unit addresses, e.g. hijacking, packet injection or TCP sequence number attacks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computer Networks & Wireless Communication (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Signal Processing (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种SQL注入攻击的检测方法及装置。所述方法包括:对待测SQL语句进行词法分析,得到第一标记序列,对第一标记序列进行语法归约后得到第二标记序列,以及根据归约过程中生成的中间语法参数,及预设的危险语法参数的风险值,确定第一风险值;以及,将第二标记序列输入预设的卷积神经网络模型中,确定第二风险值;最后,如果根据第一风险值和第二风险值确定出综合风险值大于预设阈值,则待测SQL语句存在SQL注入攻击。如此,采用语法归约的方式确定出第一风险值,能够降低误报率,并且通过预设的卷积神经网络的不断学习,能够根据已有的样本推断未知的新语句是否存在SQL注入攻击,进而能够进一步提高检测SQL注入攻击的准确性。
Description
技术领域
本申请涉及网络安全技术领域,特别涉及一种SQL注入攻击的检测方法及装置。
背景技术
随着计算机技术和互联网的迅速发展,Web应用迅速崛起,网络安全问题备受关注。结构化查询语言(Structured Query Language,SQL)注入攻击是目前网上最流行最热门的黑客脚本攻击方法之一。SQL注入攻击具有攻击危害大、类型多、变异快、攻击隐蔽等特点,因此,对SQL注入攻击的检测和防御一直是Web安全领域关注的重点。
现有技术中,检测SQL注入攻击的方法通常是使用预置规则对SQL语句进行检测,如符合预置规则,认定该SQL语句为存在SQL注入攻击,可以对该请求进行阻断。然而,预置规则的设定得合理与否,将直接影响检测SQL注入攻击的准确性。如果预置规则设定得比较严格,容易导致误报率升高;如果预置规则设定得比较宽松,容易导致漏报率升高。也就是说,无论预置规则设定得严格还是宽松,都会影响检测SQL注入攻击的准确性。
基于此,目前亟需一种SQL注入攻击的检测方法,用于解决现有的检测SQL注入攻击的方法准确率较低的问题。
发明内容
本申请提供了一种SQL注入攻击的检测方法及装置,可用于解决在现有技术中检测SQL注入攻击的方法准确率较低的技术问题。
第一方面,本申请实施例提供一种SQL注入攻击的检测方法,所述方法包括:
对待测SQL语句进行词法分析,得到所述待测SQL语句对应的第一标记序列;
对所述第一标记序列进行语法归约,得到归约后的第二标记序列,以及根据归约过程中生成的中间语法参数,及预设的危险语法参数的风险值,确定所述待测SQL语句存在SQL注入攻击的第一风险值;
将所述第二标记序列输入预设的卷积神经网络模型中,并根据所述预设的卷积神经网络模型的输出结果,确定所述待测SQL语句存在SQL注入攻击的第二风险值;所述预设的卷积神经网络模型是根据多个样本SQL语句对应的样本标记序列以及所述样本SQL语句是否存在SQL注入攻击的已知结果进行训练得到的;
根据所述第一风险值和所述第二风险值,确定所述待测SQL语句存在SQL注入攻击的综合风险值,如果所述综合风险值大于预设阈值,则确定所述待测SQL语句存在SQL注入攻击。
可选地,所述第一标记序列包括词法元素及所述词法元素的上下文关系;
对所述第一标记序列进行语法归约,得到归约后的第二标记序列,包括:
采用LALR分析方法对所述第一标记序列进行语法归约,根据所述词法元素及所述词法元素的上下文关系,对所述词法元素进行合并,得到所述第二标记序列。
可选地,根据归约过程中生成的中间语法参数,及预设的危险语法参数的风险值,确定所述待测SQL语句存在SQL注入攻击的第一风险值,包括:
针对归约过程中生成的任意一个中间语法参数,如果所述预设的危险语法参数存在与所述中间语法参数相匹配的目标危险语法参数,则根据所述目标危险语法参数的风险值,确定所述中间语法参数的风险值;
根据所述归约过程中生成的中间语法参数分别对应的风险值以及与所述中间语法参数相匹配的目标危险语法参数对应的权重值,确定所述待测SQL语句存在SQL注入攻击的第一风险值。
可选地,所述预设的卷积神经网络模型是通过以下方式确定的:
将所述多个样本SQL语句对应的样本标记序列分别转换成词向量矩阵;
将多个词向量矩阵输入到初始的卷积神经网络模型,得到每个样本SQL语句是否存在SQL注入攻击的预测结果;
根据所述每个样本SQL语句是否存在SQL注入攻击的预测结果以及每个样本SQL语句是否存在SQL注入攻击的已知结果,进行反向训练,生成所述预设的卷积神经网络模型。
可选地,将所述第二标记序列输入预设的卷积神经网络模型中,并根据所述预设的卷积神经网络模型的输出结果,确定所述待测SQL语句存在SQL注入攻击的第二风险值,包括:
将所述第二标记序列转换成词向量矩阵;
将转换后的词向量矩阵输入预设的卷积神经网络模型中,并根据所述预设的卷积神经网络模型的输出结果,确定所述待测SQL语句存在SQL注入攻击的第二风险值。
可选地,根据所述第一风险值和所述第二风险值,确定所述待测SQL语句存在SQL注入攻击的综合风险值,包括:
根据所述第一风险值和第一权重值,以及所述第二风险值和第二权重值,确定所述待测SQL语句存在SQL注入攻击的综合风险值;所述第一权重值是预先设置的采用语法归约检测出SQL注入攻击的权重值,所述第二权重值是预先设置的采用预设的卷积神经网络模型检测出SQL注入攻击的权重值。
可选地,在对所述待测SQL语句进行词法分析,得到所述待测SQL语句对应的第一标记序列之前,所述方法还包括:
获取应用程序提交给数据库待执行的所述待测SQL语句。
可选地,对所述待测SQL语句进行词法分析,得到所述待测SQL语句对应的第一标记序列,包括:
对所述待测SQL语句进行解码,得到解码结果;
对所述解码结果进行词法分析,得到所述待测SQL语句对应的第一标记序列。
第二方面,本申请实施例提供一种SQL注入攻击的检测装置,所述装置包括:
分析单元,用于对待测SQL语句进行词法分析,得到所述待测SQL语句对应的第一标记序列;以及对所述第一标记序列进行语法归约,得到归约后的第二标记序列,以及根据归约过程中生成的中间语法参数,及预设的危险语法参数的风险值,确定所述待测SQL语句存在SQL注入攻击的第一风险值;
模型检测单元,用于将所述第二标记序列输入预设的卷积神经网络模型中,并根据所述预设的卷积神经网络模型的输出结果,确定所述待测SQL语句存在SQL注入攻击的第二风险值;所述预设的卷积神经网络模型是根据多个样本SQL语句对应的样本标记序列以及所述样本SQL语句是否存在SQL注入攻击的已知结果进行训练得到的;
处理单元,用于根据所述第一风险值和所述第二风险值,确定所述待测SQL语句存在SQL注入攻击的综合风险值,如果所述综合风险值大于预设阈值,则确定所述待测SQL语句存在SQL注入攻击。
可选地,所述第一标记序列包括词法元素及所述词法元素的上下文关系;
所述分析单元具体用于:
采用LALR分析方法对所述第一标记序列进行语法归约,根据所述词法元素及所述词法元素的上下文关系,对所述词法元素进行合并,得到所述第二标记序列。
可选地,所述分析单元具体用于:
针对归约过程中生成的任意一个中间语法参数,如果所述预设的危险语法参数存在与所述中间语法参数相匹配的目标危险语法参数,则根据所述目标危险语法参数的风险值,确定所述中间语法参数的风险值;
根据所述归约过程中生成的中间语法参数分别对应的风险值以及与所述中间语法参数相匹配的目标危险语法参数对应的权重值,确定所述待测SQL语句存在SQL注入攻击的第一风险值。
可选地,所述预设的卷积神经网络模型是通过以下方式确定的:
将所述多个样本SQL语句对应的样本标记序列分别转换成词向量矩阵;
将多个词向量矩阵输入到初始的卷积神经网络模型,得到每个样本SQL语句是否存在SQL注入攻击的预测结果;
根据所述每个样本SQL语句是否存在SQL注入攻击的预测结果以及每个样本SQL语句是否存在SQL注入攻击的已知结果,进行反向训练,生成所述预设的卷积神经网络模型。
可选地,所述模型检测单元具体用于:
将所述第二标记序列转换成词向量矩阵;
将转换后的词向量矩阵输入预设的卷积神经网络模型中,并根据所述预设的卷积神经网络模型的输出结果,确定所述待测SQL语句存在SQL注入攻击的第二风险值。
可选地,所述处理单元具体用于:
根据所述第一风险值和第一权重值,以及所述第二风险值和第二权重值,确定所述待测SQL语句存在SQL注入攻击的综合风险值;所述第一权重值是预先设置的采用语法归约检测出SQL注入攻击的权重值,所述第二权重值是预先设置的采用预设的卷积神经网络模型检测出SQL注入攻击的权重值。
可选地,所述装置还包括:
获取单元,用于获取应用程序提交给数据库待执行的所述待测SQL语句。
可选地,所述分析单元具体用于:
对所述待测SQL语句进行解码,得到解码结果;
对所述解码结果进行词法分析,得到所述待测SQL语句对应的第一标记序列。
第三方面,本申请实施例的还提供一种装置,该装置具有实现上文所描述的SQL注入攻击的检测方法的功能。该功能可以通过硬件执行相应的软件实现,在一种可能的设计中,该装置包括:处理器、收发器、存储器;该存储器用于存储计算机执行指令,该收发器用于实现该装置与其他通信实体进行通信,该处理器与该存储器通过该总线连接,当该装置运行时,该处理器执行该存储器存储的该计算机执行指令,以使该装置执行上文所描述的SQL注入攻击的检测方法。
本申请实施例还提供一种计算机存储介质,所述存储介质中存储软件程序,该软件程序在被一个或多个处理器读取并执行时实现上述各种可能的实现方式中所描述的SQL注入攻击的检测方法。
本申请实施例还提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各种可能的实现方式中所描述的SQL注入攻击的检测方法。
采用上述方法,一方面采用语法归约的方式,确定归约过程中待测SQL语句存在SQL注入攻击的第一风险值,另一方面采用预设的卷积神经网络模型检测待测SQL语句存在SQL注入攻击的第二风险值,进而可以根据第一风险值和第二风险值确定待测SQL语句存在SQL注入攻击的综合风险值,如果综合风险值大于预设阈值,则可以确定待测SQL语句存在SQL注入攻击。相比于现有技术中使用预置规则检测SQL注入攻击的方式而言,本申请实施例提供的方法采用语法归约的方式确定出第一风险值,能够降低误报率,进而提高检测SQL注入攻击的准确性;同时,采用预设的卷积神经网络对待测SQL语句进行检测,通过预设的卷积神经网络的不断学习,能够根据已有的样本推断未知的新语句是否存在SQL注入攻击,进而能够进一步提高检测SQL注入攻击的准确性。
附图说明
图1为本申请实施例提供的一种SQL注入攻击的检测方法的流程示意图;
图2为本申请实施例提供的一种预设的卷积神经网络模型的训练方法所对应的流程示意图;
图3为本申请实施例提供的一种预设的卷积神经网络模型的结构示意图;
图4为本申请实施例提供的一种SQL注入攻击的检测装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
为便于理解以下实施例,现将本申请实施例中涉及到的技术术语解释如下:
SQL是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相 同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
SQL注入攻击,是指通过构建特殊的输入作为参数传入Web应用程序,而这些输入大部分是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作。如果应用程序对输入内容未进行合法性检测,直接使用输入内容来构造动态SQL语句访问数据库时,就可能产生SQL注入攻击。
图1示例性示出了本申请实施例提供的一种SQL注入攻击的检测方法的流程示意图。如图1所示,包括如下步骤:
步骤101,对待测SQL语句进行词法分析,得到待测SQL语句对应的第一标记序列。
步骤102,对第一标记序列进行语法归约,得到归约后的第二标记序列,以及根据归约过程中生成的中间语法参数,及预设的危险语法参数的风险值,确定待测SQL语句存在SQL注入攻击的第一风险值。
步骤103,将第二标记序列输入预设的卷积神经网络模型中,并根据预设的卷积神经网络模型的输出结果,确定待测SQL语句存在SQL注入攻击的第二风险值。
步骤104,根据第一风险值和所述第二风险值,确定待测SQL语句存在SQL注入攻击的综合风险值,如果综合风险值大于预设阈值,则确定待测SQL语句存在SQL注入攻击。
采用上述方法,一方面采用语法归约的方式,确定归约过程中待测SQL语句存在SQL注入攻击的第一风险值,另一方面采用预设的卷积神经网络模型检测待测SQL语句存在SQL注入攻击的第二风险值,进而可以根据第一风险值和第二风险值确定待测SQL语句存在SQL注入攻击的综合风险值,如果综合风险值大于预设阈值,则可以确定待测SQL语句存在SQL注入攻击。相比于现有技术中使用预置规则检测SQL注入攻击的方式而言,本申请实施例提供的方法采用语法归约的方式确定出第一风险值,能够降低误报率,进而提高检测SQL注入攻击的准确性;同时,采用预设的卷积神经网络对待测SQL语句进行检测,通过预设的卷积神经网络的不断学习,能够根据已有的样本推断未知的新语句是否存在SQL注入攻击,进而能够进一步提高检测SQL注入攻击的准确性。
具体来说,基于相关技术的SQL注入攻击的检测架构,入侵者可以在应用程序处对数据进行处理从而绕过WEB应用防火墙的拦截检测,为进一步降低漏报率,在本申请的一个可 选实施例中,可以在执行步骤101之前,即上述待测SQL语句的来源可以通过以下方式实现:获取应用程序提交给数据库待执行的待测SQL语句,从而实现对欲提交给数据库的所有SQL语句进行检测,进一步降低漏报率。
本申请实施例中,待测SQL语句可以包括多种类型的参数,这些参数可以是WEB请求中所包括的一切用户可控的参数,比如URL参数、cookie数据、referer数据、user agent数据等,具体不做限定。
步骤101中,对待测SQL语句进行词法分析的过程具体可以如下文所述:
首先,对待测SQL语句进行解码,得到解码结果。
具体地,可以对待测SQL语句进行URL解码,多重编码的进行迭代解码,直到解码结果稳定为止。对于某些存在歧义的数据,如字符’+’,解码前为+,解码后为空格,均存在合法含义,则将解码前后的序列均放入下步进行检测。
其次,对解码结果进行词法分析,从而得到待测SQL语句对应的第一标记序列。词法分析的处理过程可以通过构造SQL语法树的形式实现,但不限于此。
第一标记序列,又称第一token序列,可以包括词法元素及所述词法元素的上下文关系。
词法元素,即token,token是语言中具有独立意义的最小单位,包括关键字、标识符、运算符、界符和常量等。下面分别对关键字、标识符、运算符、界符和常量进行介绍。
(1)关键字是由程序语言定义的具有固定意义的标识符。例如,MySQL中的select,where,as,limit都是保留字。这些字通常不用作一般识符。
(2)标识符用来表示各种名字,如变量名,数组名,过程名等等。
(3)运算符如+、-、*、/等。
(4)界符如逗号、分号、括号等。
(5)常量的类型一般有整型、实型、布尔型、文字型等。
词法元素的上下文关系可以是父节点数据和子节点数据。具体地,基于词法分析,生成基于语法元素和语义结构的语法树,然后遍历语法树中的每个语法元素节点,并获取该语法元素节点的父节点数据和子节点数据(即词法元素的上下文关系)。
进一步地,词法分析过程的实现原理可以是,将承载有SQL语句的字符流输入值词法分析器,并输出承载由语法元素的符号流;然后将该符号流输入至语法分析器进行语法分析,从而输出语法树,并依据该语法树进行语义分析。
词法分析器使用状态转换图来识别单词符号。状态转换图是一张有限方向图。在状态转换图中,有一个初态和至少一个终态。
比如,词法分析器可以是有限状态机(Finite-state machine,FSM),有限状态机是一个能实现状态转移的自动机。 对于一个给定的属于该自动机的状态和一个属于该自动机符号表的符号,它都能根据事先给定的转移函数转移到下一个状态(这个状态可以是先前的状态)。
步骤102中,语法归约的方式有多种,本申请实施例中可以采用向前查看反向最右推导(Look-Ahead Left Reversed Rightmost Derivation,LALR)分析方法来对第一标记序列进行语法归约,根据词法元素及词法元素的上下文关系,对词法元素进行合并,得到第二标记序列,但不限于此。
LALR分析方法可以根据一种程序设计语言的正式语法的产生式而对一段文本程序输入进行语法分析,从而在语法层面上判断输入程序是否合法。
具体地,语法分析器可以采用LALR分析方法可以自左向右的查看输入的第一标记序列,查找当前的可归约token串,并通过预置语法将它们归约为相应的非终结符号。归约的过程为自底向上归约,即先归约语法树的末端,然后再一步步向根部归约。每次归约都是相对最左侧的可归约符号进行的,无法归约的符号则进行移进,即向右前进一个符号。其中,非终结符号可以包括where_clause、group_clause、function_clause等。
本申请实施例中,在对第一标记序列进行归约的过程中,针对归约过程中生成的任意一个中间语法参数,如果预设的危险语法参数存在与中间语法参数相匹配的目标危险语法参数,则根据目标危险语法参数的风险值,确定中间语法参数的风险值;然后根据归约过程中生成的中间语法参数分别对应的风险值以及与中间语法参数相匹配的目标危险语法参数对应的权重值,确定待测SQL语句存在SQL注入攻击的第一风险值。
其中,危险语法参数可以是本领域技术人员根据经验和实际情况预先设置的,在一种可能的实施方式中,可以将高危语法设置为危险语法参数,比如“sleep(xxx)”、“extractvalue(xxx)”等语法;或者,也可以将高危动作设置为危险语法参数,比如“归约到where字句”这一动作可以设置为危险语法参数。
需要说明的是,危险语法参数可以预先设置在语法分析器中,如此,语法分析器在对第一标记序列进行归约时,一旦归约到与预设的危险语法参数相匹配的中间语法参数时,就可以确定该中间语法参数的风险值。
进一步地,预设的危险语法参数可以对应社会有风险值,该风险值可以用于表示一旦匹配到该危险语法参数时,其对应的待测SQL语句存在SQL注入攻击的概率。
如表1所示,为危险语法参数及其对应的风险值的一种示例。
表1:为危险语法参数及其对应的风险值的一种示例
需要说明的是,在表1示出的示例中,风险值越高,表明一旦匹配到该危险语法参数时,其对应的待测SQL语句存在SQL注入攻击的概率越高。
举个例子,第一标记序列中可以包括“sleep”、“(”、“int100”、“)”这四个语法元素,当采用LALR分析方法进行归约时,归约的过程中可能出现“sleep(100)”这一中间语法参数,根据表1示出的内容,可以确定“sleep(100)”这一中间语法参数对应的风险值为0.8;继续归约的过程中,可能还会出现“where sleep(100)”这一中间语法参数,同样根据表1示出的内容,可以确定“where sleep(100)”这一中间语法参数对应的风险值为0.9。
更进一步地,如上文提供的示例,可知,在对第一标记序列进行语法归约的过程中,预设的危险语法参数可能存在与中间语法参数相匹配的目标危险语法参数,例如,上文示例中的“sleep(100)”所对应的目标危险语法参数(即“sleep”),以及“where sleep(100)” 所对应的目标危险语法参数(即归约到where字句),此时,对于第一标记序列所对应的待测SQL语句存在SQL注入攻击的第一风险值的计算方法可以有多种。
一个示例中,可以用加权求和的计算方式来确定待测SQL语句存在SQL注入攻击的第一风险值。
如表2所示,为危险语法参数及其对应的权重值的一种示例。
表2:为危险语法参数及其对应的风险值的一种示例
待测SQL语句存在SQL注入攻击的第一风险值可以通过公式(1)确定。
公式(1)中,Y1为待测SQL语句存在SQL注入攻击的第一风险值;i为第i个目标危险语法参数,i=1,2,……,n,n为大于或等于1的整数;pi为第i个目标危险语法参数对应的风险值;wi为第i个目标危险语法参数对应的权重值。
仍然以上文所举的例子为例,如果“sleep(100)”这一中间语法参数对应的风险值为0.8,“where sleep(100)”这一中间语法参数对应的风险值为0.9,根据表2示出的内容以及公式(1),可以确定第一风险值为2.6。
在其它可能的示例中,也可以用加权平均的计算方式来确定待测SQL语句存在SQL注入攻击的第一风险值,具体不做限定。
步骤103中,预设的卷积神经网络模型可以是根据多个样本SQL语句对应的样本标记序列以及样本SQL语句是否存在SQL注入攻击的已知结果进行训练得到的。
具体地,如图2所示,为本申请实施例提供的一种预设的卷积神经网络模型的训练方法所对应的流程示意图,具体包括如下步骤:
步骤201,将多个样本SQL语句对应的样本标记序列分别转换成词向量矩阵。
由于样本标记序列仍是词(或文本)序列的状态,无法直接输入到预设的卷积神经网络模型中进行检测。因此,可以先将样本标记序列转换为词向量矩阵,再进入将转化后的词向量矩阵输入到预设的卷积神经网络模型进行检测。
词向量也叫词嵌入(Word Embedding),是自然语言处理(NLP)中语言模型与表征学习技术的统称。它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量。通过训练得到每个词的词向量,该词向量即可表示该词的特征。
本申请实施例中,可以将样本标记序列中的每个token作为一个词进行转换,为每个次分配128维的特征向量,从而构成能够输入初始的卷积神经网络模型的词矩阵向量。
步骤202,将多个词向量矩阵输入到初始的卷积神经网络模型,得到每个样本SQL语句是否存在SQL注入攻击的预测结果。
步骤203,根据每个样本SQL语句是否存在SQL注入攻击的预测结果以及每个样本SQL语句是否存在SQL注入攻击的已知结果,进行反向训练,生成预设的卷积神经网络模型。
如图3所示,为本申请实施例提供的一种预设的卷积神经网络模型的结构示意图。本申请实施例中,可以使用4种大小不一的卷积核对词向量矩阵进行卷积计算,4种卷积核分别为2*128、3*128、4*128和5*128。这4种卷积核利用了自然语言处理中的n-gram算法,n分别为2、3、4和5。通过卷积计算,得到样本标记序列的语法特征。而对于每种大小的卷积核,再使用100个不同的卷积核分别进行卷积计算,使获得的特征更加多样化,然后对卷积结果进行池化处理,留下最显著的特征,再连接全连接层与sotfmax分类器,得出预测结果。
进一步地,根据每个样本SQL语句是否存在SQL注入攻击的预测结果以及每个样本SQL语句是否存在SQL注入攻击的已知结果,进行反向训练,最终可以生成预设的卷积神经网络模型。
采用图3示出的步骤训练好预设的卷积神经网络模型之后,可以先将第二标记序列转换成词向量矩阵,然后将转换后的词向量矩阵输入预设的卷积神经网络模型中,并根据预设的卷积神经网络模型的输出结果,确定待测SQL语句存在SQL注入攻击的第二概率值第二风险值。
需要说明的是,采用预设的卷积神经网络检测待测SQL语句是否存在SQL注入攻击,输出结果可以看做是待测SQL语句存在SQL注入攻击的概率(数值可以在0到1之间),该数值越趋近于1,表明待测SQL语句存在SQL注入攻击的可能性越高。
步骤104中,待测SQL语句存在SQL注入攻击的综合风险值的计算方式可以有多种。
一个示例中,可以采用加权求和的方式确定综合风险值。具体地,可以根据第一风险值和第一权重值,以及第二风险值和第二权重值,确述待测SQL语句存在SQL注入攻击的综合风险值。其中,第一权重值可以是预先设置的采用语法归约检测出SQL注入攻击的权重值,第二权重值可以是预先设置的采用预设的卷积神经网络模型检测出SQL注入攻击的权重值。
如公式(2)所示,为综合风险值的计算公式。
公式(2)中,Y为待测SQL语句存在SQL注入攻击的综合风险值;Y1为待测SQL语句存在SQL注入攻击的第一风险值;Y2为待测SQL语句存在SQL注入攻击的第二风险值;W1为第一权重值;W2为第二权重值。
进一步地,如果综合风险值大于预设阈值,则可以确定所述待测SQL语句存在SQL注入攻击。其中,预设阈值可以是本领域技术人员根据经验和实际情况确定的,具体不做限定。
为了更加清楚地描述本申请实施例提供的SQL注入攻击的检测方法,下面通过举例来进一步描述。
假设待测SQL语句为:
%27%2d%31%31%38%35%27%29%20%4f%52%20%31%36%34%33%3d%43%54%58%53%59%53%2e%44%52%49%54%48%53%58%2e%53%4e%28%31%36%34%33%2c%28%43%48%52%28%35%38%29%7c%7c%28%53%45%4c%45%43%54%20%28%43%41%53%45%20%57%48%45%4e%20%28%31%36%34%33%3d%31%36%34%33%29%20%54%48%45%4e%20%31%20%45%4c%53%45%20%30%20%45%4e%44%29%20%46%52%4f%4d%20%44%55%41%4c%29%7c%7c%43%48%52%28%35%38%29%29%29
采用上述步骤101中描述的方法,对上述待测SQL语句进行解码,解密结果为:
'-1185') OR 1643=CTXSYS.DRITHSX.SN(1643,(CHR(58)||(SELECT (CASE WHEN(1643=1643) THEN 1 ELSE 0 END) FROM DUAL)||CHR(58)))
进一步地,对解码结果进行词法分析,得到待测SQL语句对应的第一标记序列为:
string ) OR 1=CTXSYS.DRITHSX.SN(1,(CHR(1)||(SELECT (CASE WHEN (1=1)THEN 1 ELSE 1 END) FROM DUAL)||CHR(1)))
采用上述步骤102中描述的方法,对第一标记序列进行语法归约,得到归约后的第二标记序列为:
string ) or 1 = function_clause
并且,根据归约过程中中间语法参数与预设的危险语法参数的匹配程度,确定所述待测SQL语句存在SQL注入攻击的第一风险值。
采用步骤103提供的方法,首先对第二标记序列进行转换,并将转换后的词向量矩阵输入预设的卷积神经网络模型中,假设根据输出结果,可以确定第二风险值。
进而,采用步骤104提供的方法,可以确定待测SQL语句存在SQL注入攻击的综合风险值,如果综合风险值大于预设阈值,则可以确定待测SQL语句存在SQL注入攻击。
下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。
图4示例性示出了本申请实施例提供的一种SQL注入攻击的检测装置的结构示意图。如图4所示,该装置具有实现上述SQL注入攻击的检测方法的功能,所述功能可以由硬件实现,也可以由硬件执行相应的软件实现。该装置可以包括:获取单元401,分析单元402、模型检测单元403和处理单元404。
分析单元402,用于对待测SQL语句进行词法分析,得到所述待测SQL语句对应的第一标记序列;以及对所述第一标记序列进行语法归约,得到归约后的第二标记序列,以及根据归约过程中生成的中间语法参数,及预设的危险语法参数的风险值,确定所述待测SQL语句存在SQL注入攻击的第一风险值;
模型检测单元403,用于将所述第二标记序列输入预设的卷积神经网络模型中,并根据所述预设的卷积神经网络模型的输出结果,确定所述待测SQL语句存在SQL注入攻击的第二风险值;所述预设的卷积神经网络模型是根据多个样本SQL语句对应的样本标记序列以及所述样本SQL语句是否存在SQL注入攻击的已知结果进行训练得到的;
处理单元404,用于根据所述第一风险值和所述第二风险值,确定所述待测SQL语句存在SQL注入攻击的综合风险值,如果所述综合风险值大于预设阈值,则确定所述待测SQL语句存在SQL注入攻击。
可选地,所述第一标记序列包括词法元素及所述词法元素的上下文关系;
所述分析单元402具体用于:
采用LALR分析方法对所述第一标记序列进行语法归约,根据所述词法元素及所述词法元素的上下文关系,对所述词法元素进行合并,得到所述第二标记序列。
可选地,所述分析单元402具体用于:
针对归约过程中生成的任意一个中间语法参数,如果所述预设的危险语法参数存在与所述中间语法参数相匹配的目标危险语法参数,则根据所述目标危险语法参数的风险值,确定所述中间语法参数的风险值;
根据所述归约过程中生成的中间语法参数分别对应的风险值以及与所述中间语法参数相匹配的目标危险语法参数对应的权重值,确定所述待测SQL语句存在SQL注入攻击的第一风险值。
可选地,所述预设的卷积神经网络模型是通过以下方式确定的:
将所述多个样本SQL语句对应的样本标记序列分别转换成词向量矩阵;
将多个词向量矩阵输入到初始的卷积神经网络模型,得到每个样本SQL语句是否存在SQL注入攻击的预测结果;
根据所述每个样本SQL语句是否存在SQL注入攻击的预测结果以及每个样本SQL语句是否存在SQL注入攻击的已知结果,进行反向训练,生成所述预设的卷积神经网络模型。
可选地,所述模型检测单元403具体用于:
将所述第二标记序列转换成词向量矩阵;
将转换后的词向量矩阵输入预设的卷积神经网络模型中,并根据所述预设的卷积神经网络模型的输出结果,确定所述待测SQL语句存在SQL注入攻击的第二风险值。
可选地,所述处理单元404具体用于:
根据所述第一风险值和第一权重值,以及所述第二风险值和第二权重值,确定所述待测SQL语句存在SQL注入攻击的综合风险值;所述第一权重值是预先设置的采用语法归约检测出SQL注入攻击的权重值,所述第二权重值是预先设置的采用预设的卷积神经网络模型检测出SQL注入攻击的权重值。
可选地,所述获取单元401,用于获取应用程序提交给数据库待执行的所述待测SQL语句。
可选地,所述分析单元402具体用于:
对所述待测SQL语句进行解码,得到解码结果;
对所述解码结果进行词法分析,得到所述待测SQL语句对应的第一标记序列。
本申请实施例的还提供一种装置,该装置具有实现上文所描述的SQL注入攻击的检测方法的功能。该功能可以通过硬件执行相应的软件实现,在一种可能的设计中,该装置包括:处理器、收发器、存储器;该存储器用于存储计算机执行指令,该收发器用于实现该装置与其他通信实体进行通信,该处理器与该存储器通过该总线连接,当该装置运行时,该处理器执行该存储器存储的该计算机执行指令,以使该装置执行上文所描述的SQL注入攻击的检测方法。
本申请实施例还提供一种计算机存储介质,所述存储介质中存储软件程序,该软件程序在被一个或多个处理器读取并执行时实现上述各种可能的实现方式中所描述的SQL注入攻击的检测方法。
本申请实施例还提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各种可能的实现方式中所描述的SQL注入攻击的检测方法。
在示例性实施例中,还提供了一种计算机可读存储介质,所述存储介质中存储有计算机程序或智能合约,所述计算机程序或智能合约被节点加载并执行以实现上述实施例提供的事务处理方法。可选地,上述计算机可读存储介质可以是只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(Random Access Memory,RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
本领域的技术人员可以清楚地了解到本申请实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (10)
1.一种SQL注入攻击的检测方法,其特征在于,所述方法包括:
对待测SQL语句进行词法分析,得到所述待测SQL语句对应的第一标记序列;
对所述第一标记序列进行语法归约,得到归约后的第二标记序列,以及根据归约过程中生成的中间语法参数,及预设的危险语法参数的风险值,确定所述待测SQL语句存在SQL注入攻击的第一风险值;
将所述第二标记序列输入预设的卷积神经网络模型中,并根据所述预设的卷积神经网络模型的输出结果,确定所述待测SQL语句存在SQL注入攻击的第二风险值;所述预设的卷积神经网络模型是根据多个样本SQL语句对应的样本标记序列以及所述样本SQL语句是否存在SQL注入攻击的已知结果进行训练得到的;
根据所述第一风险值和所述第二风险值,确定所述待测SQL语句存在SQL注入攻击的综合风险值,如果所述综合风险值大于预设阈值,则确定所述待测SQL语句存在SQL注入攻击。
2.根据权利要求1所述的方法,其特征在于,所述第一标记序列包括词法元素及所述词法元素的上下文关系;
对所述第一标记序列进行语法归约,得到归约后的第二标记序列,包括:
采用LALR分析方法对所述第一标记序列进行语法归约,根据所述词法元素及所述词法元素的上下文关系,对所述词法元素进行合并,得到所述第二标记序列。
3.根据权利要求1所述的方法,其特征在于,根据归约过程中生成的中间语法参数,及预设的危险语法参数的风险值,确定所述待测SQL语句存在SQL注入攻击的第一风险值,包括:
针对归约过程中生成的任意一个中间语法参数,如果所述预设的危险语法参数存在与所述中间语法参数相匹配的目标危险语法参数,则根据所述目标危险语法参数的风险值,确定所述中间语法参数的风险值;
根据所述归约过程中生成的中间语法参数分别对应的风险值以及与所述中间语法参数相匹配的目标危险语法参数对应的权重值,确定所述待测SQL语句存在SQL注入攻击的第一风险值。
4.根据权利要求1所述的方法,其特征在于,所述预设的卷积神经网络模型是通过以下方式确定的:
将所述多个样本SQL语句对应的样本标记序列分别转换成词向量矩阵;
将多个词向量矩阵输入到初始的卷积神经网络模型,得到每个样本SQL语句是否存在SQL注入攻击的预测结果;
根据所述每个样本SQL语句是否存在SQL注入攻击的预测结果以及每个样本SQL语句是否存在SQL注入攻击的已知结果,进行反向训练,生成所述预设的卷积神经网络模型。
5.根据权利要求1所述的方法,其特征在于,将所述第二标记序列输入预设的卷积神经网络模型中,并根据所述预设的卷积神经网络模型的输出结果,确定所述待测SQL语句存在SQL注入攻击的第二风险值,包括:
将所述第二标记序列转换成词向量矩阵;
将转换后的词向量矩阵输入预设的卷积神经网络模型中,并根据所述预设的卷积神经网络模型的输出结果,确定所述待测SQL语句存在SQL注入攻击的第二风险值。
6.根据权利要求1所述的方法,其特征在于,根据所述第一风险值和所述第二风险值,确定所述待测SQL语句存在SQL注入攻击的综合风险值,包括:
根据所述第一风险值和第一权重值,以及所述第二风险值和第二权重值,确定所述待测SQL语句存在SQL注入攻击的综合风险值;所述第一权重值是预先设置的采用语法归约检测出SQL注入攻击的权重值,所述第二权重值是预先设置的采用预设的卷积神经网络模型检测出SQL注入攻击的权重值。
7.根据权利要求1所述的方法,其特征在于,在对所述待测SQL语句进行词法分析,得到所述待测SQL语句对应的第一标记序列之前,所述方法还包括:
获取应用程序提交给数据库待执行的所述待测SQL语句。
8.根据权利要求1所述的方法,其特征在于,对所述待测SQL语句进行词法分析,得到所述待测SQL语句对应的第一标记序列,包括:
对所述待测SQL语句进行解码,得到解码结果;
对所述解码结果进行词法分析,得到所述待测SQL语句对应的第一标记序列。
9.一种SQL注入攻击的检测装置,其特征在于,所述装置包括:
分析单元,用于对待测SQL语句进行词法分析,得到所述待测SQL语句对应的第一标记序列;以及对所述第一标记序列进行语法归约,得到归约后的第二标记序列,以及根据归约过程中生成的中间语法参数,及预设的危险语法参数的风险值,确定所述待测SQL语句存在SQL注入攻击的第一风险值;
模型检测单元,用于将所述第二标记序列输入预设的卷积神经网络模型中,并根据所述预设的卷积神经网络模型的输出结果,确定所述待测SQL语句存在SQL注入攻击的第二风险值;所述预设的卷积神经网络模型是根据多个样本SQL语句对应的样本标记序列以及所述样本SQL语句是否存在SQL注入攻击的已知结果进行训练得到的;
处理单元,用于根据所述第一风险值和所述第二风险值,确定所述待测SQL语句存在SQL注入攻击的综合风险值,如果所述综合风险值大于预设阈值,则确定所述待测SQL语句存在SQL注入攻击。
10.根据权利要求9所述的装置,其特征在于,所述处理单元具体用于:
根据所述第一风险值和第一权重值,以及所述第二风险值和第二权重值,确定所述待测SQL语句存在SQL注入攻击的综合风险值;所述第一权重值是预先设置的采用语法归约检测出SQL注入攻击的权重值,所述第二权重值是预先设置的采用预设的卷积神经网络模型检测出SQL注入攻击的权重值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911091759.4A CN110581864B (zh) | 2019-11-11 | 2019-11-11 | 一种sql注入攻击的检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911091759.4A CN110581864B (zh) | 2019-11-11 | 2019-11-11 | 一种sql注入攻击的检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110581864A CN110581864A (zh) | 2019-12-17 |
CN110581864B true CN110581864B (zh) | 2020-02-21 |
Family
ID=68815547
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911091759.4A Active CN110581864B (zh) | 2019-11-11 | 2019-11-11 | 一种sql注入攻击的检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110581864B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111064735B (zh) * | 2019-12-25 | 2021-10-15 | 南开大学 | 一种电力信息系统sql注入漏洞检测方法及系统 |
CN113111345B (zh) * | 2020-01-13 | 2024-05-24 | 深信服科技股份有限公司 | 一种xxe攻击检测方法、系统、设备及计算机存储介质 |
CN111818018B (zh) * | 2020-06-18 | 2021-09-21 | 北京邮电大学 | 一种基于机器学习模型的sql注入攻击检测方法 |
CN112614023A (zh) * | 2020-12-25 | 2021-04-06 | 东北大学 | 电子合同的形式化安全验证方法 |
CN112783916A (zh) * | 2021-01-04 | 2021-05-11 | 广州海量数据库技术有限公司 | Sql语句审核方法及装置、存储介质及电子设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10637887B2 (en) * | 2017-12-29 | 2020-04-28 | Cyphort Inc. | System for query injection detection using abstract syntax trees |
CN109413028B (zh) * | 2018-08-29 | 2021-11-30 | 集美大学 | 基于卷积神经网络算法的sql注入检测方法 |
CN109194677A (zh) * | 2018-09-21 | 2019-01-11 | 郑州云海信息技术有限公司 | 一种sql注入攻击检测方法、装置及设备 |
CN109308494B (zh) * | 2018-09-27 | 2021-06-22 | 厦门服云信息科技有限公司 | Lstm模型及基于该模型的网络攻击识别方法及系统 |
-
2019
- 2019-11-11 CN CN201911091759.4A patent/CN110581864B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110581864A (zh) | 2019-12-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110581864B (zh) | 一种sql注入攻击的检测方法及装置 | |
CN106709345B (zh) | 基于深度学习方法推断恶意代码规则的方法、系统及设备 | |
US8892580B2 (en) | Transformation of regular expressions | |
WO2020259260A1 (zh) | 一种结构化查询语言sql注入检测方法及装置 | |
WO2016050066A1 (zh) | 知识库中问句解析的方法及设备 | |
CN107659555B (zh) | 网络攻击的检测方法及装置、终端设备和计算机存储介质 | |
CN113596007B (zh) | 一种基于深度学习的漏洞攻击检测方法和设备 | |
Huang et al. | JSContana: Malicious JavaScript detection using adaptable context analysis and key feature extraction | |
CN113010209A (zh) | 一种抗编译差异的二进制代码相似性比较技术 | |
CN112989348A (zh) | 攻击检测方法、模型训练方法、装置、服务器及存储介质 | |
CN111090860A (zh) | 一种基于深度学习的代码漏洞检测方法及装置 | |
CN112507337A (zh) | 基于语义分析的恶意JavaScript代码检测模型的实现方法 | |
Meng et al. | [Retracted] A Deep Learning Approach for a Source Code Detection Model Using Self‐Attention | |
CN112580331A (zh) | 政策文本的知识图谱构建方法及系统 | |
Hu et al. | Cross-site scripting detection with two-channel feature fusion embedded in self-attention mechanism | |
CN115314236A (zh) | 在域名系统(dns)记录集中检测网络钓鱼域的系统和方法 | |
Bharadwaj et al. | Is this URL safe: detection of malicious URLs using global vector for word representation | |
CN114201756A (zh) | 一种智能合约代码片段的漏洞检测方法和相关装置 | |
CN117056347A (zh) | Sql语句永真式注入检测方法、装置、计算机设备及存储介质 | |
CN112084776A (zh) | 相似文章的检测方法、装置、服务器和计算机存储介质 | |
CN116663018A (zh) | 一种基于代码可执行路径的漏洞检测方法及装置 | |
CN111310186A (zh) | 混淆命令行检测方法、装置及系统 | |
Vaishnavi et al. | Paraphrase identification in short texts using grammar patterns | |
Pu et al. | BERT‐Embedding‐Based JSP Webshell Detection on Bytecode Level Using XGBoost | |
CN115146267A (zh) | Office文档中宏病毒的检测方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |