安全入门:威胁模型、攻击面与零信任思维
安全并不是“装上防火墙就完事”的功能模块,而是一套贯穿业务设计、研发流程与运维操作的思维方式:你必须先回答“我在保护什么、要防谁、对方怎么打、我准备怎么挡”,然后才谈得上选产品、配规则、写代码。本章的目标,是帮你建立网络安全的“第一性原理”框架:用少量稳定的概念(CIA、资产/威胁/漏洞/风险、攻击面、最小权限、纵深防御、零信任)把纷繁的安全问题串成一张可推理、可落地的地图。
CIA 三要素:机密性、完整性、可用性(以及它们的取舍) {#cia-三要素机密性完整性可用性}
机密性(Confidentiality):不该看到的人看不到 〔概念〕
机密性讨论的是“谁能读到数据”。典型对象包括用户个人信息(PII)、订单与支付信息、内部报表、源代码与密钥等。机密性失效的结果通常是泄露与合规事故(例如个人信息保护、支付合规、合同违约)。
- 常见控制(按层次从外到内):
- 网络层:最小暴露端口、内网隔离、VPN/Zero Trust 访问、WAF
- 身份层:MFA、强认证、短期令牌、会话管理
- 数据层:传输加密(TLS)、存储加密、密钥管理(KMS/HSM)、脱敏/掩码
- 应用层:权限校验、数据访问审计、避免越权接口
完整性(Integrity):数据没被“偷偷改” 〔概念〕
完整性强调“数据是否被未经授权地修改”,也包括“修改是否可追溯”。很多安全事故不是泄密,而是“被改”:价格被篡改、优惠券被伪造、余额被增加、配置被替换、镜像被投毒。
- 常见控制:
- 变更可审计:操作留痕、不可抵赖日志、审批流
- 抗篡改:签名校验、哈希校验、WORM/对象锁定
- 事务一致性:数据库约束、幂等性、重放保护
- 供应链:依赖锁定、签名镜像、CI/CD 最小权限
可用性(Availability):系统该能用的时候能用 〔概念〕
可用性关注“服务是否持续对外提供”。它既包括 DDoS 这类外部打击,也包括内部错误配置、单点故障、容量不足、勒索软件导致的不可用。
- 常见控制:
- 弹性与冗余:多实例、多可用区、自动扩缩容
- 限流与隔离:熔断、降级、队列削峰、资源配额
- 备份与演练:3-2-1 备份、恢复演练(不是只做备份)
- 监控与响应:SLO/告警、应急预案、值班机制
> [误区] 把 CIA 当成“安全清单”。CIA 是目标不是手段;同一控制常同时影响多要素,例如“强认证”提升机密性与完整性,但可能降低可用性(登录更复杂、故障面更大)。安全设计的本质是做取舍,并把取舍显式化。
---
资产、威胁、漏洞、风险:四个词把安全说清楚 〔概念〕 {#资产威胁漏洞风险}
很多初学者会在“漏洞扫描、加固、买设备”里迷路,原因是没有把问题抽象成可推理的链条。建议你用下面四个词建立心智模型:
- **资产(Asset)**:你要保护的“有价值的东西”。包括数据、系统、账号、密钥、算力、品牌信誉、合规资质。
- **威胁(Threat)**:可能对资产造成损害的“对手能力/事件”。例如撞库、SQL 注入、勒索、内部滥用。
- **漏洞(Vulnerability)**:被威胁利用的“弱点”。例如弱密码、越权接口、错误的对象存储权限、过期依赖。
- **风险(Risk)**:威胁利用漏洞影响资产的“可能性 × 影响”。它决定你先做什么、做到什么程度。
一个实用的风险表达式是: $$Risk = Likelihood \times Impact$$
- Likelihood(可能性):对手是否常见、攻击成本高不高、是否已暴露在公网、是否已有成熟工具链
- Impact(影响):资金损失、数据规模、业务中断时长、法律与声誉代价
> [实践] 初学者做风险评估不需要复杂模型。先用 1~5 分打分:可能性(1 很难发生~5 很容易发生)、影响(1 可忽略~5 灾难性),相乘得到优先级。关键是“可复用、可解释、可讨论”,而不是“精确”。
---
你在和谁对抗:对手类型与动机 〔概念〕 {#对手类型}
不同对手的“成本—收益”模型不同,你的防守策略也应不同。
脚本小子(Script Kiddies)
- 特征:使用现成工具/脚本扫全网;目标随机;技术深度有限
- 典型手法:弱口令爆破、已公开漏洞的自动化利用、目录扫描
- 防守要点:基础加固、及时补丁、暴露面收敛、WAF/限流、MFA
黑产/有组织犯罪(Cybercrime)
- 特征:以盈利为目的;能投入时间做定制化;会复用成功路径
- 典型动机:盗号变现、薅羊毛、勒索、倒卖数据、洗钱
- 防守要点:风控与反作弊、交易链路完整性、账号安全体系、监控与取证
APT(高级持续性威胁)
- 特征:目标明确(行业/组织);周期长;更重隐蔽与持久化
- 典型动机:情报、破坏、供应链渗透
- 防守要点:纵深防御、检测与响应(EDR/SIEM)、最小权限、分段与隔离、演练
内部人员(Insider)
- 特征:天然拥有权限与路径;可能是恶意,也可能是误操作
- 典型动机:牟利、报复、便利性驱动(绕流程)
- 防守要点:权限分离、操作审计、关键动作双人复核、数据分级与脱敏、离职与权限回收
> [误区] “我们公司小,不会有人盯上。”自动化扫描不挑对象;而黑产更偏爱“小而弱”的系统,因为成本低、回报稳定。安全的入门不是“对抗 APT”,而是“把基础做扎实,让低成本攻击失败”。
---
威胁建模:把“可能发生什么”系统化 〔概念〕 {#威胁建模}
威胁建模(Threat Modeling)不是写文档交差,而是把安全问题从“凭感觉”变成“可复用的推理过程”。一个轻量但实用的流程如下:
1. 定范围:建模对象是什么(一个系统/一个业务链路/一个版本迭代) 2. 画数据流图(DFD):谁与谁交互、数据怎么流、信任边界在哪里 3. 列资产与安全目标:哪些数据最关键?CIA 哪些最重要? 4. 枚举威胁:用框架(STRIDE/LINDDUN)系统扫一遍 5. 设计缓解措施:控制放在哪一层?由谁负责?如何验证? 6. 落到验证与监控:测试用例、日志字段、告警规则、演练计划
> [实践] 威胁建模的产出物应当能“进 Jira/进需求/进代码评审”。如果产出物只能放在 Confluence 里被遗忘,那它就不是工程。
---
贯穿示例:小型电商“河狸购”的资产清单与数据流 〔实践〕 {#示例组织河狸购}
为了让本章概念可落地,后续章节将持续使用一个示例组织:河狸购(小型电商,员工 80 人,研发 20 人,业务覆盖下单、支付、发货、售后)。
系统组件(简化)
- Web/APP 前端
- API 网关与后端服务(用户、商品、订单、支付、营销、客服)
- 管理后台(运营、客服、财务)
- 数据库(订单库、用户库)、缓存、对象存储(图片/发票/导出报表)
- 第三方:支付、短信、物流、风控
- 研发链路:Git 仓库、CI/CD、镜像仓库
- 可观测:日志、指标、链路追踪、告警
资产清单(示例)
- [概念] **数据资产**
- P0:支付相关标识、订单明细、用户身份信息、密钥/令牌
- P1:营销策略、定价规则、供应商合同、财务报表
- P2:商品图片、公开评价、帮助文档
- [概念] **身份资产**
- 管理后台账号、云控制台账号、CI/CD 机器人账号、数据库账号
- [概念] **系统资产**
- API 网关、订单服务、支付回调处理、对象存储桶、K8s 集群/虚机
> [实践] 做资产清单时,先按“业务影响”分级(P0/P1/P2),再谈技术细节。分级能帮你在资源有限时优先保护“最贵的东西”。
数据流图(DFD)
```mermaid flowchart LR U[用户浏览器/APP] -->|HTTPS| CDN[CDN/WAF] CDN -->|HTTPS| GW[API 网关] GW --> AUTH[认证服务] GW --> ORD[订单服务] GW --> MKT[营销服务] ORD --> DB1[(订单库)] AUTH --> DB2[(用户库)] ORD --> PAY[第三方支付] PAY -->|回调| GW ORD --> OSS[(对象存储: 发票/导出)] OPS[运营/客服] -->|HTTPS+MFA| ADMIN[管理后台] ADMIN --> GW CI[CI/CD] --> REG[镜像仓库] REG --> GW GW --> LOG[日志/监控平台] ADMIN --> LOG
subgraph TrustBoundary1[互联网边界] U CDN end
subgraph TrustBoundary2[生产内网] GW AUTH ORD MKT DB1 DB2 OSS LOG end
subgraph TrustBoundary3[研发/运维域] CI REG end ```
> [概念] 信任边界(Trust Boundary):数据或请求从“你能控制的域”进入“你不能完全控制的域”,或反过来时,就跨越了信任边界。跨越边界的地方,优先做认证、鉴权、校验、记录与隔离。
---
STRIDE 入门:用六类威胁“系统扫雷” 〔概念〕 {#stride}
STRIDE 是面向安全的威胁分类法,适合从工程角度做系统性枚举:
- **S:Spoofing(身份伪装)**
例:攻击者伪造用户身份登录;伪造支付回调来源 常见控制:MFA、OAuth/OIDC、签名回调、mTLS、设备指纹
- **T:Tampering(篡改)**
例:篡改订单金额、篡改优惠券参数、篡改镜像或配置 常见控制:服务端计算金额、签名/哈希校验、配置变更审计、镜像签名
- **R:Repudiation(抵赖)**
例:客服否认导出过用户数据;攻击者操作后无法追溯 常见控制:统一审计日志、不可变更日志存储、操作链路 ID、时间同步(NTP)
- **I:Information Disclosure(信息泄露)**
例:对象存储桶公开、接口越权读取他人订单、日志打印敏感字段 常见控制:最小权限、数据脱敏、访问控制、密钥管理、日志规范
- **D:Denial of Service(拒绝服务)**
例:接口被刷导致下单不可用;后台导出消耗资源拖垮数据库 常见控制:限流、验证码、熔断降级、异步化、资源配额、DDoS 防护
- **E:Elevation of Privilege(权限提升)**
例:普通用户调用管理员接口;CI 机器人拿到云管理员权限 常见控制:RBAC/ABAC、鉴权中间件、权限分离、最小权限、短期凭证
> [实践] STRIDE 的用法不是“背概念”,而是对着 DFD 的每个节点、每条边逐项问:这条边会不会被伪装?数据会不会被篡改?操作能否追溯?会不会泄露?会不会被打挂?能否越权?
---
LINDDUN 入门:当你的系统处理个人信息 〔概念〕 {#linddun}
如果你处理个人信息,仅靠 STRIDE 不够。LINDDUN 是面向隐私风险的分类法(本章只用入门版思路):
- **Linkability(可关联性)**:不同数据源被关联还原出同一人画像
- **Identifiability(可识别性)**:匿名数据被重新识别
- **Non-repudiation(不可否认性)**:隐私语境下的“过度可追溯”也可能成为风险
- **Detectability(可探测性)**:他人能否推断某人是否使用过服务/是否下过单
- **Disclosure(泄露)**:敏感信息暴露
- **Unawareness(不知情)**:用户不清楚数据用途/范围
- **Non-compliance(不合规)**:超范围收集、超期保存、跨境传输等
> [实践] 做隐私建模时,除了“防攻击”,还要问三个问题: > 1)这份数据是否“必须收集”?2)是否“只收集最少”?3)是否“到期就删除”? > 很多隐私风险可以通过“少收集、短保存、弱关联”从根上消掉。
---
攻击面:你暴露的每一个入口都是成本 〔概念〕 {#攻击面}
攻击面(Attack Surface)指对手“可触达并可尝试利用”的一切入口。初学者常只盯公网 IP,其实攻击面至少包括:
- **网络攻击面**:开放端口、管理面板、跳板机、K8s API、数据库是否暴露
- **应用攻击面**:所有 API、回调入口、文件上传、导出功能、搜索/过滤参数
- **身份攻击面**:账号体系、登录入口、第三方 OAuth、API Key、机器人账号
- **数据攻击面**:对象存储桶、备份、日志、数据仓库、测试环境数据
- **供应链攻击面**:依赖包、CI/CD 权限、镜像仓库、发布流程
一个“可执行”的攻击面清单(河狸购示例)
- 互联网入口:`/login`、`/api/*`、支付回调 `/pay/callback`、对象下载链接
- 管理入口:管理后台域名、BI 报表导出、客服查询接口
- 研发入口:Git、CI、镜像仓库、制品下载、部署权限
- 第三方入口:短信/支付/物流回调与密钥
> [误区] “攻击面越多越安全,因为功能更全。”攻击面是成本而不是资产:入口越多,配置越复杂,出错概率越高;对手只需要你一个入口犯错。
---
最小权限与纵深防御:把“不可避免的失败”限制在最小范围 〔概念〕 {#最小权限纵深防御}
最小权限(Least Privilege)
最小权限的原则是:任何人/服务只拥有完成当前任务所需的最少权限,并且尽量短时间持有。
落地时建议从四个维度看权限:
1. 谁(Identity):用户、服务账号、机器人账号 2. 能做什么(Action):读、写、删除、导出、发券、退款 3. 对哪些资源(Resource):某个库/某个桶/某个命名空间 4. 在什么条件下(Condition):IP 范围、时间窗、设备状态、工单号
下面是一个“尽量不夸张但能说明问题”的 IAM 例子(伪代码风格),体现“只能写入某个桶的某个前缀”:
```json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": ["arn:aws:s3:::hebigou-invoices/private/*"] } ] } ```
> [实践] 你可以把最小权限当成“默认拒绝 + 精确允许”。当系统变复杂时,最小权限不是一次性工程,而是持续治理:权限审计、过期清理、临时授权(Just-In-Time)与权限分离(SoD)。
纵深防御(Defense in Depth)
纵深防御的核心假设是:任何单点防线都可能失败。因此要在不同层放置互补控制,让攻击成本上升、检测更早发生、损害范围更小。
一个常用的“层模型”:
- 边界层:CDN/WAF、DDoS、防扫描
- 身份层:MFA、SSO、设备准入、短期令牌
- 应用层:鉴权中间件、输入校验、幂等与重放保护
- 数据层:加密、脱敏、访问审计、备份与恢复
- 运维层:堡垒机/零信任运维、变更审批、密钥轮换
- 检测响应:日志/告警、溯源、预案演练
---
零信任(Zero Trust):核心概念与常见落地误区 〔概念〕 {#零信任}
零信任常被误解成“买个 ZTNA 产品”。更准确的说法是:零信任是一套安全架构原则,强调不因网络位置而默认信任,而是对每一次访问持续评估与验证。
三条核心原则(工程化表述)
1. 显式验证(Verify Explicitly):认证与授权基于身份、设备状态、上下文信号(地理位置、风险评分、行为异常) 2. 最小权限(Least Privilege):访问按需授予、分段授权、会话短期化 3. 假设已被攻破(Assume Breach):默认内部也不安全;强化横向移动阻断与检测响应
河狸购的“轻量零信任”落地路径 〔实践〕
对于中小团队,建议避免一次性大改,按收益从高到低推进:
- 第一步:**统一身份入口**(员工 SSO + MFA,服务账号统一治理)
- 第二步:**运维访问收敛**(数据库/生产主机不直连公网,走 ZTNA/堡垒机;所有操作留痕)
- 第三步:**服务到服务身份化**(mTLS 或基于服务身份的令牌,逐步替代“内网就信任”)
- 第四步:**微分段与策略化授权**(按业务域拆分网络与权限边界)
- 第五步:**持续评估与自动化响应**(异常登录、敏感导出、权限提升触发告警与阻断)
常见误区(请对照自查)
> [误区] “上了 VPN 就是零信任。”VPN 只是把人接进内网;零信任强调的是“进来之后仍然要按身份与策略访问”,并且可审计、可最小化。 > [误区] “到处加 MFA 就够了。”MFA 解决的是一部分身份伪装问题,但挡不住越权接口、供应链投毒、内部滥用。 > [误区] “零信任就是网络产品。”如果权限模型、资产分级、日志与响应不变,换再多隧道也只是“更贵的内网”。 > [误区] “忽略数据本身。”零信任的终点是数据与操作:导出、下载、分享、删除这些动作必须可控可审计。
---
从业务到安全控制:把安全落到“谁来做、做什么、怎么验” 〔实践〕 {#业务到控制映射}
威胁建模最有价值的一步,是把“业务动作”映射到“安全控制与验证”。下面给出河狸购一个可复用的映射示例(你可以把它变成评审模板)。
```mermaid graph TD B1[业务: 用户下单] --> A1[资产: 订单金额/收货信息(P0)] B2[业务: 支付回调] --> A2[资产: 支付状态/交易号(P0)] B3[业务: 运营导出报表] --> A3[资产: 用户列表/订单明细(P0/P1)] B4[业务: 发券促销] --> A4[资产: 优惠券规则/资金损失]
A1 --> T1[威胁: 越权读取他人订单] A1 --> T2[威胁: 篡改金额/重放请求] A2 --> T3[威胁: 伪造回调/回调重放] A3 --> T4[威胁: 内部滥用/批量泄露] A4 --> T5[威胁: