某日上班,登服务器后编译Android ROM,增量编译时间比平时长了 3~4 倍,htop 看一下
好奇怪,怎么前 36 个核是满的,过了半个小时看,还是这样。有点预感不妙。遂登录另外一个同配置用户只有两三个的服务器,也是前 36 个核被占满,并且看不到什么进程占用了CPU多半是中招了。
查了netstat,有两个奇怪的连接,但是不显示进程名和PID。通过网络搜索和供应商的数据得知,这两个IP是矿池的IP。确认是中挖矿病毒了。
看一下开机启动项
确认有一个奇怪启动项,遂以root权限编辑之,提示Read only,无法强行保存,以root权限移除 /usr/bin/52657500,奇了怪了,我这root权限是假的?
由于平时工作是做安卓的,这种状态我以为我的权限被动了,不是真正的 root 权限了。于是到清华软件源下了 ubuntu 22.04 desktop 镜像,做成启动盘直奔机房,从U盘启动服务器,尝试编辑 rc.local
,仍然是 read only,rm -f 也是提示操作不允许。遂翻了翻自己的脑袋,想起来以前看过一篇文章:CPU深夜狂飙,一帮大佬都傻眼了···
遂得知一个命令 unhide
,输入 api install unhide
, root 权限跑 unhide proc
一看,确实有不少隐藏进程(几十个)
1 | Found HIDDEN PID: 27589 |
咨询另外一个同事,再结合百度搜索“root 权限无法编辑文件”,得知2个命令 lsattr
和 chattr
可以用于禁止文件修改。敲进去提示没有此命令,需要安装e2fsprogs,然后输入 apt install e2fsprogs
提示已安装,遂推得命令被删掉了,于是找另外一个正常运行的服务器拷了命令过来(当时脑袋宕机了,如果有网络的话,其实这里可以直接apt install --reinstall e2fsprogs
的)。然后root权限输入
1 | chattr -i /etc/rc.local |
之后终于可以编辑 rc.local
了,删除启动项,重启。吧唧,还是占满 36 个核。看起来病毒还有别的启动方式。
看一下服务sudo systemctl list-unit-files
,没看到可疑的东西,看一下 cron crontab -l
,也没有计划任务,奇了怪了,这进程怎么启动的。到这里线索就断了,一直在网上看查找开机启动项和CPU挖矿的信息。看到这篇推文 实战|又一起挖矿木马排查 的时候留意到一个信息
这里用systemctl status $pid
查看到了这个进程的服务信息,遂用同样的方式,用上面查到的隐藏进程,输进去,好家伙,终于出来了:
这里看到服务在 /lib/systemd/system/yayaya9fdf90d8
,进程在 /usr/lib/x86_64-linux-gnu/yayaya8e658d04
。删进程之前备份一下,奇怪的事情又来了。明明存在的文件,但是 ls 看不到它。
把服务和进程备份好,删掉重启。CPU终于安静下来了。并且重启前不显示的文件也能显示了。
以关键字yayaya 病毒
搜到了几乎是中文互联网上唯一的记录:yayaya Miner挖矿木马分析。
根据yayaya Miner挖矿木马分析和我们的处理记录,总结如下
- 使用 chattr 来让不可修改的文件变得可修改,并清理 rc.local 里面的奇怪启动项;
sudo rmmod nonono
(移除用于隐藏前缀的内核模块);- 查看
/lib/systemd/system/
里面以yayaya
开头的 service; sudo systemctl stop yayayaxxxxx.service
;sudo systemctl disable yayayaxxxxx.service
;- 清理 crontab 里面奇怪的定时任务;
- 删除
/etc/sysconfig/yayaya
;
后续继续改进的地方: - 修改 root 及有管理员权限的用户密码,并禁止设置弱密码(被感染的服务器都有大量的来自局域网的登录失败记录,与上面推文中的ssh爆破行为一致);
- 禁用 ssh 密码登录;
- 可以不连接外网的服务器断开外网连接(排查初期,是通过断开网络外网让病毒不再占用CPU的);
本次排查病毒从 2023.07.26 下午开始,到 2023/07.28 早上确认到原因。