数据库安全关键技术之如何防SQL注入
作者:安华金和 发布时间:2017-01-06

在数据库面临的安全威胁中,来自外部的安全攻击,除利用数据库自身的安全漏洞进行漏洞攻击之外,另一种比较常见的方式就是SQL 注入攻击。目前很多用户存在误区:认为传统部署的WAF可以防御此类攻击,实则不然。这里我们简单分析一下方SQL注入攻击的技术原理。

实际上WAF无法对各种SQL注入的绕过手段进行穷举;因此WAF提供了各种扩展,以帮助用户根据实际情况进行规则扩展,以应对各种新的攻击,不如黑名单策略;但大量的规则将使WAF的性能大幅下降,进而影响整个系统的性能;同时可能还会造成某些误杀。

因此更有效的方法是在WEB应用和数据库之间加入数据库防火墙。数据库防火墙对从WEB应用发向数据库的SQL语句进行语法解析,对符合SQL注入特征的攻击行为进行告警和阻断。

下面是加入了防火墙后的拓扑架构:

20170106.png

数据库防火墙的防护策略、手段都是基于SQL协议解析而来;数据库防火墙在防止SQL注入上彻底的解决了WAF以牺牲性能为代价的方式。数据库防火墙和WAF配合使用的部署方式,将会使用户的核心数据更加安全。

数据库防火墙对SQL注入的防止,核心优势的之一在于它的部署位置,部署位置在应用服务器之后。无论攻击者采用了什么方式进行SQL注入攻击行为的包装,最终发送到数据库端的都是纯净的SQL语句。

数据库防火墙的核心优势之二,它是通过SQL语法解析技术而不是正则匹配技术进行SQL注入防御。通过SQL语法解析技术的性能更高,准确度更高。

数据库防火墙的核心优势之三,它具备综合防御的手段,以帮助即使被注入后的安全损失降到最低点。

数据库防火墙可以并通过以下四点实现整体的安全防护:

1.判断语句是否含有明显的SQL注入特征,有则阻止

2.语句的高危命令被发现,进行告警或阻断

3.语句访问的对象是否属于该用户访问权限,若无则阻断

4.限制语句的返回行数,超过返回行则阻断

加入数据库防火墙后,数据库防火墙会在数据库之间获取WEB应用发送给数据库的SQL语句。通过拿到的SQL语句,按照不同数据库进行SQL协议解析。

通过协议解析把应用发送的SQL语句还原成标准模式(去掉各种加入的符号,转译码等),攻击者曾经使用的可绕阔WAF的手法,在这里都将被干掉,将变为更加纯净的SQL语句。

基于这些纯净的SQL语句,与预定义的SQL注入特征进行匹配,如:

· 常量表达式和注释的组合

· 常量表达式和Union的组合

· 带外函数的调用

· 拼接字符与or的组合

· 常用注入SQL函数等

除了SQL注入的特征的匹配外,一些高危的命令将被告警或阻断,如truncate、drop、delete nowhere、insert nowhere等高危操作进行阻断;防止攻击行为造成大的灾害事故。

同时,可以对应用发来的SQL语句,进行操作和对象的细粒度权限控制,可以防止应用访问一些敏感表;比如防止对SQL注入侦察阶段常用的系统表的访问。

即便有SQL注入被发送到数据库端,数据库防火墙也会通过行数控制来进一步限制数据库每次的返回结果行数,对于大批量的数据返回将进行阻断,比如我们可以将某些敏感表的返回行数设定为不允许超过100,从而把损失减到最小。

综上,通过数据库防火墙无疑比WAF对SQL注入的防止更加彻底,能够真正防御SQL注入攻击带来的数据库安全威胁。