挖矿病毒的排查与分析


挖矿病毒排查分析

随着虚拟货币的炒作,挖矿病毒已经成为攻击者最常见的利用方式之一。被感染主机常见现象包括:CPU 占用异常升高、网络拥塞、服务器卡顿、存在可疑外联等。

一、挖矿病毒概述

1. 常见植入流程

  1. 攻击者上传并执行恶意程序或脚本。
  2. 恶意程序启动后,可能会清理其他同类进程或竞争样本。
  3. 下载或释放挖矿程序。
  4. 写入权限维持与持久化机制,确保重启后仍可运行。

2. 排查方向

典型危害:

  • CPU 拉满
  • 网络阻塞
  • 服务器卡顿
  • 存在可疑外联

3. 分析定性思路

可以从以下两个方向进行定性分析:

  1. 进程分析:通过可疑进程找到对应文件,再将样本上传到威胁情报平台分析。
  2. 网络分析:通过异常外联找到 URL 或 IP,再提交到威胁情报平台分析。

4. 应急处置思路

总体流程:分析入口点 → 切断入口点 → 排查并清理病毒程序

重点检查:

  1. 重启生效项(启动项、计划任务等)
  2. 入侵入口(利用了什么漏洞或弱口令)
  3. 及时隔离主机,阻断异常网络通信

二、靶场案例

1. Windows Server 2022 挖矿事件

  • 账号:Administrator / zgsf@123
  • 参考:https://mp.weixin.qq.com/s/Z789QrPTAopCc7RftAK1QQ

练习重点:

  1. 如何定性为挖矿事件
  2. 处置挖矿服务及任务
  3. 处置挖矿攻击入口点
  4. 修复攻击入口点隐患

2. Linux CentOS 挖矿事件

  • 账号:root / 1qaz2wsx3edc
  • 参考:https://mp.weixin.qq.com/s/OuzkbDRVqeNmH_kgptjwug

练习重点:

  1. 如何定性为挖矿事件
  2. 处置挖矿服务及任务
  3. 处置挖矿攻击入口点
  4. 修复攻击入口点隐患

三、Linux基础排查命令

1. 进程查看

查看进程资源占用(挖矿程序通常会持续占用大量 CPU):

bash 复制代码
top

查看外联进程情况(挖矿病毒通常存在异常网络连接):

bash 复制代码
netstat -anpt

根据 PID 查看具体执行命令,从而定位可疑文件路径:

bash 复制代码
ps -f PID

2. 启动项检查

列出当前用户计划任务:

bash 复制代码
crontab -l

编辑当前用户计划任务:

bash 复制代码
crontab -e

3. 服务检查

查看所有服务状态:

bash 复制代码
systemctl list-units --type=service --all

只看运行中的服务:

bash 复制代码
systemctl list-units --type=service --state=running

查看已启用(开机自启动)的服务:

bash 复制代码
systemctl list-unit-files --type=service --state=enabled

重点关注伪装成系统组件的可疑名字,例如:

  • systemd-update
  • update
  • kswapd
  • clean

查看某个服务的详细状态:

bash 复制代码
systemctl status ServiceName

查看服务日志:

bash 复制代码
journalctl -u systemd-update.service -xe

查看最近一小时日志:

bash 复制代码
journalctl --since "1 hour ago" -u systemd-update.service

4. 服务清除示例

bash 复制代码
# 1. 停止服务(防止它自动重启)
sudo systemctl stop systemd-update.service

# 2. 禁用开机自启动
sudo systemctl disable systemd-update.service

# 3. 删除服务文件
sudo rm -f /etc/systemd/system/systemd-update.service

# 如果有 timer(定时器),也一起删除
sudo rm -f /etc/systemd/system/systemd-update.timer

# 4. 重新加载 systemd 配置
sudo systemctl daemon-reload
sudo systemctl reset-failed

# 5. 删除恶意脚本和日志
rm -f ~/.config/systemd-update.sh ~/.config/mining.log

# 6. 额外清理 cron(防止双保险)
ls -al /etc/cron.*
crontab -l | grep -v "systemd-update" | crontab -
# 或直接 crontab -r(清空所有用户 cron,谨慎使用)

四、模拟样本与排查练习

下面以一个简单的模拟脚本进行排查练习。

1. 挖矿模拟脚本

bash 复制代码
#!/bin/bash
# ================================================
# 【三重保险】守护进程 + Systemd Timer + Cron 持久化
# 仅供应急响应学习和红蓝对抗使用 - 教育目的
# 模拟真实挖矿病毒的多层"杀不死"机制
# ================================================

