3. 异常检测概述

做了这么多年安全审计,我见过最多的误报就是没搞清楚「什么是异常」就开始跑模型。很多人一上来就套用孤立森林、LOF 这些算法,结果检测出来的全是业务正常波动。所以,在动手之前,先把异常检测的概念捋清楚。这一章我们就聊三个核心问题:异常到底是什么?它有哪些类型?在审计日志里能用在哪?

3.1 异常检测——先搞清楚「异常」是什么

异常检测,说白了就是从一堆正常行为里揪出那些「不对劲」的东西。它不关心正常行为长什么样,只关心谁跟正常不一样。在审计日志的语境下,这个「正常」往往是一个用户、一个系统或一个进程的历史行为基线。

⚠️ 避坑提醒:
我在早期项目里踩过一个坑——直接用全局统计指标去做检测。比如计算全公司所有员工的登录次数均值,然后认为偏离均值的就是异常。结果呢?运维团队每天几百次正常登录,全被判成异常。真正需要对比的,是「每个用户自己的历史行为」,不是全局平均。

为什么会这样?因为审计日志里的数据天然带有强烈的个体差异。每个用户的工作习惯、每个系统的调用频率都完全不同。所以,异常检测的第一步不是选算法,而是定义好「什么算正常」。

3.2 异常的分类——三种常见形态

在异常检测的理论体系里,异常通常被分成三类:点异常、上下文异常和集体异常。这三种类型在审计日志里都能找到很典型的对应案例。我个人习惯先看数据形态,再决定用哪种检测策略。

异常类型定义审计日志案例检测难点
点异常单个数据点显著偏离整体分布某用户单日登录失败 200 次(平时 <5 次)阈值怎么定才不误报
上下文异常在特定上下文中异常,其他场景正常凌晨 3 点从海外 IP 登录内网系统上下文维度如何选取
集体异常一组数据联合表现异常,单个看可能正常同一批账号在 5 分钟内先后从同一 IP 登录群体行为的关联分析

3.2.1 点异常——最基础也最直观

点异常是最好理解的一类。单个数据点的取值跟它所属的整体分布差异太大,它就是异常。审计日志里的典型场景就是暴力破解检测。

💡 一个真实的例子:
我处理过一个金融系统的日志,有个普通员工的账号在某天凌晨出现了 327 次登录失败记录,而他过去三个月平均每天只有 1.2 次。这就是典型的点异常。我们用 3-sigma 原则配合滑动窗口就抓到了,后来确认是密码爆破攻击。

但要注意,点异常检测有个前提——你得知道正常分布长什么样。如果数据本身就不是正态分布,直接用均值加减标准差就会闹笑话。我建议先用箱线图或核密度估计看看数据形态,再决定用哪种统计方法。

3.2.2 上下文异常——跟场景绑定的异常

上下文异常更有意思。同一个行为,放在不同场景下,正常和异常的结论完全相反。你想想看,员工在工作时间访问内部 CRM 系统完全正常,但如果是凌晨 2 点从境外 IP 访问呢?

上下文异常通常依赖两个维度的信息:

  • 时间上下文:非工作时间、非工作日、节假日等
  • 空间上下文:异常地理位置、异常设备、异常网络段

我记得有一次,系统检测到一个管理员的账号在周六凌晨批量下载配置文件。单看操作本身都是合法命令,但结合「周六 + 凌晨 + 管理员非值班」这个上下文组合,立刻就暴露了风险。这就是上下文的威力。

⚠️ 上下文选择的陷阱:
我曾经在一个项目中把上下文维度加得太多——时间、地点、设备、浏览器指纹、网络延迟全塞进去。结果呢?模型变得极其敏感,每天几百个告警,安全团队根本看不过来。上下文不是越多越好,选 2-3 个最关键的就行。

3.2.3 集体异常——团伙行为的照妖镜

集体异常是三种类型里最难检测、但危害最大的。单个数据点单独看完全正常,但把它们放在一起,就能看出明显的异常模式。

审计日志里的经典场景:

  • 账号共享:多个不同部门的账号在短时间从同一 IP 登录
  • 数据窃取:几个账号先后访问同一份敏感文档,每个只下载一页
  • 慢速扫描:多个 IP 轮流扫描同一端口,单个 IP 只扫一次

对付集体异常,传统的点异常检测方法基本没用。你需要用到序列模式挖掘、图分析或者时序关联规则。说白了,得把数据点之间的关系也建模进去。

3.3 异常检测在审计日志中的应用场景

理论讲完了,我们看看实际能在哪些场景落地。审计日志的覆盖面很广,从用户认证到系统调用、从数据访问到网络流量,几乎每个环节都可以用异常检测来发现问题。

📋 四大典型应用场景
场景检测目标常见异常类型我见过的真实案例
用户认证异常暴力破解、撞库、账号盗用点异常、上下文异常某系统一晚上出现 12 万次登录失败
权限使用异常越权访问、权限提升、内部威胁上下文异常、集体异常普通员工突然访问 HR 薪资数据库
数据访问异常批量导出、异常查询、数据泄露点异常、集体异常开发人员在凌晨导出整张用户表
系统操作异常异常命令执行、计划任务篡改上下文异常非运维时段执行高危 Shell 命令

拿「用户认证异常」来说,这是目前落地最成熟的方向。点异常模型可以捕获单账号的登录失败次数突增,上下文异常模型可以捕获非工作时间的异常登录,两者结合效果最好。我在一个项目中把这两类模型做了级联:先用点异常过滤掉明显噪声,再用上下文异常做精细化判断,误报率从 40% 降到了 7%。

「数据访问异常」则更多依赖集体异常。单个用户下载几份文档很正常,但如果一个小组的多个成员同时开始下载同一类敏感文件,就需要引起警惕了。我曾经用图分析方法把用户 - 文件 - 时间三个维度建了一个异构图,检测出了好几起内部数据泄露事件。

3.4 本章知识体系总览

下面这张图把这一章的核心内容串在了一起。从异常检测的概念出发,到三种异常类型的定义和案例,再到审计日志中的落地场景。你可以把它当做后续章节的导航图。

异常检测分类体系 异常检测 点异常 单个数据点显著偏离 上下文异常 依赖时间 / 空间上下文 集体异常 一组数据联合表现异常 登录失败次数突增 流量峰值异常 非工作时间高危操作 异常地理 IP 访问 批量账号协同登录 慢速扫描 / 数据窃取 在审计日志场景中,三类异常往往混合出现。 实际项目建议先做点异常快速过滤,再用上下文和集体异常做深度分析。
📌 我的个人建议:
刚开始接触异常检测时,别想着一次搞定所有类型。我自己的经验是:先从点异常入手,用简单的统计方法(比如 IQR 或 3-sigma)把最明显的异常抓出来。等团队对数据有了感觉,再逐步引入上下文异常和集体异常的检测方法。这样既容易落地,也能快速看到效果。