一台没跑业务的备用服务器 CPU 常驻 99%——被当矿机了。以下是复盘与溯源。
0x01 排查三板斧:top 看不到就换工具
① top 看不到进程:木马改 /etc/ld.so.preload,强制加载 sshdD.so,top/ps/ls 的 libc 函数(readdir 一类)被劫持——进程列表被过滤。
② busybox 静态编译,不走 ld.so.preload 链路,busybox top 看到真实进程列表。
③ 持久化必在启动项:进程能藏,开机总要自启——crontab -l 一眼命中:
@reboot /var/log/log > /dev/null 2>&1 & disown
/var/log/log 是伪装成日志的二进制,file 一验即穿;沙箱行为:连矿池、下载更新、改 ld.so.preload。
0x02 清理清单(对应劫持型木马)
顺序:先断持久化再杀进程,否则看门狗拉起:
# 1. 切断自启与 preload(恢复展示层)
crontab -r # 或编辑删除 @reboot 行;再排查 /etc/cron.*、systemd timer
echo > /etc/ld.so.preload # 清空强制预加载(先 mv 备份取证)
rm -f /var/log/log # 删载荷(先留副本)
# 2. 杀进程树
busybox top # 拿真实 PID
kill -9 <pid> # 杀不掉查 /proc/<pid>/exe 是否为已删除文件(挂载型)
# 3. 排查同类落点 + 复盘入口
grep -rE "curl|wget|base64" /etc/cron* /var/spool/cron/
last ; cat /root/.bash_history ; cat /var/log/secure | grep Accepted
同应急响应篇:断网+杀毒不算应急,要答出”怎么进来的、还有没有同类后门”。
0x03 进阶:用 auditd 抓”守护进程”的真身
恶意文件(如 abc)杀掉又复活——谁在守护它?
# 1. 定位文件真实路径
ls -l /proc/$(pgrep abc)/exe
# 2. 加 audit 规则监控"执行"动作
auditctl -w /tmp/.hidden/abc -p x -k abc_execution
# 3. 等它再次被拉起,读日志
ausearch -k abc_execution -ts recent
日志关键字段是 ppid(父进程 ID):
type=SYSCALL ... ppid=1234 pid=5678 ... comm="bash" exe="/usr/bin/bash" key="abc_execution"
顺藤摸瓜:ps -fp 1234 → /proc/1234/exe → cat /proc/1234/cmdline——守护进程现形(落点:被篡改的服务、另一个 cron、rc.local、被替换的 sshd)。
0x04 反思
预防:/etc/ld.so.preload 纳入文件完整性监控;应急箱常备静态编译的 busybox/lsof。