一次Ubuntu服务器感染挖矿病毒的处理概要
一次Ubuntu服务器感染挖矿病毒的处理概要
起因
某日,在更新服务器上运行于 Docker 容器中的业务后台时,进程不断被系统 Killed
,导致无法正常运行。即使将业务后台版本回退,也未能解决问题。
排查流程
最初怀疑是否由于 OOM(Out of Memory)导致进程被终止。通过 dmesg | grep -i 'killed'
检查,结果并未出现相关日志,初步排除了 OOM 的可能。
随后尝试重新启动容器,观察进程状态,发现进程在最初能够正常运行,但数十秒后突然被 Killed
。怀疑容器可能配置了资源限制,然而在查询配置文件后并未发现类似限制。将容器中的业务后台放到主机运行,依旧被 Killed
,因此可以排除 Docker 环境因素。
观察业务后台启动时的资源占用,发现其内存占用并不高,但 CPU 利用率相对较高。由此推测进程被杀可能与 CPU 占用率有关。为验证这一猜想,编写了两个测试脚本:
- 内存脚本:不断申请系统内存并打印当前已分配内存大小,直到进程 OOM。测试结果显示,在达到平台内存上限前,进程并未被
Killed
,由此排除了内存方面导致进程被终止的可能性。 - CPU 脚本:启动一个死循环,占用单个核心 100% 的 CPU 利用率。大约运行 40 秒后,脚本进程被系统
Killed
。因此可以确定,长时间高负载的 CPU 占用会触发进程被系统终止。
这也解释了为何业务后台在更新并重新启动时被 Killed
:重启过程触发了大量资源初始化,CPU 一度占用过高;而在平稳运行期间 CPU 占用率较低,则不会被系统终止。通过进一步调整 CPU 脚本的负载,最终确定当进程的 CPU 利用率超过约 40%-50% 并持续一段时间后,该进程就会被系统杀死。
如此异常的现象引发了对病毒入侵的怀疑(由于不可抗力因素,该服务器使用了弱口令,且默认 22 端口暴露在互联网上)。查看 /var/log/auth.log
后,发现了大量弱口令爆破的记录,并且每隔一分钟就会有一个定时任务打开 root session。使用 top
观察时,发现 CPU 总占用率很高,占用了12个核心中的6个核心,且 CPU 温度也偏高。
然而在 top
中看不到明显的高占用进程,因此推测存在隐藏进程。通过 netstat -antp
查看,发现与 87.***.***.37:3333
的 TCP 连接,该地址位于荷兰,结合 3333 端口常见用于挖矿服务的特征,高度怀疑服务器被挖矿病毒感染。
安装 unhide
工具并扫描后,发现多个指向已被删除路径的可疑隐藏进程。杀死其中一个可疑进程后,所有隐藏进程随即消失,CPU 占用恢复正常,业务后台也不再被 Killed
。
然而仅过了不久,占用率再次升高,隐藏进程重新出现。结合登录日志中一分钟一次 root session的现象,可以推断这是由于 cron 中新增了拉起挖矿进程的定时任务。使用 crontab -l
并未发现异常定时任务,但在 /etc/cron.d/
及其子文件夹中,找到了多个可疑的定时任务脚本,每分钟都会在 /bin
目录下启动同一个可疑可执行文件。
至此可判断,该可执行文件就是最终的病毒文件。清理掉隐藏进程后,手动执行一次该文件,果然再次出现隐藏进程,彻底确认了病毒来源。
后续处理
- 检查所有定时任务文件夹,清理所有可疑定时任务
- 检查系统服务,清理所有可疑系统服务
- 删除病毒文件本体
- 清理
authorized_keys
,防止已被添加不可信的公钥 - 更改默认ssh端口
- 关闭ssh密码登录,统一使用密钥登录,避免爆破