一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于静态和动态执行的二阶SQL注入防御和检测方法与流程

2022-02-20 04:38:57 来源:中国专利 TAG:

基于静态和动态执行的二阶sql注入防御和检测方法
技术领域
1.本发明涉及web应用安全技术领域,尤其是基于静态和动态执行的二阶sql注入防御和检测方法。


背景技术:

2.根据common weakness enumeration(cwe)和open web application security project 2017(owasp)最近发布的数据,structured query language(sql)注入漏洞仍然严重的威胁web应用的安全。通过sql注入漏洞,攻击者能够窃取数据库的数据、删除信息、获取访问服务器的权限等。sql注入主要包含一阶sql注入和二阶sql注入两种形式,针对前者已有大量的研究,但对二阶sql注入漏洞的防御和检测方法较少。
3.现有技术针对sql注入主要遵循secure sdlc的原则,该原则由三个阶段组成:编码阶段、测试阶段和部署阶段。在编码阶段,安全编码规范方法能有效预防sql注入的发生,但这主要依赖于开发人员的工作经验,代码质量难以保证,如是否使用了jdbc的preparedstatement对象来防止恶意输入。在测试阶段,sql注入防范常见方法有代码审计、基于sql注入的测试等。代码审计是通过污点分析、敏感数据流等一些静态分析方式对web应用的源代码进行分析,寻找出sql注入的漏洞点,但是该种方式由于未使用实际的攻击用例进行测试,其检测结果存在较高的误报,还需要人工进一步验证;而基于sql注入的测试则是通过对源代码的静态分析识别出可疑漏洞点(seps),然后对这些seps使用攻击用例进行测试,该种方式相比代码审计的方式,能有效降低误报,但对seps的处理仍然存在一定的缺陷,例如,存储在数据库、会话cookies,sessions中的恶意字符串是否进行了检查,该seps往往会导致二阶sql注入漏洞。部署阶段的sql注入防范有数据库安全加固、web application firewall(waf)和intrusion detection systems(ids)/intrusion prevention system(ips)等几种类型。数据库安全加固通过拦截后端数据库接受的sql语句的方式对sql注入进行防御和检测,该种方式较为直接,简单有效。waf对来自web应用程序客户端的各类请求进行内容检测和验证,确保其安全性与合法性,对非法的请求予以实时阻断,从而对各类网站站点进行有效防护,但难以对攻击漏洞进行检测和定位,且需定时检查更新策略。ids/ips是通过一定的安全策略,对软硬件、网络、系统的运行状况或流量进行监控,尽可能发现或中断各种攻击企图、攻击行为或者攻击结果,以保证网络系统资源的机密性、完整性和可用性,但是现有的防御策略总是落后于未知类型攻击。
4.由此可见,上述的技术存在误报率高、检测防御策略有限的问题,需要一种通用的检测防御方法且准确性高的方法来克服现有方法存在的缺点。


技术实现要素:

