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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux Kernel 之十 详解 PREEMPT_RT、Xenomai 的架构、源码、构建及使用

概述 现在的 RTOS 基本可以分为 Linux 阵营和非 Linux 阵营这两大阵营。非 Linux 阵营的各大 RTOS 都是独立发展,使用上也相对独立;而 Linux 阵营则有多种不同的实现方法来改造 Linux 以实现实时性要求。本文我们重点关注 Linux 阵营的实时内核实现方法! 本文我们重点关注 …

计算机网络(四)——网络层

目录 一、功能 二、IP数据报分片 三、DHCP动态主机配置协议 四、网络地址转换&#xff08;NAT&#xff09;技术 五、无分类编址CIDR 六、ARP地址解析协议 七、ICMP网际控制报文协议 八、IPv4和IPv6的区别 九、IPv4向IPv6的两种过渡技术——双栈协议和隧道技术 十、路由…

apache-skywalking-apm-10.1.0使用

apache-skywalking-apm-10.1.0使用 本文主要介绍如何使用apache-skywalking-apm-10.1.0&#xff0c;同时配合elasticsearch-8.17.0-windows-x86_64来作为存储 es持久化数据使用。 步骤如下&#xff1a; 一、下载elasticsearch-8.17.0-windows-x86_64 1、下载ES(elasticsear…

CVE-2025-22777 (CVSS 9.8):WordPress | GiveWP 插件的严重漏洞

漏洞描述 GiveWP 插件中发现了一个严重漏洞&#xff0c;该插件是 WordPress 最广泛使用的在线捐赠和筹款工具之一。该漏洞的编号为 CVE-2025-22777&#xff0c;CVSS 评分为 9.8&#xff0c;表明其严重性。 GiveWP 插件拥有超过 100,000 个活跃安装&#xff0c;为全球无数捐赠平…

【声音场景分类--论文阅读】

1.基于小波时频图特征在声音场景分类 基于小波时频图特征在声音场景分类任务中的表现 2.增强增强高效音频分类网络 https://arxiv.org/pdf/2204.11479v5 https://github.com/Alibaba-MIIL/AudioClassfication 音频分类网络如图4所示。在此阶段&#xff0c;主要重点是建立一…

java导出pdf文件

java导出pdf&#xff0c;前端下载 1、制作pdf模板2、获取pdf导出中文需要的文件3、实现4、前端发起请求并生成下载链接 使用注意点 因为原来制作的pdf表单内容过于复杂&#xff0c;下面代码只包含前两行的操作。 本次操作需要前端向后端发起请求&#xff0c;后端返回数据给前端…

1月13日学习

[HITCON 2017]SSRFme 直接给了源代码&#xff0c;题目名称还是ssrf&#xff0c;那么该题大概率就是SSRF的漏洞&#xff0c;进行代码审计。 <?php// 检查是否存在 HTTP_X_FORWARDED_FOR 头&#xff0c;如果存在&#xff0c;则将其拆分为数组&#xff0c;并将第一个 IP 地址…

在一个sql select中作多个sum并分组

有表如下&#xff1b; 单独的对某一个列作sum并分组&#xff0c;结果如下&#xff1b; 对于表的第7、8行&#xff0c;num1都有值&#xff0c;num2都是null&#xff0c;对num2列作sum、按id分组&#xff0c;结果在id为4的行会显示一个null&#xff1b; 同时对2个列作sum&#x…

[Deep Learning] Anaconda+CUDA+CuDNN+Pytorch(GPU)环境配置-2025

文章目录 [Deep Learning] AnacondaCUDACuDNNPytorch(GPU)环境配置-20250. 引子1. 安装Anaconda1.1 安装包下载&#xff1a;1.2 启用安装包安装1.3 配置(系统)环境变量1.4 验证Anaconda是否安装完毕1.5 Anaconda换源 2. 安装CUDACuDNN2.1 判断本机的CUDA版本2.2 下载适合自己CU…

不需要配置文件实现Javaweb项目的启动

1.首先看一下web.xml主要配置内容 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://xm…

【网络篇】IP知识

