Linux蜜罐勒索软件检测工具无法捕获快速进程PID求助
问题分析与解决方案
核心问题原因
watchdog基于inotify实现,但存在线程调度延迟:当勒索软件快速完成蜜罐文件修改并退出时,watchdog的Observer线程触发事件时,目标进程已终止,导致无法捕获PID。
已验证的解决方案(编辑补充)
通过auditctl+ausearch的系统审计方案,可可靠捕获进程信息,即使进程快速退出也能留存日志:
添加审计规则:为所有蜜罐文件添加监控规则,标记自定义密钥便于后续检索:
# 单个蜜罐文件示例,可从存储的JSON批量生成规则 auditctl -w /absolute/path/to/honeypot -p w -k honeypot_malop参数说明:
-w指定监控路径,-p w追踪写入/修改操作,-k设置检索密钥。检索进程PID:当检测到蜜罐哈希不一致时,通过密钥查询审计日志,提取最新的进程PID:
# 提取对应蜜罐文件的最新修改进程PID ausearch -k honeypot_malop --format csv | grep "/absolute/path/to/honeypot" | tail -n 1 | awk -F ',' '{print $4}'在Python中可通过
subprocess模块执行该命令,解析输出获取PID后终止进程。
其他可选优化方案
1. 替换watchdog为底层inotify库
使用pyinotify直接封装inotify,减少watchdog的线程调度开销,降低监控延迟:
import pyinotify import subprocess class HoneypotMonitor(pyinotify.ProcessEvent): def process_IN_MODIFY(self, event): # 立即校验蜜罐哈希 if hash_mismatch(event.pathname): # 用lsof获取当前打开文件的进程 pid = subprocess.check_output(["lsof", "-t", event.pathname]).decode().strip() if pid: subprocess.run(["kill", "-9", pid]) # 初始化监控 wm = pyinotify.WatchManager() mask = pyinotify.IN_MODIFY | pyinotify.IN_DELETE | pyinotify.IN_RENAME handler = HoneypotMonitor() notifier = pyinotify.Notifier(wm, handler) # 批量添加蜜罐文件监控 for path in get_honeypot_paths_from_json(): wm.add_watch(path, mask) notifier.loop()
2. 哈希校验与进程捕获联动优化
当检测到哈希变化时,不依赖监控事件的进程信息,直接通过lsof或fuser查询当前访问该文件的进程:
# 快速获取访问目标文件的进程PID fuser -v /path/to/honeypot | awk '{print $2}'
此方法适用于进程尚未退出的场景,可作为audit方案的补充。
内容的提问来源于stack exchange,提问作者capybar0
相关产品推荐
相关产品推荐

