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

news2025/1/17 23:41:55

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 官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2278205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

015: 深度学习之正向传播和反向传播

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 上一节介绍了训练和推理的概念&#xff0c;这一节接着训练和推理的概念讲一下&#xff0c;神经网络的正向传播和反向传播。 正反向传播 其实单看正向传播和反向传播这两个…

梁山派入门指南2——滴答定时器位带操作按键输入(包括GPIO中断)

梁山派入门指南2——滴答定时器&位带操作&按键输入 1. 滴答定时器1.1 滴答定时器简介1.2 相关寄存器1.3 固件库函数 2. 位带操作2.1 位带操作介绍2.2 位带操作的优势2.3 支持位带操作的内存地址2.4 位带别名区地址的计算方式2.5 位带操作使用示例 3 按键输入3.1 独立按…

安全类脚本:拒绝ssh暴力破解

要求如下&#xff1a; 一个小时内&#xff0c;连续密码错误4次。 Linux lastb 命令用于列出登入系统失败的用户相关信息。 实验过程如下&#xff1a; 1. 创建两个IP地址不同的干净环境&#xff0c;分别是&#xff1a;192.168.46.101 Rocky 2 和 192.168.46.120 openEuler 2. 2.…

HugeGraph集群部署

部署HugeGraph集群 最近工作中&#xff0c;需要部署一个HugeGraph的多副本集群&#xff0c;要求一个主节点&#xff0c;两个从节点。由于HugeGraph官网并没有完整的搭建集群实例&#xff0c;所以这里写一篇文章记录自己搭建集群的过程&#xff0c;供自己和大家学习和参考。 注…

SqlSugar连接达梦数据库集群超时或异常缓慢

《SqlSugar配置连接达梦数据库集群》文章中介绍SqlSugar连接达梦数据库集群&#xff0c;只需按下图所示位置添加dm_svc.conf文件&#xff0c;并在SqlSugar的连接字符串中指定服务名即可。   但在使用过程中发现&#xff0c;基于.net 6开发的WebApi&#xff0c;编译为ANYCPU&…

Qt/C++进程间通信:QSharedMemory 使用详解(附演示Demo)

在开发跨进程应用程序时&#xff0c;进程间通信&#xff08;IPC&#xff09;是一个关键问题。Qt 框架提供了多种 IPC 技术&#xff0c;其中 QSharedMemory 是一种高效的共享内存方式&#xff0c;可以实现多个进程之间快速交换数据。本文将详细讲解 QSharedMemory 的概念、用法及…

STM32的集成开发环境STM32CubeIDE安装

STM32CubeIDE - STM32的集成开发环境 - 意法半导体STMicroelectronics

NanoKVM简单开箱测评和拆解,让普通电脑实现BMC/IPMI远程管理功能

Sipeed推出了NanoKVM&#xff0c;简直是没有BMC的台式机和工作站的福音。有了这个就可以轻松实现以往服务器才有的远程管理功能。 NanoKVM 简介 Lichee NanoKVM 是基于 LicheeRV Nano 的 IP-KVM 产品&#xff0c;继承了 LicheeRV Nano 的极致体积 和 强大功能。 NanoKVM 包含…

唐刘:TiDB 的 2024 - Cloud、SaaS 与 AI

2024 年已经过去&#xff0c;在去年我也写过两篇类似的文章&#xff0c;TiDB in 2023 - 一次简单的回顾和 TiDB Cloud in 2023 - 一次简单的回顾&#xff0c;这一次&#xff0c;我准备将 TiDB 和 cloud 一起写&#xff0c;一方面原因是我懒了&#xff0c;另外一个更重要的原因在…

Web端实时播放RTSP视频流(监控)

一、安装ffmpeg: 1、官网下载FFmpeg: Download FFmpeg 2、点击Windows图标,选第一个:Windows builds from gyan.dev 3、跳转到下载页面: 4、下载后放到合适的位置,不用安装,解压即可: 5、配置path 复制解压后的\bin路径,配置环境变量如图: <

Excel 技巧10 - 如何检查输入重复数据(★★)

