Skip to content

R2. 贝叶斯风险评估决策

案例来源: decision-security + pgmpy
决策类型: 风险优先级排序
方法论: 贝叶斯网络 + 因果推断
预计阅读时间: 13 分钟


1. 决策背景

业务场景

某企业面临复杂安全风险: - 风险类型:网络/数据/物理/合规 - 风险因素:20+ 相互关联 - 传统方法:风险矩阵 (静态/主观) - 问题:无法量化风险传播

决策目标

  • 量化风险概率
  • 识别关键风险路径
  • 动态风险评估
  • 优化缓解措施投资

2. 方法论:贝叶斯网络

网络结构

外部威胁 → 攻击尝试 → 漏洞利用 → 数据泄露 → 业务损失
     ↓           ↓          ↓          ↓          ↓
 威胁情报    防火墙    补丁管理    加密/DLP   保险/应急

贝叶斯优势

  • ✅ 处理不确定性
  • ✅ 建模因果关系
  • ✅ 更新后验概率
  • ✅ 反事实推理

3. 模型实现

pgmpy 实现

from pgmpy.models import BayesianNetwork
from pgmpy.factors.discrete import TabularCPD
from pgmpy.inference import VariableElimination

# 1. 定义网络结构
model = BayesianNetwork([
    ('Threat', 'Attack'),
    ('Vulnerability', 'Attack'),
    ('Attack', 'Breach'),
    ('Control', 'Breach'),
    ('Breach', 'Loss')
])

# 2. 定义条件概率分布 (CPD)
cpd_threat = TabularCPD(
    variable='Threat',
    variable_card=2,
    values=[[0.7], [0.3]]  # 低/高威胁概率
)

cpd_vulnerability = TabularCPD(
    variable='Vulnerability',
    variable_card=3,
    values=[[0.2], [0.5], [0.3]]  # 低/中/高
)

cpd_attack = TabularCPD(
    variable='Attack',
    variable_card=2,
    values=[
        [0.9, 0.7, 0.5, 0.3, 0.2, 0.1],  # P(Attack|Threat,Vulnerability)
        [0.1, 0.3, 0.5, 0.7, 0.8, 0.9]
    ],
    evidence=['Threat', 'Vulnerability'],
    evidence_card=[2, 3]
)

# 3. 添加 CPD 到模型
model.add_cpds(cpd_threat, cpd_vulnerability, cpd_attack)

# 4. 推理
inference = VariableElimination(model)

# 查询先验概率
prob_attack = inference.query(variables=['Attack'])
print(f"P(Attack) = {prob_attack.values[1]:.2%}")

# 查询后验概率 (观察到高威胁)
prob_attack_given_threat = inference.query(
    variables=['Attack'],
    evidence={'Threat': 1}  # 高威胁
)
print(f"P(Attack|High Threat) = {prob_attack_given_threat.values[1]:.2%}")

风险传播模拟

def risk_propagation(threat_level, control_effectiveness):
    """
    模拟风险传播
    """
    # 更新证据
    result = inference.query(
        variables=['Loss'],
        evidence={
            'Threat': threat_level,
            'Control': control_effectiveness
        }
    )

    expected_loss = sum(
        loss_value * prob 
        for loss_value, prob in zip(loss_outcomes, result.values)
    )

    return expected_loss

# 场景分析
scenarios = [
    {'name': '基线', 'threat': 1, 'control': 1},
    {'name': '威胁升级', 'threat': 2, 'control': 1},
    {'name': '控制加强', 'threat': 1, 'control': 2},
    {'name': '最坏情况', 'threat': 2, 'control': 0}
]

for scenario in scenarios:
    loss = risk_propagation(
        scenario['threat'],
        scenario['control']
    )
    print(f"{scenario['name']}: 预期损失 = ¥{loss:,.0f}")

4. 决策结果

风险评估结果

风险路径 概率 影响 风险值 优先级
钓鱼→凭证泄露→数据泄露 15% ¥50M ¥7.5M P0
漏洞→勒索软件→业务中断 8% ¥100M ¥8M P0
内部威胁→数据窃取 5% ¥30M ¥1.5M P1
DDoS→服务中断 20% ¥10M ¥2M P1

控制措施效果

控制措施 成本 风险减少 ROI
安全意识培训 ¥0.5M ¥3M 500%
多因素认证 ¥1M ¥5M 400%
漏洞管理 ¥1.5M ¥6M 300%
应急响应 ¥2M ¥4M 100%

业务影响

指标 实施前 实施后 改善
风险识别率 60% 90% +50%
风险评估准确度 ±40% ±15% -62%
风险缓解 ROI 150% 320% +113%
风险事件数 25/年 10/年 -60%

5. 关键洞察

风险放大效应

单一风险:¥5M
级联风险:¥25M (5 倍放大)

关键放大节点:
1. 凭证泄露 → 横向移动
2. 权限提升 → 核心系统
3. 数据 exfiltration → 合规罚款

最优投资策略

1. 先投资预防性控制 (培训/MFA)
2. 再投资检测性控制 (监控/SIEM)
3. 最后投资响应性控制 (应急/保险)

最优比例:预防 50% : 检测 30% : 响应 20%

案例版本: v1.0 | 最后更新: 2026-06-03