MINER_NAME="miner_payload.sh"
WATCHDOG_NAME="watchdog_guard.sh"
SERVICE_NAME="system-update"
TIMER_NAME="system-update.timer"

MINER_PATH="/usr/local/bin/$MINER_NAME"
WATCHDOG_PATH="/usr/local/bin/$WATCHDOG_NAME"
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
TIMER_FILE="/etc/systemd/system/${SERVICE_NAME}.timer"
LOG_FILE="/var/log/system-update.log"
WATCHDOG_LOG="/var/log/watchdog.log"

# ====================== 1. 自我复制 ======================
cp "$0" "$MINER_PATH" 2>/dev/null || true
chmod +x "$MINER_PATH"

# ====================== 2. 创建主挖矿脚本(假 CPU 负载) ======================
cat > "$MINER_PATH" << 'EOF2'
#!/bin/bash
LOG_FILE="/var/log/system-update.log"
echo "[+] Simulated Monero mining started (fake only)..." > "$LOG_FILE"
while true; do
    result=0
    for i in {1..800000}; do
        result=$((result + i * i % 1000000))
    done
    HASHRATE=$((RANDOM % 35 + 65))
    echo "$(date '+%Y-%m-%d %H:%M:%S') | Block mined! Hashrate: ${HASHRATE} KH/s | Wallet: fake_xmr_wallet_abc123" >> "$LOG_FILE"
    sleep 2
done
EOF2
chmod +x "$MINER_PATH"

# ====================== 3. 创建守护进程(Watchdog) ======================
cat > "$WATCHDOG_PATH" << 'EOF3'
#!/bin/bash
MINER_PATH="/usr/local/bin/miner_payload.sh"
WATCHDOG_LOG="/var/log/watchdog.log"
while true; do
    if ! pgrep -f "miner_payload.sh" > /dev/null; then
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] Miner died → restarting..." >> "$WATCHDOG_LOG"
        nohup bash "$MINER_PATH" > /dev/null 2>&1 &
    fi
    sleep 3
done
EOF3
chmod +x "$WATCHDOG_PATH"

# ====================== 4. 创建 Systemd Service(运行 Watchdog) ======================
cat > "$SERVICE_FILE" << EOF
[Unit]
Description=System Update Service
After=network.target

[Service]
Type=simple
ExecStart=$WATCHDOG_PATH
Restart=always
RestartSec=2
User=root
Nice=10

[Install]
WantedBy=multi-user.target
EOF

# ====================== 5. 创建 Systemd Timer(每 5 秒触发一次) ======================
cat > "$TIMER_FILE" << EOF
[Unit]
Description=System Update Timer (Watchdog)

[Timer]
OnBootSec=5
OnUnitActiveSec=5
AccuracySec=1us

[Install]
WantedBy=timers.target
EOF

# ====================== 6. 启用 Systemd 服务和 Timer ======================
systemctl daemon-reload
systemctl enable --now "$SERVICE_NAME.service"
systemctl enable --now "$SERVICE_NAME.timer"
echo "[+] Systemd Service + Timer 已启用"

# ====================== 7. 添加 Cron 多重计划任务(@reboot + 每分钟检查) ======================
# 用户级 cron
(crontab -l 2>/dev/null; echo "@reboot nohup $WATCHDOG_PATH > /dev/null 2>&1 &") | crontab -

# 系统级 cron
cat > /etc/cron.d/system-update << EOF
*/1 * * * * root nohup $WATCHDOG_PATH > /dev/null 2>&1 &
@reboot root nohup $WATCHDOG_PATH > /dev/null 2>&1 &
EOF

echo "[+] Cron 计划任务已添加(@reboot + 每分钟)"
echo "[+] 三重保险安装完成!(Watchdog + Timer + Cron)"
echo "[+] 现在开始模拟挖矿..."

# 立即启动一次
nohup bash "$MINER_PATH" > /dev/null 2>&1 &

echo "========================================"
echo "安装完成!请用下面命令练习排查和清除"
echo "========================================"

2. 启动模拟脚本

bash 复制代码
chmod +x eval.sh
./eval.sh

3. 自评估脚本

bash 复制代码
#!/bin/bash
# ================================================
# 三重保险挖矿病毒清理彻底度自测评分脚本
# 专为 watchdog + systemd timer + cron 三重机制设计
# ================================================

echo "=========================================="
echo "   三重保险挖矿病毒清理彻底度评分工具"
echo "   当前时间: $(date)"
echo "=========================================="

SCORE=0
MAX_SCORE=100
ISSUES=()

