MCM520 ← 资料站首页 Cyber Strong? 攻防博弈与威胁不确定性下的鲁棒防御策略 打开交互阅读器 →

Cyber Strong? 攻防博弈与威胁不确定性下的鲁棒防御策略

摘要

ICM 2025 F 题要求刻画资产—威胁—防御关系并优化防御资源。本文是第三篇,把第一、二篇「评估 与 投资」推进到「博弈与不确定」:网络安全本质上是一场防御方先手承诺、攻击方最优响应的 Stackelberg 博弈,且威胁发生率本就充满不确定性。我们据此回答:若对手专挑组织最薄弱的一环下手,预算该怎么花才不至于「总分漂亮、命门却一直敞着」?

沿用共享合成组织(10 资产/7 威胁/10 控制),在预算 B=50 内求解 min_S max_i q_i 的 Stackelberg 均衡,得防御方最优组合 C1,C10,C2,C3,C5(成本 45、CS=0.658),其最坏资产年攻陷概率仅 max q=0.243(应用服务器是攻击方最优目标)。与之对照,范文二求业务连续性的 CS 最优组合(C1,C10,C3,C4,C6,C8,成本 49、CS=0.785)综合得分更高,但最坏情形却高达 0.453,几乎是对手的近两倍——这说明「最大化平均/加权保护率」与「守住最弱环节」是两个目标,按业务连续性投资可能把命门留给对手。进一步引入蒙特卡洛威胁不确定性(扰动各威胁年概率,σ=0.15):CS 最优组合的期望最坏损失升至 0.458,而 Stackelberg 组合仅 0.245,鲁棒红利约 0.213,且随 σ 从 0 升到 0.20,红利由 0.210 单调扩到 0.215。结论:不确定性越大,以最坏情形为导向的鲁棒策略越显价值。本文给出从评估到博弈再到鲁棒的完整链路,为「先买什么、防谁」提供量化的塔防直觉。

图1 攻防博弈 + 鲁棒优化框架

一、问题重述

前两篇分别回答了「现在多弱」与「预算内怎么最优买」,但都隐含一个平滑假设:我们把威胁看作统计上均匀的随机事件。可现实中攻击者是有策略的——他会观察你的布防,专挑防线最松的资产打。于是「平均风险不高」与「最坏情形失控」可以同时成立:也许你的综合 CS 分数很好看,但对手一旦盯上某个特定资产(比如应用服务器),它可能比看起来危险得多。此外,威胁年概率本身就不确定:新的攻击手法、零日的出现、季节性的钓鱼高峰,都会让 pkp_k 在真实值与估计值之间波动。本文要回答三个递进问题:① 若对手信息充分、专攻我们最弱的一环,哪些控制最能压缩「最坏资产攻陷概率」?② 这种「守最弱」的鲁棒组合,与「最大化业务连续性总分」的投资组合有何本质冲突?③ 当威胁概率本身不确定(蒙特卡洛扰动)时,哪个策略表现更稳、差距有多大?把三步走通,评估框架才真正闭环为「攻防对抗下的决策」。

二、假设与符号

沿用共享组织设定(资产权重 cic_i 合计 1.0、威胁年概率 pkp_k、控制成本 κc\kappa_c 与缓解效力 ecke_{ck})。新增博弈与不确定性表述:

  • 策略:防御方选择控制子集 SS(预算 ∑c∈Sκc≤B\sum_{c\in S}\kappa_c\le B,B=50B=50);攻击方选择目标资产 ii 使攻陷概率最大。
  • 逐资产攻陷概率 qi(S)q_i(S):同第一篇,由可达该资产的各威胁残余概率并集合成。
  • Stackelberg 均衡:防御方先承诺 SS,攻击方最优响应为 i∗(S)=arg⁡max⁡iqi(S)i^*(S)=\arg\max_i q_i(S);防御方目标为 min⁡SQ(S)\min_S Q(S),其中最坏情形 Q(S)=max⁡iqi(S)Q(S)=\max_i q_i(S)。
  • 威胁不确定性:令标称概率 pkp_k 乘以对数正态扰动 exp⁡(ξk)\exp(\xi_k)、ξk∼N(0,σ2)\xi_k\sim N(0,\sigma^2),并截断到 [0,0.99][0,0.99];给定策略 SS 与 σ\sigma,鲁棒损失 Qˉσ(S)=Eξ[max⁡iqi(S,P(ξ))]\bar Q_\sigma(S)=\mathbb{E}_\xi[\max_i q_i(S,P(\xi))],用蒙特卡洛(固定种子、N=300)估计。
  • 鲁棒红利 Δσ=Qˉσ(Sscore)−Qˉσ(Sstack)\Delta_\sigma = \bar Q_\sigma(S_{\text{score}}) - \bar Q_\sigma(S_{\text{stack}}),即两个策略在不确定性下期望最坏损失的差距。

标称基线 4 项控制 CS=0.440,全控制 CS=0.970 作为上下界参照。

