从安全攻击实例看数据库安全之三:数据库攻击原理分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

从安全攻击实例看数据库安全之三:数据库攻击原理分析

摘要:本文将通过对SQL注入攻击技术和数据库加密技术原理以及防护效果进行深入的分析,来辨析数据库安全技术误区“数据库加密能解决SQL注入”,同时本文也给出了SQL注入的防护方法。

一. 数据库安全误区

针对2015年4月互联网大规模报道的全国30省市社保等行业用户信息泄露事件,安华金和对乌云历史报道的社保行业相关漏洞进行集中分析,得出的结论为:大量的信息泄露主要是由于软件中存在的SQL注入漏洞被黑客利用引起的,我们可以把SQL注入比作黑客攻击数据库“锋利的矛”。

有了攻击用的矛,我们再来看防守用的盾:数据库加密技术真正实现了敏感数据的加密存储,采用国内外主流的加密算法,确保加密后的数据通过非正常手段获取后十年内难以非法破解,同时通过独立权控、应用绑定,防止绕过合法应用程序的数据库访问和对内部高权限人员的运维操作管控,号称数据库安全中的王冠,我们可以把数据库加密技术比作数据安全防护措施中“坚固的盾”。

《韩非子·难一》所述的故事中提到:“以子之矛,陷子之盾,何如?”虽然这是个众人皆知的故事,但是现实版的“矛与盾”的故事又发生在大学教材《信息系统安全概论》中,下面我们先引用教材中的原文:

对于安全管理员来说,是否可以通过数据库加密来防止SQL注入呢?在详细解释两种攻防技术前,我们对一个误区给予纠正:数据库加密技术无法抵御SQL注入。原因是数据库加密解决信用卡信息存储安全等问题,而SQL注入是利用应用的弱点窃取数据,由于合法应用肯定能看到明文的信息卡数据,因此加密防守无效。

那SQL注入如何正确防护呢?下面我们先了解下SQL注入攻击的原理。

对于安全管理员来说这也是必要的,因为不仅要了解防护的手段,同时也应该深入了解SQL注入的原理,实现有针对性的安全防护。

二. SQL注入攻击的原理分析

SQL注入数据库攻击指构建特殊的输入作为参数传入Web应用程序,比如通过提交表单的文本框输入,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

常见的SQL注入案例有两种情况,一种是伪装登录应用系统,另一种是在有登录账号的情况下,在应用系统后续的提交表单的文本框中找到SQL注入点,然后利用注入点批量窃取数据。如下两图的输入:

登陆注入:

在应用系统用户名栏中输入<< '/*>>

在密码中输入<< */or '1'='1>>

后台sql为:select …where name=''/*'and pwd ='*/ or

'1'='1';

此方法拼接出的sql为恒真结果,直接成功登陆;

查询注入:

在人事信息的“电话号码”查询条件栏中输入

<< ' or '1'='1‘-- >>

后台sql为:select …where phone=''or '1'='1'--';

此种方法sql语句的where条件恒真,将获得所有人的

信息

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

三. 数据库加密防护效果分析

加密前

加密后

数据库加密防护总结:

四. 结论:SQL注入如何防护

卡尔的SQL注入攻击就是利用合法应用的弱点获取信息卡资料的,即使数据库信用卡信息加密了,从存储文件上看是密文,但是对于合法应用发过来的查询语句,数据库也必然解密后将明文数据发回web应用系统。

数据库安全专家安华金和建议通过WAF和数据库防火墙相结合来实现SQL注入的有效防护。WAF通过黑名单机制针对有SQL注入特征的表单内容进行拦截,数据库防火墙通过构建合法应用的行为模型和SQL注入特征库实现SQL注入行为的有效拦截,同时还能够对运维终端的恶意操作进行拦截。

相关文档
最新文档