diff --git a/脚本修复说明.md b/脚本修复说明.md new file mode 100644 index 000000000..a024a4a35 --- /dev/null +++ b/脚本修复说明.md @@ -0,0 +1,203 @@ +# 防重感染脚本误报修复说明 + +## 修复时间 +2025年1月1日 + +## 问题描述 + +### 原始问题 +防重感染脚本 (`prevent-reinfection.sh`) 使用 `pgrep -f` 匹配整个命令行,导致: +- 清理脚本的 `find / -name .system3d` 进程被误判为恶意进程 +- 日志中频繁出现"发现恶意进程"的记录(实际是误报) +- 无法区分真正的威胁和清理脚本的正常操作 + +### 误报示例 +```bash +# 清理脚本执行: +find / -name .system3d -type f -exec rm -f {} ; + +# 防重感染脚本检测: +pgrep -f 'system3d' # 匹配到了find进程的命令行 + +# 结果:误报为恶意进程 +``` + +--- + +## 修复方案 + +### 1. 使用精确的进程名匹配 + +**修改前**: +```bash +pgrep -f 'kinsing|kdevtmpfsi|system3d|b4nd1d0' +``` + +**修改后**: +```bash +# 对于明确的进程名,使用精确匹配 +pgrep -x 'kinsing' # 只匹配进程名为kinsing的进程 +pgrep -x 'kdevtmpfsi' # 只匹配进程名为kdevtmpfsi的进程 +``` + +### 2. 排除清理脚本的子进程 + +添加父进程检查: +```bash +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. 排除系统工具进程 + +检查可执行文件路径: +```bash +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. 改进日志记录 + +添加详细的进程信息: +```bash +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. 检查日志 +```bash +# 查看最新日志 +tail -30 /var/log/prevent-malware-regeneration.log + +# 应该看到: +# - "跳过清理脚本的子进程"(正常) +# - "跳过系统工具进程"(正常) +# - "发现真正的恶意进程"(只有在真正有威胁时才会出现) +``` + +### 2. 监控系统资源 +```bash +# CPU使用率应该正常(挖矿程序会导致接近100%) +top -bn1 | grep '%Cpu' + +# 系统负载应该正常 +uptime +``` + +### 3. 检查进程 +```bash +# 不应该有真正的恶意进程 +ps aux | grep -E 'kinsing|kdevtmpfsi' | grep -v grep +# 应该返回空(无结果) +``` + +--- + +## 部署说明 + +### 文件位置 +- **脚本路径**: `/root/scripts/prevent-reinfection.sh` +- **日志路径**: `/var/log/prevent-malware-regeneration.log` +- **执行频率**: 每2分钟(通过crontab) + +### 备份 +修复前已创建备份: +- `/root/scripts/prevent-reinfection.sh.backup` + +### 回滚方法 +如果需要回滚到旧版本: +```bash +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 (修复误报版本) +