IPv4首部与IPv6首部 IPv4相对于IPv6的好处&#xff1a; 1.IPv6可自动配置&#xff0c;即使没有DHCP服务器也可以实现自动分配IP地址&#xff0c;实现即插即用。 2.IPv6包首部长度采用固定40字节&#xff0c;删除了选项字段&#xff0c;以及首部校验和&#xff0c;简化了首部…

MyBatis核心流程

目录 数据处理的发展 MyBatis概述 ​编辑 MyBatis核心流程 观察测试类 重要对象和流程 SqlSessionFactory [初始化] 创建SqlSession会话对象 创建XxxMapper[代理]对象 执行SQL操作 [复杂一丢丢] ​编辑 数据处理的发展 1.原生JDBC 2. DBUtils工具类 [jdbctemp..] 3. …

低代码独特架构带来的编译难点及多线程解决方案

前言 在当今软件开发领域&#xff0c;低代码平台以其快速构建应用的能力&#xff0c;吸引了众多开发者与企业的目光。然而&#xff0c;低代码平台独特的架构在带来便捷的同时&#xff0c;也给编译过程带来了一系列棘手的难点。 一&#xff0c;低代码编译的难点 &#xff08;1…

Spring Security单点登录

本文介绍了Spring Security单点登录的概念和基本原理。单点登录是指用户只需登录一次&#xff0c;即可在多个相互信任的系统中实现无缝访问和授权。通过Spring Security框架的支持&#xff0c;可以实现有效的用户管理和权限控制。最后&#xff0c;本文提供了实际应用案例&#…

查找某个年龄段的用户信息TCP头格式为什么需要 TCP 协议? TCP 工作在哪一层?

查找某个年龄段的用户信息 select device_id,gender,age from user_profile where age>20 and age<23; TCP头格式 序列号&#xff1a;在建立连接时由计算机生成的随机数作为其初始值&#xff0c;通过 SYN 包传给接收端主机&#xff0c;每发送一次数据&#xff0c;就「累…

后端技术选型 sa-token校验学习 下 结合项目学习 后端鉴权

目录 后端注册拦截器 实现对 WebMvcConfigurer 接口的类实现 静态变量 方法重写 注册 Spring Framework拦截器 Sa-Token中SaServletFilter拦截器 思考 为什么使用两个拦截器 1. Spring Framework 拦截器 2. SaServletFilter 为什么要注册两个拦截器&#xff1f; 总结 …

使用 Charles 调试 Flutter 应用中的 Dio 网络请求

为了成功使用 Charles 抓取并调试 Flutter 应用程序通过 Dio 发起的网络请求&#xff0c;需遵循特定配置步骤来确保应用程序能够识别 Charles 的 SSL 证书&#xff0c;并正确设置代理服务器。 配置 Charles 以支持 HTTPS 请求捕获 Charles 默认会拦截 HTTP 流量&#xff1b;…

亿道三防丨三防笔记本是什么意思?和普通笔记本的优势在哪里?

三防笔记本是什么意思&#xff1f;和普通笔记本的优势在哪里&#xff1f; 在现代社会中&#xff0c;笔记本电脑已经成为人们工作和生活中不可或缺的一部分。然而&#xff0c;在一些特殊行业或环境中&#xff0c;普通笔记本电脑由于其脆弱性和对环境条件的敏感性&#xff0c;往…

Spring Boot教程之五十七:在 Apache Kafka 上发布 JSON 消息

Spring Boot | 如何在 Apache Kafka 上发布 JSON 消息 Apache Kafka是一个发布-订阅消息系统。消息队列允许您在进程、应用程序和服务器之间发送消息。在本文中&#xff0c;我们将了解如何在 Spring Boot 应用程序中向 Apache Kafka 发送 JSON 消息。 为了了解如何创建 Spring…

解决“无法定位程序输入点 av_buffer_create 于动态链接库 XXX\Obsidian.exe 上”问题

解决“无法定位程序输入点 av_buffer_create 于动态链接库 XXX\Obsidian.exe 上”问题 问题描述 本人在使用zotero中的zotero one&#xff08;青柠学术插件&#xff09;的时候&#xff0c;使用插件跳转obsidian中的对应笔记&#xff0c;出现上图情况。&#xff08;错误中提到的…