60秒滑动窗口切分事件,Isolation Forest做无监督异常检测。Linux主机端点防护,特征工程才是硬骨头。
-
- 采集exec与network底层事件,按60秒窗口聚合生成特征向量
-
- 纯无监督训练管线,基于训练集分数分布的百分位数设定检测阈值
-
- 浏览器等高频进程易触发误报,需引入时间特征与归一化算法优化
-
核心架构与特征设计
讲真,主机安全检测最难的从来不是模型本身,而是数据管道与特征工程。这个项目叫guardd,底层直接挂钩Linux的eBPF机制,抓取exec和network两类底层事件。事件流进来后,不是逐条处理,而是按60秒窗口进行聚合。窗口内统计exec与network事件计数、唯一进程数、文件数、IP与端口数,还会计算父子进程关系模式以及特征间的简单比率。最关键的是新基线对比逻辑,训练阶段没见过的进程或关系,在推理阶段会被直接标记。模型侧采用纯无监督的Isolation Forest,拿到基线数据后直接训练,检测阶段调用score_samples输出异常分。阈值设定完全依赖训练集分数分布的百分位数,不引入人工标注。这套流水线跑起来很轻,但工程落地时你会发现,特征维度的设计直接决定系统的生死。窗口切分策略决定了时间粒度,比率特征能放大异常行为的偏离度,而新基线追踪则是防御未知威胁的核心。
误报痛点与优化方向
当前最大的拦路虎是误报率,尤其是浏览器这类应用。浏览器本身行为方差极大,加载插件、预加载标签页、后台静默更新,都会让exec和network事件计数在窗口内剧烈波动。只要基线数据里没覆盖到这些场景,模型就会把正常的高频波动判定为异常。Isolation Forest对训练数据的分布极其敏感,纯靠百分位数切阈值,在真实业务流量面前很容易误杀。作者目前的优化思路很明确:加入时间维度特征,比如时间段划分和日常活动模式;优化特征归一化算法,压制量纲差异;针对突发流量做平滑处理,避免bursty行为击穿阈值。至于要不要从纯无监督转向半监督或混合架构,目前还在评估阶段。无监督的优势是冷启动快,但缺乏负样本约束,模型只能靠距离和密度做切割,遇到长尾分布必然抖动。
部署与测试路径
这套方案的优势在于完全剥离了标注成本,适合初期缺乏安全事件样本的Linux集群。部署时需要注意eBPF的内核版本兼容性,以及事件聚合层的内存占用。60秒窗口虽然能捕捉短期行为模式,但也会引入延迟,实时性要求极高的场景需要评估窗口滑动的步长。特征向量生成后直接喂给模型,score_samples的输出值配合百分位阈值即可输出告警。如果你想在自己的测试环境跑通这条流水线,或者想基于现有特征做二次开发,可以直接拉取仓库代码。核心依赖和配置参数都在项目文档里,建议先在隔离环境采集基线数据,观察分数分布后再下调阈值。工程落地不是调个参数就完事,特征归一化和时间维度的引入,才是压制误报的关键。
仓库地址:https://github.com/benny-e/guardd.git
留言聊聊
纯无监督做端点检测,省去标注成本是爽,但误报率一旦上来,运维团队天天收告警邮件也会崩溃。你在做主机安全或异常检测时,是坚持无监督路线,还是更愿意上带标签的混合模型?
来源:Reddit MachineLearning|原文:Isolation Forest + eBPF events to create a Linux b