一种基于深度学习及语义分析的SQL注入漏洞检测方法与流程

文档序号:33366895发布日期:2023-03-07 23:13阅读:227来源:国知局
一种基于深度学习及语义分析的SQL注入漏洞检测方法与流程
一种基于深度学习及语义分析的sql注入漏洞检测方法
技术领域
1.本技术涉及漏洞检测领域,尤其是一种基于深度学习及语义分析的sql注入漏洞检测方法。


背景技术:

2.随着互联网行业的快速发展,各种应用程序被广泛应用,其中web应用程序得到较大范围的使用,与此同时应用漏洞的类型也越来越多,其中sql注入漏洞利用应用程序的安全漏洞进行sql注入攻击达到绕过身份验证、窃取和破坏数据、伺机非法入侵等目的。自从《中华人民共和国网络安全法》正式实施以后,信息安全变得越来越重要。
3.据调查,在对互联网金融网站的安全评估检测结果显示sql注入漏洞数量位居首位,占整个互联网站漏洞数量的22%。sql注入漏洞层一旦导致信息被泄露、被盗取或者被篡改。轻则使交互双方承受巨大的经济损失,重则影响国家经济和社会的稳定。
4.传统的应用程序防护sql注入检测一般是在客户请求的url上判断是否存在一些注入的行为,根据不同的情况需要编写很多检测规则,这些只能对已存在sql注入威起作用,对于未知的威胁并不能及时发现。还有一些是提供参数化的接口,对需要传入的值进行封装,同时对传入的值进行校验,过滤掉一些关键词或特殊字符,这样就会让程序本身变得比较繁琐,且不好维护。
5.因此,针对上述问题提出一种基于深度学习及语义分析的sql注入漏洞检测方法。


技术实现要素:

6.在本实施例中提供了一种基于深度学习及语义分析的sql注入漏洞检测方法,其使用递归解码、语义分析、词法分析及lstm深度学习框架,利用sql的词法分析,将sql进行数字画像后,再进行语义分析,最后使用lstm深度学习框架进行模型训练集检测;针对不同形态的sql注入,可以做到更高校更精准的检测,提高sql注入漏洞检测的准确率。用于解决现有技术中sql注入漏洞检测的准确率较低的问题。
7.根据本技术的一个方面,提供了一种基于深度学习及语义分析的sql注入漏洞检测方法,所述sql注入漏洞检测方法包括如下:sql样本信息处理模块、sql词法分析模块、sql语义分析模块以及长短期记忆神经网络模型预测判定模块。
8.进一步地,所述sql样本信息处理模块对sql样本信息进行递归解码,同时将sql分别嵌入到sql注入双引号模板、sql注入单引号模板和sql注入基础模板,最后分别输出各自的模板语句;
9.所述sql词法分析模块将sql语句转化为若干个tokens,同时再将这些tokens进行数字画像;
10.所述sql语义分析模块基于sql注入语义分析库libinjection,对sql语句进行分析,找出存在注入的sql语句;
11.所述长短期记忆神经网络模型预测判定模块使用长短期记忆神经网络模型
(lstm)对sql注入样本数据进行训练及预测,最后输出预测的检测结果。
12.进一步地,所述sql样本信息处理模块通过对原始sql样本数据进行规范处理;sql样本信息处理包括:递归解码、sql注入模板(双引号、单引号、基础),最后输出符合特征的sql语句。
13.进一步地,所述sql样本信息处理步骤包括如下:
14.步骤1:根据sql语法将客户端输入的查询条件根据后端的sql语句模板进行组装,提取出相关的sql查询语句,接着进入步骤2;
15.步骤2:将步骤1的sql查询语句进行递归解码,将urlencode、json、phpserialize、base64等格式的解码,以及json以及kv结构的解析,接着进入步骤3;
16.步骤3:该步骤主要是使用sql注入模板(双引号、单引号和基础)对步骤2中的sql语句进行组装,分别输出组装完成之后的结果,接着进入步骤4、5、6;
17.步骤4:该步骤主要是判断步骤3的结果是否满足sql注入双引号模板的条件,能否成功进行组装,若组装成功则输出双引号sql语句,若不成功则直接丢弃;
18.步骤5:该步骤主要是判断步骤3的结果是否满足sql注入单引号模板的条件,能否成功进行组装,若组装成功则输出单引号sql语句,若不成功则直接丢弃;
19.步骤6:该步骤主要是判断步骤3的结果是否满足sql注入基础模板的条件,能否成功进行组装,若组装成功则输出基础sql语句,若不成功则直接丢弃;
20.步骤7:结束。
21.进一步地,所述sql注入漏洞检测方法通过sql词法分析模块是将sql语句中的token分析出来,其基于词法分析。
22.进一步地,所述sql词法分析步骤包括如下:
23.步骤1:将模块1的分析完的sql注入样本数据输入进来;
24.步骤2:递归逐个读取步骤1的结果;
25.步骤3:判断是否读到sql语句的末尾;
26.步骤4:根据步骤2的结果判断属于sql语句的什么类型(比如是查询关键词(select/from/where等)或者是查询的参数(id=1));
27.步骤5:根据是否是常数、保留字、标识符、符号和错误字符的类型进行分类,记着进入步骤6;
28.步骤6:根据类型判断的结果按各自的格式输出,接着进入步骤7;
29.步骤7:根据步骤6的结果生成各自的符号字典,接着进入步骤8;
30.步骤8:根据步骤7得到的符号字典,根据sql语句中不同的tokens进行数字画像,最终每条sql都会得到自己的独特的数字画像模型;
31.步骤9:结束。
32.进一步地,所述sql语义分析模块基于sql注入语义分析库libinjection,其基于libinjection分析,生成指纹,然后通过查找算法进行特征匹配。
33.进一步地,所述sql语义分析步骤包括如下:
34.步骤1:首先是初始化issqli变量;
35.步骤2:该步骤主要是设置数据结构,并初始化变量state;
36.步骤3:通过libinjection_sqli_init()函数将初始化sql检测所需的结构体;
37.步骤4:通过libinjection_is_sqli()函数进行分析;
38.1.判断用户输入的字符串长度是否合法,为零则返回false;
39.2.执行sql注入识别函数,获取字符串特征识别码;
40.3.执行结构体内的查询函数,对比第二步获取的识别特征是否与sql注入识别特征匹配;
41.4.如果第三步发现sql注入特征匹配结果为真,则返回true,并将sql注入识别特征匹配到fingerprint写入结构体;
42.5.如果检测失败,则调用reparse_as_mysql()函数判断是否存在注释或#运算符,如果再次执行sql识别函数;
43.6.同时执行结构体的分析函数进行特征匹配检测,如果结果为真,则返回true,并将sql注入识别特征匹配到的fingerprint写入结构体;
44.7.如果前端判断没有返回结果,将扫描查找是否存在单引号,如果为真则重复上面的步骤;
45.8.如果前面的判断依旧没有返回结果,将扫描参数查找是否存在双引号,如果为真则接着执行sql注入识别函数;
46.9.同时执行结构体的分析函数进行特征匹配检测结果为真,则返回true,并将sql注入识别特征匹配到fingerprint写入的结构体;
47.10.如果前面三种判断均无结果,则默认该sql语句不存在sql注入;
48.步骤5:如果存在issqli,则将sql注入识别特征复制进fingerprint变量并返回;
49.步骤6:如果不存在则将fingerprint变量设置为空并返回;
50.步骤7:结束。
51.进一步地,所述sql注入漏洞检测方法的深度学习模型预测是使用长短期记忆神经网络(lstm)通过样本的训练得来,形成长短期记忆神经网络模型预测判定模块。
52.进一步地,所述深度学习模型预测步骤包括如下:
53.步骤1:将分析完的sql语句样本数据,输入系统;
54.步骤2:将步骤1输入的数据进行预处理,将相关特征转变为数字模型;
55.步骤3:将步骤2的处理完的样本数据进行划分,分别化为训练集数据和测试集数据;
56.步骤4:将训练集的数据使用lstm模型进行训练,输出训练模型;
57.步骤5:判断步骤4中的训练结果是否满足训练,若不满足则进入步骤6,重新更新相关训练参数,若满足则直接进入步骤7;
58.步骤6:更新相关的训练参数,继续训练模型;
59.步骤7:将测试集数据使用收敛的神经网络进行测试验证;
60.步骤8:将步骤7的结果与预期的准确率进行对比,若满足准确率则输出检测模型,若不满足则继续训练深度学习模型;
61.步骤9:根据输出的模型对sql语句进行预测是否存在sql注入漏洞;
62.步骤10:结束。
63.本技术的有益之处在于:
64.(1)提出一种利用词法分析针对sql语句进行数字画像的方法,该方法可以将sql
语句中的token提取出来进行数字画像,可以准确分析出是否为sql的关键词,减少了无关信息的干扰,只根据解析完后的数字进行判断,同时也降低了误报,增加了检测的准确率;
65.(2)提出了一种利用语义分析基于语义分析库(libinjection)进行检测的方法,该方法可以将sql语句中存在注入点的特征提取出来,然后将攻击的特征数字化,用于深度学习长短期记忆神经网络(lstm)的训练特征,可以规避调不符合的攻击特征带来的影响,同时简化了基于样本训练流程;
66.(3)提出了一种基于长短期记忆神经网络(lstm)的深度学习框架的模型预测方法,该方法通过序列建模,而且具备长时记忆功能,通过大量的样本数据训练可以自动识别出检测的数据是否为一次正常的查询,可以快速判断出是否存在sql注入,减少了人为的参与,提高了检测的效率。
附图说明
67.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
68.图1为本技术的整体框架示意图;
69.图2为本技术的sql样本信息处理流程示意图;
70.图3为本技术的词法分析流程示意图;
71.图4为本技术的语义分析架构流程示意图;
72.图5为本技术的深度学习模型预测架构流程示意图。
具体实施方式
73.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分的实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本技术保护的范围。
74.需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本技术。
75.请参阅图1-5所示,一种基于深度学习及语义分析的sql注入漏洞检测方法,所述sql注入漏洞检测方法包括如下:sql样本信息处理模块、sql词法分析模块、sql语义分析模块以及长短期记忆神经网络模型预测判定模块。
76.进一步地,所述sql样本信息处理模块对sql样本信息进行递归解码,同时将sql分别嵌入到sql注入双引号模板、sql注入单引号模板和sql注入基础模板,最后分别输出各自的模板语句;
77.所述sql词法分析模块将sql语句转化为若干个tokens,同时再将这些tokens进行数字画像;
78.所述sql语义分析模块基于sql注入语义分析库libinjection,对sql语句进行分
析,找出存在注入的sql语句;
79.所述长短期记忆神经网络模型预测判定模块使用长短期记忆神经网络模型(lstm)对sql注入样本数据进行训练及预测,最后输出预测的检测结果。
80.进一步地,所述sql样本信息处理模块通过对原始sql样本数据进行规范处理;sql样本信息处理包括:递归解码、sql注入模板(双引号、单引号、基础),最后输出符合特征的sql语句。
81.进一步地,所述sql样本信息处理步骤包括如下:
82.步骤1:根据sql语法将客户端输入的查询条件根据后端的sql语句模板进行组装,提取出相关的sql查询语句,接着进入步骤2;
83.步骤2:将步骤1的sql查询语句进行递归解码,将urlencode、json、phpserialize、base64等格式的解码,以及json以及kv结构的解析,接着进入步骤3;
84.步骤3:该步骤主要是使用sql注入模板(双引号、单引号和基础)对步骤2中的sql语句进行组装,分别输出组装完成之后的结果,接着进入步骤4、5、6;
85.步骤4:该步骤主要是判断步骤3的结果是否满足sql注入双引号模板的条件,能否成功进行组装,若组装成功则输出双引号sql语句,若不成功则直接丢弃;
86.步骤5:该步骤主要是判断步骤3的结果是否满足sql注入单引号模板的条件,能否成功进行组装,若组装成功则输出单引号sql语句,若不成功则直接丢弃;
87.步骤6:该步骤主要是判断步骤3的结果是否满足sql注入基础模板的条件,能否成功进行组装,若组装成功则输出基础sql语句,若不成功则直接丢弃;
88.步骤7:结束。
89.进一步地,所述sql注入漏洞检测方法通过sql词法分析模块是将sql语句中的token分析出来,其基于词法分析。
90.进一步地,所述sql词法分析步骤包括如下:
91.步骤1:将模块1的分析完的sql注入样本数据输入进来;
92.步骤2:递归逐个读取步骤1的结果;
93.步骤3:判断是否读到sql语句的末尾;
94.步骤4:根据步骤2的结果判断属于sql语句的什么类型(比如是查询关键词(select/from/where等)或者是查询的参数(id=1));
95.步骤5:根据是否是常数、保留字、标识符、符号和错误字符的类型进行分类,记着进入步骤6;
96.步骤6:根据类型判断的结果按各自的格式输出,接着进入步骤7;
97.步骤7:根据步骤6的结果生成各自的符号字典,接着进入步骤8;
98.步骤8:根据步骤7得到的符号字典,根据sql语句中不同的tokens进行数字画像,最终每条sql都会得到自己的独特的数字画像模型;
99.步骤9:结束。
100.进一步地,所述sql语义分析模块基于sql注入语义分析库libinjection,其基于libinjection分析,生成指纹,然后通过查找算法进行特征匹配。
101.进一步地,所述sql语义分析步骤包括如下:
102.步骤1:首先是初始化issqli变量;
103.步骤2:该步骤主要是设置数据结构,并初始化变量state;
104.步骤3:通过libinjection_sqli_init()函数将初始化sql检测所需的结构体;
105.步骤4:通过libinjection_is_sqli()函数进行分析;
106.1.判断用户输入的字符串长度是否合法,为零则返回false;
107.2.执行sql注入识别函数,获取字符串特征识别码;
108.3.执行结构体内的查询函数,对比第二步获取的识别特征是否与sql注入识别特征匹配;
109.4.如果第三步发现sql注入特征匹配结果为真,则返回true,并将sql注入识别特征匹配到fingerprint写入结构体;
110.5.如果检测失败,则调用reparse_as_mysql()函数判断是否存在注释或#运算符,如果再次执行sql识别函数;
111.6.同时执行结构体的分析函数进行特征匹配检测,如果结果为真,则返回true,并将sql注入识别特征匹配到的fingerprint写入结构体;
112.7.如果前端判断没有返回结果,将扫描查找是否存在单引号,如果为真则重复上面的步骤;
113.8.如果前面的判断依旧没有返回结果,将扫描参数查找是否存在双引号,如果为真则接着执行sql注入识别函数;
114.9.同时执行结构体的分析函数进行特征匹配检测结果为真,则返回true,并将sql注入识别特征匹配到fingerprint写入的结构体;
115.10.如果前面三种判断均无结果,则默认该sql语句不存在sql注入;
116.步骤5:如果存在issqli,则将sql注入识别特征复制进fingerprint变量并返回;
117.步骤6:如果不存在则将fingerprint变量设置为空并返回;
118.步骤7:结束。
119.进一步地,所述sql注入漏洞检测方法的深度学习模型预测是使用长短期记忆神经网络(lstm)通过样本的训练得来,形成长短期记忆神经网络模型预测判定模块。
120.进一步地,所述深度学习模型预测步骤包括如下:
121.步骤1:将分析完的sql语句样本数据,输入系统;
122.步骤2:将步骤1输入的数据进行预处理,将相关特征转变为数字模型;
123.步骤3:将步骤2的处理完的样本数据进行划分,分别化为训练集数据和测试集数据;
124.步骤4:将训练集的数据使用lstm模型进行训练,输出训练模型;
125.步骤5:判断步骤4中的训练结果是否满足训练,若不满足则进入步骤6,重新更新相关训练参数,若满足则直接进入步骤7;
126.步骤6:更新相关的训练参数,继续训练模型;
127.步骤7:将测试集数据使用收敛的神经网络进行测试验证;
128.步骤8:将步骤7的结果与预期的准确率进行对比,若满足准确率则输出检测模型,若不满足则继续训练深度学习模型;
129.步骤9:根据输出的模型对sql语句进行预测是否存在sql注入漏洞;
130.步骤10:结束。
131.以上所述仅为本技术的优选实施例而已,并不用于限制本技术,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1