拆解方法论 + 应用安全全景:你站在体系的哪里
前三篇给了你框架(四要素)、漏洞语言(CVE/CVSS/漏洞类型)、产品地图。这一篇是收尾,回答两个问题:
- 遇到一个具体的安全问题,怎么系统地拆解分析它?(威胁建模、攻击链、风险分析三件套)
- 你一个应用安全工程师,在这个体系里到底站在哪、该往哪发力?
先点题:这一篇的三件套,其实都是在**“威胁”和”影响”这两个要素上做文章**——STRIDE 拆”威胁有哪几种”,攻击链拆”威胁怎么一步步走”,风险分析算”威胁 × 影响”。
一、拆解一个安全问题,三件套
一个安全问题(比如”我们的新系统上线了,安全吗?”),拆解它有三个经典工具,分别从三个角度下手:
1. 威胁建模:STRIDE —— 拆「威胁」的六种类型
STRIDE 是微软的威胁建模框架,六个字母代表六种威胁类别。你拿着它,挨个问一遍”我的系统会不会被这样搞”,就是一次系统性的威胁梳理:
| 字母 | 威胁 | 一句话 | 典型对应漏洞 |
|---|---|---|---|
| S | Spoofing 欺骗 | 冒充身份 | 弱口令、无认证、伪造 token |
| T | Tampering 篡改 | 改数据/改逻辑 | 越权写、中间人、篡改参数 |
| R | Repudiation 抵赖 | 干了不认账 | 无审计日志 |
| I | Information Disclosure 信息泄露 | 偷看数据 | SQL 注入、越权读、敏感信息未加密 |
| D | Denial of Service 拒绝服务 | 打瘫服务 | DoS、资源耗尽、逻辑炸弹 |
| E | Elevation of Privilege 提权 | 低权限变高权限 | 提权漏洞、水平/垂直越权 |
配套的还有一个画图工具叫 DFD(数据流图):把系统的”数据从哪来、经过哪、到哪去”画出来,在每一个”数据流、存储、边界”上套 STRIDE 问一遍。STRIDE 是”问什么问题”,DFD 是”对着什么问”,两者配合就是威胁建模。
注意:STRIDE 六类威胁,打中的都是你的”资产”(身份、数据、服务、权限)。威胁建模的本质,就是”把模糊的’我怕出事’,翻译成’S/T/I/D 这几类具体威胁,分别打我的哪个资产’。“
2. 攻击链视角:Kill Chain 和 ATT&CK —— 拆「威胁」的完整过程
这是换到攻击者视角看问题——你要知道坏人怎么打,才能知道自己防没防住。
洛克希德·马丁 Kill Chain(杀伤链),把一次攻击拆成七步:
侦察 → 武器化 → 投递 → 利用 → 安装 → 命令控制(C2) → 目标达成
它的价值在于一个洞察:攻击是分步的,你可以在任何一步打断它。 越靠前打断,代价越低(比如在”投递”这步拦下钓鱼邮件,比在”目标达成”这步发现数据被偷要好得多)。
MITRE ATT&CK 是更现代、更细的版本,把攻击者行为按**战术(Tactics)× 技术(Techniques)**组织成一个知识库。比如”初始访问”这个战术下,有”钓鱼""利用公网应用""有效账号”等技术。
对你的实际用处:ATT&CK 是一张”攻击者会干什么”的清单,你可以拿它来对照自己的检测能力——攻击者常用的那几十个技术,你的 SIEM/WAF/EDR 能检出几个?检不出来的,就是你的检测盲区。这本质是用”威胁清单”去验证你的”脆弱性”(防御缺口)。
3. 风险分析:定性 vs 定量 —— 算「威胁 × 影响」
风险 = 威胁(可能性)× 影响。这条公式是安全评估的地基。怎么算,分两派:
| 方法 | 怎么算 | 优点 | 缺点 |
|---|---|---|---|
| 定性 | 用”高/中/低”打分,落到风险矩阵 | 快、直观、沟通成本低 | 主观、不精确、难横向比较 |
| 定量(如 FAIR) | 把损失算成钱(损失频率 × 损失幅度) | 精确、能说服老板、能算 ROI | 建模成本高、数据难拿 |
FAIR(Factor Analysis of Information Risk) 是定量派的代表,核心是把风险拆成两个可估算的数:
风险 = 损失事件频率(威胁:多久发生一次) × 损失幅度(影响:发生一次损失多少钱)
给你的一个务实建议:日常定级用定性(快、够用),但当你需要跟老板要预算、说服业务方配合时,学会切到定量——因为”这个风险一年可能损失 200 万”比”这个风险是高危”有力一百倍。两种方法不是对立的,是按场景切换的两套话术。
二、应用安全全景:你站在体系的哪里
现在用四要素,把你这个”应用安全工程师”放进去,你会看到一个清晰的站位图:
你的两翼:左移 和 右移
应用安全的工作,围绕软件的生命周期展开,分成两段:
安全左移(Shift Left)—— 开发期,把脆弱性拦在出生前:
| 阶段 | 你干什么 | 落在四要素 |
|---|---|---|
| 需求 | 提安全需求、做威胁建模(STRIDE) | 威胁(先想会被怎么打) |
| 设计 | 安全设计评审、定最小权限、定加密方案 | 影响(先想怎么降损失) |
| 开发 | 代码评审、SAST 扫、SCA 查组件、IDE 插件 | 脆弱性(找漏洞) |
| 测试 | DAST/IAST 测、渗透测试 | 脆弱性(找漏洞) |
| 上线 | 安全门禁(高危漏洞不修完不让上线) | 脆弱性(堵在出生前) |
安全右移(Shift Right)—— 上线后,兜住没拦住的东西:
| 阶段 | 你干什么 | 落在四要素 |
|---|---|---|
| 运行 | WAF/RASP 防护、监控告警 | 威胁(应对攻击)+ 脆弱性(补漏) |
| 被攻 | 应急响应、定位根因 | 影响(止损) |
| 持续 | SRC 漏洞收口、复盘、修存量漏洞 | 威胁(持续对抗) |
你的核心价值,就一句话
应用安全的本质,是把”安全”从”事后打补丁”挪到”事前消除脆弱性 + 事中应对威胁 + 事后控制影响”的整个闭环里。而你在其中最不可替代的价值,是”判断”——威胁建模(威胁从哪来)、定级研判(脆弱性先修哪个)、风险评估(影响多大、怎么说服别人)。
“找漏洞”(扫 SAST/SCA)会越来越自动化,“拦攻击”(上 WAF)会越来越产品化,但”想清楚你眼前的资产、威胁、脆弱性、影响,该怎么取舍”——这个判断,5 年、10 年内还是你的手艺。
三、把四篇串起来:一张总图
最后,把整份手册收成一张图。以后每次遇到安全相关的新东西,你就拿这张图去套:
┌─────────────────────────────────────────────┐
│ 一个安全问题 / 一个新概念 │
└─────────────────────────────────────────────┘
│
先问:它落在四要素的哪一格?
┌──────────┬───────────┬───────────┬───────────┐
│ 资产 │ 威胁 │ 脆弱性 │ 影响 │
│ 守什么 │ 怕什么 │ 漏在哪 │ 疼多大 │
└──────────┴───────────┴───────────┴───────────┘
│ │ │ │
CMDB/SCA IDS/EDR SAST/SCA WAF/RASP
(盘点资产) (发现威胁) (找漏洞) (降影响)
- 是漏洞 → 问:它是什么脆弱性(漏在哪),威胁好不好打(可达/暴露/在野),影响多大(C/I/A 哪个受损)。
- 是产品 → 问:它站在哪个资产,主要解决威胁/脆弱性/影响里的哪一格,盲区在哪。
- 是概念 → 问:它是帮你认资产(SCA),还是帮你认威胁(ATT&CK),还是帮你认脆弱性(CVE),还是帮你算影响(FAIR)?
四问一出口,你就从一个”被名词砸晕的新人”,变成了”能把名词装进框架里的工程师”。 这就是你想要的”拆解能力”——它不在任何一本书里,它是一副你自己磨出来的眼镜。
思考题(先想,再看答案)
题目一: 用 STRIDE 拆解一个”用户登录”功能(有账号密码、有找回密码、有记住我)。说出至少三种你担心的威胁,各属于哪个字母。
题目二: 你的团队要上线一个新系统,安全经理问你”这个系统的风险是什么”。你现在手头没有扫描器、没有渗透团队。用这一章的工具,你能先给出什么有价值的回答(而不是”等我扫完再说”)?
题目三(压轴): 回顾整份手册——“资产、威胁、脆弱性、影响”四要素,和 agent 那套”看、想、做”动作维度,根本区别是什么?为什么”拆解安全问题”必须用四要素,而不能只用”看/想/做”?
参考答案
题目一(示例,不唯一): ① 弱口令 / 爆破登录 → S(欺骗),攻击者冒充合法用户;② 找回密码逻辑缺陷(如验证码可绕过、返回了明文)→ S + I,既能冒充又能泄露信息;③ “记住我”的 token 可被预测/窃取 → S(欺骗);④ 登录过程无审计日志 → R(抵赖),出事无法追溯;⑤ 登录接口无频率限制 → D(拒绝服务),可被爆破打瘫。你看,一个看似简单的登录功能,套 STRIDE 能想出一串威胁——这就是威胁建模的价值:它把”我觉得可能有问题”的模糊感觉,变成了”S/I/D 这几类具体威胁”的清单。
题目二: 你可以立刻做三件事:① 画 DFD(数据从哪来、经过哪些组件、存哪),标出每个边界;② 套 STRIDE 在关键边界上问一遍,列出主要威胁;③ 定级:对列出的威胁,按”威胁(暴露面、有无已知漏洞)× 影响(涉及什么数据、什么业务)“排个优先级。这样你给安全经理的就不是”等我扫完”,而是一份初步威胁清单 + 优先级——即使不精确,也比”没有结论”强一个量级。这恰恰说明:拆解分析的能力,不依赖工具,工具只是后面用来验证假设的。
题目三: 根本区别是——动作维度是”动词”,四要素是”名词”。 “看、想、做”回答的是”安全运营怎么干活”,但”看什么、想什么、做什么”这三个动作是空的,必须落到对象上才有意义。比如”做”——做什么?是”消除脆弱性”还是”控制影响”?离开四要素,动作就是空转。所以四要素(资产/威胁/脆弱性/影响)才是安全的第一性维度:它回答”安全问题本身由什么构成”,动作是后来的、依附于它的。 拆解分析问题,用的是”名词”(结构),不是”动词”(动作)——先搞清楚”守什么、怕什么、漏在哪、疼多大”,再谈”怎么看、怎么想、怎么做”。