Caloogy 文章
English

威胁建模与红队测试:把每条安全规则都打一遍

日期
2025 年 4 月 27 日
系列
方法论
阅读
4 分钟
主题
Threat modelingStrideRed teamPurple team

一句话版本

安全不是"加了多少功能",而是"攻击者来了能不能挡住"。威胁建模先回答:谁会来、想要什么、从哪里进来;红队测试再用攻击者的方式真的打一遍,验证每一道防线是否有效。 最实用的原则是:每一条安全规则都要有一个对应的攻击用例,没被测试打过的规则,就当它不存在。

全文分三层:

  1. 通俗理解:先想小偷会怎么进门,再去试一试
  2. 实际用处:STRIDE、MITRE ATT&CK、红队 / 蓝队 / 紫队、漏洞赏金
  3. 原理与工程要点:从真实手法反推防御、测试清单怎么写、怎样模拟"撒谎的依赖"

第一层:通俗理解

1.1 先想小偷会怎么进门

给房子装防盗设施之前,先站在小偷的角度想一想:

每个答案对应一道防线。这就是威胁建模。

1.2 再找人真的试一试

装好之后,请一个懂行的朋友真的试着撬一撬:窗户锁是不是真的锁得住?报警器是不是真的会响?监控是不是真的能拍到?

很多防线装了但没生效:配置写错了、某个条件没覆盖到、报警发到了没人看的邮箱。只有真的打一遍才知道。这就是红队测试。


第二层:实际用处

2.1 常用框架

框架 用途
STRIDE(微软,1999) 按六类威胁逐一检查系统:Spoofing 冒充、Tampering 篡改、Repudiation 抵赖、Information disclosure 信息泄露、Denial of service 拒绝服务、Elevation of privilege 权限提升
攻击树(Schneier,1999) 把"攻击者的目标"作为树根,一层层拆解成实现它的各种途径,便于找出最便宜的攻击路径
MITRE ATT&CK 根据真实攻击事件整理的攻击战术与技术知识库,用来对照"我们能不能检测到这一招"

2.2 红队、蓝队、紫队

角色 做什么
红队 扮演攻击者,尝试突破
蓝队 负责防守、监控和响应
紫队 红蓝合作:红队每打一招,蓝队当场确认"看见了吗、拦住了吗",没拦住就立刻修

小团队或个人项目往往一个人身兼三职,紫队的思路最实用:每设计一条防线,就同时写一个攻击它的用例。

2.3 漏洞赏金

邀请外部安全研究者来找漏洞并给予奖励。它是红队测试的延伸:内部测试受限于自己的想象力,外部研究者会从意想不到的角度进攻。即使没有预算,也至少应当公开一个安全联系邮箱(如 security@),以及一份 security.txt。

Caloogy Wallet 也采用了完整的红队测试清单。


第三层:原理与工程要点

3.1 从真实手法反推防御

不要凭空想象攻击,而是从已经发生过的事件出发:

真实手法 对应防线 对应测试用例
地址投毒 相似地址检测 制造一笔投毒转账,再从历史里复制地址转账,看是否被标为高风险
Permit 签名钓鱼 解析 EIP-712,禁止盲签 模拟钓鱼网站请求 Permit 签名
前端被篡改 完整性巡检、广播后比对 在测试环境里篡改页面上的收款地址
账号被接管 冷静期、强认证 模拟"忘记密码"接管后立即转账
数据源撒谎 多源交叉验证 让其中一个数据源返回伪造结果
重放攻击 一次性 nonce 把上一次的签名再提交一次
CSRF SameSite、Origin 校验 从另一个域名发起修改请求

3.2 测试清单怎么写

每一项至少包含:

字段 内容
编号 便于和设计文档、规则配置互相引用
场景 攻击者做了什么
前置条件 测试需要的环境和数据
预期结果 应该被拦住、告警,还是降级
实际结果 通过 / 失败,附证据(日志、截图)
结论与跟进 失败的话修了没有,修完重测了没有

再加一张总览表,一眼看出哪些已通过、哪些未测、哪些失败待修。

3.3 测试必须"能失败"

一个永远通过的测试没有价值。几个常用技巧:

3.4 自动化和人工都要有

自动化测试 人工演练
每次改代码都跑,防止回退 定期进行,模拟完整的攻击链
覆盖单条规则 覆盖"多个小问题串起来"的组合攻击
用假依赖,快速稳定 在真实环境(测试网)上跑,发现配置问题

很多问题只在真实环境中出现:某个第三方平台悄悄往页面里插了脚本、日志里意外记录了敏感参数、某个证书配置允许了过时的协议。这些只有"真打一遍"才发现得了。

3.5 关于公开

测试的方法论和类别可以公开分享,但具体的测试清单、未通过的项、待修的问题属于敏感信息,相当于给攻击者的路线图,应当保密。


总结

层次 要点
威胁建模 谁来、要什么、从哪进;STRIDE、攻击树、ATT&CK
红队测试 用攻击者的方式真打一遍;紫队思路最实用
原则 每条规则对应一个攻击用例;测试必须能失败
实践 从真实事件反推;自动化 + 人工演练;未通过项保密