三、模型:攻防博弈与鲁棒优化

3.1 Stackelberg 攻防博弈

在 B=50B=50 内枚举全部可行组合(598 个),对每个组合计算逐资产 qi(S)q_i(S),取其最大值 Q(S)Q(S) 作为攻击方最优响应下的最坏情形;再在所有可行组合中取 Q(S)Q(S) 最小者,即得防御方报出的最稳策略(图 1 框架)。这一步把「投资优化」从「配平平均分」转向「封堵最坏点」,与第二篇形成鲜明对照。

图2 Stackelberg 组合下逐资产攻陷概率

3.2 最坏情形的预算几何

随着预算放宽,防御方能投入更多控制,Q(S)Q(S) 的最优值单调下降(图 3)。关键观察是这条曲线的增益递减:预算从 10 增到 30,最坏情形从 0.821 掉到 0.364;但从 40 到 50,仅从 0.314 微降至 0.243,且在 45 即触底——因为此时最便宜的那几项控制已把最坏资产按需封死,继续加码只能改善平均分、无法再压低最弱点。

图3 最坏情形随预算下降

3.3 威胁不确定性:蒙特卡洛鲁棒损失

用固定种子对 7 维威胁概率施加对数正态噪声,对每个扰动样本按攻击方最优响应重算最坏资产攻陷概率,再取 N=300 个样本的期望,即得鲁棒损失 Qˉσ(S)\bar Q_\sigma(S)。这与把「平均风险」当作期望不同——它期望的是「对手最狠一手的风险」,因而天然保守,适合安全态势评估。

图4 两策略对比

图5 蒙特卡洛分布

四、结果与分析

4.1 Stackelberg 最优组合:宁可分低,命门要堵

博弈求解得防御方最优组合 C1,C10,C2,C3,C5(成本 45、CS=0.658、M=0.500、P=0.861、A=0.867、R=0.200)。如图 2,其逐资产攻陷概率被压得非常均匀,最坏资产为应用服务器 App,max q=0.243;核心数据库(DB)与工控(OT)均仅 0.128。对比基线(CS=0.440、关键资产暴露率 0.601),Stackelberg 组合用中等偏低的成本把「任何一个资产被攻陷」的概率都压到 0.25 以下——这正是针对「专挑软柿子」的对手的有效布防。

4.2 与业务连续性组合的本质冲突

范文二的 CS 最优组合 C1,C10,C3,C4,C6,C8(成本 49、CS=0.785)综合得分高得多,完全符合「按关键性加权保护业务连续性」的逻辑。但切换到攻防视角,它的最坏资产 App 攻陷概率高达 0.453,是 Stackelberg 组合(0.243)的近两倍(图 4 显示「1−最坏情形」前者仅 0.547、后者达 0.757)。原因在于:CS 组合把钱优先投向了「加权占比大、但已相对安全」的数据库/工控/网络侧控制(补丁、零信任、WAF 等),而应用服务器 App 作为 T2 勒索与 T3 DDoS 的交叉攻击面,在缺少针对性控制时成了最薄弱一环。最大化平均分 ≠ 守住最弱环节,这两个目标在预算刚性下不可兼得。

图6 鲁棒损失随 σ 增大

图8 策略前沿

图 8 的「策略前沿」把全部 598 个组合铺在 (CS, 最坏情形 max q_i) 平面上,一眼可见两个策略位于不同角落:CS 最优组合在右下方区域(高 CS、高最坏),Stackelberg 组合在右上方区域(低不多少的 CS、低最坏),而基线落在最差角(0.440, 高最坏)。这直观说明:想同时要「总分高」和「最弱点低」得付出额外代价,决策者须在业务连续性与攻防稳健性之间显式取舍。

4.3 威胁不确定性下的鲁棒红利

蒙特卡洛(N=300、固定种子)在 σ=0.15 时的结果显示(图 5、图 6):CS 最优组合的期望最坏损失被噪声抬到 0.458,Stackelberg 组合仅 0.245,鲁棒红利约 0.213。更有意思的是红利的单调性:σ 从 0 到 0.20,红利由 0.210 扩至 0.215——威胁越不确定,以最坏情形为导向的鲁棒策略相对业务连续性策略的优势越大。图 5 的分布直方图进一步显示,Stackelberg 组合的最坏损失样本集中压在左侧(0.2–0.3),而 CS 组合的样本明显右移且有较厚尾,说明不确定性对不做最坏情形的策略更不友好。

4.4 组合构成与治理含义

图 7 给出 Stackelberg 组合的成本构成:五项合计 45 单位,其中微隔离 C3(14)与 MFA C1(8)、EDR C2(10)、WAF C5(9)、安全培训 C10(4)——不含备份灾备 C8、SIEM C7、邮件网关 C4、补丁 C6、零信任 C9。这看似「反直觉」(没买备份),实则合理:当目标是封堵最坏资产时,优先压缩攻击面(隔离、认证、终端、入口)比事后恢复更有效;恢复力 R=0.200 虽低,但最坏情形已从 0.453 级别的风险压到 0.243,可见「止损优先于补救」的塔防逻辑。