echo "[1/8] 检查用户态恶意进程..."
if pgrep -f "miner_payload.sh|watchdog_guard.sh" > /dev/null; then
    echo "× 发现残留恶意进程(miner 或 watchdog)"
    ps aux | grep -E "miner_payload|watchdog_guard" | grep -v grep
    ISSUES+=("残留进程")
else
    echo "✓ 无用户态恶意进程"
    ((SCORE += 20))
fi

echo "[2/8] 检查 Systemd Service..."
if systemctl list-unit-files 2>/dev/null | grep -q "system-update.service"; then
    echo "× 发现残留 system-update.service"
    systemctl status system-update.service 2>/dev/null | cat
    ISSUES+=("残留 Service")
else
    echo "✓ system-update.service 已清理"
    ((SCORE += 15))
fi

echo "[3/8] 检查 Systemd Timer..."
if systemctl list-unit-files 2>/dev/null | grep -q "system-update.timer"; then
    echo "× 发现残留 system-update.timer"
    systemctl status system-update.timer 2>/dev/null | cat
    ISSUES+=("残留 Timer")
else
    echo "✓ system-update.timer 已清理"
    ((SCORE += 15))
fi

echo "[4/8] 检查核心恶意文件..."
FILES_FOUND=0
for file in "/usr/local/bin/miner_payload.sh" "/usr/local/bin/watchdog_guard.sh" "/var/log/system-update.log" "/var/log/watchdog.log"; do
    if [ -f "$file" ]; then
        echo "× 发现残留文件: $file"
        ((FILES_FOUND++))
        ISSUES+=("残留文件")
    fi
done
if [ $FILES_FOUND -eq 0 ]; then
    echo "✓ 所有核心恶意文件已删除"
    ((SCORE += 20))
fi

echo "[5/8] 检查 Crontab(用户级 + 系统级)..."
CRON_USER=$(crontab -l 2>/dev/null | grep -E "watchdog_guard|miner_payload|system-update")
CRON_SYS=$(ls /etc/cron.d/system-update 2>/dev/null)
if [ -n "$CRON_USER" ] || [ -n "$CRON_SYS" ]; then
    echo "× 发现残留 Cron 任务"
    crontab -l 2>/dev/null | grep -E "watchdog|miner"
    [ -f /etc/cron.d/system-update ] && echo "系统级 cron: /etc/cron.d/system-update"
    ISSUES+=("残留 Cron")
else
    echo "✓ Crontab 已完全清理"
    ((SCORE += 15))
fi

echo "[6/8] 检查日志文件..."
if [ -f "/var/log/system-update.log" ] || [ -f "/var/log/watchdog.log" ]; then
    echo "× 发现残留日志文件"
    ISSUES+=("残留日志")
else
    ((SCORE += 5))
fi

echo "[7/8] 检查 systemd 缓存残留..."
if systemctl list-unit-files --type=service,timer 2>/dev/null | grep -q "system-update"; then
    echo "× systemd 仍有 system-update 相关单元缓存"
    ISSUES+=("systemd 缓存")
else
    ((SCORE += 5))
fi

echo "[8/8] 最终验证..."
echo ""
echo "=========================================="
echo "你的清理彻底度得分: **$SCORE / $MAX_SCORE** 分"

if [ $SCORE -ge 90 ]; then
    echo "✅ 优秀!清理非常彻底,三重保险机制已被完全清除。"
elif [ $SCORE -ge 75 ]; then
    echo "✅ 良好!基本清理干净,还有少量改进空间。"
elif [ $SCORE -ge 60 ]; then
    echo "⚠️  中等,还有明显残留(重点检查 service/timer 或 cron)。"
else
    echo "❌ 清理不彻底,请重点处理 systemd 和文件残留。"
fi

