Cyber Strong? 资产—威胁—防御网络与网络强健度评估
摘要
ICM 2025 F 题要求为组织设计网络安全的"强健度(cyber strong)"评估与投资框架。本文是第一篇,聚焦评估本身:把组织抽象为"资产—威胁—防御"三元网络,用图论刻画资产依赖与横向移动攻击面,用概率论量化每类威胁在防御下的残余暴露,由此给出可分解、可解释的网络强健度四分量指标体系(成熟度 M、关键资产保护率 P、可用性 A、恢复力 R),综合得到 Cyber Strong 指数 CS。
我们以一家合成的中型关键基础设施组织(10 类资产、7 类威胁、10 项防御控制)为算例。评估显示:该组织基线仅部署了 4/10 控制(MFA、EDR、备份灾备、安全意识培训),综合 CS 仅 0.440,处于"脆弱"区间;核心数据库与工控系统年攻陷概率高达 0.664,关键资产加权暴露率达 0.601——即超过六成的关键业务价值常年暴露在攻击路径上。若部署全部 10 项控制,CS 可升至 0.970。但敏感度分析揭示一个反直觉结论:控制数量不等于强健度——基线那 4 项控制若换成"最优 4 项",CS 本可达 0.735;盲目堆叠与精准布防相差近 0.3。这为第二篇的"投资优化"埋下伏笔。
一、问题重述
赛题要求刻画资产—威胁—防御关系,量化网络韧性与安全成熟度,并在预算与合规约束下优化防御资源配置。本文回答其中最基础也最易被跳过的一步:如何把"网络强不强"变成一个可计算、可分解、可审计的数字。许多安全评估停留在"打了哪些补丁"的清单层面,既无法横向比较不同组织,也无法告诉决策者"下一笔钱该花在哪"。本文的 Cyber Strong 指数正是为填补这一空白:它把零散的控制项收敛为一个 0–1 之间的标量,同时保留四个可解释分量,使"弱在哪、强在哪"一目了然。把安全状态压缩成单一数字并非为了取代专家判断,而是为了给专家判断提供一把可比的尺子——同一把尺子既能横向比较不同分支机构,也能纵向追踪同一组织随年份的演进,还能在投资前预测"这笔钱下去分数能涨多少"。这正是赛题所要求的"评估框架"应有的样子:既是仪表盘,也是决策依据。
二、假设与符号
沿用合成组织设定。资产集合 (10 类),第 项资产关键性权重 (合计 1.0);威胁集合 (7 类),威胁 年发生概率 、攻击面 ;控制集合 (10 项),控制 对威胁 的缓解效力 ,成本 。在位控制集合记为 。
核心量定义如下:
- 威胁残余概率 ,即基础概率扣除串联缓解后的残余;
- 资产年攻陷概率 ,其中 为威胁 经资产依赖边可达的资产集合(含直接攻击面), 在启用网络微隔离时退化为直接攻击面;
- 四分量:(成熟度),(按关键性加权的关键资产保护率),(整体可用性), 为恢复力能力指标(备份灾备、监测响应、网络隔离在位则累加,封顶 1);
- 综合指数 。
权重的设定体现了对"关键资产存活"的最高关切( 占 0.40),这与业务连续性目标一致。
三、模型:资产—威胁—防御网络与强健度评估
3.1 网络建模
资产依赖边刻画了横向移动路径:一旦某个入口资产(如邮件、终端、Web)被攻陷,攻击可沿依赖边扩散至下游(数据库、工控、云存储)。图 2 以颜色标示关键性(越红越关键)、以边标示移动路径,直观呈现"攻击面如何借依赖关系放大"。这种图论视角把静态的资产清单转化为动态的暴露拓扑,是后续概率评估的骨架。
3.2 概率评估
对每一类威胁,先按在位控制计算串联缓解率,得残余概率;再将其映射到可达资产集合,用并集公式合成每资产年攻陷概率 。该方法把"威胁频率"与"资产暴露"两个维度耦合,避免了"只看攻击多不多"或"只看资产重不重要"的片面判断。
图 3、图 4 分别给出资产的"价值侧"与威胁的"危险侧"。核心数据库(权重 0.18)、工控系统(0.16)、身份认证(0.15)是价值高地;钓鱼(0.55)、勒索(0.40)、撞库(0.35)是高频威胁。高风险往往出现在"高价值资产恰好落在高频威胁的可达集合内"的交叉处。
3.3 暴露矩阵与四分量合成
暴露矩阵(图 5)把"哪类威胁能摸到哪类资产、残余多大"铺成热力图,是定位要害的直接工具。将逐资产 与四分量公式结合,即得到可分解的综合指数。
四、结果与分析
4.1 基线:一家"看似有防护"的脆弱组织
基线组织在位的 4 项控制(C1 MFA、C2 EDR、C8 备份灾备、C10 安全培训)看似覆盖了身份、终端、恢复、人因,但四分量评估揭穿了表象:M=0.400、P=0.399、A=0.400、R=0.600,综合 CS=0.440。关键资产加权暴露率高达 0.601——超过六成的关键业务价值常年处于可被攻陷的状态。
图 6 对比了基线(4/10 控制)与全控制(10/10)下七类威胁的残余概率。基线对 DDoS(T3)几乎无缓解(残余 0.300,因缺少 WAF),对供应链攻击(T6)残余 0.200(缺补丁管理与零信任),对内部人员(T5)残余 0.120。说明基线的控制组合存在明显"偏科":守住了身份与终端入口,却放任了网络层与供应链侧的高危路径。
4.2 要害资产已在射程之内
逐资产攻陷概率(图 7)显示,核心数据库与工控系统的年攻陷概率均达 0.664,身份认证为 0.472。这意味着在组织当前的防御下,核心数据库在任意给定年份有约三分之二的概率被攻陷——这绝非"小概率事件",而是应当按"年年都会发生"来规划的常态风险。尤其工控系统一旦失守,不仅数据受损,物理生产也可能受波及,其 0.664 的攻陷概率与数据库并列最高,是必须优先封堵的命门。
4.3 四分量分解:弱在"保护"而非"恢复"
图 8 将基线四分量展开。可以看到恢复力 R=0.600 其实不差(备份灾备在位),可用性 A=0.400 与成熟度 M=0.400 随控制数量线性,真正拖垮总分的是保护率 P=0.399——即关键资产被攻陷的加权概率过高。这精准指向了优化方向:下一笔投入应优先压低关键资产的暴露,而非继续提升已经尚可的恢复能力。
4.4 数量不等于强度:边际递减与组合效应
敏感度分析枚举了"恰好 k 项控制"下能取得的最高 CS(上包络),得到清晰的边际递减曲线:k=1→0.436、k=2→0.576、k=3→0.656、k=4→0.735、k=5→0.795、k=6→0.842、k=7→0.879、k=8→0.915、k=9→0.946、k=10→0.970。值得注意的是,基线那 4 项控制只取得 0.440,而"最优 4 项"本可达 0.735——差距近 0.3 完全来自"选了什么"而非"选了多少"。这印证了赛题对"关键资产需单列优先级、避免均摊预算"的告诫:强健度是组合问题,不是数量问题。
这条曲线还透露出第二层管理含义:从 k=7 到 k=10,每多一项控制的边际增益已降至约 0.025,而前三项(k=1→k=4)的边际增益高达约 0.1。换句话说,前三分之一的投入产出比约为后三分之一的四倍——在预算有限时,与其追求"全覆盖"的完美主义,不如先精准锁定那几个性价比最高的控制,把 CS 从 0.44 拉到 0.8 附近,再视余力补足长尾。这种"先急后缓"的节奏,正是第二篇要用优化模型正式化的直觉。
五、讨论
本模型对威胁概率取年频率常数、未建模攻击者的自适应与零日的具体利用链,也未考虑控制之间的协同溢出(如零信任同时降压多种横向移动)。此外,残余概率的"并集"近似在多重威胁叠加时会略高估独立暴露,但作为组织间横向比较与优先级排序的工具已足够稳健。恢复力 R 采用能力指标而非实测恢复时长,是可解释性与数据可得性之间的折中。
六、结论
- 网络强健度可被分解为成熟度 M、关键资产保护率 P、可用性 A、恢复力 R 四分量,综合 CS 兼具可比性与可解释性。
- 算例基线 CS=0.440,核心数据库与工控系统年攻陷概率达 0.664,关键资产加权暴露率 0.601,处于脆弱区间。
- 基线的短板在"保护率 P"而非"恢复力 R",优化应优先压低关键资产暴露。
- 控制数量不等于强健度:最优 4 项可达 0.735,而基线 4 项仅 0.440——选什么比选多少更重要,这引向第二篇的投资优化。
参考文献
[1] ICM 2025 Problem F. Cyber Strong? COMAP, 2025.
[2] ISO/IEC 27001. Information Security Management. 2022.
[3] MITRE ATT&CK. Adversary Tactics and Techniques. https://attack.mitre.org.
[4] Alberts C., Dorofee A. Managing Information Security Risks: OCTAVE Approach. 2002.
[5] 范文二:预算约束下防御投资优化(本系列,待续)。
[6] 范文三:攻防博弈与威胁不确定性鲁棒策略(本系列,待续)。
附录:核心 Python 实现
下列代码复现本文关键结果:基线/全控制的四分量与综合 CS、核心资产攻陷概率、威胁残余概率。运行需 tools/ 下的 gen_mcm2025f_data.py(共享引擎)。
import sys, os
_HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.abspath(os.path.join(_HERE, "..", "..", "..", "tools")))
import gen_mcm2025f_data as D
base = D.BASELINE
comp = D.components(base)
print("基线四分量 M=%.3f P=%.3f A=%.3f R=%.3f -> CS=%.3f"
% (comp["M"], comp["P"], comp["A"], comp["R"], comp["CS"]))
print("基线关键资产暴露率 = %.3f" % (1 - comp["P"]))
for a in ("DB", "OT", "Auth"):
print(" 关键资产[%s] q=%.3f" % (a, comp["q"][a]))
full = D.components(set(D.CIDS))
print("全控制 CS=%.3f" % full["CS"])
base_res = [round(t["p"] * (1 - D.threat_mitigation(t["id"], base)), 3) for t in D.THREATS]
full_res = [round(t["p"] * (1 - D.threat_mitigation(t["id"], set(D.CIDS))), 3) for t in D.THREATS]
print("基线残余:", base_res)
print("全控残余:", full_res)