一种SQL注入漏洞检测方法技术

技术编号:6548877 阅读:931 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种SQL注入漏洞检测方法,包括以下步骤:一、用户输入数据截获;二、无害化输入生成;三、进行SQL词法分析和语法分析,生成SQL语法树,分别是基于用户输入字串的语法树以及基于无害化字串的语法树;四、SQL语法树比对,如果相同认为该组测试字串通过本轮测试;五、结果响应:如果发现了用户有SQL注入的企图,则阻止该HTTP包,否则将该HTTP包放行。本发明专利技术分析对象均直接或间接来源于用户输入,这样可以最大限度还原用户本意,降低了误报率。同时基于SQL语法树分析,能够从根本上阻断进行SQL注入的可能,从而提高检测的准确率。

【技术实现步骤摘要】

本专利技术涉及一种针对SQL注入威胁的可以用于web防护及入侵检测的检测方法, 属于网络信息安全领域。
技术介绍
数据库与TOB之间的关联已经越来越密切,而web方便快捷,面向用户群体广泛的特点使B/S开发的热度逐年增加,可以说web大大扩展了数据库的用户群,使其真正影响到了个人的生活方式。但是web在给数据库带来这些优点的同时也为数据库带来了许多安全隐患。其中危害最大,攻击手段最多,最难防范的便是SQL注入(SQL Injection)攻击。在TOB应用常见的前台语言,如ASP. NET,PHP或JSP中,一个典型的处理登录的 SQL语句可以写作 Query = SELECT * FROM user WHERE user =,,+ ‘“$username,,,+ AND pass =”+ iSpassword'; 通常我们通过获取用户提交的变量Susername、$password来处理该次登录请求, 将其提交给数据库并查看返回的Query值,从而决定本次登录是否成功。这条查询SQL语句在大多数情况下均能很好的工作。然而不幸的是,当攻击者输入一些精心构造的语句时,我们提交给数据库的SQL语句的执行结果就会偏离编写者的本意。如攻击者输入的 $username为admin,OR ‘1,= ‘1,一。此时整条查询语句变成了 Query =SELECT * FROM user WHERE user =,,+‘‘ ‘admin,0R‘1,= ‘1,一,,,+‘‘AND pass =,,+ “ iSpassword'“; 这条SQL语句由于存在了 OR ‘1’ = ‘1’这个恒真子查询,所以不管攻击者提交的用户名密码是否正确,攻击者输入得到的Query返回值总是真,也就是攻击者通过这种SQL 注入攻击行为,绕过了登录检测,从而可以以任何用户名登录系统。SQL注入漏洞更为可怕的一点在于,他为攻击者提供了一条可以随意操作数据库的最大权限的通道,从而可以随意对WEB应用程序的后台数据库进行查询,增加,修改,删除等操作。然而SQL注入漏洞在理论上存在于所有应用程序与数据库交互之处,一个中等规模的应用即可能有上百处,且由于整条SQL语句是由用户输入与程序提供的原语句拼合而成,对于用户可能的复杂输入,分析防范非常困难。通过分析,我们可以看到SQL注入具有危害大,漏洞存在离散,分析防御困难的特点。且漏洞覆盖所有支持标准SQL的数据库,SQL Server、MySql、Oracle、DB2、Sybase等数据库均不能幸免。故而其被OWASP评定为2007-2010年最大网络安全威胁。SQL注入漏洞的危害是如此之大,从常理上讲存在这一漏洞的网站应该非常少才对。不幸的是,通过使用Google对中国地区网站搜索关键字为“.asp ? ”,“.php ?”, “.jsp ?,,的网址链接,进而采用SQL注入扫描工具进行检测,我们惊人的发现13%的asp 链接,8%的php链接以及3%的jsp链接存在着一种或多种类型的SQL注入漏洞,这也就意味着十分之一左右的网页存在着潜在风险,浏览这样的网页很可能被植入的木马攻击。目前,对SQL注入攻击的防御方式主要有以下几种 1.人工管理手工添加参数过滤语句,对用户输入进行严格过滤。主要不足在于复杂的应用程序需要处理大量的用户输入,手工检测不仅极大地增加了程序员的负担,也使程序变的难以维护。同时也因为SQL注入攻击的多样性使得该方法难以防御所有类型的 SQL注入攻击。2.关键词过滤制定一个关键词集合(主要为SQL语言的关键字及符号,如AND、 单引号),对于所有的用户输入均与该集合中的每一个关键词匹配,如果用户的输入中存在关键字,则判定为非法输入。主要不足在于,SQL语句是千变万化的,一种语句的执行结果可以等价转换为成其他多句语句执行结果,利用编码和利用数据库命令动态构造结构字符串都可绕过这类防范。且由于关键词过滤,导致一些含关键词的正常输入(如YOU AND ME) 也被影响,这是关键词过滤的最大弊病。3. API及存储过程编写专用的API或者采用存储过程的方式避免使用SQL语句的拼接,从而屏蔽SQL注入攻击。主要不足在于,对于WEB应用所有与数据库交互的地方均使用API或存储过程成本高昂,开发不便。且所编写的一套API在内部执行过程中依旧采用关键字过滤技术,换汤不换药。一般只有企业级应用才采用,虽然付出许多额外代价可以做到比较安全,但是依旧不能从根本上完全防止SQL注入攻击。总体来看,因为其攻击的隐蔽性与多样性,同时有些关键字也常常为普通用户使用,对SQL注入的检测难点在于难以保证不漏报且不错报。
技术实现思路
本专利技术的目的是针对SQL注入攻击的检测与防御,提出一种全新、高效的检测模式与防御思路,从根本上阻断SQL注入途径,不漏报非法用户的SQL注入行为同时不错报合法用户的正常行为。SQL是一种结构化的查询语言,对于固定的查询他有着固定的语法结构,而在进行 SQL注入攻击时,由于攻击者必须改变SQL语句的语义,而语义的改变也必将影响到其提交查询的语法树形结构。于是,根据无害的标准输入及可疑输入所构成的语法树形结构的比对结果,即可判断用户输入是否含有恶意。本专利技术就是基于该思想实现的。本专利技术提供了一种SQL注入漏洞检测方法,包括以下步骤 一、用户输入数据截获 (1)获取用户向应用程序提交的HTTP包; (2)将用户提交的GET、POST数据按URL、COOKIE、表单分类,并按类型提取用户数据包中提交的所有参数值; (3)将获得的多组参数值按照URL编码和其他HTTP包指定编码方式解码参数值; 二、无害化输入生成 (1)将步骤一中得到的η组参数值记为Ql,Q2……Qn,同时生成等量的空白字串 Q,1,Q,2......Q,η ; (2)按照无害化规则将Qi字串转化为无害字串拷贝至字串Q’i,Qi仍保留原内容 (i = 1,2,……η); (3)将η组用户输入的原始字串Qi与η组由用户输入生成的无害化字串Q’ i归为η组待测试字串组Si (i = 1,2,3……η); 三、SQL语法树生成 (1)预设SQL语句的注入点模板,将待测试字串组Si(i = 1,2,3,……η)按序同 SQL语句注入点模板组合,生成包含用户输入的SQL语句和包含无害字串的SQL语句,分别输入SQL词法分析器; (2)将词法分析结果输入SQL语法分析器; (3)将语法分析结果生成两棵语法树,分别是基于用户输入字串Qi的语法树Ti以及基于无害化字串Q’ i的语法树T’ i ; 四、SQL语法树比对 (1)将两棵语法树Ti及T’ i通过孩子-兄弟表示法转为等价的二叉树形式BTi 及 BT,i ; (2)对BTi及BT’ i进行前序遍历,得到前序序列Fi,F’ i,通过字符串比较算法对 Fi与F’ i进行比较,如发现不相同,则判定用户在进行SQL注入,直接转入步骤五; (3)对BTi和BT’i进行中序遍历,得到中序序列Mi,M’i,通过字符串比较算法对 Mi与M’ i进行比较,如发现不相同,则判定用户在进行SQL注入,直接转入步骤五,否则认为该组测试字串通过本轮测试; (本文档来自技高网
...

【技术保护点】
1.一种SQL注入漏洞检测方法,包括以下步骤:一、用户输入数据截获:(1)获取用户向应用程序提交的HTTP包;(2)将用户提交的GET、POST数据按URL、COOKIE、表单分类,并按类型提取用户数据包中提交的所有参数值;(3)将获得的多组参数值按照URL编码和其他HTTP包指定编码方式解码参数值;二、无害化输入生成:(1)将步骤一中得到的n组参数值记为Q1,Q2……Qn,同时生成等量的空白字串Q’1,Q’2……Q’n;(2)按照无害化规则将Qi字串转化为无害字串拷贝至字串Q’i,Qi仍保留原内容(i=1,2,……n);(3)将n组用户输入的原始字串Qi与n组由用户输入生成的无害化字串Q’i归为n组待测试字串组Si(i=1,2,3……n);三、SQL语法树生成:(1)预设SQL语句的注入点模板,将待测试字串组Si(i=1,2,3,……n)按序同SQL语句注入点模板组合,生成包含用户输入的SQL语句和包含无害字串的SQL语句,分别输入SQL词法分析器;(2)将词法分析结果输入SQL语法分析器;(3)将语法分析结果生成两棵语法树,分别是基于用户输入字串Qi的语法树Ti以及基于无害化字串Q’i的语法树T’i;四、SQL语法树比对:(1)将两棵语法树Ti及T’i通过孩子-兄弟表示法转为等价的二叉树形式BTi及BT’i;(2)对BTi及BT’i进行前序遍历,得到前序序列Fi,F’i,通过字符串比较算法对Fi与F’i进行比较,如发现不相同,则判定用户在进行SQL注入,直接转入步骤五;(3)对BTi和BT’i进行中序遍历,得到中序序列Mi,M’i,通过字符串比较算法对Mi与M’i进行比较,如发现不相同,则判定用户在进行SQL注入,直接转入步骤五,否则认为该组测试字串通过本轮测试;(4)更换组合的SQL语句模板,如已经组合了全部模板,则认为该组测试字串通过本次检测,否则转到步骤三继续测试;(5)将i值加1,如i<=n转入步骤三继续测试,否则转入步骤五;五、结果响应:(1)如果有任意一组测试发现了用户有SQL注入的企图,则阻止该HTTP包,并产生一个警告,按系统配置显示在本地或远程屏幕上,同时记录进入日志文件;(2)如果所有测试均没有发现用户有SQL注入的企图,则将该HTTP包放行。...

【技术特征摘要】
1.一种SQL注入漏洞检测方法,包括以下步骤一、用户输入数据截获(1)获取用户向应用程序提交的HTTP包;(2)将用户提交的GET、POST数据按URL、COOKIE、表单分类,并按类型提取用户数据包中提交的所有参数值;(3)将获得的多组参数值按照URL编码和其他HTTP包指定编码方式解码参数值;二、无害化输入生成(1)将步骤一中得到的η组参数值记为Q1,Q2……Qn,同时生成等量的空白字串Q’1, Q,2......Q,η ;(2)按照无害化规则将Qi字串转化为无害字串拷贝至字串Q’i,Qi仍保留原内容(i =1,2, ......η);(3)将η组用户输入的原始字串Qi与η组由用户输入生成的无害化字串Q’i归为η 组待测试字串组Si (i = 1,2,3……η);三、SQL语法树生成(1)预设SQL语句的注入点模板,将待测试字串组Si(i = 1,2,3,……η)按序同SQL 语句注入点模板组合,生成包含用户输入的SQL语句和包含无害字串的SQL语句,分别输入 SQL词法分析器;(2)将词法分析结果输入SQL语法分析器;(3)将语法分析结果生成两棵语法树,分别是基于用户输入字串Qi的语法树Ti以及基于无害化字串Q’i的语法树T’i;四、SQL语法树比对(1)将两棵语法树Ti及T’i通过孩子-兄弟表示法转为等价的二叉树形式BTi及 BT' i ;(2)对BTi及BT’i进行前序遍历,得到前序序列Fi,F’ i,通过字符串比较算法对Fi 与F’ i进行比较,如发现不相同,则判定用户在进行SQL注入,直接转入步骤五;(3)对BTi和BT’i进行中序遍历,得到中序序列Mi,Μ’ i,通过字符串比较算法对Mi 与M,i进行比较,如发现不相同,则判定用户在进行SQL注入,直接转入步骤五,否则认为该组测试字串通过本轮测试;(4)更换组合的SQL语句模板,如已经组合了全部模板,则认为该组测试字串通过本次检测,否则转到步骤三继续测试;(5)将i值加1,如i<= η转入步骤三继续测试,否则转入步骤五;五、结果响应(1)如果有任意一组测试发现了用户有SQL注入的企图,则阻止该HTTP包...

【专利技术属性】
技术研发人员:金福生宋挺戴银涛牛振东韩翔宇
申请(专利权)人:北京理工大学
类型:发明
国别省市:11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1