解决打补丁难题的利器——虚拟补丁
作者:星期六, 八月 29, 20150

虚拟补丁技术是通过控制所保护系统的输入输出,防止对系统的漏洞攻击行为的技术。

640

随着网络黑客的攻击活动方式越来越多,速度越来越快,针对信息系统的漏洞研究和系统安全漏洞的修补,成为了攻与防永恒的主题。但系统漏洞的修补永远晚于漏洞的发现,系统设计的缺陷导致漏洞难以修补,现实稳定运行的信息系统难以接受系统的升级等等,这些原因都造成了现实世界中诸多被暴露了漏洞的系统仍然在持续‘裸奔’中。这如同已经被曝了安全隐患的汽车,无法召回,人们只能祈祷‘厄运’不要降临在自己身上。

虚拟补丁技术是对已有系统通过外围的方式,针对漏洞攻击的特征进行攻击行为发现和拦截的安全防御手段。它使针对漏洞防御的实施更为轻量,更为及时。当然这并不是一种彻底的方式,更彻底的方式依然是系统自身的修复;但它不失为一种简易的解决方法,为彻底修复赢得了时间;也使在某些特殊情况下无法进行的修复,有了轻便的解决方案。即使不彻底但简单而有效。这就如同是有了炎症,要吃退烧和消炎药,但体质的增强还需要长久的锻炼、起居、饮食和精神的调整。

虚拟补丁技术较早的使用是在web应用系统上,较早提出这个概念的是趋势科技,近来绿盟也加入了这个领域,也是在web上。数据库的虚拟补丁是近几年的防御技术,较早提出的是Mcaffee,国内数据库安全厂商安华金和也是这方面的佼佼者。

虚拟补丁技术较早地应用于web应用系统和数据库的原因是,由于这两种系统与应用关联的很紧密,一旦上线都需要稳定的运行,由于实施补丁升级引起的工程量和系统的下线成本与代价都很高。同时的协议标准性很差、复杂性很高,传统的防火墙、IPS/IDS、UTM等都对此无能为力。

数据库虚拟补丁技术一般是集成在数据库防火墙产品中(一种新的、有效针对数据库进行主动安全防御的产品)。这种技术,一经面世,就受到了国内外用户的广泛欢迎;除了防御能力外,国内用户欢迎的一个重要原因还在于,在以极光为代表的网络漏扫工具,每年都会对数据库主机报告数十个高中危漏洞,被检测单位亟待解决这些数据库漏洞问题,而虚拟补丁技术,无疑也对这种现实的需求提供了有效的解决方案。

在本文,我们将对数据库的漏洞,以及数据库虚拟补丁技术进行深度的介绍。

一. 数据库虚拟补丁产生的原因

1.1 数据库漏洞分析

美国Verizon就“核心数据是如何丢失的”做过一次全面的市场调查,结果发现,75%的数据丢失情况是由于数据库漏洞造成的。据CVE的数据安全漏洞统计,Oracle、SQL Server、MySQL等主流数据库的漏洞逐年上升。

数据库漏洞特指数据库软件在设计及开发阶段,因技术性缺陷而产生的不可预期,高隐秘性的数据库安全漏洞。外部攻击利用这些安全漏洞,对数据库及其存储的大量数据资产可造成恶意危害。数据库漏洞的种类繁多并且所造成的危害性严重,所以数据库漏洞目前已成为数据库信息安全领域针对数据库防护的主要研究对象。

640 (1)

图 1.1 数据库漏洞入侵方式

1.1.2 数据库漏洞可能造成的危害

(1)危害数据库自身系统,对数据库本机进行攻击。

(2)危害数据库所在服务器,利用数据库来对服务器做攻击。方式:

  • 通过pl/sql运行OS命令
  • 通过JAVA运行OS命令
  • 直接通过任务调度程序运行OS命令
  • 使用ALTER SYSTEM运行OS命令
  • 利用oracle编译本地pl/sql应用程序的方式来运行OS命令