5.本发明需要解决的技术问题是提供基于静态和动态执行的二阶sql注入防御和检测方法。通过混合静态分析和基于代理的动态分析的方法,实现通用的对二阶sql注入的检测防御,提高检测的准确性。
6.为解决上述技术问题,本发明所采用的技术方案是:基于静态和动态执行的二阶sql注入防御和检测方法,包括静态分析模块和动态执行模块,所述静态分析模块对sql语句添加标识符;所述动态执行模块是基于代理的作用于web应用执行过程中,用于解析静态分析模块添加的标识符,识别出sql语句中包含的攻击字符,并使用字符转义或字符截取的手段对其进行防御。
7.本发明技术方案的进一步改进在于:所述静态分析模块操作步骤如下:
8.s1、扫描web应用源码,根据sql执行函数定位源代码中的sql语句并判别其所属的语句类型,然后通过sql语句第一个保留字映射为其添加类型标识符t;
9.s2、根据sql语句的条件保留字cond、条件连接保留字conn和逻辑操作符保留字oper划分sql语句,通过类型标识符t进行提取出所有的与sql注入相关的变量称为χ;
10.s3、通过正则表达式定位χ中各个变量的填充语句确定其数据源并以ψ作为数据源标识符;
11.s4、利用预设明文θ和私钥pkey生成cond、conn和oper的标识符φ,并修改原sql语句形成句内标记;
12.s5、组合标识符t、ψ和明文θ,形成sql语句的头标记ht。
13.本发明技术方案的进一步改进在于:所述步骤s1中类型标识符t与sql语句第一个保留字关系如下:
[0014][0015]
本发明技术方案的进一步改进在于:所述步骤s2中条件保留字cond、条件连接保留字conn和逻辑操作符保留字oper与t的关系如下:
[0016][0017][0018][0019]
本发明技术方案的进一步改进在于:所述步骤s3中数据源ψ=0、1或2,其取值满足如下条件:
[0020]
0-常量,是指变量在当前sql语句中是由固定的字符或者数字构成的;
[0021]
1-用户的输入值,是指变量是通过用户发起的get请求、post请求或获取外部文件系统用户的预设值;
[0022]
2-非用户输入值,是指变量是通过sql语句从后台数据库读取的值、从cookie,session中取值或获取上传文件的文件名,该种方式获取的值和二阶sql注入密切相关。
[0023]
本发明技术方案的进一步改进在于:所述步骤s4中句内标识符φ由预设明文θ和私钥pkey是生成的,使用了md5算法和异或操作,生成公式如下:
[0024][0025]
本发明技术方案的进一步改进在于:所述步骤s5中sql语句的头标记ht公式为:
[0026]
ht=[existt ψ1 ... ψn θ]
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(6)。
[0027]
本发明技术方案的进一步改进在于:所述动态分析模块操作步骤如下:
[0028]
k1、通过代理拦截含有标识符的sql语句,提取sql语句的ht中的sql语句类型t、数据源标识符ψ和明文θ;
[0029]
k2、根据θ和pkey计算出保留字标识符φ解析sql语句并提取出包含真实值的变量集v;
[0030]
k3、遍历v,对单个vi进行恶意字符的检测,通过ψ和vi是否含有改变sql语句语义的字符来综合检测sql注入漏洞;如果被检测为sql注入漏洞,则对该vi进行恶意字符的防御操作,使sql语句保持其本质语义,以达到防御的目的;
[0031]
k4、移除sql语句中的标识符,将其恢复成可被数据库解析执行的标准sql。
[0032]
本发明技术方案的进一步改进在于:所述步骤k3中恶意字符的防御操作是先判断vi的数据类型,若为字符类型,通过字符转义手段进行防御;若为数字类型,则通过字符截取的手段进行防御。
[0033]
由于采用了上述技术方案,本发明取得的技术进步是:
[0034]
1、本发明通过混合静态分析和基于代理的动态分析的方法,采用静态分析模块对sql语句添加标识符,动态执行模块作用于web应用执行过程中,用于解析静态分析模块添加的标识符,识别出sql语句中包含的攻击字符,并使用字符转义或字符截取的手段对其进行防御,实现通用的对二阶sql注入的检测防御,提高检测的准确性,误报率较低,能很好的保护web应用和其后台数据库的安全;
[0035]
2、本发明的动态执行是基于代理运行的模块,包括对sql语句进行漏洞的检测与防御两个部分,而这两部分处理速度快、耗时少,不会造成明显的后端服务器向前台传输数据的延迟,即web应用向后端服务器发送请求,然后再次接受返回数据的间隔与使用该发明的动态执行模块后接受返回数据的间隔无明显差异,因此它是不影响web应用的请求响应。
附图说明
[0036]
图1为本发明静态分析模块与动态执行模块实现的方法功能流程图;
[0037]
图2为本发明中静态分析模块与动态执行模块对sql语句的处理流程图;
[0038]
图3为本发明中动态分析模块的作用机理图;
具体实施方式
[0039]
下面结合实施例对本发明做进一步详细说明:
[0040]
基于静态和动态执行的二阶sql注入防御和检测方法,如图1所示,包括静态分析模块和动态执行模块,所述静态分析模块对sql语句添加标识符;所述动态执行模块作用于web应用执行过程中,动态分析模块的作用机理如图3所示,是通过代理(这里使用的是mysql-proxy)拦截数据库操作请求,用于解析静态分析模块添加的标识符,识别出sql语句
中包含的攻击字符,并使用字符转义或字符截取的手段对其进行防御。
[0041]
所述静态分析模块操作步骤如下:
[0042]
s1、扫描web应用源码,根据sql执行函数定位源代码中的sql语句并判别其所属的语句类型,然后通过sql语句第一个保留字映射为其添加类型标识符t;类型标识符t与sql语句第一个保留字关系如下:
[0043][0044]
s2、根据sql语句的条件保留字cond、条件连接保留字conn和逻辑操作符保留字oper划分sql语句,通过类型标识符t进行提取出所有的与sql注入相关的变量称为χ;条件保留字cond、条件连接保留字conn和逻辑操作符保留字oper与t的关系如下:
[0045][0046][0047][0048]
s3、通过正则表达式定位χ中各个变量的填充语句确定其数据源并以ψ作为数据源标识符;数据源ψ=0、1或2,其取值满足如下条件:
[0049]
0-常量,是指变量在当前sql语句中是由固定的字符或者数字构成的;
[0050]
1-用户的输入值,是指变量是通过用户发起的get请求、post请求或获取外部文件系统用户的预设值;
[0051]
2-非用户输入值,是指变量是通过sql语句从后台数据库读取的值、从cookie,session中取值或获取上传文件的文件名,该种方式获取的值和二阶sql注入密切相关。
[0052]
s4、利用预设明文θ和私钥pkey生成cond、conn和oper的标识符φ,并修改原sql语句形成句内标记;句内标识符φ由预设明文θ和私钥pkey是生成的,使用了md5算法和异或操作,生成公式如下:
[0053][0053][0054][0055]
s5、组合标识符t、ψ和明文θ,形成sql语句的头标记ht。sql语句的头标记ht公式为:
[0056]
ht=[existt ψ1 ... ψn θ]
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(6)。
[0057]
所述动态分析模块操作步骤如下:
[0058]
k1、通过代理拦截含有标识符的sql语句,提取sql语句的ht中的sql语句类型t、数据源标识符ψ和明文θ;
[0059]
k2、根据θ和pkey计算出保留字标识符φ解析sql语句并提取出包含真实值的变量集v;
[0060]
k3、遍历v,对单个vi进行恶意字符的检测,通过ψ和vi是否含有改变sql语句语义的字符来综合检测sql注入漏洞;如果被检测为sql注入漏洞,则对该vi进行恶意字符的防御操作,使sql语句保持其本质语义,以达到防御的目的;恶意字符的防御操作是先判断vi的数据类型,若为字符类型,通过字符转义手段进行防御;若为数字类型,则通过字符截取的手段;
[0061]
k4、移除sql语句中的标识符,将其恢复成可被数据库解析执行的标准sql。
[0062]
实施例1
[0063]
基于静态和动态执行的二阶sql注入防御和检测方法,参阅图2,包含如下步骤:
[0064]
s1、通过sql语句的执行函数获取到如图2的源代码初始sql语句,然后分析该sql语句的第一个保留字k为select且根据公式(1),则可得到sql语句的类型t=0;
[0065]
s2、根据t=0并结合公式(2)-(4)的映射关系可分别得到保留字cond={where}、conn={and}和oper={=},根据上述三个保留字依次划分sql语句便能提取到两个变量χ1='$user'和χ2='$pass';
[0066]
s3、对提取的两个变量'$user'和'$pass',使用上下文分析的方式获取其数据来源,依据设定的ψ的映射方式,便可以获得其ψ1=2和ψ2=2;
[0067]
s4、令预设明文θ='sqli',私钥pkey='dvwa',使用加密公式(5)生成的32位小写的句内标记φ=9d80700280fda0331ad9bd8d3984cfbf;
[0068]
s5、组合标识符t、ψ和明文θ,形成sql语句的头标记ht=[[exist0_2_2_sqli]],最终可形成如图2的转换后的sql语句;
[0069]
s6、代理拦截含有标识符的sql语句,使用正则表达式提取出当前sql语句的头标记ht=[[exist0_2_2_sqli]],可以得到t=0,ψ1=2和ψ2=2,θ='sqli';
[0070]
s7、根据公式(5)计算出内标记φ,再结合公式(2)-(4),便可得到inner(cond)为φwhereφ、inner(conn)为φandφ和inner(oper)为φ=φ;
[0071]
s8、依据inner(cond)、inner(conn)和inner(oper)提取出该sql语句的两个变量{v1:'admin'or 1=1',v2:'e10adc3949ba89abbe56e057f20f883e'};
[0072]
s9、对s8获取的变量提取出有效的检测区间,可以发现v1属于字符类型的数据且含有改变sql语句语义的字符且ψ1=2,则说明v1可造成二阶sql注入,而v2是一个正常字符串,不进行任何处理;
[0073]
s10、v1是恶意字符串且属于字符类型的数据,因此可使用字符转义的手段对其进行防御。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献