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. 导致不安全设计的核心因素

  1. 缺乏业务风险分析:未评估数据资产和业务逻辑的保护需求
  2. 安全需求不明确:未定义功能性/非功能性安全要求
  3. 预算规划不足:未包含安全设计、测试活动的预算
  4. 威胁建模缺失:未在早期识别潜在威胁
  5. 安全模式未采用:未使用已验证的安全设计模式

4. 安全设计方法论

4.1 安全设计原则

  • 持续评估:不断评估威胁并确保设计抵御已知攻击
  • 威胁建模集成:将安全分析融入开发会议和用户故事
  • 流程验证:分析预期流和失败流的假设条件
  • 知识管理:从错误中学习并建立改进机制

4.2 安全开发生命周期(SDL)

  1. 早期介入:项目启动阶段就引入安全专家
  2. 模式重用:采用安全设计模式和已验证组件库
  3. 工具支持:使用威胁建模工具和安全测试工具
  4. 成熟度模型:参考OWASP SAMM(软件保证成熟度模型)

5. 预防措施

  1. 建立安全SDL:与AppSec专业人员合作设计安全控制
  2. 采用安全模式:使用预验证的安全设计模式和组件库
  3. 关键流程建模:对身份验证、访问控制等核心功能进行威胁建模
  4. 用户故事集成:在用户情景中明确安全语言和控件
  5. 分层合理性检查:从前端到后端实施一致性验证
  6. 测试验证:编写单元/集成测试验证威胁抵抗能力
  7. 租户隔离:根据暴露程度实施充分的多租户隔离
  8. 资源限制:限制用户/服务的资源消耗

6. 攻击场景分析

场景1:不安全的密码恢复设计

  • 问题:使用"安全问题"作为凭证恢复机制
  • 风险:答案可能被他人知晓或社工获取
  • 合规冲突:违反NIST 800-63b和OWASP ASV标准
  • 解决方案:替换为多因素认证等更安全的设计

场景2:影院预订系统滥用

  • 漏洞:允许无限制的团体预订
  • 攻击:通过多次请求预订大量座位(如600个)
  • 影响:造成收入损失和资源浪费
  • 修复:引入预订频率限制和押金机制

场景3:电商防机器人缺失

  • 问题:未防止机器人抢购高价商品(如显卡)
  • 影响:正常用户无法购买,品牌声誉受损
  • 解决方案:实施防机器人设计和购买频率限制

7. 威胁建模详解

7.1 基本流程

  1. 分解应用:了解应用结构及外部交互
  2. 识别威胁:确定潜在安全问题
  3. 对策制定:设计缓解措施
  4. 威胁排序:按风险程度优先处理

7.2 关键技术

数据流程图(DFD)

  • 可视化展示数据流动和变更点
  • 重点标识信任边界:需要数据验证的关键点
  • 示例:在线银行应用的DFD展示用户请求如何流经系统

过程流程图

  • 比DFD更精简
  • 聚焦用户和代码在系统中的移动路径
  • 更贴近攻击者思维方式

攻击树

  • 由Bruce Schneier提出
  • 树状结构展示攻击路径
  • 根节点=总体攻击目标
  • 子节点=达成目标的必要条件
  • 示例:银行应用文件感染的不同路径

7.3 主流威胁建模方法

1. STRIDE模型

Microsoft开发的经典模型,覆盖6类威胁:

威胁类型 安全属性 定义 示例
仿冒(S) 认证 冒充身份 冒充其他用户
篡改(T) 完整性 修改数据/代码 修改订单信息
抵赖(R) 审计 否认行为 否认修改操作
信息泄露(I) 保密性 数据泄露 用户信息泄露
拒绝服务(D) 可用性 资源耗尽 DDoS攻击
权限提升(E) 授权 越权访问 普通用户提权

2. DREAD模型

威胁评分方法,每个维度1-3分:

  1. Damage:潜在损害
  2. Reproducibility:可复现性
  3. Exploitability:利用难度
  4. Affected users:影响用户范围
  5. Discoverability:可发现性

3. PASTA方法

7阶段攻击模拟与威胁分析:

  1. 定义目标
  2. 定义技术范围
  3. 应用分解
  4. 威胁分析
  5. 漏洞识别
  6. 攻击建模
  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. 总结与最佳实践

  1. 安全左移:在设计和需求阶段就引入安全考虑
  2. 文化转变:将安全设计视为开发文化而非附加项
  3. 模式重用:建立并使用安全设计模式库
  4. 持续评估:在每次架构变更时重新评估威胁
  5. 跨职能协作:开发、安全、业务团队共同参与设计

关键认识:不安全设计一旦投入生产,修复成本极高,最佳策略是通过威胁建模和安全设计模式在前期预防。

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. 总结与最佳实践 安全左移 :在设计和需求阶段就引入安全考虑 文化转变 :将安全设计视为开发文化而非附加项 模式重用 :建立并使用安全设计模式库 持续评估 :在每次架构变更时重新评估威胁 跨职能协作 :开发、安全、业务团队共同参与设计 关键认识 :不安全设计一旦投入生产,修复成本极高,最佳策略是通过威胁建模和安全设计模式在前期预防。