(3)危害数据库所在系统的文件系统。方式:

  • 利用 UTL_FILE包访问文件系统
  • 利用JAVA访问文件系统
  • 利用操作系统环境变量访问文件系统

(4)危害数据库所在网络上的其他平台。

1.1.3 数据库漏洞的归类划分

根据CVE最新发布的漏洞统计结果,统计公布的各类数据库漏洞分布如下:

640

图 1.2 各类数据库漏洞分布

下图为CVE统计的一类oracle数据库漏洞,证用户可以通过未知向量影响系统的可用性(属缓冲区溢出类)。

640 (2)

640 (3)

数据库漏洞成因,主要分为以下几种:

(1)输入验证错误

(2)边界条件错误

(3)缓冲区溢出错误

(4)访问验证错误

(5)意外条件错误

(6)其他错误

通过研究数据库漏洞分类,有助于人们对漏洞的深入理解并加以预防和避免。

1.2 数据库补丁包的缺陷

由于数据库漏洞的不可预期性和高隐蔽性,数据库开发商只能通过事后,周期性,有针对性的对已发现的数据库漏洞进行安全性处理,并以数据库补丁包的形式进行针对性的漏洞修复。所以,对数据库打补丁和扩容存储已经成为DBA的常规性必处理业务。

然而,数据库补丁包虽然能在一定程度上弥补数据库漏洞所带来的危害,降低了数据库遭受恶意攻击的风险度。但是数据库补丁也存在一些可适用性的问题。主要包括以下三点:

  • 数据库补丁包具有高针对性,修补范围存在局限性。并且补丁包的发布周期冗长,数据库存在数据泄露的真空期。
  • 数据库利用补丁进行修补的过程中存在兼容性隐患,为数据库造成新的危害。
  • 数据库补丁修补过程中具有一定风险,并且会消耗用户大量资源。

640 (4)

以oracle数据库为例,在补丁包发布的响应周期内,数据库面对0day漏洞的漏洞风险。 即使获取到漏洞补丁包,在数据库修复过程中也需要用户投入大量的资源,例如:补丁修补的操作时间长,专业性要求高,系统在审查、测试和安装官方补丁更新期间很容易陷入风险。所以,经常为企业数据库打补丁在可操作性上存在困难,而不断变化的漏洞攻击也让数据库管理人员疲于应对,数据库将长时间处在高风险的阴影下。

1.3 数据库虚拟补丁技术

通过数据库漏洞的高危害性分析和漏洞补丁包的低可用性说明。我们可知,市场亟需一种数据库漏洞防护方式,在无需对数据库做深度操作的前提下,进行漏洞的修补与防护,以期达到数据库的安全标准要求。

常规的数据库虚拟补丁技术主要分2种:

方案一. 修改数据库程序的运行时代码。如果发现攻击涉及到某些存储敏感信息的数据表,会创造一个输出补丁,从而改变数据库返回的结果集输出的方向,向某特定地址传输该数据包。

方案二. 在数据库的前端设置某种类型代理,以控制数据库的输入和输出,从而阻止或消除攻击行为。可以检测对漏洞的尝试利用,并终止可疑的会话。

当前市场上的数据库防护工具,如果具备数据库漏洞防护能力,通常采用第二种虚拟补丁防护方式,避免对数据库做代码层级的改动。

二. 虚拟补丁对数据库的防护

2.1 虚拟补丁的产品优势

虚拟补丁的优势所在,就是可以在无需修补DBMS内核的情况下保护数据库。虚拟补丁在数据库外创建了一个安全层,从而无需根据数据库厂商提供的补丁做数据库修复,也不需要停止服务和回归测试。

虚拟补丁的防护机制,旨在通过监控所有数据库活动,获取通讯信息。利用监控数据与保护规则相比较,从而发现攻击企图。当比较结果与规则匹配时,就发出告警警报,并根据防护策略及时的终止可疑会话、操作程序或隔离用户,直到这个可疑的活动被审查通过。

