Black Hat|长亭科技:防SQL注入利器-SQLChop

简介: 本文讲的是长亭科技:防SQL注入利器-SQLChop,当程序过分信任用户的输入,直接将用户的输入与后台的SQL语句拼接在一起并执行时,如果用户输入带有恶意,SQL注入就发生了。

本文讲的是 Black Hat|长亭科技:防SQL注入利器-SQLChop,当程序过分信任用户的输入,直接将用户的输入与后台的SQL语句拼接在一起并执行时,如果用户输入带有恶意,SQL注入就发生了。

image

美国当地时间8月5日,国内安全新兴企业长亭科技在黑帽大会的军火库分会场(Arsenal),现场为来自全球各地的安全从业人员进行技术讲解,并演示他们的“无规则SQL注入攻击检测与防御引擎”。

结合统计资料和实际情况来看,SQL注入仍然占据互联网威胁安全事件中非常大的比例(接近1/3)而且并没有下降的趋势。面对如此严峻的互联网安全隐患,无论是信息安全公司还是企业自身安全团队都投入了非常多的努力,但是就现状来说仍不乐观。

各种网站被脱裤的消息不绝于耳,而大多数的数据库信息泄露就是从SQL注入开始的。除了数据泄露,让不怀好意的人拥有了随意操作数据库权限的后果,就是得为他update后的值买单。甚至,从SQL注入到获取服务器权限,导致全站沦陷,这些都是已经发生过,并且正在发生着的事。

从实践和研究两方面的结果来看,目前关于SQL注入防御手段存在的先天缺陷,是对“规则”的依赖。

2005年的 BlackHat,Hansen 和 Patterson 的研究表明,基于规则的SQL注入防护方式是有先天缺陷的:“任何基于正则的输入验证系统,都至少存在以下两种情况之一:可以构造一个安全的正常请求,但是被验证系统标记为危险/不正常;或可以构造一个不正常的攻击请求,但是验证系统标记为正常请求”。

也就是说,只要是基于规则的WAF就一定会存在误报或者漏报的情况。这也是为什么现在的WAF总会需要更新规则但还是不能做到非常有效的防护。

在SQL注入防御中,这种缺陷尤为突出。因为SQL语句本身存在的复杂性,,其语句结构经常很难甚至无法使用正则表达式描述,也就从客观上导致了正则表达式无法覆盖所有的SQL语句。

所以,想要解决SQL注入难防的问题,需要在技术上实现创新。于是长亭科技做了这个“吃螃蟹”的人,并且,经过一年时间的研究,在SQL注入检测防御上面有了很大的突破。

短短的一年时间,长亭科技进行了各种尝试,其中包括将机器学习应用在SQL注入入侵检测中。

一开始开始对单个请求做二分类,使用文本处理方法中常见的特征,采用朴素贝叶斯,SVM模型进行监督学习。可是实际情况中,需要检测的数据绝大部分是正常的,这个时候就需要一种高鲁棒性的检测方法,而监督学习已经不能满足这样的需求了。所以长亭科技尝试了无监督的异常行为检测训练,最后通过人工强feature和综合方法,可以得到一个很好的结果。

之后,考虑到机器学习很大程度上需要依靠训练集进行调优,可是整个互联网数据量太大,多样性大,这样的情况下只是针对样本集参数调优虽然能得调到非常好的效果,但是并没有太大的实际意义。另外,机器学习的在运行速度上也存在瓶颈,对于在线的实时防护来说略显不足。所以长亭科技暂时停止了在机器学习方面的探究。

调整思路后,长亭科技将目光放在了传统的编译原理方法上。在BlackHat2012会议中提出的libinjection首先考虑到了词法分析,但是其结果仍存在较大的改进空间。经过技术人员不懈的努力,在多方调研和尝试后确立了在词法分析的基础上再作了语法分析的思路。

研究解决了包括输入数据的编码多样性,词法分析需要考虑语句拼接以及语法分析要覆盖SQL庞大的语法集在内的各种技术难题,最后研发出了无规则的基于词法分析和语法分析的SQL注入攻击检测与防御引擎——SQLChop。SQLChop在检测准确率和召回率两方面相比传统的WAF都有了质的飞越,真正使SQL注入防御技术上了一个新的台阶。

另外,由于SQLChop本身是无规则的,在这个意义上也即实现了对0day级别的SQL注入攻击进行防御。

原文发布时间为:八月 7, 2015
本文作者:aqniu
本文来自云栖社区合作伙伴安全牛,了解相关信息可以关注安全牛。
原文链接:http://www.aqniu.com/tools-tech/9342.html

相关文章
|
1月前
|
SQL 监控 安全
SQL注入的实现原理以及防止
SQL注入的实现原理以及防止
|
2月前
|
SQL 数据库
20、绕过去除and、or、union select、空格的sql注入
20、绕过去除and、or、union select、空格的sql注入
30 0
|
2月前
|
SQL 数据库
小课堂 -- 绕过去除特殊字符的sql注入
小课堂 -- 绕过去除特殊字符的sql注入
21 0
|
2月前
|
SQL Java 数据库连接
[SQL]SQL注入与SQL执行过程(基于JDBC)
[SQL]SQL注入与SQL执行过程(基于JDBC)
50 0
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
46 0
|
2月前
|
SQL 测试技术 数据库
SQL注入,跨站脚本,跨站请求伪造,傻傻分不清楚
SQL注入,跨站脚本,跨站请求伪造,傻傻分不清楚
|
1月前
|
SQL Java 应用服务中间件
Java项目防止SQL注入的四种方案
Java项目防止SQL注入的四种方案
37 0
|
2月前
|
SQL 安全 关系型数据库
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞,品相还不错,可执行任意 SQL 语句。 总之,吃了一惊,一个防 SQL 注入的工具居然也有 SQL 注入漏洞。 请看这段代码
413 1
|
3月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
87 0
|
1天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
9 0