自学内容网 自学内容网

Linux 服务器挖矿木马防护实战:快速切断、清理与加固20250114

Linux 服务器挖矿木马防护实战:快速切断、清理与加固

引言

挖矿木马作为一种常见的恶意软件,对服务器资源和安全构成严重威胁。据安全机构统计,2023 年全球约 45%的 Linux 服务器遭受过挖矿木马攻击,平均每台被感染服务器每月造成 300-500 美元的额外电费支出。

本文将围绕三个核心环节,详细讲解应对挖矿木马的完整防护方案:

  1. 快速响应:第一时间切断攻击路径
  2. 全面清理:系统性清除感染源
  3. 系统加固:建立长效防护机制

在这里插入图片描述

一、快速响应:切断攻击路径

1.1 网络层面阻断

💡 首要任务是切断攻击者的通信渠道,防止进一步的数据泄露和控制指令。

# 1. 识别可疑连接(常见矿池端口)
netstat -antp | grep -E ":(3333|14444|14433|3357)"

# 2. 阻断攻击IP(注意保存规则防止重启失效)
iptables -A INPUT -s <攻击IP> -j DROP
iptables -A OUTPUT -d <攻击IP> -j DROP
iptables-save > /etc/iptables/rules.v4

1.2 用户权限隔离

🔑 清理受感染账户的访问权限,防止攻击者重新登录。

# 1. 修改用户密码
passwd <用户名>

# 2. 清理SSH密钥(为什么要这样做?防止攻击者留下后门)
find / -name "authorized_keys" -exec rm -f {} \;

# 3. 限制SSH访问(仅允许特定IP)
echo "sshd: 192.168.1.0/24" >> /etc/hosts.allow
echo "sshd: ALL" >> /etc/hosts.deny

1.3 初步进程清理

⚡ 快速终止可疑进程,为后续深入清理争取时间。

# 自动化清理脚本(初步应急)
cat > /tmp/quick_clean.sh <<'EOF'
#!/bin/bash
# 清理常见挖矿进程
ps aux | grep -i "kswapd0\|kdevtmpfsi\|cryptonight\|minerd" | \
    awk '{print $2}' | xargs -I {} kill -9 {}
# 清理可疑网络连接
netstat -antp | grep -E ":(3333|14444|14433|3357)" | \
    awk '{print $7}' | cut -d'/' -f1 | xargs -I {} kill -9 {}
EOF
bash /tmp/quick_clean.sh

二、全面清理:系统性清除感染源

2.1 深度进程清理

🔍 通过多维度分析,确保不遗漏任何可疑进程。

# 1. CPU异常进程排查
ps aux --sort=-%cpu | head -10

# 2. 可疑进程溯源(进阶技巧)
for pid in $(ps aux | awk '$3>80.0{print $2}'); do
    echo "=== PID $pid ==="
    ls -l /proc/$pid/exe
    ls -l /proc/$pid/cwd
    strings /proc/$pid/cmdline
done

2.2 定时任务清理

⏰ 攻击者常用定时任务实现持久化,必须彻底清理。

# 综合清理脚本
cat > /usr/local/bin/cron_clean.sh <<'EOF'
#!/bin/bash
# 1. 清理用户定时任务
for user in $(cut -f1 -d: /etc/passwd); do
    crontab -u $user -l 2>/dev/null | grep -v "wget\|curl" | crontab -u $user -
done