简单的说,虚拟补丁通过控制受影响的应用程序的输入或输出,来改变或消除漏洞,是在数据库的前端进行控制或告警的一种技术。它是一种透明的对数据库进行保护的方法,不需要重启数据库或进行大范围应用系统的回归测试。

2.2 虚拟补丁的防护原理

虚拟补丁技术防护的基本原理就是攻击规则的匹配。根据攻击的方式,我们可以分为两种:一种是对网络通讯中直接的攻击的防护,比如对Oracle TNS协议中的缓冲区溢出漏洞;一种是对通过SQL语句中的攻击行为的防护,比如数据库系统的提权漏洞、注入漏洞。

ORACLE下系统函数 DBMS_METADATA为例,在oracle的某些版本中DBMS_METADATA中含有存在漏洞的函数 sys.dbms_metadata.get_ddl可被低权限用户利用进行执行各种越权语句。

黑客攻击方式:通过拼串等方式组合成语句 GRANT DBA TO USER,利用上述漏洞任意用户可以执行DBA提权操作,从而使低权限用户得到DBA权限,获取数据库中敏感信息或者对数据库进行破坏性操作,利用数据库漏洞对数据库进行攻击的行为诸如此类。

以安华金和数据库防火墙产品(DBF)为例的虚拟补丁技术的防护原理是对数据库和客户端之间的通信进行通信协议解析,获取到会话信息(包括:数据库用户,操作系统用户等)和用户实际执行的语句,对会话信息和语句中的攻击特征字符串进行综合分析,判断该语句是否有攻击意图。

其中语句分析拆取需要的语句信息,如:SQL语句操作类型,常出现在攻击语句中的关键词(如用来攻击的包、函数名等)。当语句中包含这些关键词,则判定为是一种漏洞攻击行为。最后对特征字符串进行进一步验证,结合关键词所在的上下文,甄别语句的行为,排除正常行为所产生的语句。

640 (1)

图 2.1 防护示例

例如:攻击语句

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 ….,排除正常行为。

至此,认为该语句是个攻击语句,存在风险。

上述虚拟补丁防护方式方法不但提高了执行效率,更有效的降低了误报的频率,虚拟补丁对数据库漏洞的防护方式大致如此。

安华金和的虚拟补丁技术,基于数据库防护考虑,将数据库漏洞分为了22类。本文只列举下述部分数据库漏洞做分类说明,有利于对虚拟补丁防护方式的理解。

(1)DBMS SQL注入

这里指的是DBMS系统的函数、存储过程中注入漏洞,而不是我们常规说的应用系统的SQL注入漏洞,这些漏洞是由于DBMS产品自引起的SQL调用性的缺陷,而使黑客能通过正常的SQL语句完成语句注入。

在正常的sql语句中通过嵌入、注释、转义符等手段加入针对数据库漏洞或数据库设置缺陷的畸形字符串或其他畸形输入。通过单次或多次这种畸形输入逐步获取数据库中更高权限,最终获取数据库中敏感信息或直接夺取数据库DBA权限。进而可能对数据库所在的网络环境和本地服务器造成危害。

入侵方法分为:

代码注入

代码注入攻击多在支持多条SQL语句执行的数据中存在。它是通过黑客在正常语句中加入恶意EXECUTE命令完成攻击的。

函数调用注入

函数调用注入是代码注入的变体,但确实整个SQL注入的核心。它利用数据库存在漏洞将恶意语句注入其中。具体手法分为:

  • 注入select /delete/insert/update语句
  • 注入函数
  • 注入匿名pl/sql块
  • 游标注入
  • 利用触发器
  • lateral提权技术

以lateral为例说明,提权技术中最著名的是CREATE ANT TRIGGER 权限提DBA、CREATE ANT VIEW 权限提DBA、EXECUTE ANY PROCEDURE权限提DBA、CREATE PROCEDUER 权限提DBA。

