You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux蜜罐勒索软件检测工具无法捕获快速进程PID求助

问题分析与解决方案

核心问题原因

watchdog基于inotify实现,但存在线程调度延迟:当勒索软件快速完成蜜罐文件修改并退出时,watchdog的Observer线程触发事件时,目标进程已终止,导致无法捕获PID。

已验证的解决方案(编辑补充)

通过auditctl+ausearch的系统审计方案,可可靠捕获进程信息,即使进程快速退出也能留存日志:

  1. 添加审计规则:为所有蜜罐文件添加监控规则,标记自定义密钥便于后续检索:

    # 单个蜜罐文件示例,可从存储的JSON批量生成规则
    auditctl -w /absolute/path/to/honeypot -p w -k honeypot_malop
    

    参数说明:-w指定监控路径,-p w追踪写入/修改操作,-k设置检索密钥。

  2. 检索进程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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 10:45:28