A10.07.1Layered defenses and hole alignment设计研究

多层防御与漏洞对齐

别名: 瑞士奶酪模型 · Swiss cheese model · defense in depth

概念解释

瑞士奶酪模型(Swiss cheese model)把一个系统的安全保障描述为若干层独立防御叠加在一起——培训、操作规程、界面约束、监督检查、自动联锁——每一层都像一片奶酪切片,本身带着大小不一、位置不定的漏洞(孔洞)。系统之所以在绝大多数时候是安全的,是因为各层的漏洞很少同时出现在同一条路径上;一次事故的发生,是碰巧几层漏洞在同一时刻沿同一条轨迹对齐,让一个危险因素穿透了本该拦截它的全部屏障。这个模型要回答的问题不是"哪一层失效了",而是"为什么坏结果几乎从不是单一环节的错,而总是多个独立薄弱点在特定时刻的巧合排列"。

机制

多层防御的保护效果建立在漏洞相互独立这个假设上。某一层的弱点可能是暂时性的——一次操作疲劳、一次维护延误;另一层的弱点可能是结构性的——一个从未被验证过的边界条件、一处长期存在却未暴露的设计缺陷。只要这些漏洞各自的成因互不相关,它们同时出现在同一路径上的概率就会随层数增加而急剧下降,这正是"层层设防"比单点强化更可靠的原因。但这个保护会在一种情况下悄悄失效而不被察觉:如果两层或多层防御共享同一个触发原因——都依赖同一个人的判断、运行同一段代码、来自同一个供应商——它们在统计上就不再独立,表面上的"多层"实际上只提供了一层的保护强度,因为一次共因失效会同时捅穿所有看起来独立的屏障。

怎么研究

支持这一模型的证据主要来自对重大事故调查报告的回溯性分析:航空、核电、医疗等高风险行业的事故数据库反复显示,绝大多数造成严重后果的事件都涉及不止一个独立环节的同时失效,而不是教科书式的单一原因。这类研究的常见做法是取一批已结案的事故报告,逐一列出报告认定的促成因素数量与类型,统计单因素事故与多因素事故的比例。方法论注意点:这种统计天然受限于调查报告本身的完整程度——调查越深入,被记录下来的促成因素往往越多,因此"多因素事故占多数"这一结论部分是调查方法本身的产物,需要与调查深度做交叉核对,而不能直接当作某个具体系统里漏洞数量的度量。

边界

这个模型描述的是防御层之间事后被发现互相独立或不独立,而不是事前就能测出独立性。两层防御是否共享失效原因,往往要等到它们一起失效之后才能确认——设计阶段很难穷尽列出所有可能的共因路径。此外,模型假设各层大体上是静态排列的实体屏障,对那些会随事件展开而动态重组、彼此实时补偿的系统(例如有经验的团队在异常发生时临时改变分工),层与层的边界本身就是流动的,用固定层数去描述会失真。

怎么落地

在设计防御体系时,主动检查各层是否共享同一失效原因:是否都依赖同一个人在同一时刻做判断、是否都运行在同一份代码或同一次配置之上、是否都由同一个外部依赖供给数据。凡是能找到共同触发点的两层,在事故意义上应被当作一层来计算冗余度,而不是按层数直接相加。对后果严重的操作,优先让相邻层使用不同的检测原理(例如一层靠人工确认、一层靠独立传感器读数、一层靠系统自动拦截),避免用同一种手段重复设置多道关卡制造虚假的安全感。验证办法:列出系统里每一道防御的失效前提,画出它们的依赖关系图,检查是否存在一个单点(一个人、一段代码、一个供应商)同时出现在两条或以上防御的失效前提里;如果存在,这两层就不是真正独立的冗余。

延伸

  • 同组A10.07.2 显性失效与潜在条件的区分 · A10.07.3 单层防护不足以承担高后果 · A10.07.4 该模型用于事故分析,直接用作设计方法有边界
  • 相邻A10.06 防错设计 · A10.14 强制功能与连锁 · Y7.01 系统性成因
  • 站内检索Swiss cheese model · defense in depth · common-mode failure

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/A10.07.1