每周三下午的消防演习

假设学校规定每周三下午两点拉一次消防警报,全体到操场集合。第一周大家都跑,第二周开始有人慢悠悠走,第四周有人干脆不动,只在窗边看一眼。第八周,真的着火了,警报响起来,教室里的人先看了一眼时间,两点整,周三。

这不是纪律问题。人在面对同一个信号反复出现、又反复没有后果的时候,反应会自然衰减,这个过程在心理学里叫习惯化。消防演习的组织者其实知道这件事,所以规定演习不能太频繁,也不会提前通知具体日期。

但很多做安全的人忘了这一条。

那个喊狼的孩子

《伊索寓言》里有一则很短的故事,中文一般叫《狼来了》,英文是 The Boy Who Cried Wolf,在佩里索引里编号 210。

故事说的是一个放羊的孩子,觉得无聊,就朝村里喊狼来了。村民们拿着农具跑出来,发现没有狼,孩子笑得很开心。过了几天他又喊了一次,村民又跑了一趟,还是没有狼。第三次,狼真的来了,孩子拼命喊,没有人再出来。羊被吃了。

寓言通常被读成一句话:不要撒谎,否则没人信你。这个读法没错,但它只讲了道德,没讲机制。在安全领域,这则寓言还有一层意思:牧童不是突然变成一个骗子的,他是被一个允许他反复试错的机制惯出来的;而村民也不是突然变冷漠的,他们的反应是被一次次无效报警训练成这样的。

忽略警报为什么是理性的

这里要算一笔账。

假设你每天要处理一批告警。响应一条告警的成本是 $C$,包括打断手上的工作、核实、走流程,折算成时间。漏掉一条真告警的损失是 $L$,可能是数据被拿走,也可能是系统被打穿,折算成时间会很大。

真实告警在所有告警里的占比记为 $p$。那么你面对一条告警时,两个选择的期望成本是:

当 $p \cdot L < C$ 时,忽略的期望成本更低。

把这个不等式整理一下,得到一条分界线:

也就是说,当真实告警的比例低于响应成本与漏报损失之比时,忽略在数学上是划算的。

举个具体数字。假设响应一条告警平均要 10 分钟,漏掉一次真事件的损失折算成 1000 分钟。那么分界线是 $10/1000 = 1\%$。只要一百条告警里真的不到一条,那么对个人来说,全部忽略是理性的。

这句话听着不舒服,但它是问题所在:告警系统的设计者把”多报总比漏报好”当成安全的选择,实际上是把成本转嫁给了收警报的人,而收警报的人会用脚投票。

现代场景

钓鱼演练是最典型的例子。很多单位规定每月发一次演练邮件,模板一年不换,标题永远是”您的邮箱容量已满”或者”请查收工资条”。前三个月还有人认真举报,半年之后,员工看一眼发件人就归档,连点都不点开。这时候来一封真的钓鱼邮件,它和演练邮件长得几乎一样,员工按处理演练邮件的习惯处理它。

账号异常提醒是第二个例子。一个异地登录就发一封,出差、开代理、用手机流量都会触发。一个月收十几封之后,这条提醒就变成背景噪音,真正的撞库登录混在里面没人看。

第三个例子在安全运营中心。一个漏扫任务能在半天里刷出几千条告警,同一个漏洞在不同资产上重复报,同一条规则对同一个 IP 反复报。值班的人面对几千条,只能按经验挑几条看。攻击者恰恰知道这一点,所以会挑告警最密集的时间段动手。

怎么把警报的信用修回来

四个办法,按见效速度排。

第一是收敛。同一条规则对同一个目标在时间窗口内只发一次,同一个根因触发的多条告警合并成一条。这一步通常能把量降一个数量级,而且不牺牲真实告警。

第二是分级。把”需要立刻动手”的和”需要知道一下”的分开,前者单独走一个通道,后者进日报。分级的难点不是技术,是定义:什么叫立刻。写清楚触发条件,不要留”视情况而定”。

第三是控制演练的频率和可辨识度。演练不是越多越好,频率高到员工形成条件反射,就等于自己训练员工忽略警情。比较常见的做法是低频、随机日期,并且让演练邮件在内部系统里可标记,事后能区分谁举报了、谁点了。

第四是把误报率当成指标。很多安全团队考核的是”发了多少条告警””覆盖了多少人”,这两个数字越大看着越安全,实际上可能越糟。真正该看的是误报率、平均响应时间、以及被忽略的真告警数量。

这四条都不是新技术,难点在于有人要先停手。回路一旦转起来,减少告警的人反而要承担漏报的责任,所以谁也不愿意做那个先关阀门的人。

图一

图一:警报疲劳的形成回路。每一环单独看都合理,连起来就变成了一个自我加速的过程。

回到村子

牧童的故事里,最后羊被吃了,孩子没事。现实里被吃掉的往往不是羊。

防火墙能挡住病毒,挡不住一个认定自己已经免疫的人。