Python实现轻量级信息安全风险评估模型 1. 项目概述信息安全风险评估是每个企业IT部门都必须面对的基础工作。传统的人工评估方式不仅效率低下而且容易因主观因素导致评估结果偏差。最近我用Python开发了一套轻量级风险评估模型能够自动化完成资产价值计算和风险值评估大幅提升了工作效率。这个模型的核心思路是将风险评估拆解为三个关键步骤首先量化资产价值然后评估威胁发生的可能性及潜在影响最后综合计算风险值。整个过程不到50行Python代码即可实现但效果却比人工评估更加客观准确。2. 风险评估模型设计原理2.1 资产价值评估体系资产价值评估是风险评估的第一步。我将资产价值划分为五个维度业务重要性权重30%该资产对核心业务的支持程度数据敏感性权重25%存储或处理的数据敏感级别系统依赖性权重20%其他系统对该资产的依赖程度替代成本权重15%资产损坏后的恢复或重建成本合规要求权重10%相关法律法规对该资产的保护要求每个维度采用1-5分的评分标准最终加权计算得出资产价值分数AV。def calculate_asset_value(business_importance, data_sensitivity, system_dependency, replacement_cost, compliance_requirements): weights [0.3, 0.25, 0.2, 0.15, 0.1] scores [business_importance, data_sensitivity, system_dependency, replacement_cost, compliance_requirements] return sum(w*s for w,s in zip(weights, scores))2.2 威胁评估模型威胁评估需要考虑两个关键因素威胁发生可能性L1-5分基于历史数据和专家经验评估潜在影响程度I1-5分评估威胁发生后可能造成的损失风险值R的计算公式为R L × I × AV / 5def calculate_risk(likelihood, impact, asset_value): return (likelihood * impact * asset_value) / 53. 模型实现与核心代码3.1 数据准备与预处理首先需要准备资产清单和威胁清单两个基础数据集assets [ {name: 客户数据库, business_importance: 4, data_sensitivity: 5, system_dependency: 4, replacement_cost: 3, compliance_requirements: 5}, {name: 内部邮件系统, business_importance: 3, data_sensitivity: 3, system_dependency: 3, replacement_cost: 2, compliance_requirements: 2} ] threats [ {name: SQL注入攻击, likelihood: 3, impact: 4}, {name: 钓鱼邮件攻击, likelihood: 4, impact: 3} ]3.2 风险评估主流程完整的风险评估流程实现如下def perform_risk_assessment(assets, threats): results [] for asset in assets: av calculate_asset_value( asset[business_importance], asset[data_sensitivity], asset[system_dependency], asset[replacement_cost], asset[compliance_requirements] ) asset_risks [] for threat in threats: risk calculate_risk( threat[likelihood], threat[impact], av ) asset_risks.append({ threat: threat[name], risk_value: risk }) results.append({ asset: asset[name], asset_value: av, risks: sorted(asset_risks, keylambda x: x[risk_value], reverseTrue) }) return results3.3 风险评估可视化使用matplotlib生成风险评估热力图import matplotlib.pyplot as plt import numpy as np def plot_risk_matrix(results): assets [r[asset] for r in results] threats [t[name] for t in threats] risk_values np.zeros((len(assets), len(threats))) for i, r in enumerate(results): for j, risk in enumerate(r[risks]): risk_values[i,j] risk[risk_value] fig, ax plt.subplots(figsize(10,6)) im ax.imshow(risk_values, cmapYlOrRd) ax.set_xticks(np.arange(len(threats))) ax.set_yticks(np.arange(len(assets))) ax.set_xticklabels(threats) ax.set_yticklabels(assets) plt.setp(ax.get_xticklabels(), rotation45, haright, rotation_modeanchor) for i in range(len(assets)): for j in range(len(threats)): text ax.text(j, i, f{risk_values[i,j]:.1f}, hacenter, vacenter, colorblack) ax.set_title(信息安全风险评估矩阵) fig.tight_layout() plt.show()4. 模型优化与扩展4.1 动态权重调整在实际应用中我们发现固定权重可能不适合所有场景。改进后的模型支持动态权重def calculate_asset_value_dynamic(scores, weightsNone): if weights is None: weights [0.3, 0.25, 0.2, 0.15, 0.1] return sum(w*s for w,s in zip(weights, scores))4.2 多维度风险聚合对于复杂系统需要考虑多个威胁的综合影响def calculate_aggregated_risk(risks): base_risk max(r[risk_value] for r in risks) avg_risk sum(r[risk_value] for r in risks) / len(risks) return 0.7 * base_risk 0.3 * avg_risk4.3 风险评估报告生成使用Python-docx自动生成风险评估报告from docx import Document def generate_report(results, filename风险评估报告.docx): doc Document() doc.add_heading(信息安全风险评估报告, 0) for result in results: doc.add_heading(f资产: {result[asset]}, level1) doc.add_paragraph(f资产价值: {result[asset_value]:.2f}) table doc.add_table(rows1, cols3) hdr_cells table.rows[0].cells hdr_cells[0].text 威胁 hdr_cells[1].text 风险值 hdr_cells[2].text 风险等级 for risk in result[risks]: row_cells table.add_row().cells row_cells[0].text risk[threat] row_cells[1].text f{risk[risk_value]:.2f} row_cells[2].text get_risk_level(risk[risk_value]) doc.save(filename) def get_risk_level(value): if value 15: return 极高 elif value 10: return 高 elif value 5: return 中 else: return 低5. 实际应用中的经验分享5.1 评分标准制定技巧业务重要性评分建议5分直接影响核心收入来源的系统4分支持关键业务流程的系统3分辅助性业务系统2分内部支持系统1分非关键系统数据敏感性评分参考def get_data_sensitivity_level(data_type): sensitivity_map { 个人身份信息: 5, 财务数据: 5, 商业秘密: 4, 员工信息: 3, 公开信息: 1 } return sensitivity_map.get(data_type, 2)5.2 常见问题排查风险评估结果普遍偏高检查威胁可能性评分是否过高验证资产价值权重分配是否合理确认影响程度评分标准是否过于严格风险评估结果差异大确保评分标准明确具体对评估人员进行统一培训建立评分参考案例库模型运行效率问题对于大规模资产清单考虑使用numpy向量化计算实现风险评估缓存机制采用多进程并行计算5.3 进阶优化方向集成威胁情报数据def get_threat_intelligence(threat_name): # 连接威胁情报API获取实时数据 return updated_likelihood机器学习辅助评分使用历史评估数据训练预测模型自动建议资产价值和威胁评分异常评分检测与提醒自动化数据采集从CMDB系统自动获取资产信息从安全设备日志提取威胁数据与漏洞扫描系统集成这套风险评估模型虽然代码量不大但在实际工作中已经帮助我们的安全团队将风险评估效率提升了3倍以上同时使评估结果更加客观一致。特别是在合规审计场景中这种基于量化模型的评估方式更容易获得审计人员的认可。