lovart3/脚本修复说明.md

5.3 KiB
Raw Permalink Blame History

防重感染脚本误报修复说明

修复时间

2025年1月1日

问题描述

原始问题

防重感染脚本 (prevent-reinfection.sh) 使用 pgrep -f 匹配整个命令行,导致:

  • 清理脚本的 find / -name .system3d 进程被误判为恶意进程
  • 日志中频繁出现"发现恶意进程"的记录(实际是误报)
  • 无法区分真正的威胁和清理脚本的正常操作

误报示例

# 清理脚本执行:
find / -name .system3d -type f -exec rm -f {} ;

# 防重感染脚本检测:
pgrep -f 'system3d'  # 匹配到了find进程的命令行

# 结果:误报为恶意进程

修复方案

1. 使用精确的进程名匹配

修改前:

pgrep -f 'kinsing|kdevtmpfsi|system3d|b4nd1d0'

修改后:

# 对于明确的进程名,使用精确匹配
pgrep -x 'kinsing'  # 只匹配进程名为kinsing的进程
pgrep -x 'kdevtmpfsi'  # 只匹配进程名为kdevtmpfsi的进程

2. 排除清理脚本的子进程

添加父进程检查:

ppid=$(ps -p $pid -o ppid= | tr -d ' ')
pcmd=$(ps -p $ppid -o cmd= | head -1)

# 如果是清理脚本的子进程,跳过
if echo "$pcmd" | grep -qE 'cleanup|prevent|monitor|aggressive|enhanced'; then
    log "跳过清理脚本的子进程: PID=$pid"
    continue
fi

3. 排除系统工具进程

检查可执行文件路径:

exe_path=$(readlink -f /proc/$pid/exe 2>/dev/null)

# 如果是系统工具,跳过
if echo "$exe_path" | grep -qE '/usr/bin/find|/usr/bin/grep|/bin/bash.*cleanup'; then
    log "跳过系统工具进程: PID=$pid"
    continue
fi

4. 改进日志记录

添加详细的进程信息:

log "⚠️ 发现真正的恶意进程: PID=$pid, 进程名=$pattern, 命令=${cmd:0:100}, 父进程=${pcmd:0:50}"
log "跳过清理脚本的子进程: PID=$pid, 进程名=$pattern, 父进程=${pcmd:0:50}"

修复后的脚本逻辑

检测流程

  1. 精确匹配进程名(kinsing, kdevtmpfsi, b4nd1d0)

    • 使用 pgrep -x 只匹配进程名
    • 不匹配命令行参数
  2. 检查父进程

    • 如果是清理脚本的子进程,跳过
    • 记录为"跳过清理脚本的子进程"
  3. 检查可执行文件

    • 如果是系统工具(find, grep等),跳过
    • 记录为"跳过系统工具进程"
  4. 真正的恶意进程

    • 通过所有检查后,确认为真正的恶意进程
    • 记录详细信息并终止

特殊处理:.system3d

对于 .system3d 这种文件名匹配:

  • 检查可执行文件路径是否真的包含 .system3d
  • 排除清理脚本的 find 进程
  • 只终止真正的 .system3d 可执行文件

修复效果

修复前

  • 日志中每1-2分钟出现"发现恶意进程"
  • 实际是清理脚本的 find 进程
  • 无法区分误报和真实威胁
  • 使用 pgrep -f 匹配整个命令行,导致误报

修复后

  • ✅ 清理脚本的 find 进程被正确识别并跳过(不记录日志)
  • ✅ 日志中只记录真正的恶意进程(如果有)
  • ✅ 可以清楚区分误报和真实威胁
  • ✅ 使用 pgrep -x 精确匹配进程名
  • ✅ 通过检查父进程和可执行文件路径排除误报

当前状态

  • ✅ 脚本已成功部署
  • ✅ 脚本语法正确
  • ✅ 当前无真正的恶意进程(系统安全)
  • ⚠️ 由于当前没有真正的恶意进程,日志中不会显示新的检测记录
  • ✅ 当清理脚本的 find 进程运行时,新脚本会静默跳过,不会产生误报日志

验证方法

1. 检查日志

# 查看最新日志
tail -30 /var/log/prevent-malware-regeneration.log

# 应该看到:
# - "跳过清理脚本的子进程"(正常)
# - "跳过系统工具进程"(正常)
# - "发现真正的恶意进程"(只有在真正有威胁时才会出现)

2. 监控系统资源

# CPU使用率应该正常(挖矿程序会导致接近100%)
top -bn1 | grep '%Cpu'

# 系统负载应该正常
uptime

3. 检查进程

# 不应该有真正的恶意进程
ps aux | grep -E 'kinsing|kdevtmpfsi' | grep -v grep
# 应该返回空(无结果)

部署说明

文件位置

  • 脚本1路径: /root/scripts/prevent-reinfection.sh (已修复)
    • 执行方式: 每2分钟(通过crontab)
  • 脚本2路径: /root/scripts/prevent-malware-regeneration.sh (已修复)
    • 执行方式: 持续运行(通过systemd服务)
  • 日志路径: /var/log/prevent-malware-regeneration.log (两个脚本共用)

备份

修复前已创建备份:

  • /root/scripts/prevent-reinfection.sh.backup

回滚方法

如果需要回滚到旧版本:

cp /root/scripts/prevent-reinfection.sh.backup /root/scripts/prevent-reinfection.sh
chmod +x /root/scripts/prevent-reinfection.sh

后续建议

  1. 持续监控

    • 观察日志1-2天,确认误报已消除
    • 关注是否有真正的恶意进程检测
  2. 优化清理脚本

    • 考虑修改清理脚本,使用不包含关键词的命令
    • 或使用更精确的查找方法
  3. 增强检测

    • 可以添加更多检测指标(CPU使用率、网络连接等)
    • 结合多个指标综合判断

修复完成时间: 2025年1月1日
修复人员: AI Assistant
脚本版本: v2.0 (修复误报版本)