2. 数据安全威胁建模与风险分析

威胁建模不是安全团队的“文档作业”,而是把数据资产、攻击路径与业务影响放在同一张图上做推理的过程。对数据安全架构而言,核心问题不是“系统有没有漏洞”,而是“哪些数据在哪些环节暴露给谁、以什么方式被滥用、后果有多严重”。本节围绕面向数据资产的威胁建模方法、数据生命周期风险识别、攻击面分析、风险量化与优先级排序展开,并给出一个可落地的企业数据平台威胁建模示例。

一、从资产出发选择威胁建模方法

STRIDE、LINDDUN、PASTA 三种方法各有侧重,选择依据是“你要保护什么、担心什么”。STRIDE 以系统组件为对象,把威胁分为仿冒(Spoofing)、篡改(Tampering)、抵赖(Repudiation)、信息泄露(Information Disclosure)、拒绝服务(Denial of Service)、权限提升(Elevation of Privilege),适合对数据流图中的进程、数据存储、数据流、外部实体逐项提问。LINDDUN 面向隐私,覆盖链接(Linking)、识别(Identifying)、不可否认(Non-repudiation)、可检测(Detecting)、数据泄露(Data Disclosure)、不知情(Unawareness)、不合规(Non-compliance),适合处理个人信息与合规场景。PASTA 是七阶段过程:定义目标、定义技术范围、应用分解、威胁分析、脆弱性与利用分析、攻击建模、风险与影响分析,强调以业务影响驱动技术分析。

对数据安全架构,推荐组合使用:用 PASTA 确定业务目标与范围,用 STRIDE 对数据流图做组件级威胁枚举,用 LINDDUN 补充隐私与合规威胁。三者不是互斥选项,而是不同粒度的互补。

二、数据生命周期风险识别

数据生命周期通常划分为采集、传输、存储、处理、共享、归档、销毁七个阶段。每个阶段的风险对象不同:采集阶段关注超范围收集与告知缺失;传输阶段关注明文传输与中间人;存储阶段关注加密缺失、密钥管理薄弱、备份暴露;处理阶段关注越权访问、注入、日志泄露;共享阶段关注接口鉴权、第三方留存、脱敏不彻底;归档阶段关注冷数据权限漂移;销毁阶段关注删除不彻底与介质残留。

识别时不要只列“风险名称”,而要绑定具体数据对象与位置。例如“用户身份证号在 ODS 层以明文落库,且 Hive 表权限授予了分析组全体成员”,这比“存储未加密”更有可操作性。

三、攻击面分析

攻击面是攻击者可能触达数据的所有入口与路径。对企业数据平台,典型攻击面包括:数据接入 API、ETL 调度平台、元数据服务、BI 查询网关、数据开放接口、运维跳板机、对象存储桶、消息队列、备份系统、第三方数据交换通道。分析时按“外部可达—内部可达—特权可达”三层标注,并记录每个入口的认证方式、授权粒度、审计能力与数据敏感级别。

攻击面分析的关键输出是“入口—数据—权限”三元组。例如:BI 查询网关(入口)→ 明细交易表(数据)→ 分析师角色可查全量字段(权限),若该角色账号可被钓鱼获取,则构成高价值路径。

四、风险量化与优先级排序

风险量化不必追求绝对精确,但必须可比较。常用公式为:风险值 = 可能性 × 影响。可能性可依据攻击面暴露程度、已有控制、历史事件频率打分(1–5);影响可依据数据敏感级别、影响范围、合规后果打分(1–5)。为便于排序,可引入“控制有效性系数”修正:风险值 = 可能性 × 影响 × (1 − 控制有效性)。控制有效性取 0–1,已有强控制则降低风险值。

优先级排序时,除风险值外还应考虑“修复成本”与“攻击路径可达性”。一个风险值中等但修复成本极低、且位于关键路径上的问题,应优先处理。

