虚拟补丁技术是通过控制所保护系统的输入输出,防止对系统的漏洞攻击行为的技术。
虚拟补丁技术通过外围的方式,针对系统漏洞攻击的特征进行攻击行为发现和拦截的安全防御手段。它使漏洞防御的实施更为轻便,更加及时。虚拟补丁技术较早使用在web应用系统上,数据库的虚拟补丁是近几年最新提出的防御技术,较早提出的是Mcaffee,国内数据库安全厂商安华金和也是这方面的佼佼者。
数据库漏洞分类及成因
美国Verizon就“核心数据是如何丢失的”做过一次全面的市场调查,结果发现,75%的数据丢失情况是由于数据库漏洞造成的。据CVE的数据安全漏洞统计,Oracle、SQL Server、MySQL等主流数据库的漏洞逐年上升。
数据库漏洞入侵方式
根据CVE最新发布的漏洞统计结果,统计公布的各类数据库漏洞分布如下:
各类数据库漏洞分布
CVE统计:一类oracle数据库漏洞
数据库漏洞的产生,主要由于输入验证错误、边界条件错误、缓冲区溢出错误、访问验证错误、意外条件错误等原因产生。
由于数据库漏洞的存在,可能造成的危害,主要有以下四个方面:
(1)危害数据库自身系统,对数据库本机进行攻击。
(2)危害数据库所在服务器,利用数据库来对服务器做攻击。方式:
- 通过pl/sql运行OS命令
- 通过JAVA运行OS命令
- 直接通过任务调度程序运行OS命令
- 使用ALTER SYSTEM运行OS命令
- 利用oracle编译本地pl/sql应用程序的方式来运行OS命令
(3)危害数据库所在系统的文件系统。方式:
- 利用 UTL_FILE包访问文件系统
- 利用JAVA访问文件系统
- 利用操作系统环境变量访问文件系统
(4)危害数据库所在网络上的其他平台。
数据库补丁包的缺陷
由于数据库漏洞的不可预期性和高隐蔽性,数据库开发商只能通过事后,周期性,有针对性的对已发现的数据库漏洞进行安全性处理,并以数据库补丁包的形式进行针对性的漏洞修复。所以,对数据库打补丁和扩容存储已经成为DBA的常规性必处理业务。
然而,数据库补丁包虽然能在一定程度上弥补数据库漏洞所带来的危害,降低了数据库遭受恶意攻击的风险度。但是数据库补丁也存在一些可适用性的问题。主要包括以下三点:
- 数据库补丁包具有高针对性,修补范围存在局限性。并且补丁包的发布周期冗长,数据库存在数据泄露的真空期。
- 数据库利用补丁进行修补的过程中存在兼容性隐患,为数据库造成新的危害。
- 数据库补丁修补过程中具有一定风险,并且会消耗用户大量资源。
以oracle数据库为例,在补丁包发布的响应周期内,数据库面对0day漏洞的漏洞风险。 即使获取到漏洞补丁包,在数据库修复过程中也需要用户投入大量的资源,例如:补丁修补的操作时间长,专业性要求高,系统在审查、测试和安装官方补丁更新期间很容易陷入风险。所以,经常为企业数据库打补丁在可操作性上存在困难,而不断变化的漏洞攻击也让数据库管理人员疲于应对,数据库将长时间处在高风险的阴影下。
数据库虚拟补丁技术
虚拟补丁的优势主要在于,可以在无需修补DBMS内核的情况下保护数据库。虚拟补丁在数据库外创建了一个安全层,从而无需根据数据库厂商提供的补丁做数据库修复,也不需要停止服务和回归测试。虚拟补丁技术防护的基本原理在于攻击规则的匹配。根据攻击的方式,我们可以分为两种:一种是对网络通讯中直接的攻击的防护,比如对Oracle TNS协议中的缓冲区溢出漏洞;一种是对通过SQL语句中的攻击行为的防护,比如数据库系统的提权漏洞、注入漏洞。
ORACLE下系统函数 DBMS_METADATA为例,在oracle的某些版本中DBMS_METADATA中含有存在漏洞的函数 sys.dbms_metadata.get_ddl可被低权限用户利用进行执行各种越权语句。
黑客攻击方式:通过拼串等方式组合成语句GRANT DBA TO USER,利用上述漏洞任意用户可以执行DBA提权操作,从而使低权限用户得到DBA权限,获取数据库中敏感信息或者对数据库进行破坏性操作,利用数据库漏洞对数据库进行攻击的行为诸如此类。
以安华金和数据库防火墙产品(DBFirewall)为例,其虚拟补丁技术的防护原理是对数据库和客户端之间的通信进行通信协议解析,获取到会话信息(包括:数据库用户,操作系统用户等)和用户实际执行的语句,对会话信息和语句中的攻击特征字符串进行综合分析,判断该语句是否有攻击意图。
其中语句分析拆取需要的语句信息,如:SQL语句操作类型,常出现在攻击语句中的关键词(如用来攻击的包、函数名等)。当语句中包含这些关键词,则判定为是一种漏洞攻击行为。最后对特征字符串进行进一步验证,结合关键词所在的上下文,甄别语句的行为,排除正常行为所产生的语句。
防护示例
例如:攻击语句
DECLARE a clob;
BEGIN
a:= sys.dbms_metadata.get_ddl (
‘‘‘||scott.get_dba() ||‘‘‘,
‘DBMS_METADATA‘
);
END;
防护的规则和手段可以为:
(1)解析出会话的用户名:证明不是sys用户,可能会是一种越权行为。
(2)对语句进行进一步验证:证明语句中包含有常被用来的攻击的字段名:dbms_metadata,并且含有函数get_ddl。
(3)满足上述条件,可以猜测为攻击行为。
(4)最后验证语句并非查询类型select ....,排除正常行为。
至此,认为该语句是个攻击语句,存在风险。
上述虚拟补丁防护方式方法不但提高了执行效率,更有效的降低了误报的频率,虚拟补丁对数据库漏洞的防护方式大致如此。
(1)DBMS SQL注入
这里指的是DBMS系统的函数、存储过程中注入漏洞,而不是我们常规说的应用系统的SQL注入漏洞,这些漏洞是由于DBMS产品自引起的SQL调用性的缺陷,而使黑客能通过正常的SQL语句完成语句注入。
在正常的sql语句中通过嵌入、注释、转义符等手段加入针对数据库漏洞或数据库设置缺陷的畸形字符串或其他畸形输入。通过单次或多次这种畸形输入逐步获取数据库中更高权限,最终获取数据库中敏感信息或直接夺取数据库DBA权限。进而可能对数据库所在的网络环境和本地服务器造成危害。数据库虚拟补丁技术,作为数据库漏洞防护体系中最简便、最节省资源的处理方式,具有极高的可应用性。其价值不仅在于对数据库漏洞的简单防护,未来更可以配合数据库漏扫系统,为数据库建立起周密而可对照的检测与防护系统。作为数据库防火墙的重要功能组件,虚拟补丁在数据库防护过程中的价值得到充分体现。
数据库虚拟补丁技术研究