# 2. 检查系统定时任务
for cronfile in /etc/cron.d/* /etc/crontab /var/spool/cron/*; do
    if [ -f "$cronfile" ]; then
        cp "$cronfile" "$cronfile.bak"
        sed -i '/wget\|curl/d' "$cronfile"
    fi
done
EOF
chmod +x /usr/local/bin/cron_clean.sh

三、多服务器场景应急处理

3.1 通用应急脚本设计

🔄 面对多台服务器同时被攻击的情况,需要自动化工具提高响应效率。
malware_cleanup.sh

#!/bin/bash
# 普通用户清理木马脚本 (最终优化版)
# 功能:彻底清理恶意任务、文件和配置

set -euo pipefail

LOGFILE="$HOME/malware_cleanup_$(date +%Y%m%d%H%M%S).log"

log() {
  echo "[INFO] $1" | tee -a "$LOGFILE"
}

# 查询模块
query_high_cpu_processes() {
  log "查询 CPU 占用高的进程..."
  ps -u "$USER" -o pid,comm,args,%cpu --sort=-%cpu | head -n 10 | tee -a "$LOGFILE"
}

query_crontab() {
  log "查询用户 crontab..."
  crontab -l 2>/dev/null | tee -a "$LOGFILE" || log "未设置 crontab 任务"
}

# 清理模块
backup_crontab() {
  log "备份用户 crontab..."
  crontab -l > "$HOME/crontab_backup_$(date +%Y%m%d%H%M%S).bak" 2>/dev/null || log "未发现 crontab 任务"
}

clean_crontab() {
  log "清理用户 crontab 中的恶意任务..."
  crontab -l | grep -vE "wget|curl|/tmp|/var/tmp|pwndns" | crontab - || log "crontab 清理完成"
  log "清理后用户 crontab 内容如下:"
  crontab -l 2>/dev/null | tee -a "$LOGFILE" || log "未设置 crontab 任务"
}

validate_and_terminate_process() {
  local pid="$1"
  log "验证进程 PID=$pid..."

  # 检查进程运行命令路径
  local cmdline=$(cat /proc/"$pid"/cmdline 2>/dev/null || echo "无法读取")
  log "运行命令路径: $cmdline"

  # 检查进程打开的文件和网络连接
  log "检查进程 PID=$pid 的打开文件和网络连接..."
  lsof -p "$pid" | tee -a "$LOGFILE" || log "无法获取 PID=$pid 的文件信息"

  # 判断是否包含恶意路径
  if [[ "$cmdline" =~ "/tmp" || "$cmdline" =~ "/var/tmp" || "$cmdline" =~ "-bash" ]]; then
    log "确认 PID=$pid 是恶意进程,尝试终止..."
    kill -TERM "$pid" 2>/dev/null || log "无法优雅终止 PID=$pid,尝试强制终止"
    sleep 0.5
    kill -9 "$pid" 2>/dev/null || log "无法强制终止 PID=$pid,请人工检查"
    kill -0 "$pid" 2>/dev/null && log "PID=$pid 未成功终止" || log "PID=$pid 已成功终止"
  else
    log "PID=$pid 未检测到明显异常,但建议人工确认"
  fi
}

terminate_high_cpu_process() {
  log "获取当前用户 CPU 占用最高的进程..."
  local pid=$(ps -u "$USER" -o pid --sort=-%cpu | awk 'NR==2 {print $1}')

  if [ -z "$pid" ]; then
    log "未找到高 CPU 占用的进程,退出清理。"
    return
  fi

  validate_and_terminate_process "$pid"
}

clean_malicious_files() {
  log "清理恶意文件和目录..."
  for file in /tmp/.pwn /tmp/-bash /var/tmp/.update /var/tmp/.systemd; do
    if [ -e "$file" ]; then
      log "删除文件或目录 $file"
      chattr -i "$file" 2>/dev/null || true
      rm -rf "$file"
    fi
  done
}

clean_shell_configs() {
  log "清理 shell 配置文件..."
  for shell_file in "$HOME/.bash_profile" "$HOME/.bashrc" "$HOME/.profile"; do
    if [ -f "$shell_file" ]; then
      log "检查并清理 $shell_file"
      sed -i '/\/tmp\/-bash/d' "$shell_file"
      sed -i '/pw\.pwndns\.pw/d' "$shell_file"
      sed -i '/cp -f -r/d' "$shell_file"
    fi
  done
}

main() {
  case "$1" in
    query)
      query_high_cpu_processes
      query_crontab
      ;;
    clean)
      backup_crontab
      clean_crontab
      terminate_high_cpu_process
      clean_malicious_files
      clean_shell_configs
      ;;
    *)
      log "用法: $0 {query|clean}"
      exit 1
      ;;
  esac
}

main "$@"


1.清理恶意进程:
•自动识别高 CPU 占用进程。
•使用 validate_and_terminate_process 验证命令路径是否包含恶意目录 /tmp 或 /var/tmp,并强制终止。
2.清理恶意文件:
•针对目录如 /tmp/.pwn 增加了 rm -rf 的处理逻辑。
3.清理 Crontab:
•先备份后清理,避免误操作。
•通过 grep -vE 排除常见恶意任务。
4.清理配置文件注入:
•针对 .bash_profile、.bashrc 等文件,删除可能的恶意代码行。

3.2 批量部署与执行

🚀 使用 Ansible 实现自动化部署和执行。

# playbook.yml
---
- hosts: all
  become: yes
  tasks:
    - name: 复制应急脚本
      copy:
        src: cleanup_script.sh
        dest: /tmp/cleanup_script.sh
        mode: "0755"

    - name: 执行清理脚本
      shell: /tmp/cleanup_script.sh
      register: cleanup_result

    - name: 收集清理日志
      fetch:
        src: /var/log/malware_cleanup_*.log
        dest: logs/

3.3 执行效果监控

# 批量检查清理结果
ansible all -m shell -a "grep 'cleaned' /var/log/malware_cleanup_*.log"

# 检查系统状态
ansible all -m shell -a "top -bn1 | head -5"

五、最佳实践与经验总结

5.1 核心经验

  1. 快速响应最关键
    • 第一时间切断攻击者通信
#!/bin/bash
# 切断常见挖矿木马的通信端口和攻击者 IP
SUSPICIOUS_PORTS=("3333" "14444" "14433" "443")
for port in "${SUSPICIOUS_PORTS[@]}"; do
    netstat -antp | grep ":$port" | awk '{print $7}' | cut -d'/' -f1 | xargs -I {} kill -9 {}
done

# 动态添加阻断规则(IP 示例)
iptables -A INPUT -s 192.168.1.100 -j DROP
iptables -A OUTPUT -d 192.168.1.100 -j DROP
iptables-save > /etc/iptables/rules.v4
  • 保留必要的取证信息
#!/bin/bash
# 保存可疑进程、网络连接和关键文件信息
FORENSICS_DIR="/var/log/forensics"
mkdir -p $FORENSICS_DIR

# 保存可疑进程信息
ps aux | grep -E "kswapd0|kdevtmpfsi|cryptonight|minerd" > "$FORENSICS_DIR/suspicious_processes.log"

# 保存可疑网络连接
netstat -antp | grep -E ":(3333|14444|14433)" > "$FORENSICS_DIR/suspicious_connections.log"

# 保存近期修改文件信息
find / -type f -mtime -7 > "$FORENSICS_DIR/recently_modified_files.log"
  1. 清理必须彻底
    • 检查所有可能的持久化途径
#!/bin/bash
# 检查定时任务、启动项和动态链接库的持久化方式
LOGFILE="/var/log/persistence_check.log"

echo "检查定时任务:" | tee -a $LOGFILE
for user in $(cut -f1 -d: /etc/passwd); do
    crontab -u $user -l 2>/dev/null | tee -a $LOGFILE
done

echo "检查系统启动项:" | tee -a $LOGFILE
systemctl list-unit-files --type=service | grep enabled | tee -a $LOGFILE

echo "检查动态链接库预加载:" | tee -a $LOGFILE
cat /etc/ld.so.preload | tee -a $LOGFILE
  • 使用自动化工具提高效率
#!/bin/bash
# 自动清理常见感染路径和文件
INFECTED_PATHS=(
    "/tmp/.pwn"
    "/tmp/-bash"
    "/var/tmp/.system*"
    "~/.bash_profile"
    "~/.bashrc"
)
for path in "${INFECTED_PATHS[@]}"; do
    if [ -e "$path" ]; then
        chattr -i $path 2>/dev/null
        rm -rf $path
        echo "已清理: $path"
    fi
done
  1. 预防胜于治疗
    • 建立完善的监控体系:结合 rkhunter 和 auditd 等工具进行实时监控:
 # 安装和配置 rkhunter
apt install rkhunter
rkhunter --update
rkhunter --check --sk
# 配置 auditd 监控关键文件
apt install auditd
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/shadow -p wa -k shadow_changes
auditctl -w /etc/ssh/sshd_config -p wa -k ssh_config_changes
# 定期生成审计报告
ausearch -k passwd_changes > /var/log/audit_passwd.log
ausearch -k ssh_config_changes > /var/log/audit_ssh.log
  • 定期进行安全审计
    借助 lynis 等工具进行全面安全检查:
# 安装 lynis
apt install lynis
# 执行安全审计
lynis audit system > /var/log/lynis_audit.log
# 检查审计报告
grep "VULNERABLE" /var/log/lynis_audit.log

5.2 常见误区

  1. ❌ 仅清理表面进程
  2. ❌ 忽略系统加固
  3. ❌ 未建立长期监控

5.3 未来建议

  1. 部署堡垒机集中管理
  2. 使用容器技术隔离应用
  3. 建立安全基线标准

参考资料

  1. NIST 网络安全框架
  2. CIS Linux 安全基线
  3. Linux 恶意代码分析手册
  4. Fail2ban 官方文档

原文地址:https://blog.csdn.net/Narutolxy/article/details/145134468

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!