漏洞与威胁建模
漏洞与威胁建模
复习定位
漏洞不是随机事件——可以被分类、评分、追踪和预防。CVE系统让全世界安全研究者使用同一名称引用漏洞——CVSS量化了漏洞的严重性——帮助确定修复优先级。威胁建模通过系统化的方法(STRIDE/攻击树/DFD)在设计阶段发现安全漏洞——而不是在代码上线以后。SDL(安全开发生命周期)模型将安全的织入软件开发的每一个阶段。
CVE与CVSS
CVE(Common Vulnerabilities and Exposures)——为每个公开的漏洞分配一个唯一ID——格式为CVE-年份-序列号——如CVE-2021-44228(Log4Shell)。CVE不包含漏洞的技术细节——只是给漏洞一个参考ID——查找漏洞详情需前往NVD(National Vulnerability Database)查看相应的CVSS评分和描述。
CVSS(Common Vulnerability Scoring System)——从三组度量指标综合计算一个0-10的分数:
基础分——不可改变的漏洞相关特征:
- AV(攻击向量)——网络/相邻(局域网)/本地(Local)/物理
- AC(攻击复杂度)——低/高(是否需要特定条件)
- PR(所需权限)——无/低/高(攻击前需要多少用户权限)
- UI(用户交互)——无/需要
- S(影响范围)——不变/变化(漏洞是否影响非信任域)
- C/I/A(机密性/完整性/可用性影响)——无/低/高
CVSS基础分等级:0-3.9低、4-6.9中、7-8.9高、9-10严重。
STRIDE威胁模型
微软的STRIDE将威胁分为六种(Spoofing欺骗/Tampering篡改/Repudiation抵赖/Information Disclosure信息泄露/DoS拒绝服务/Elevation of Privilege提权)。前文安全基本概念章节已详细描述。
攻击树
攻击树用树状图表示达成一个攻击目标的各种路径。根节点表示攻击终极目标——子节点表示达成该目标所需的子步骤。叶节点表示具体的攻击动作。对攻击树标注成本、难度、所需特权——可以帮助防御方识别出最容易和最便宜的攻击路径并优先防御。
数据流图与威胁建模
数据流图(DFD)作为威胁建模的输入——描述了系统的外部实体、处理过程、数据存储、数据流以及信任边界。在每个数据流和每个处理节点上——应用STRIDE检查可能的威胁——并记录缓解措施(要求使用HTTPS|增加身份验证|输出编码等)。
安全开发生命周期(SDL)
微软SDL将安全贯穿项目始终:
- 培训——开发人员接受安全编码和威胁建模培训
- 需求——明确安全需求、隐私要求、合规标准
- 设计——进行威胁建模、数据流图分析、攻击面分析、技术隐私评估
- 实现——使用安全函数(不使用
strcpy之类的)、执行静态分析工具、代码检查 - 验证——动态分析、模糊测试、渗透测试
- 发布——最终安全性评估、事件响应计划编制
- 响应——建立漏洞报告渠道、收到报告→调查→修复→补丁分发
复习检查
CVSS中AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H——解释逐字段含义——这为什么能得到10分(完全网络可攻击、无需权限、无需交互、严重的信息影响——代表漏洞可造成完全系统危害——如Log4Shell)。
STRIDE的欺骗(Spoofing)与提权(Elevation of Privilege)的区别——欺骗是冒充别人身份——提权是自己不是那个身份但获得了超过授权的权限。
攻击树为什么可以帮助防御方确定修复优先级——标记出低成本/高成功率的攻击路径——优先对这些路径实施防御措施。
数据流图中的信任边界——数据流从一个信任区到另一个信任区时——需验证和过滤——这是威胁建模检查的重点。
SDL的"安全前置"原则——为什么要投入大量时间在设计阶段做威胁建模——因为修复设计阶段的缺陷比修复已上线产0的漏洞成本低很多数量级——投入也在需求/设计阶段最为高效。