Linux 挖矿病毒应急响应:从 top 异常到 chattr 恢复的 5 步排查手册
当服务器CPU突然飙升至100%,而top命令却显示不出异常进程时,有经验的运维工程师会立刻意识到:这很可能遭遇了挖矿病毒。不同于普通恶意程序,现代挖矿病毒已形成完整的对抗链——从篡改系统命令、建立持久化后门到隐藏进程,甚至还会删除关键恢复工具。本文将分享一套经过实战验证的排查框架,涵盖从异常识别到彻底清除的全流程。
1. 异常识别与紧急处置
典型入侵迹象往往表现为:
- CPU使用率异常高但
top显示正常 - 服务器响应缓慢甚至服务中断
- 安全组出现非常规外联记录(如3333、5555等矿池端口)
- 系统命令(如
ps、netstat)输出结果异常
紧急止损三步骤:
网络隔离:立即修改安全组规则,仅保留SSH等管理端口对可信IP开放
# 查看活跃连接 ss -antp | grep -E '3333|5555|7775' # 临时阻断出站连接 iptables -P OUTPUT DROP进程初筛:使用未被篡改的命令查找异常进程
# 通过proc目录直接检索 ls -l /proc/*/exe | grep deleted # 按CPU排序查看 ps -eo pid,ppid,cmd,%cpu --sort=-%cpu | head -n 20备份关键证据:
# 保存进程树快照 pstree -apn > /tmp/process_tree.log # 记录所有打开文件 lsof +L1 > /tmp/deleted_files.log
注意:避免直接杀死进程,某些变种会触发自毁机制导致取证困难
2. 系统命令恢复实战
当发现top、ps等命令输出异常时,大概率遭遇了动态链接库劫持或二进制替换。以下是恢复方案:
场景A:动态库劫持
# 检查预加载库 cat /etc/ld.so.preload # 临时解除劫持 echo "" > /etc/ld.so.preload ldconfig场景B:二进制替换(以top为例)
# 验证文件完整性 rpm -Vf /usr/bin/top # 从同版本系统拷贝原始文件 scp root@healthy_host:/usr/bin/top /usr/bin/top.orig # 权限修复 chmod 755 /usr/bin/top.orig mv /usr/bin/top.orig /usr/bin/top对抗chattr缺失的三种解决方案:
| 方法 | 适用场景 | 操作步骤 |
|---|---|---|
| 同系统文件拷贝 | 有相同环境的健康主机 | scp root@backup:/usr/bin/chattr /tmp/ && chmod +x /tmp/chattr |
| 静态编译版本 | 无可用主机但可下载 | wget https://example.com/chattr.static -O /usr/bin/chattr |
| 源码编译 | 开发环境完备 | gcc -static chattr.c -o chattr |
3. 深度排查技术
进程隐藏对抗技巧:
# 使用unhide检测隐藏进程 unhide proc # 通过sysdig监控系统调用 sysdig -c topfiles_bytes # 检查内核模块 lsmod | grep -i evil持久化后门排查清单:
定时任务:
# 检查所有任务文件 find /etc/cron* -type f -exec ls -la {} \; # 特别关注每小时任务 grep -r "wget\|curl" /etc/cron.hourly/服务项:
# 列出所有服务单元 systemctl list-unit-files --state=enabled # 检查可疑service文件 grep -l "AliyunDuns" /etc/systemd/system/*SSH后门:
# 检查authorized_keys stat /root/.ssh/authorized_keys # 查看最近登录 lastlog | grep -v "Never"
病毒家族特征速查表:
| 家族名 | 特征文件 | 对抗命令 |
|---|---|---|
| Skidmap | /lib/systemd/systemd-* | rm -f /usr/bin/systemd-cgroup |
| Kinsing | /tmp/kinsing | chattr -ia /etc/ld.so.preload |
| XMRig | /opt/systemd-private | systemctl disable xmrig |
4. 彻底清理指南
分步清理方案:
解除文件锁定:
# 递归解除/var目录锁定 chattr -R -ia /var/spool/cron清理病毒文件:
# 查找最近修改的可执行文件 find /usr/bin -type f -mtime -7 -exec ls -la {} \; # 批量删除挖矿相关文件 locate -b "xmrig" | xargs rm -rf用户账户处理:
# 检查异常用户 awk -F: '($3 < 1000) {print $1}' /etc/passwd # 删除后门用户 userdel -r malicious_user网络层清理:
# 清除异常路由 ip route show | grep -v via | awk '{print $1}' | xargs -I {} ip route del {}
自动化辅助工具:
# 使用clamav扫描 freshclam && clamscan -r --remove / # 安全狗查杀 safedog -a scan -m 35. 加固与监控
关键加固措施:
SSH加固:
# 禁用密码登录 echo "PasswordAuthentication no" >> /etc/ssh/sshd_config # 限制登录IP echo "AllowUsers root@192.168.1.*" >> /etc/ssh/sshd_config文件监控:
# 安装aide并初始化 aideinit # 每日校验 echo "0 3 * * * /usr/sbin/aide --check" > /etc/cron.d/aide-check实时防护:
# 安装sysdig监控 csysdig -vcontainers # 设置文件防篡改 chattr +i /etc/crontab
长效监控方案:
# 监控CPU异常的脚本 while true; do [ $(top -bn1 | grep "Cpu(s)" | awk '{print $2}') -gt 90 ] && \ alert "High CPU usage detected!" sleep 30 done在最近处理某金融客户案例时,发现攻击者不仅替换了chattr,还修改了ld.so.preload导致常规检测失效。通过对比正常系统的/proc/self/maps最终定位到恶意库文件。这提醒我们:对抗现代挖矿病毒需要保持命令的多样性验证,任何单一检测方式都可能被绕过。