2021 Owasp top 10 逐个击破--A04:2021 – Insecure Design
字数 2551 2025-08-12 12:46:02
OWASP Top 10 2021: A04 - 不安全设计 (Insecure Design) 深度解析与防御指南
1. 概述与定义
不安全设计(Insecure Design)是OWASP Top 10 2021中新增的类别,关注与设计和架构缺陷相关的风险。这一类别强调在设计阶段就需要考虑安全因素,而非仅仅在编码阶段。
关键特征:
- 代表"缺失或无效的控制设计"
- 不同于实现缺陷,设计缺陷无法通过完美的实现来修复
- 根源在于缺乏业务风险分析和安全设计原则
相关CWE:
- CWE-209: 生成包含敏感信息的错误消息
- CWE-256: 凭据的无保护存储
- CWE-501: 违反信任边界
- CWE-522: 保护不足的凭据
2. 不安全设计与实现缺陷的区别
| 特征 | 不安全设计 | 实现缺陷 |
|---|---|---|
| 根源 | 设计阶段的安全控制缺失 | 编码阶段的错误实现 |
| 修复方式 | 需要重新设计架构 | 可通过代码修复 |
| 影响范围 | 整个系统或功能模块 | 特定功能点 |
| 示例 | 密码恢复使用安全问题 | SQL注入漏洞 |
3. 导致不安全设计的核心因素
- 缺乏业务风险分析:未评估数据资产和业务逻辑的保护需求
- 安全需求不明确:未定义功能性/非功能性安全要求
- 预算规划不足:未包含安全设计、测试活动的预算
- 威胁建模缺失:未在早期识别潜在威胁
- 安全模式未采用:未使用已验证的安全设计模式
4. 安全设计方法论
4.1 安全设计原则
- 持续评估:不断评估威胁并确保设计抵御已知攻击
- 威胁建模集成:将安全分析融入开发会议和用户故事
- 流程验证:分析预期流和失败流的假设条件
- 知识管理:从错误中学习并建立改进机制
4.2 安全开发生命周期(SDL)
- 早期介入:项目启动阶段就引入安全专家
- 模式重用:采用安全设计模式和已验证组件库
- 工具支持:使用威胁建模工具和安全测试工具
- 成熟度模型:参考OWASP SAMM(软件保证成熟度模型)
5. 预防措施
- 建立安全SDL:与AppSec专业人员合作设计安全控制
- 采用安全模式:使用预验证的安全设计模式和组件库
- 关键流程建模:对身份验证、访问控制等核心功能进行威胁建模
- 用户故事集成:在用户情景中明确安全语言和控件
- 分层合理性检查:从前端到后端实施一致性验证
- 测试验证:编写单元/集成测试验证威胁抵抗能力
- 租户隔离:根据暴露程度实施充分的多租户隔离
- 资源限制:限制用户/服务的资源消耗
6. 攻击场景分析
场景1:不安全的密码恢复设计
- 问题:使用"安全问题"作为凭证恢复机制
- 风险:答案可能被他人知晓或社工获取
- 合规冲突:违反NIST 800-63b和OWASP ASV标准
- 解决方案:替换为多因素认证等更安全的设计
场景2:影院预订系统滥用
- 漏洞:允许无限制的团体预订
- 攻击:通过多次请求预订大量座位(如600个)
- 影响:造成收入损失和资源浪费
- 修复:引入预订频率限制和押金机制
场景3:电商防机器人缺失
- 问题:未防止机器人抢购高价商品(如显卡)
- 影响:正常用户无法购买,品牌声誉受损
- 解决方案:实施防机器人设计和购买频率限制
7. 威胁建模详解
7.1 基本流程
- 分解应用:了解应用结构及外部交互
- 识别威胁:确定潜在安全问题
- 对策制定:设计缓解措施
- 威胁排序:按风险程度优先处理
7.2 关键技术
数据流程图(DFD)
- 可视化展示数据流动和变更点
- 重点标识信任边界:需要数据验证的关键点
- 示例:在线银行应用的DFD展示用户请求如何流经系统
过程流程图
- 比DFD更精简
- 聚焦用户和代码在系统中的移动路径
- 更贴近攻击者思维方式
攻击树
- 由Bruce Schneier提出
- 树状结构展示攻击路径
- 根节点=总体攻击目标
- 子节点=达成目标的必要条件
- 示例:银行应用文件感染的不同路径
7.3 主流威胁建模方法
1. STRIDE模型
Microsoft开发的经典模型,覆盖6类威胁:
| 威胁类型 | 安全属性 | 定义 | 示例 |
|---|---|---|---|
| 仿冒(S) | 认证 | 冒充身份 | 冒充其他用户 |
| 篡改(T) | 完整性 | 修改数据/代码 | 修改订单信息 |
| 抵赖(R) | 审计 | 否认行为 | 否认修改操作 |
| 信息泄露(I) | 保密性 | 数据泄露 | 用户信息泄露 |
| 拒绝服务(D) | 可用性 | 资源耗尽 | DDoS攻击 |
| 权限提升(E) | 授权 | 越权访问 | 普通用户提权 |
2. DREAD模型
威胁评分方法,每个维度1-3分:
- Damage:潜在损害
- Reproducibility:可复现性
- Exploitability:利用难度
- Affected users:影响用户范围
- Discoverability:可发现性
3. PASTA方法
7阶段攻击模拟与威胁分析:
- 定义目标
- 定义技术范围
- 应用分解
- 威胁分析
- 漏洞识别
- 攻击建模
- 风险分析
8. 实践工具推荐
- Visual Paradigm:在线DFD工具,提供银行应用等模板
- 链接:https://online.visual-paradigm.com/cn/diagrams/templates/threat-model-diagram/data-flow-diagram-online-banking-application/
- OWASP Threat Dragon:开源威胁建模工具
- Microsoft Threat Modeling Tool:STRIDE专用工具
9. 总结与最佳实践
- 安全左移:在设计和需求阶段就引入安全考虑
- 文化转变:将安全设计视为开发文化而非附加项
- 模式重用:建立并使用安全设计模式库
- 持续评估:在每次架构变更时重新评估威胁
- 跨职能协作:开发、安全、业务团队共同参与设计
关键认识:不安全设计一旦投入生产,修复成本极高,最佳策略是通过威胁建模和安全设计模式在前期预防。