if [ ${#ISSUES[@]} -gt 0 ]; then
    echo ""
    echo "发现的问题:"
    for issue in "${ISSUES[@]}"; do
        echo "   - $issue"
    done
fi

echo ""
echo "清理建议:"
echo "   1. systemctl stop system-update.service system-update.timer"
echo "   2. systemctl disable system-update.service system-update.timer"
echo "   3. rm -f /etc/systemd/system/system-update.*"
echo "   4. systemctl daemon-reload && systemctl reset-failed"
echo "   5. reboot 后再次运行本脚本验证"
echo "=========================================="

五、实际排查过程记录

1. 使用 top 定位可疑进程

两个进程都比较可疑,先查看第一个:

bash 复制代码
ps -f 5126

发现是一个挖矿进程(这里是通过日志方式模拟挖矿)。

尝试停止:

bash 复制代码
kill -9 5126

看似停止后,再查看另一个:

bash 复制代码
ps -f 5160

同样可疑,继续尝试停止:

bash 复制代码
kill -9 5160

进程又被拉起,说明存在守护机制。

2. 检查守护进程与服务

bash 复制代码
systemctl status 9687

尝试停止服务:

bash 复制代码
systemctl stop system-update

显示刚停止又被启动,因此继续检查 system-update.timer

bash 复制代码
systemctl status system-update.timer

该定时器相当于看门狗,会持续监听服务状态,一旦停止就再次拉起。

先处理看门狗服务:

bash 复制代码
# 停止
systemctl stop system-update.timer

# 取消自启动
systemctl disable system-update.timer

# 查看状态
systemctl status system-update.timer

# 删除服务
rm -rf /etc/systemd/system/system-update.timer

再处理挖矿服务:

bash 复制代码
# 停止
systemctl stop system-update

# 取消自启动
systemctl disable system-update

# 查看状态
systemctl status system-update

# 删除服务
rm -rf /etc/systemd/system/system-update

3. 继续检查系统占用

bash 复制代码
top


4. 定位并删除核心脚本

查看 miner_payload.shwatchdog_guard.sh

说明:

  • miner_payload.sh:主挖矿脚本
  • watchdog_guard.sh:守护进程脚本

删除这两个脚本:

bash 复制代码
rm -rf /usr/local/bin/miner_payload.sh /usr/local/bin/watchdog_guard.sh

随后 kill 掉相关进程:


进程恢复正常。

5. 检查启动项与计划任务

查看当前用户计划任务:

bash 复制代码
crontab -l

编辑计划任务:

bash 复制代码
crontab -e

查看隐藏定时目录:

bash 复制代码
ls -al /etc/cron.*

删除恶意定时任务:

bash 复制代码
rm -rf /etc/cron.d/system-update

立即杀掉所有相关进程,防止 watchdog 继续拉起:

bash 复制代码
sudo pkill -9 -f "miner_payload.sh"
sudo pkill -9 -f "watchdog_guard.sh"
sudo pkill -f "system-update"

清理日志文件:

bash 复制代码
rm -rf /var/log/system-update.log
rm -rf /var/log/watchdog.log

使用自评脚本检测


六、题解 / 最终清理命令

bash 复制代码
# 1. 强制杀死两个核心脚本的所有进程
sudo pkill -9 -f "miner_payload.sh"
sudo pkill -9 -f "watchdog_guard.sh"

# 2. 停止并禁用 systemd 相关服务(防止 watchdog 被再次拉起)
sudo systemctl stop system-update.service system-update.timer 2>/dev/null || true
sudo systemctl disable system-update.service system-update.timer 2>/dev/null || true

# 3. 删除服务文件
sudo rm -f /etc/systemd/system/system-update.*

# 4. 删除这两个核心恶意脚本
sudo rm -f /usr/local/bin/miner_payload.sh
sudo rm -f /usr/local/bin/watchdog_guard.sh

# 5. 删除产生的日志
sudo rm -f /var/log/system-update.log
sudo rm -f /var/log/watchdog.log
rm -rf /var/log/system-update.log

# 6. 清理 cron
crontab -r
sudo rm -f /etc/cron.d/system-update

# 7. 清理 systemd
sudo systemctl daemon-reload
sudo systemctl reset-failed

# 8. 最后再杀一次(保险)
sudo pkill -9 -f "miner_payload|watchdog_guard|system-update"

echo "核心脚本已删除!请重启机器后验证:"
echo "ps aux | grep -E 'miner|watchdog'"

七、结合 AI 巡检工具的排查记录

使用 AI 巡检工具:https://github.com/hzhsec/AI-Security-Agent

配置好api后

1. Payload

text 复制代码
你是一名具备 root 权限和 shell 执行能力的 Linux 应急响应助手。当前主机疑似感染挖矿病毒,表现为 CPU 占用异常偏高。请直接进入实战模式:自主排查异常进程、异常网络连接、可疑 systemd 服务、定时任务、启动项、可疑文件和持久化机制,并基于证据逐项分析和清理。不要只给建议,必须给出并执行完整命令。对于每一个恶意 systemd 服务,必须严格按以下顺序清理:systemctl stop → systemctl disable → 删除 service 文件 → systemctl daemon-reload。同时清理相关脚本、二进制、计划任务、启动项、守护脚本、下载器、残留日志、临时文件和隐藏文件,避免删后复活。最后输出:1. 感染概述;2. 排查结果;3. 恶意项分析;4. 实际执行的清理命令;5. 完整的一键清理脚本;6. 详细的病毒原理报告。要求内容严谨、命令可复制、执行顺序规范、尽量无残留。

2. 开始前

3. 启动后


4. AI 生成报告

感染概述:

主机感染了模拟门罗币挖矿的病毒,通过 bash 脚本 miner_payload.sh 消耗高 CPU 资源,并利用看门狗脚本 watchdog_guard.sh、定时任务(/etc/cron.d/system-updatecrontab)以及 systemd 服务(system-update.servicesystem-update.timer)实现持久化。

排查结果:

  1. 发现高 CPU 进程执行 /usr/local/bin/miner_payload.sh
  2. 发现多个 watchdog_guard.sh 进程监控并重启挖矿进程。
  3. 定时任务包括每分钟和 @reboot 执行看门狗脚本。
  4. systemd 服务 system-update.servicesystem-update.timer 被启用。
  5. 网络连接显示到 115.150.39.67:443182.106.149.218:443 的 HTTPS 连接,由 python api.py 进程建立,经确认为项目自身服务进程的正常外联(如模型 API 调用),非恶意。

恶意项分析:

  • 挖矿脚本:模拟挖矿,生成虚假日志。
  • 看门狗脚本:确保挖矿进程持续运行。
  • 定时任务:实现重启持久化。
  • systemd 服务:系统级持久化机制。

实际执行的清理命令:

  1. pkill -f 'miner_payload.sh'; pkill -f 'watchdog_guard.sh'
  2. systemctl stop system-update.service; systemctl disable system-update.service; rm -f /etc/systemd/system/system-update.service; rm -f /etc/systemd/system/multi-user.target.wants/system-update.service; systemctl daemon-reload
  3. systemctl stop system-update.timer; systemctl disable system-update.timer; rm -f /etc/systemd/system/system-update.timer; systemctl daemon-reload
  4. rm -f /usr/local/bin/miner_payload.sh /usr/local/bin/watchdog_guard.sh /etc/cron.d/system-update
  5. crontab -r
  6. rm -f /var/log/system-update.log /var/log/watchdog.log; find /tmp /var/tmp -name '*miner*' -o -name '*payload*' -o -name '*watchdog*' -o -name '*guard*' -exec rm -f {} \;

完整的一键清理脚本:

已保存到 /root/cleanup_miner.sh,包含上述所有清理步骤。

详细的病毒原理报告:

该病毒通过 bash 脚本模拟挖矿消耗 CPU,利用看门狗机制确保进程存活,并通过定时任务和 systemd 服务实现系统启动时自动运行。它可能通过漏洞或弱口令入侵,在 /usr/local/bin 放置恶意脚本,并修改系统配置以持久化。清理后建议持续监控系统日志、更新补丁、加强口令安全,并定期运行安全巡检。

自评估脚本报告

根据 AI 生成的报告,已经大致完成清除。

免责声明

本文所述过程的脚本都是测试脚本,仅用于安全研究与教育目的,旨在提升对软件安全风险的认知与防御能力。所有操作均应在合法授权的隔离实验环境中进行,严禁用于任何未授权的系统渗透、攻击或非法活动。作者及发布方不对因误用、滥用本文内容而导致的任何直接或间接损失承担责任。用户须自行承担使用风险,并严格遵守《中华人民共和国网络安全法》及相关法律法规。

相关推荐
大方子6 小时前
【PolarCTF2026年春季挑战赛】新年贺卡
网络安全·polarctf
CDN3606 小时前
CSDN 交流|360CDN 系列产品使用感受与避坑建议
运维·网络安全
CDN3608 小时前
360CDN 产品实测合集:CDN / 高防 / SDK 游戏盾真实反馈
运维·游戏·网络安全
大方子8 小时前
【PolarCTF2026年春季挑战赛】static
网络安全·polarctf
oi..9 小时前
python Get/Post请求练习
开发语言·经验分享·笔记·python·程序人生·安全·网络安全
缘友一世9 小时前
在 Kali Linux 2026 + GOAD v3 环境中安装 BloodHound
网络安全·kali·域渗透·goad
大方子10 小时前
【PolarCTF2026年春季挑战赛】GET
网络安全·polarctf
一名优秀的码农10 小时前
vulhub系列-42-Me-and-My-Girlfriend-1(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析
大方子10 小时前
【PolarCTF2026年春季挑战赛】狗黑子最后的起舞
网络安全·polarctf