本文讲了如何在Excel中通过COUNTIF来检查输入重复数据。 当输入重复数据时&#xff0c;显示错误提示。 1&#xff0c;通过COUNTIF来检查输入重复数据 比如下面是想检查不要输入重复的学号。 选中C列&#xff0c;点 Menu > 数据 > 数据验证 在数据验证页面&#xff0c…

IEC103 转 ModbusTCP 网关

一、产品概述 IEC103 转 ModbusTCP 网关型号 SG-TCP-IEC103 &#xff0c;是三格电子推出的工业级网关&#xff08;以下简 称网关&#xff09;&#xff0c;主要用于 IEC103 数据采集、 DLT645-1997/2007 数据采集&#xff0c; IEC103 支持遥测和遥 信&#xff0c;可接…

Unity3d 实时天气系统基于UniStorm插件和xx天气API实现(含源码)

前言 实时天气在Unity3d三维数字沙盘中的作用非常重要&#xff0c;它能够增强虚拟环境的真实感和互动性&#xff0c;实时天气数据的应用可以提供更为精准和直观的天气信息支持&#xff0c;如果真实的数据加上特效、声音和模型反馈会提高产品档次&#xff0c;提高真实感。 目前…

Linux命令行工具-使用方法

参考资料 Linux网络命令&#xff1a;网络工具socat详解-CSDN博客 arm-linux-gnueabihf、aarch64-linux-gnu等ARM交叉编译GCC的区别_aarch64-elf-gcc aarch64-linux-gnu-CSDN博客 解决Linux内核问题实用技巧之-dev/mem的新玩法-腾讯云开发者社区-腾讯云 热爱学习地派大星-CS…

【Flink系列】9. Flink容错机制

9. 容错机制 在Flink中&#xff0c;有一套完整的容错机制来保证故障后的恢复&#xff0c;其中最重要的就是检查点。 9.1 检查点&#xff08;Checkpoint&#xff09; 9.1.1 检查点的保存 1&#xff09;周期性的触发保存 “随时存档”确实恢复起来方便&#xff0c;可是需要我…

【深度学习】关键技术-激活函数(Activation Functions)

激活函数&#xff08;Activation Functions&#xff09; 激活函数是神经网络的重要组成部分&#xff0c;它的作用是将神经元的输入信号映射到输出信号&#xff0c;同时引入非线性特性&#xff0c;使神经网络能够处理复杂问题。以下是常见激活函数的种类、公式、图形特点及其应…

20.<Spring图书管理系统①(登录+添加图书)>

PS&#xff1a;关于接口定义 接口定义&#xff0c;通常由服务器提供方来定义。 1.路径&#xff1a;自己定义 2.参数&#xff1a;根据需求考虑&#xff0c;我们这个接口功能完成需要哪些信息。 3.返回结果&#xff1a;考虑我们能为对方提供什么。站在对方角度考虑。 我们使用到的…

【Sql递归查询】Mysql、Oracle、SQL Server、PostgreSQL 实现递归查询的区别与案例(详解)

文章目录 Mysql 5.7 递归查询Mysql 8 实现递归查询Oracle递归示例SQL Server 递归查询示例PostgreSQL 递归查询示例 更多相关内容可查看 Mysql 5.7 递归查询 MySQL 5.7 本身不直接支持标准 SQL 中的递归查询语法&#xff08;如 WITH RECURSIVE 这种常见的递归查询方式&#xf…

vue2修改表单只提交被修改的数据的字段传给后端接口

效果&#xff1a; 步骤一、 vue2修改表单提交的时候&#xff0c;只将修改的数据的字段传给后端接口&#xff0c;没有修改得数据不传参给接口。 在 data 对象中添加一个新的属性&#xff0c;用于存储初始表单数据的副本&#xff0c;与当前表单数据进行比较&#xff0c;找出哪些…

「刘一哥GIS」系列专栏《GRASS GIS零基础入门实验教程(配套案例数据)》专栏上线了

「刘一哥GIS」系列专栏《GRASS GIS零基础入门实验教程》全新上线了&#xff0c;欢迎广大GISer朋友关注&#xff0c;一起探索GIS奥秘&#xff0c;分享GIS价值&#xff01; 本专栏以实战案例的形式&#xff0c;深入浅出地介绍了GRASS GIS的基本使用方法&#xff0c;用一个个实例讲…