摘要:本文将通过对SQL注入攻击技术和数据库加密技术原理以及防护效果进行深入的分析,来辨析数据库安全技术误区“数据库加密能解决SQL注入”,同时本文也给出了SQL注入的防护方法。
1、 数据库安全误区
针对2015年4月互联网大规模报道的全国30省市社保等行业用户信息泄露事件,安华金和对乌云历史报道的社保行业相关漏洞进行集中分析,得出的结论为:大量的信息泄露主要是由于软件中存在的SQL注入漏洞被黑客利用引起的,我们可以把SQL注入比作黑客攻击数据库“锋利的矛”。
有了攻击用的矛,我们再来看防守用的盾:数据库加密技术真正实现了敏感数据的加密存储,采用国内外主流的加密算法,确保加密后的数据通过非正常手段获取后十年内难以非法破解,同时通过独立权控、应用绑定,防止绕过合法应用程序的数据库访问和对内部高权限人员的运维操作管控,号称数据库安全中的王冠,我们可以把数据库加密技术比作数据安全防护措施中“坚固的盾”。
《韩非子难一》所述的故事中提到:“以子之矛,陷子之盾,何如?”虽然这是个众人皆知的故事,但是现实版的“矛与盾”的故事又发生在大学教材《信息系统安全概论》中,下面我们先引用教材中的原文:
对于安全管理员来说,是否可以通过数据库加密来防止SQL注入呢?在详细解释两种攻防技术前,我们对一个误区给予纠正:数据库加密技术无法抵御SQL注入。原因是数据库加密解决信用卡信息存储安全等问题,而SQL注入是利用应用的弱点窃取数据,由于合法应用肯定能看到明文的信息卡数据,因此加密防守无效。
那SQL注入如何正确防护呢?下面我们先了解下SQL注入攻击的原理。
对于安全管理员来说这也是必要的,因为不仅要了解防护的手段,同时也应该深入了解SQL注入的原理,实现有针对性的安全防护。
2、 SQL注入攻击的原理分析
SQL注入数据库攻击指构建特殊的输入作为参数传入Web应用程序,比如通过提交表单的文本框输入,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
常见的SQL注入案例有两种情况,一种是伪装登录应用系统,另一种是在有登录账号的情况下,在应用系统后续的提交表单的文本框中找到SQL注入点,然后利用注入点批量窃取数据。如下两图的输入:
SQL注入的典型场景一,通过伪装登录窃取数据,主要是通过or运算符。
窃取数据
假设后台的拼接语句为select * from table where column1=‘ 文本框输入值’ ;
Eg1: 如输入值为《abc ’ or ‘1’=‘1》, 则语句拼接为 select *…where column1=‘abc’ or ‘1’=‘1’;由于’1’=‘1’是恒真,则该可以看到了整表的全部数据。
骗取登录
一般系统的登录需要输入用户名、密码;后台拼接的语句为select * from t where name=‘用户名’ and pwd=md5(‘密码’);
Eg1: 如输入用户名《abc ’ or 1=1 or 1=‘ def》,密码《abcd》则语句拼接为:
select …where name=‘abc’ or 1=1 or 1=‘def’ and pwd = md5(‘abcd’); 由于1=1是恒真,则该语句永远为真,可以成功登录了。
SQL 注入典型场景二,探测(通过and 运算)。
探测系统变量
… and user>0
我们知道,user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个 nvarchar的值跟int的数0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQLServer的出错提示是:将nvarchar转换int异常,XXXX不能转换成int。
探测系统对象名
先猜表名
… and (Select count(*) from 表名)<>0
猜列名
… and (Select count(列名) from 表名)<>0
3、 数据库加密防护效果分析
面临风险 |
应对策略 |
数据库文件采用明文存储 |
以列为单位有选择的进行加密,将信用卡信息表中的姓名、身份证、信用卡等敏感信息加密存储。 |
面临风险 |
应对策略 |
数据库正常运维操作和敏感数据访问操作从权限上无法分开。 |
通过独立权控体系;通过三权分立的方式提升安全性;避免数据库维护人员直接接触明文数据 |
面临风险 |
应对策略 |
绕过应用服务器的访问。 |
通过客户端权限区分合法访问源,可对访问源的IP,访问时间进行鉴别,只有通过合法访问源才可以访问到数据。 |
面临风险 |
应对策略 |
绕过应用程序的访问。 |
通过应用绑定技术实现应用身份鉴别。 只有通过合法应用,才可以访问到被保护的敏感数据。 |
面临风险 |
应对策略 |
数据库备份明文存储。 |
对数据库文件底层直接加密,数据库备份文件导出后内容仍为密文,备份文件还原后仍为密文。 |
数据库加密防护总结:
4、 结论:SQL注入如何防护
卡尔的SQL注入攻击就是利用合法应用的弱点获取信息卡资料的,即使数据库信用卡信息加密了,从存储文件上看是密文,但是对于合法应用发过来的查询语句,数据库也必然解密后将明文数据发回web应用系统。
数据库安全专家安华金和建议通过WAF和数据库防火墙相结合来实现SQL注入的有效防护。WAF通过黑名单机制针对有SQL注入特征的表单内容进行拦截,数据库防火墙通过构建合法应用的行为模型和SQL注入特征库实现SQL注入行为的有效拦截,同时还能够对运维终端的恶意操作进行拦截。