Linux 挖矿病毒应急响应:从 chattr 命令恢复、top 进程隐藏到 Redis 后门清理的 5 步实战
2026/7/13 2:50:56 网站建设 项目流程

Linux挖矿病毒深度清理实战:从系统修复到持久化防御

1. 入侵特征识别与应急响应准备

当服务器CPU使用率异常飙升却无法通过top命令定位进程时,这往往是挖矿病毒的第一个明显征兆。这类恶意程序通常会实施三重隐藏策略:篡改系统监控命令、锁定关键文件属性、植入动态链接库劫持。我曾处理过一台CentOS 7服务器,其top命令被替换为过滤版本,原始程序被重命名为top.original,同时/etc/ld.so.preload中注入了恶意so文件实现进程隐藏。

典型入侵痕迹检查清单

  • 异常计划任务(/var/spool/cron/root中出现非常规URL下载)
  • 系统命令文件大小异常(比较/usr/bin/top与正常服务器的文件大小)
  • 存在非常规隐藏目录(如/var/tmp/.crypto/etc/.ssh
  • SSH authorized_keys中出现未知公钥
  • 新增异常用户(检查/etc/passwd中UID为0的非标准账户)
# 快速检查命令完整性 md5sum /usr/bin/top /usr/bin/ps /usr/bin/netstat | awk '{print $1}' > /tmp/cmd_md5.log # 与干净系统对比差异 diff /tmp/cmd_md5.log clean_cmd_md5.log

2. 系统命令恢复与进程排查

当发现chattr命令被删除时,可通过同架构的干净系统进行恢复。我曾遇到一个案例,攻击者不仅删除了chattr,还将/usr/bin目录设置为不可修改。此时需要先通过busybox静态编译版本解锁:

# 使用busybox解除目录锁定 wget https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/busybox-x86_64 chmod +x busybox-x86_64 ./busybox-x86_64 chattr -i -a /usr/bin/

进程排查进阶技巧

  1. 通过strace追踪系统调用:
    strace -f -p $(pidof ddns) 2>&1 | grep 'open('
  2. 检查内核线程:
    ps -ef | grep -E 'kworker/[0-9]+' | grep -v grep
  3. 网络连接反查:
    lsof -iTCP -sTCP:ESTABLISHED | grep -E 'tmp|var'

3. 病毒文件清理与权限修复

清理过程中最常见的陷阱是残留的守护进程。某次清理后系统仍存在异常流量,最终发现病毒通过systemd服务实现了持久化:

# 检查异常服务单元 systemctl list-unit-files | grep -E 'crypto|ddns|httpd' find /etc/systemd/system/ -type f -mtime -7

关键清理步骤

  1. 解除文件锁定:
    chattr -R -ia /var/tmp/.crypto /etc/zzh*
  2. 清理SSH后门:
    rm -f /root/.ssh/authorized_keys /home/*/.ssh/authorized_keys
  3. 修复命令替换:
    rpm -qf /usr/bin/top | xargs rpm --reinstall

4. Redis后门分析与加固

多数挖矿病毒通过未授权Redis入侵,建议进行深度加固:

Redis安全配置对比表

风险配置安全方案实施命令
无密码认证启用requirepassconfig set requirepass [复杂密码]
默认端口6379修改为非常用端口port 6380
监听所有接口仅监听内网bind 127.0.0.1
无命令限制禁用高危命令rename-command FLUSHALL ""
# Redis入侵痕迹检查 redis-cli config get dir redis-cli config get dbfilename # 检查是否存在异常键值 redis-cli --scan --pattern '*crypto*'

5. 防御体系构建与监控方案

基于ATT&CK框架的持久化防御策略:

  1. 文件完整性监控

    # 监控系统命令变更 auditctl -w /usr/bin/ -p wa -k system_binaries auditctl -w /etc/ld.so.preload -p wa -k ld_preload
  2. 行为阻断规则

    # 防止挖矿程序执行 iptables -A OUTPUT -p tcp --dport 3333 -j DROP iptables -A OUTPUT -p tcp --dport 5555 -j DROP
  3. 入侵检测脚本示例

    #!/usr/bin/env python3 import psutil, socket from datetime import datetime SUSPICIOUS_PATHS = ('/tmp/', '/var/tmp/') MINER_PORTS = {3333, 5555, 9999} def check_connections(): for conn in psutil.net_connections(): if conn.status == 'ESTABLISHED' and conn.radar.port in MINER_PORTS: print(f"[!] 检测到矿池连接: {conn.pid}@{conn.laddr} -> {conn.radar}") process = psutil.Process(conn.pid) print(f" 进程路径: {process.exe()} 启动时间: {datetime.fromtimestamp(process.create_time())}")

在完成所有清理操作后,建议使用rkhunter进行完整性检查,并建立定期扫描机制。某金融客户通过以下方案实现了零复发:

  • 每周执行安全基线检查
  • 关键目录设置inotify监控
  • 所有系统更新通过自动化平台统一推送

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询