0x00 简介
目前,数据泄露已经成为所有组织构不得不面对的一个严重威胁了。根据有关的安全报告称,仅在2017年上半年,就发生了2,227次数据泄露事件,有60亿条以上的记录被泄露,该数字已经超过了2016年下半年的最高记录。
无论对于外部攻击者还是内部攻击者,他们通常都会将数据库服务器作为主要攻击目标。我们最近开展了一项新的研究项目,以深入了解数据库黑客的行为特征: 了解常见的数据库攻击手法、攻击者使用的工具和技术、他们如何获得访问权限、他们进入数据库服务器后都做了什么,以及他们的最终目标是什么,等等。
为了开展这项研究,我们创建了一个含有各种流行的SQL/NoSQL数据库(如Microsoft SQL ServerMySQLOracle和MongoDB)的蜜罐网络,并对这些数据库的访问情况实施了长达六个月的监控。为了便于入侵者得手(同时,也为了更加吸引他们),我们在数据库蜜罐中配置了易于猜解的缺省凭证和含有安全漏洞的前端Web应用。
图1:数据库蜜罐网(利用Shodan绘制)
除此之外,我们的蜜罐还有幸“参与”了几次影响广泛的数据库攻击活动,比如去年针对MongoDB和MySQL的勒索软件攻击,这些攻击感染了数以万计的数据库。
对于我们的研究成果,将分解为一系列文章向读者进行介绍。在第一篇文章中,我们将深入探讨黑客用来访问数据库的一种方法,即SQL混淆。首先,我们将说明其概念,然后讲解其工作原理,最后介绍该技术在攻击者手中的应用方式。
0x01 什么是SQL混淆?
当攻击者发现目标数据库采取了保护措施后,通常都会利用绕过技术来躲避检测,这样,安全措施也无法检测和阻止他们了。其中,最受欢迎的一种绕过技术——主要适用于基于模式的安全机制——就是混淆。在该技术的帮助下,攻击者可以生成这样一个攻击实例,虽然它本质上带有攻击性,但是在形式上大做文章,通过混淆视听来达到让防御系统误以为它是安全的目的。
例如,为了绕过Web应用程序防火墙(WAF)并执行SQL注入攻击,最常用的攻击手法就是对SQL语句进行混淆(我们今后将其称为SQL混淆),同时,该方法还能够绕过数据库活动监视(DAM)解决方案。这种暗地里对数据库执行SQL命令的技术在攻击者、自动化工具和渗透测试人员中间非常流行。为了实施SQL注入攻击,最常用的混淆方法之一,就是使用SQL HEX编码,它会把明文形式的“可读性很强的”SQL事务转换为HEX字符(0-9,AF),使其变得晦涩难懂,以逃脱DAM和数据库防火墙(DBF)解决方案的监视。例如,原本一条简单的SQL语句“select * from passwords”,经过混淆处理后,到达DAM解决方案眼里时就变成了“73656C656374202A2066726F6D2070617373776F726473”。
虽然SQL HEX编码攻击适用于所有数据库,但在我们的研究中,仅关注SQL Server和MySQL数据库。
0x02 SQL HEX编码攻击模式
根据相关的数据分析结果来看,我们检测到了多种SQL HEX编码攻击模式。令人惊讶的是,在SQL Server上,竟然有五分之一的攻击查询利用了HEX编码技术。然而,这种类型的攻击对于MySQL数据库来说却很少见。
在本节中,我们将介绍几种常见的SQL HEX编码攻击模式,并对其用途和结构进行详细的解释。
Microsoft SQL Server
以下是SQL Server数据库最常见的SQL HEX编码攻击模式:
在上面的例子中,首先会将攻击命令编码为HEX字符串,并将其放入变量a中。然后,由exec(@a)语句执行混淆后的命令。在HEX编码的查询语句的后面,我们发现了多种不同类型的攻击。关于这些攻击的例子,我们将在“揭开混淆型查询的神秘面纱”部分进行深入讲解。
下面是在Microsoft SQL Server中发现的另一个HEX查询的例子:
上面Transact-SQL(T-SQL)的作用是将恶意payload传递给目标系统。它会创建一个文件,并将这个文件(通常是可执行文件或DLL)写入目标系统中的指定位置。然后,使用ADODB.Stream对象(该对象的类标识符为“00000566-0000-0010-8000-00AA006D2EA4”)和OLE自动化(sp_OA)存储过程完成攻击(注:OLE自动化是微软提出的一种进程间通信机制)。有了OLE过程,人们就可以在T-SQL中使用COM对象了(注:组件对象模型(COM)是Microsoft于1993年推出的软件组件的二进制接口标准。目前,许多编程语言都利用该技术来创建进程间通信对象)。攻击者可以使用这些过程来创建COM对象,然后就可以使用该对象的方法和属性了。例如,通过File System对象可以直接从T-SQL中对文件进行打开、读取和写入操作。
MySQL
根据对MySQL的攻击数据分析结果来看,我们检测到了三种针对该数据库的HEX编码查询模式,这些模式用于通过SQL命令把payload传递到目标系统。
模式1和模式2中的命令将HEX编码的PE文件加载到数据表中,然后将其提取到目标系统上的文件中。
模式3中的命令首先解码DLL,并将其加载到目标系统上的文件中。然后,它会创建一个位于所传递的DLL中的新SQL函数,并使用SELECT命令执行该函数。该函数将下载一个可执行文件并将其保存到指定位置,接着将其权限改为'777'(所有人都可以读写和执行该文件),最后执行该文件。
0x03 揭开混淆型查询的神秘面纱
我们之所以收集并解码各种HEX编码的攻击查询,目的就是为了了解经过混淆的查询背后隐匿的各种攻击。
我们的研究发现,HEX编码的查询通常都是针对MySQL和MS SQL Server数据库的,它其实可以看作是一种高级的二进制到十六进制的转换方法,用于通过SQL命令将payload投递到目标系统。payload一旦进入目标系统,它就会从十六进制格式转换回二进制可执行文件格式,然后执行。我们发现了多种用于投递和执行payload的方法。这些方法将在我们的下一篇文章中加以讨论。
此外,HEX编码的查询也可以用于修改数据库安全配置以增加攻击面。通常情况下,它们会将自己呈现为某些服务和功能。以下查询将启用高级选项并关闭默认跟踪。默认跟踪会持续而详尽地记录与配置选项相关的行为及其变更情况。之后,攻击者会通过fn_trace_getinfo过程检索现存的所有跟踪信息,然后停止跟踪。
此外,我们也观察到了针对MS SQL数据库的攻击,其目的是通过调用xp_servicecontrol()过程来控制Microsoft-Windows-SharedAccess和SQL Server Agent服务。
这些攻击会关闭Microsoft-Windows-SharedAccess服务,而该服务的用途就是提供Internet连接共享。所以,该操作真正目的是关闭Windows防火墙。
另外,攻击者还使用了xp_servicecontrol()过程来启动SQL Server代理服务,以运行包含各种攻击命令的SQL作业。
0x04 小结
SQL混淆只是攻击者武器库中的兵器之一。在本系列的下一篇文章中,我们将为读者详细介绍远程代码执行技术,其中包括该技术的具体实施过程,掩盖入侵踪迹的方法,以及针对这种攻击技术的防御措施。