缓冲区溢出注入

利用where子句修改SQL语句返回不同的结果集,来达到获取数据库敏感信息的目的。

(2)缓冲区溢出

源缓冲区的数据向小于自身位数的缓冲区复制数据时,超越目标缓冲区的位数边界,并且数据库未对存入数据进行边界判断,最终导致目标缓冲区爆满。目标缓冲区内存改变程序控制流、夺取操作系统、禁止访问等多种结果。缓冲区溢出主要可以分成四种:静态数据溢出、栈溢出、堆溢出和格式化串。

入侵方法分为:

栈溢出

缓冲区溢出的一种,主要是通过利用截取函数返回值来进行栈溢出。方式主要分为2种

1.通过缓冲区溢出改变函数逻辑流程。

2.通过缓冲区溢出改变函数返回地址。其中比较常见的为第二种。

堆溢出

缓冲区溢出的一种,利用原理类似栈溢出,但由于堆中地址是动态分配的,无法准确定位,所以黑客要利用堆溢出需要通过DWORD SHOOT技术来对堆进行扫描。获取堆溢出中可利用的地址。

静态数据区溢出

静态数据区域存放连续的全局变量和未初始化的静态变量,缓冲区在静态数据区发生溢出称为静态数据区溢出。

格式化串

格式化串漏洞最显著的例子,就是在*printf()系列函数中按照一定的格式对数据进行输出。黑客主要是利用printf()系列函数有三条特殊的性质。

1.*printf()系列函数的参数的个数是不固定的。

2.利用*printf()的一个特殊的格式符%n,黑客向内存中写入exploit。

3.利用附加格式符控制跳转地址的值。

(3)提权

数据库中用户根据权限划分,一些用户本身并不具备某些操作权限。黑客获得了这个数据库用户后通过一些畸形的sql语法串,对含有漏洞的函数进行注入。导致低权限用户获得高权限用户才有的操作权限,执行原本自身权限无法执行的语句,获取敏感数据。(如银行数据入侵修改)

(4)拒绝服务

攻击者强制目标数据库停止提供服务。包括数据库端口进行的消耗性攻击等,导致数据库服务被暂停甚至所处主机死机的行为,都属于拒绝服务攻击。

(5)访问操作系统

间接利用缓冲区溢出夺取数据库所在操作系统的控制权限。

(6)Bypass FGAC

防守方式:禁止非DBA用户执行 GRANT EXEMPT ACCESS POLICY TO xxxxx等操作

(7)修改 FGAC

由于某些应用的开发时候使用的账号被赋予了EXEMPT ACCESS POLICY权限。但开发后未及时收回,产生的漏洞。

防护方式:禁止非DBA用户对DBMS_RLS进行操作。

(8)访问敏感组件

禁止非DBA用户访问存储关键信息的表。

防护方式:禁止非DBA访问mysql.user、mysql.db、information_schema.schemata等含有系统关键信息的表

(9)创建外部JOB

基于数据库组件dbms_scheduler导致的异常现象。

防护方式:采用的是禁止非DBA权限用户调用dbms_scheduler。

(10)恶意代码

非DBA用户在采用DBML_SQL执行的语句中加入 EXECUTE 执行的语句,利用批量执行来运行恶意代码。

(11)非系统用户执行命令

防护方式:禁止alter system set encryption key identified by”wallet”类数据库通过sql/plus访问数据库所在系统的语句。

三. 总结

数据库虚拟补丁技术,作为数据库漏洞防护体系中最简便、最节省资源的处理方式,具有极高的可应用性。其价值不仅在于对数据库漏洞的简单防护,未来更可以配合数据库漏扫系统,为数据库建立起周密而可对照的检测与防护系统。作为数据库防火墙的重要功能组件,其价值更在数据库防护过程中得到充分的体现。

(作者:安华金和 刘晓韬 李月飞)

关键词:

申明:本文系厂商投稿收录,所涉观点不代表安全牛立场!


相关文章