挖矿木马清除日记

背景#

一台 centos 服务器,今日发现 cpu 和 load 都增高了一些,top 命令查看发现有一个进程 cpu 占用 80% 多,猜测多半是挖矿木马(未确定),准备进行清理工作

清理遇到的两个问题#

  1. kill -9 可以杀死此进程,然而立马生成了一个新的进程出来
  2. 在 /etc/cron.hourly/ 有一个异常定时任务配置,文件名是 xxx.sh,删除后立马生成了一个新的配置文件 (文件名也变了)

找到问题 2 的源头#

参考文章谁动了我的文件 —— 使用 audit 监控文件和目录,用 auditd 监控 /etc/cron.hourly/ 文件变动,先删除 xxx.sh,然后通过 ausearch 命令找到是谁又生成了一个新的配置文件,最终定位到一个进程,结果发现就是问题 1 的进程产生的!那么问题 1 的源头如何找呢?也就是有个守护进程,在进程被杀死后立马生成一个新的马甲出来。那守护进程是谁呢?

找到问题 1 的守护进程#

还是可以使用 auditd,参考 How to use auditd to monitor a specific SYSCALL 监控所有进程的执行 fork 或者 clone 的系统调用,具体步骤如下

vim /etc/audit/rules.d/audit.rules
# 在文件第二行增加如下一行配置,表示监控clone,fork,vfork,kill这四个系统调用
-a always,exit -F arch=b64 -S clone,fork,vfork,kill -F key=fork_rule

# 使配置生效
augenrules --load
# 查看生效的配置
auditctl -l

# 执行命令杀死可疑的进程(杀死后可以看到又出现新的进程)
pgrep -P 1|xargs -i file /proc/{}/exe|grep -v 'systemd-journald\|lvmetad\|systemd-udevd\|auditd\|abrtd\|lsmd\|hypervvssd\|abrt-watch-log\|rngd\|deleted\|python\|dbus-daemon\|php-fpm\|nginx\|pure-ftpd\|NetworkManager\|crond\|sshd\|systemd-logind\|hypervkvpd\|mysqld\|agetty\|directory'|grep -Eo [0-9]+|xargs kill -9

# 查看监控日志/var/log/audit/audit.log可以发现如下日志
type=SYSCALL msg=audit(1642486256.950:327876): arch=c000003e syscall=56 success=yes exit=50485 a0=1200011 a1=0 a2=0 a3=7fda15a1dc10 items=0 ppid=1 pid=50484 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="systemd" exe="/usr/lib/systemd/systemd" key="fork_rule"

通过上述步骤,可以发现守护进程是 systemd,即这些木马是利用的 systemd 来实现的守护进程。

本作品采用《CC 协议》,转载必须注明作者和本文链接