导语:研究人员发现一种针对PostgreSQL服务器的有意思的攻击技术。攻击者诱使用户下载含有二进制文件的恶意图片,触发payload释放和执行,然后利用数据库的资源进行加密货币挖矿。
研究人员正在进行一个叫做StickyDB的项目,该项目主要研究对数据库的攻击方法。图1是一个数据库蜜罐,欺骗攻击者进行攻击,这样研究人员就可以从中学习攻击方式并让数据库更加安全。
研究人员发现一种针对PostgreSQL服务器的有意思的攻击技术。攻击者在登录数据库后,创建不同的payload,通过下载的图像中的二进制文件避免被检测到,然后提取payload在硬盘中,并触发这些payload的远程代码执行。最终,攻击者会用服务器的资源进行加密货币挖矿,而攻击者使用的竟然只是一张Scarlett Johannsson照片。
图1:StickyDB蜜罐网络环境
远程代码执行和避免DAM检测
PostgreSQL有一个metasploit模块来与操作系统之间进行交互,攻击者所用的方法与之类似,用lo_export函数将二进制文件复制到硬盘中来创建payload。有一点小变化是插入lo_export函数是pg_proc目录的入口而不是直接调用。这是为了躲过一些数据库审计监控(DMA)措施,DMA会严密监控lo_export这样的特权操作。所以用obj6440002537是对lo_port的非直接调用(图2)。
图2:对lo_export非直接调用来避免被检测到
这样攻击者就可以用一个简单的函数fun6440002537来执行本地系统命令了。该SQL函数是对C语言函数sys_eval调用的封装,sys_eval是tmp406001440中的一个输出函数,是从SQL客户端调用shell命令的代理。
攻击的下一步是侦查和信息收集。首先执行lshw -c video和cat /proc/cpuinfo来获取GPU的详细信息。而收集GPU信息的目的是为了加密货币挖矿。
图3:检查GPU信息
图4:检查CPU详情
到目前为止,攻击者已经获取了数据库的访问权限,确定了远程代码执行的方法,并可以避免被DAM检测到,还获取了系统GPU的信息。那么做这些的目的就是为了下载一张Scarlett Johansson的照片?
恶意软件payload伪装成Scarlett Johansson照片
攻击者真是越来越有创意了。在本次攻击中,攻击者想要用户下载最新的恶意代码,然后就把图片放在imagehousing.com上,imagehousing是一个图片保存和共享的合法网站。但payload保存在二进制文件中,而且并不是图片。如果更改恶意文件扩展名,上传到服务器时可能会被拒绝,因为并不是有效的图片,不可预览。因此,攻击者把恶意二进制代码加入到真实的Scarlett Johansson的一张可爱的照片中。这样,上传时就可以通过检测,并且可以预览,但是payload却保存其中了。
图5:含有payload的图片,打开时看起来是真实的图片
恶意二进制代码就在她的左肘部。
研究人员联系了imagehousing.com,目前该图片已被删除。
从下载图片到挖矿
用wget可以下载该图片,用dd可以提取图片中的可执行文件,然后对新创建的文件x4060014400设定执行权限(chmod 777)。最后一步是运行新提取的payload。
图6:用SQL下载图片、提取二进制payload并执行
x4060014400文件会创建另外一个可执行文件s4060014400,该文件的目标是进行门罗币挖矿,门罗币池位于https://monero.crypto-pool.fr/, IP为 163.172.226.218 (图 7)。攻击者的门罗币地址目前已经有312.5XMR了,价值超过9万美元。门罗币地址为
4BBgotjSkvBjgx8SG6hmmhEP3RoeHNei9MZ2iqWHWs8WEFvwUVi6KEpLWdfNx6Guiq5451Fv2SoxoD7rHzQhQTVbDtfL8xS
图7:SQL中的挖矿statement
最后一步,清除痕迹。
图8:清除文件痕迹
从攻击者的角度看,任务已经完成了。
反病毒软件VS恶意图片
那么反病毒程序可以识别这类恶意图片吗?
我们用Google VirusTotal测试了60种反病毒软件对这次攻击中的3种形式的挖矿机,分别是恶意图片所在的URL,恶意图片和加密货币挖矿机。
· URL检测结果:只有1个反病毒软件报告是恶意软件的警告;
· 恶意图片检测结果:3个反病毒软件警告是恶意挖矿机;
· 恶意图片中提取的加密货币矿机的检测结果:18个反病毒软件成功检测。
图9:1个反病毒软件检测到恶意URL
图10:3个反病毒软件检测到恶意图片
图11:18个反病毒软件检测到恶意挖矿机
将二进制代码添加到合法文件中(图片、文档等)来创建图片的文件是一种很古老的方法,但却能绕过大多数的反病毒软件,这是很令人惊讶的。
创建这样的合成文件是非常简单的:
Linux: cat myExecutableFile >> myImageFile.png Windows: type myExecutableFile.exe >> myImageFile.png
攻击者怎么找到PostgreSQL数据库?
如果攻击者在本地网络中,就可以用Nmap这样的工具在域内发现PostgreSQL实例。但攻击者怎么样发现更简单的目标呢?那些暴露出的PostgreSQL数据库呢?实际上AWS上至少有71万的数据库是暴露的。攻击者发现这些暴露的数据库是非常容易的,然后可以用暴力破解来进入数据库然后应用一些前面的描述的技术。
图12: 71万PostgreSQL实例有公网IP地址
预防指南
· 关注对lo_export的直接调用和通过pg_proc的间接调用;
· 注意对C语言二进制文件调用的函数(图2);
· 用防火墙拦截数据库到互联网的流量;
· 确保数据库没有分配公网IP地址。如果分配了公网IP,需要限制能够访问的主机。