SQL注入有病 安全专家有良方

2015-04-16 15:34丁燕
计算机与网络 2015年24期
关键词:保护方式语句漏洞

■丁燕

SQL注入有病 安全专家有良方

■丁燕

SQL注入攻击现状

SQL注入攻击是一个非常老的攻击方式,由于很多应用程序都存在SQL注入漏洞而且SQL注入方式与手段变化多端,尽管大型企业一般都花巨资购买多种安全保护系统,但是SQL注入攻击导致企业蒙受损失的新闻还是层出不穷:

香港航空某站SQL注入(涉及156万乘客信息/268万机票信息/八千多员工信息);中石化车e族APP存在SQL注入漏洞之一(可跨9个库);海尔旗下日日顺商城SQL注入导致300万会员信息泄漏;邯郸市工信办漏洞危及大量个人信息以及金额等数据,百万用户数据泄露;中国电信翼支付某系统漏洞泄露400万用户信息、支付交易明细信息(超市购物/加油站加油)以及充值等数据。

从这些例子可以看出SQL注入是当前应用安全防护的重点和难点,是什么原因导致如此古老的攻击方式在当今安全软件如此丰富的情况下依旧导致这么大伤害呢?笔者认为有以下几点:

SQL注入漏洞大面积的存在:当今系统越来越复杂,发布节奏越来越快,遗漏代码非常多。很多公司对安全不够重视,带病上线是非常常见的事情。

关系型数据库是现在最流行的存储方式,大多数有价值的信息都存在数据库里。这对黑客的诱惑力太大了。

攻击方式并不难找,网络有大量的SQL注入攻击的方法和手段。黑客很容易找到攻击的方式。

SQL注入的原理

SQL注入:就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串里,最终达到欺骗服务器执行恶意的SQL命令。

具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单输入(恶意)SQL语句得到一个存在安全漏洞的网站的数据库信息,而不按照设计者的意图执行SQL语句。

首先让我们了解下什么时候可能发生SQL注入:

假设我们在浏览器中输入URL:www.sample.com,由于它只是对页面的简单请求无需对数据库进行动态请求,所以它不存在SQL注入,当输入www.sample.com testid=23时,我们在URL中传递了变量testid,并且提供值为23,由于它是对数据库进行动态查询的请求(其中testid=23表示数据库查询变量),所以我们可以在该URL中嵌入了恶意SQL语句。

具体的例子和详细的原理就不赘述了,有兴趣的同学可以去谷歌或者百度搜索,上面会有大量的例子和攻击方式。

SQL注入常用保护方式

最主要的保护方式有以下几点:

使用Prepared Statements(参数查询)来代替Statements—这要求所有数据库开发人员在开发SQL查询语句时将代码和数据分开,先定义查询语句的结构,将数据通过参数的方式出入,这样输入的参数将不会当作SQL命令来执行,基本上能避免SQL注入的攻击。

使用存储过程来操作数据库——所有的存储过程都存放在数据库里面,应用程序调用存储过程来查询数据。

转义用户输入的所有特殊字符——永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等。这些在一定程度可以缓解SQL注入。

还有些辅助的方法:

以最低权限的数据库连接,为每个应用使用单独的权限与有限的数据库连接。不要把机密信息明文存放,加密或者hash掉密码和敏感的信息。应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。RASP从根本上解决SQL注入攻击。

上面描述的是一些非常有用的SQL防护手段,但是都存在需要花费大量的精力制定代码规范的缺点,确保每个程序员都能按照这个规范来编写代码。但是现在的程序都非常复杂,代码量动辄百万行,需要非常多的程序员一起完成,要确保每个程序员写出完全符合安全规范的代码是完全不可能的。有些公司通过第三方代码扫描工具对代码进行静态和动态扫描,试图发现和修复所有SQL注入的漏洞,在实践中也非常不理想,以下几个方面的约束使这种想法很难实现:

代码量巨大,完全修复这些漏洞要花费巨大的人力和时间,在大多数公司基本不可能实现。扫描工具漏洞更新比较滞后,很多漏洞都不能得到及时更新。即使完全修复,上线后也会有新的漏洞产生。一般项目都会大量使用第三方API和框架,这些外部程序的漏洞是不可修改的,即使提供商承诺修改也需要比较长得时间。

现在有很多的安全产品,包括传统防火墙,WAF(Web防火墙)等等,这些安全产品基本上是根据数据流扫描的结果来提供保护,并不了解应用程序的上下文,所以不能精确识别攻击行为,更谈不上有效的保护,再加之现在云计算越来越盛行,传统的有清晰边界的网络拓扑结构也越来越少,因此这些产品对类似于SQL注入等应用安全攻击效果并不好。

那么安全专家有什么好的建议呢?他们推荐了RASP,这是最近非常流行的应用安全保护方案,它是在应用程序运行时进行自我保护,它将实时代码漏洞扫描和Web防火墙实时拦截安全攻击的能力组合起来,像疫苗一样将安全保护代码注入到应用程序中。它无需修改任何代码,简单修改JVM启动脚本就可以和应用程序结合在一起,在应用程序运行时一起运行,拥有应用程序的上下文,可以根据具体的用户行为有针对性行的进行安全监控和保护,既可以精确的识别和防范安全攻击,也可以最大限度的降低对性能和用户体验的影响。

而具体到SQL注入保护方面,RASP做得非常完美。它就像一个大的虚拟补丁,将大部分已知的SQL注入漏洞进行修补,确保大部分漏洞得到保护。这样大部分的攻击将无效,目前国内已知的仅有OneRASP具备这样的防护能力。

对于未知漏洞OneRASP将建立实时漏洞更新系统,能及时更新最新漏洞,在不影响用户系统的前提下,确保用户及时有效地抵御零日攻击。

对于无法预知的SQL注入方式,OneRASP也有办法防御。常见的SQL注入保护方式往往采用通用的方法,而每个数据库的实现方式有很大的不同,这些通用的方式必然会有遗漏之处。对安全来说任何遗漏都是致命的,黑客可以利用任何可乘之机获得机密。OneRASP对SQL注入保护非常完整,它将保护代码植入SQL注入攻击的必经点:JDBC的各个厂家的实现类Statement.class里面,每个保护动作都是在对数据库SQL语言的实现完全理解的基础上编写的,考虑SQL注入的每种攻击可能,实现从根上对SQL注入的完整保护。

猜你喜欢
保护方式语句漏洞
漏洞
重点:语句衔接
浅析农业植物品种保护方式的推广
农业环境问题与保护方式探究
浅析联合国难民署对难民保护的方式及局限
三明:“两票制”堵住加价漏洞
漏洞在哪儿
高铁急救应补齐三漏洞
如何搞定语句衔接题
作文语句实录