威胁建模在字段级加密中的实操课 - 第1节
1.1 先聊聊:威胁建模到底是个啥?
我们天天说安全,说加密,说防黑客。
但你有没有想过一个问题:你到底在防谁?
是防隔壁老王偷看数据库?还是防云管理员滥用权限?
还是说,防的就是那个“万一”——万一磁盘被人搬走了,数据会不会裸奔?
说白了,威胁建模就是干这件事的。
它不是什么高深的数学公式,也不是一堆吓人的术语堆砌。
它就是一个系统化的思考过程:我的系统里,什么东西最值钱?谁会来偷?他们怎么偷?我该怎么防?
我记得我刚做安全那会儿,有个老前辈跟我说过一句话,我一直记着:
“你不先把自己当成坏人,你就永远做不好安全。”
嗯,这话糙理不糙。
1.1.1 为什么做字段级加密之前,必须先做威胁建模?
你想想看,字段级加密听起来很酷。把数据库里的几个敏感字段加密存起来,比如手机号、身份证号、银行卡号。看起来固若金汤,对吧?
但我在实际项目中见过太多“加密了个寂寞”的情况。
举个例子:有人把数据库字段加密了,但应用日志里明文打印了全部加密前的数据。结果日志系统被拖库,加密白做。
还有人把加密密钥硬编码在源代码里,而且代码托管在公开仓库。闹呢?
所以说,不先做威胁建模,你连自己的敌人在哪都不知道。
加密只是手段,不是目的。目的是把真正的风险降低到可接受的范围。
1.2 常见威胁建模框架:选对工具,事半功倍
框架这东西,说白了就是“套路”。
有套路的好处是:你不用每次都从零开始想问题,照着框架走一遍,基本不会漏掉什么。
现在业界主流的框架,我简单过三个:STRIDE、PASTA、LINDDUN。
我个人习惯在不同的场景里用不同的框架:
- 做通用软件系统 → 优先用 STRIDE,因为覆盖面全
- 做金融、支付类高合规项目 → 我喜欢用 PASTA,流程更严格
- 做数据隐私、PII相关的项目 → 那 LINDDUN 更对口,因为它专门盯着隐私
1.2.1 STRIDE:微软家的万金油
STRIDE 应该是大家最熟悉的。我记得2000年代初,微软为了搞定 Windows 的安全,搞出这套方法论。后来就流传开了。
STRIDE 是个首字母缩略词,代表了六种威胁类型:
| 字母 | 威胁类型 | 一句话解释 | 违反的安全属性 |
|---|---|---|---|
| S | Spoofing(假冒) | 假装自己是别人 | 认证 |
| T | Tampering(篡改) | 偷偷改了数据或代码 | 完整性 |
| R | Repudiation(抵赖) | 做了事不认账 | 不可否认性 |
| I | Information Disclosure(信息泄露) | 数据被别人看到了不该看到的 | 机密性 |
| D | Denial of Service(拒绝服务) | 让系统没法用 | 可用性 |
| E | Elevation of Privilege(权限提升) | 普通用户干管理员的事 | 授权 |
怎么用?
你就拿着你的系统架构图,对着这六个类型,依次问自己六个问题:
- 我的系统里,谁能假冒谁?—— 有没有凭证泄露?
- 我存的数据,中途会不会被改?—— 有没有完整性校验?
- 操作日志是否完整?用户能不能耍赖?
- 加密字段里的明文,有没有可能在别的环节暴露?
- 我的解密接口,会不会被打崩?
- 普通用户能不能绕过权限,直接调用解密接口?
1.2.2 PASTA:攻击者视角的“剧本杀”
PASTA 全称是 Process for Attack Simulation and Threat Analysis。
它不像 STRIDE 那样按威胁类型分类,而是按攻击流程来推演。
说白了,你把自己当成攻击者,从头到尾走一遍渗透过程,看能走到哪一步。
我挺喜欢 PASTA 的一点是:它很“实”。
它分七个步骤:
- 定义业务目标 —— 你的加密到底要保什么?
- 定义技术范围 —— 哪些服务、哪些数据库参与?
- 分解应用 —— 画数据流图,标出加密/解密边界
- 威胁分析 —— 站在攻击者的角度,他能从哪里下手?
- 漏洞分析 —— 现有的加密实现里,有没有已知的坑?
- 攻击建模 —— 把威胁串成一个完整的攻击链条
- 风险分析 + 缓解 —— 决定哪些风险要修,哪些可以接受
1.2.3 LINDDUN:专门盯着隐私的框架
这个框架的名字也是首字母:Linkability、Identifiability、Non-repudiation、Detectability、Disclosure of information、Unawareness、Non-compliance。
说人话就是:保护用户隐私。
字段级加密很多时候不是为了防外部黑客,而是为了保护数据主体。
- 你的加密能不能防止关联分析?(比如不能通过一个加密字段反查出用户是谁)
- 你的加密会不会暴露某些信息?(比如加密后字段长度不变,依然能猜出内容)
- 你有没有合规方面的隐患?(比如 GDPR 要求“设计隐私”,你的加密是否满足?)
如果你做的是医疗、金融、或者面向 C 端用户的 App,LINDDUN 非常有参考价值。
1.3 三个框架的核心对比
为了方便你快速选型,我列个表:
| 框架 | 最佳适用场景 | 核心特点 | 缺点(我踩过的坑) |
|---|---|---|---|
| STRIDE | 通用软件系统、Web应用 | 覆盖全面,入门快,检查清单式 | 容易走流程形式,没深入业务 |
| PASTA | 金融、政务、高合规场景 | 攻击模拟+风险驱动,输出物完整 | 流程重,小团队容易卡住 |
| LINDDUN | 数据隐私、PII、GDPR合规 | 专注隐私,方法论成熟 | 对系统整体安全覆盖不够 |
1.4 知识结构图:威胁建模到底长什么样?
下图是我自己梳理的本章知识脉络。
你可以把它当成这个课程第一节的“地图”。我们会沿着这个结构一点一点推进。
核心要点回顾
- 威胁建模不是纸上谈兵。它是你所有安全决策的基础。
- STRIDE 适合入门,六个维度让你不落项。
- PASTA 适合硬仗,攻击者视角会让你发现你平时想不到的路径。
- LINDDUN 适合隐私敏感场景,做字段级加密时,这个框架能帮你把“保护用户”这件事做得更透。
好了,这一节我们先把“什么是威胁建模”和“主流框架长什么样”摸清楚了。
下一节,我们就要开始动真格的了——把威胁建模的刀,架到字段级加密的脖子上。
你准备好了,咱们就继续往下走。