0x00 简介
为了给客户数据提供更好的保护,我们开展了一个新的研究项目,项目的重点在于分析和共享针对数据库的各种攻击方法。该项目名为StickyDB,在本系列的第一篇和第二篇文章中,我们已经对该项目的部分成果进行了介绍。下面是这个数据库蜜罐网(图1)的示意图,它可以诱骗攻击者将这些数据库锁定为攻击目标,以便有机会了解他们的攻击活动,这样就可以做到知己知彼,并进一步提升自身的数据防护能力了。
近日,我们检测到了一种针对PostgreSQL服务器的攻击技术。攻击者登录到数据库后,会创建多种payload,并通过将这些二进制文件嵌入到下载的图片中以绕过安全检测,之后,会将payload提取到本地硬盘并触发它们,从而实现远程代码执行。就像我们近期发现的许多攻击一样,攻击者最终目的都是为了利用服务器的计算资源来挖门罗币。顺便说一句,这里的攻击矢量竟然是Scarlett Johannsson的一张照片。好了,废话少说,下面开始深入探索这种攻击技术!
图1:StickyDB蜜罐网络环境
0x01 远程代码执行与DAM检测绕过
与其他常见数据库一样,PostgreSQL也提供了一个metasploit模块,来简化与操作系统之间的交互。这次检测到的攻击中使用的方法是,在运行时创建payload,然后通过lo_export函数将二进制代码转储到硬盘中。需要注意的是,这个模块发生了一些细微的改动,所以它会将lo_export函数作为记录插入到pg_proc目录中,而不是直接调用它。这是为了绕过一些数据库审计监视(DAM)解决方案,因为这些解决方案会密切监视诸如lo_export这样的特权操作。所以,使用obj6440002537实际上就是间接调用lo_export(图2)。
图2:通过间接调用lo_export绕过安全检测
0x02 很好,既然控制了数据库,那就让我看看机器上有没有GPU?
接下来,攻击者就可以通过一个简单的函数fun6440002537来执行本地的系统命令了。这个SQL函数是一个调用C语言函数的包装函数,而“sys_eval”则是从“tmp406001440”(一个基于sqlmapproject的二进制文件)中导出的一个小型函数,可以充当从SQL客户端调用shell命令的代理。
那么,攻击者接下来做了什么呢?侦查。首先,通过执行lshw -c video命令来获取GPU的详细信息,然后,通过运行 cat /proc/cpuinfo来获取CPU的详细信息(见图3-4)。刚开始,您也许摸不着头脑,他们这是要干嘛?但别忘了,这群攻击者的最终目的可是挖掘加密数字货币啊,所以检测这些计算资源方面的信息是再正常不过了。
Figure 3:检测GPU 信息
Figure 4: 检测CPU 信息
到目前为止,攻击者已经拿下了数据库的访问权限,建立了远程代码执行路径,并绕过了DAM检测,同时,还掌握了系统的许多细节。换句话说,已经为下载Scarlett Johansson的照片做好了充分的准备?!等等,什么情况?
0x03 将恶意payload伪装成Scarlett Johansson照片
我不得不说,现在的攻击者是越来越有创意了。
在这个例子中,攻击者想要下载最新的恶意代码的时候,他们会将其作为图像上传到imagehousing.com网站中(这是一个供人们免费托管和共享图像的合法网站)。但是,payload是二进制格式,而不是图片格式啊?如果改写二进制文件的扩展名,将其设为图像文件扩展名的话,是否能够成功上传至图像托管网站呢?很遗憾,答案是否定的,原因很简单,因为它既非有效的图片,也不是可见的图片,因此也就没有相应的预览和图片了。相反,如果攻击者不是修改文件扩展名,而是直接将恶意二进制代码添加到美丽动人的Scarlett Johansson的真实照片中(图5)的话,那么不仅可以成功上传图片,而且该图片还能正常显示——不过,虽然看上去一切正常,照片里面却隐藏着攻击者的恶意payload。
图5:payload。打开这张照片时,基本看不出有什么异常。不用担心,本文中的图片是非常“干净”的,这一点毋庸置疑!
您能看出二进制代码在哪里吗?实际上,这些代码就位于她的左肘下方!
我们已经将这个安全问题通告了imagehousing.com网站,目前该图像已被删除。
0x04 从下载图片到挖门罗币
下载带有payload的图片(art-981754.png)的时候,可以借助wget程序来轻松完成。然后,就可以使用dd(data duplicator)命令从图片中提取可执行文件并设置执行权限了,也就是为新创建的文件x4060014400设置完全权限(chmod 777)。最后一步,就是运行这个刚提取的payload,这些操作都是通过SQL命令完成的,具体如下所示:
图6:通过SQL下载图片,然后从中提取二进制payload并执行
文件x4060014400会创建另一个可执行文件,即s4060014400。这个可执行文件的作用是通过域名为https://monero.crypto-pool.fr/,IP地址为163.172.226.218(图7)的矿池来挖门罗币。迄今为止,攻击者钱包中的门罗币已超过312.5个,市值超过90,000美元,该钱包的地址是:
4BBgotjSkvBjgx8SG6hmmhEP3RoeHNei9MZ2iqWHWs8WEFvwUVi6KEpLWdfNx6Guiq5451Fv2SoxoD7rHzQhQTVbDtfL8xS
图7:启动门罗币挖矿的SQL语句
当然,完成上述任务后,它会清除自己的踪迹:
图8:清理文件
从攻击者的角度来看:任务已经顺利完成了!
0x05 防病毒软件能识别这些恶意图片吗?
通过Google的VirusTotal,我们使用近60种杀毒软件对这次攻击中挖矿代码的三种不同形式(恶意图像的URL、恶意图像和挖矿代码)进行了安全检测,结果如下:
图9:有1个防病毒软件检测出恶意URL
图10:有3种防病毒软件检测到恶意图片
图11:有18个防病毒软件检测到加密货币挖矿代码
虽然这种通过将二进制代码添加到合法文件(图像、文档)来创建“变异”文件的技巧由来已久,但它仍然能够绕过大多数防病毒软件,这的确令人震惊不已。
创建这种"变异"文件实际上非常简单:
Linux系统: cat myExecutableFile >> myImageFile.png
Windows系统: type myExecutableFile.exe >> myImageFile.png
0x06 攻击者如何寻找PostgreSQL数据库呢?
如果攻击者已经位于本地网络中的话,那么就可以通过Nmap之类的探测工具来找出域中的PostgreSQL实例了。但是,是否存在更易于发现的目标呢? 比如,对外公开的PostgreSQL数据库怎么样?如果有的话,那自然是好,不过问题是,真的有这样的数据库吗?辛运的是,答案是肯定的,其中至少有710,000台符合这种要求的主机托管在AWS上(图12)。实际上,通过Shodan在线服务就可以轻而易举地找到它们,这跟使用谷歌搜索一样简单。所以,攻击者可以轻松找到这些攻击目标,然后通过暴力破解来猜测默认的postgres用户的密码,一旦得手,就可以进一步应用我们所介绍的那些数据库攻击技术了。
图12:具有公共IP地址的710000个 PostgreSQL实例(图片取自shodan.io网站)
我们将在本系列的下一篇文章中进一步讨论其他的数据库攻击技术,并在最后一篇文章中全面介绍针对这些攻击的缓解措施。但对于本文介绍的攻击而言,下面的提示能够帮您避免中招: