1Secure by Design

安全基础

安全思维

安全三角威胁建模攻击面纵深防御

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第1章:安全基础(Security Foundations)

一、导读

1.1 本章学习目标

第1章建立安全思维的基础框架。安全不是事后补丁,而是设计决策。

本章的核心学习目标包括:

  • 理解安全三角:机密性、完整性、可用性
  • 掌握威胁建模的基本方法
  • 理解攻击面的概念
  • 学会纵深防御策略

1.2 为什么本章如此重要

大多数安全漏洞不是技术缺陷,而是设计缺陷。在编码阶段才考虑安全,往往为时已晚。本章教你如何在设计阶段就把安全融入架构。

1.3 核心问题引导

安全的三个核心目标是什么?它们之间如何权衡?

威胁建模能帮你发现什么?

什么是攻击面?如何最小化它?

纵深防御为什么比单点防御更有效?


二、核心概念详解

2.1 安全三角(CIA Triad)

机密性(Confidentiality)
           /              \
          /                \
    完整性(Integrity)--- 可用性(Availability)

机密性:只有授权用户能访问数据
完整性:数据不被未授权修改
可用性:授权用户能正常访问

2.2 威胁建模

STRIDE 威胁分类:
- Spoofing(仿冒):冒充他人身份
- Tampering(篡改):未授权修改数据
- Repudiation(抵赖):否认执行过操作
- Information Disclosure(信息泄露):暴露敏感信息
- Denial of Service(拒绝服务):使服务不可用
- Elevation of Privilege(权限提升):获取未授权的权限

2.3 攻击面最小化

java
// 不好的设计:暴露过多接口
public class UserService {
    public void deleteUser(String userId) { /* ... */ }
    public void updateUser(String userId, Map<String, Object> fields) { /* ... */ }
    public List<User> getAllUsers() { /* ... */ }
}

// 好的设计:最小化攻击面
public class UserService {
    // 只暴露必要的操作
    public void deactivateUser(String userId, AuthContext auth) { /* ... */ }
    public void updateUserName(String userId, String newName, AuthContext auth) { /* ... */ }
}

2.4 纵深防御

层1: 网络防火墙
层2: Web 应用防火墙(WAF)
层3: 输入验证
层4: 业务逻辑验证
层5: 数据库约束
层6: 加密存储

每一层都是独立的防线,攻击者必须突破所有层才能成功

三、实战案例

3.1 案例一:威胁建模练习

系统:在线支付系统

资产:用户信用卡信息、交易记录

威胁分析:
1. 仿冒:攻击者冒充用户进行支付
   → 对策:多因素认证
   
2. 篡改:攻击者修改支付金额
   → 对策:数字签名、端到端加密
   
3. 信息泄露:信用卡号被窃取
   → 对策:PCI DSS 合规、Token 化存储
   
4. 拒绝服务:系统被 DDoS 攻击
   → 对策:限流、CDN、弹性扩展

四、本章小结

安全三角:机密性、完整性、可用性的平衡。

威胁建模:系统性地识别和评估安全威胁。

攻击面最小化:减少暴露的接口和数据。

纵深防御:多层独立的安全防线。


五、思考与练习

对一个你熟悉的系统进行威胁建模。

安全三角的三个目标之间如何权衡?举例说明。

设计一个纵深防御方案来保护用户密码。


1/7安全基础
0%