企业数据平台威胁建模:资产—生命周期—攻击面—风险 数据资产 用户身份信息(PII) 交易明细(财务) 行为日志(画像) 密钥与凭证 数据生命周期风险点 采集:超范围收集 传输:明文/MITM 存储:未加密/密钥弱 处理:越权/注入 共享:接口鉴权弱 归档:权限漂移 销毁:删除不彻底 攻击面入口 数据接入 API / ETL 调度 BI 查询网关 / 元数据服务 对象存储桶 / 消息队列 运维跳板机 / 备份系统 STRIDE(组件级) 仿冒·篡改·抵赖·泄露 拒绝服务·权限提升 对 DFD 逐元素提问 LINDDUN(隐私) 链接·识别·不可否认·可检测 泄露·不知情·不合规 面向 PII 与合规 PASTA(业务驱动) 目标→范围→分解→威胁分析 →脆弱性→攻击建模→风险 以业务影响定优先级 风险量化:风险值 = 可能性 × 影响 × (1 − 控制有效性) 可能性:暴露度/历史频率 影响:敏感级/合规后果 控制有效性:0–1 排序:风险值+可达性 攻击路径

五、实战:为某企业数据平台构建威胁模型

假设某零售企业数据平台包含:数据接入层(Kafka + Flink)、存储层(Hive + 对象存储)、查询层(Presto + BI 网关)、开放层(数据 API)。平台处理用户 PII、交易明细与行为日志。以下为示例建模过程,参数为教学假设,非实测结果。

第一步,定义范围与目标。业务目标:支撑营销分析与监管报送;安全目标:PII 不泄露、交易数据不被篡改、开放接口不被滥用。范围限定为生产环境数据链路,排除办公网。

第二步,绘制数据流图并标注资产。外部实体为 App 与第三方合作方;进程为采集服务、ETL 作业、查询网关、开放 API;数据存储为 Kafka Topic、Hive 表、对象存储桶、Redis 缓存。对每个元素标注数据敏感级:PII 为 L3,交易为 L3,日志为 L2。

第三步,STRIDE 逐元素提问。以“BI 查询网关”为例:仿冒——分析师账号是否可被冒用?篡改——查询结果是否可被中间人改写?信息泄露——是否可越权查询未授权字段?权限提升——普通分析师能否通过参数注入获取管理员视图?每个问题记录“是/否/部分”,并关联已有控制。

第四步,LINDDUN 补充隐私威胁。重点检查:行为日志是否可链接到具体个人(Linking);PII 是否在非必要场景被识别(Identifying);数据共享给第三方后是否可否认(Non-repudiation);用户是否知晓数据被用于画像(Unawareness)。

第五步,攻击面标注与路径分析。将开放 API 标注为“外部可达”,BI 网关为“内部可达”,运维跳板机为“特权可达”。构造一条高价值路径:钓鱼获取分析师账号 → 登录 BI 网关 → 利用宽权限查询 PII 表 → 导出数据。该路径涉及入口、权限、数据三个要素,风险值计算为:可能性 4(钓鱼常见)× 影响 5(PII 泄露合规重罚)× (1 − 0.3)(已有 MFA 但未覆盖全部账号)= 14,属于高优先级。

第六步,优先级排序与处置。按风险值降序排列,前三位为:BI 网关宽权限查询 PII(14)、开放 API 鉴权仅靠 API Key(12)、对象存储桶备份未加密(10)。处置建议分别为:实施字段级权限与动态脱敏、引入 OAuth2 与速率限制、对备份桶启用 SSE-KMS 并轮换密钥。

威胁建模的产出不是一张图,而是一份可追踪的“威胁—控制—验证”清单。每个威胁应绑定具体控制措施与验证方式,例如“字段级权限”对应“以分析师账号查询 PII 字段应返回脱敏值”,这样才能在后续架构评审中闭环。

最后需要强调:威胁模型是活文档。当数据平台新增数据源、开放新接口或调整权限模型时,应重新触发对应元素的 STRIDE/LINDDUN 提问,并更新风险值。把威胁建模嵌入数据平台的需求评审与变更流程,才能让安全架构真正跟随数据流动。