图7 Stackelberg 组合成本构成

五、讨论

本模型把攻击方抽象为「信息充分的单目标优化者」,未考虑攻击者探测成本、回报不对称或多步APT的时序;Stackelberg 假设防御方先手且完全可观察,现实中还有隐蔽部署与随机化布防的可能。鲁棒损失用对数正态扰动近似概率不确定性,未刻画威胁之间相关性(如一次供应链事件同时抬高多条路径),可能略低估联合最坏。蒙特卡洛以固定种子保证可复现,N=300 已能把期望损失的标准误压到约 0.01 量级,足供横向对比;若追求更细的尾部,应加大采样并配极值统计。布防策略与业务连续性策略的取舍最终取决于组织的风险偏好——纯稳健组织选 Stackelberg,平衡型可在两者间做加权。

六、结论

  1. Stackelberg 攻防博弈在 B=50 下给出防御方最优组合 C1,C10,C2,C3,C5(成本 45),最坏资产 App 的攻陷概率压到 0.243,远优于基线。
  2. 与范文二 CS 最优组合(成本 49、CS=0.785)对照,其最坏情形高达 0.453、约为 Stackelberg 的两倍——最大化业务连续性总分 ≠ 守住最弱环节,策略前沿图证明二者在预算刚性下需显式取舍。
  3. 蒙特卡洛威胁不确定性(σ=0.15)下,CS 最优组合期望最坏损失 0.458,Stackelberg 组合仅 0.245,鲁棒红利约 0.213;且 σ 由 0 增至 0.20 时红利单调扩至 0.215——不确定性越大,鲁棒策略越占优。
  4. 组合构成的治理含义:面向攻击面压缩的「止损优先于补救」布防(隔离/认证/入口),对比以灾备为主的恢复型布防,更擅长封堵最坏资产。三篇共同构成「评估—投资—博弈」的完整框架。

参考文献

[1] ICM 2025 Problem F. Cyber Strong? COMAP, 2025.
[2] Kiekintveld, C. et al. Computing Optimal Randomized Resource Allocations for Massive-Scale Security Games. AAMAS 2009.
[3] ISO/IEC 27001. Information Security Management. 2022.
[4] von Stackelberg, H. Marktform und Gleichgewicht. 1934.
[5] MITRE ATT&CK. Adversary Tactics and Techniques. https://attack.mitre.org.
[6] 范文一:资产—威胁—防御网络 + Cyber Strong 评估(本系列)。
[7] 范文二:预算约束下的防御投资优化(本系列)。


附录:核心 Python 实现

下列代码复现本文关键结果:Stackelberg 最弱环节求解、与业务连续性组合的最坏情形式对比、蒙特卡洛威胁不确定性下的鲁棒损失与鲁棒红利。运行需 tools/ 下的 gen_mcm2025f_data.py(共享引擎)与 gen_mcm2025f_3.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
import gen_mcm2025f_3 as M

BUDGET = 50
feasible = D.enumerate_portfolios(max_cost=BUDGET)
print("可行组合数 = %d" % len(feasible))

# 1) Stackelberg:防御方先手,攻击方专挑最坏资产
best = min(feasible, key=lambda t: M.stackelberg_loss(t[0]))
S_stack = best[0]
comp_stack = D.components(S_stack)
loss_stack = M.stackelberg_loss(S_stack)
print("Stackelberg 组合: %s 成本=%d CS=%.3f 最坏max q=%.3f"
      % (",".join(sorted(S_stack)), best[1], comp_stack["CS"], loss_stack))

# 2) 业务连续性(CS 最优)组合对照
S_score = set(["C1", "C10", "C3", "C4", "C6", "C8"])
comp_score = D.components(S_score)
loss_score = M.stackelberg_loss(S_score)
print("CS 最优组合:   %s CS=%.3f 最坏max q=%.3f"
      % (",".join(sorted(S_score)), comp_score["CS"], loss_score))
print("最坏情形差距: CS最优/Stackelberg = %.2f 倍"
      % (loss_score / loss_stack))

# 3) 蒙特卡洛威胁不确定性下的鲁棒损失(固定种子)
SIG = 0.15
rs = M.robust_loss(S_score, SIG)
rk = M.robust_loss(S_stack, SIG)
print("σ=%.2f: CS最优鲁棒损失=%.3f  Stackelberg鲁棒损失=%.3f  鲁棒红利=%.3f"
      % (SIG, rs, rk, rs - rk))

# 4) 鲁棒红利的单调性
for s in [0.00, 0.10, 0.20]:
    d = M.robust_loss(S_score, s) - M.robust_loss(S_stack, s)
    print("  σ=%.2f 鲁棒红利=%.3f" % (s, d))