# OWASP 成熟度模型

## 软件保障成熟度模型（SAMM）

软件保证成熟度模型：Software Assurance Maturity Model (SAMM)，是一个开放的框架，帮助组织制定并实施针对组织所面临来自软件安全的特定风险的策略。

- 每一个安全措施定义了三个等级。
  - 以证明组织是如何随着时间而改变的。
- 一个措施的三个等级:
  - 0：隐起点，措施尚未实现
  - 1：对安全实践有了初步了解并有所专门的提供
  - 2：提高了安全实践的效率和(或)有效性
  - 3：在一定规模上综合掌握了安全实践

```maturity
 - 软件保障成熟度模型（SAMM）
   - 策略与指标
   - 政策与合规
   - 教育与指导
   - 威胁评估
   - 安全需求
   - 安全架构
   - 设计审核
   - 代码审核
   - 安全测试
   - 漏洞管理
   - 环境强化
   - 操作实现
```

```checklist
 - 软件保障成熟度模型（SAMM）
   - 策略与指标
     - SM1：为组织内的软件安全建立统一的战略路线图
       - 评估整体业务风险概况
       - 建立并维护保证计划路线图
     - SM2：衡量数据和软件资产的相对价值 ，并选择风险容忍度
       - 根据业务风险将数据和应用程序分类
       - 建立并衡量每个分组的安全目的
     - SM3：使安全成本与相关业务指标和资产价值相一致。
       - 引导周期性地全行业成本比较
       - 为以前的安全成本收集度量标准
   - 政策与合规
     - PC1：了解组织的相关监管和合规要求
       - 确定并监控外部的合规驱动因素
       - 建立并维护遵守指导
     - PC2：建立安全和合规的基准线，并了解每个项目的风险
       - 为安全和合规建立政策和标准
     - PC3：要求合规标准，并衡量项目是否符合全组织的政策和标准
       - 为项目建立合规关卡
       - 为审计数据的采集，采用解决方案
   - 教育与指导
     - EG 1：为开发人员提供关于以安全编程和部署为主题的资源
       - 实施技术安全意识的培训
       - 建立并维护技术指导
     - EG 2：为软件生命周期中所有的人员提供基于角色的安全开发详细指导
       - 实施针对特定角色的应用程序安全培训
       - 聘用安全指导专家增强项目团队
     - EG 3：实施综合的安全培训，并为员工进行基本知识的认证检验
       - 建立正式的应用程序安全支持门户网站
       - 建立基于角色的考试或认证制度
   - 威胁评估
     - TA 1：确定并了解组织和单个项目的高级别威胁
       - 建立并维护特定应用程序的威胁模型
       - 根据软件架构建立攻击者概况
     - TA 2：提高威胁评估的准确性，并深入了解每个项目的细节
       - 建立并维护每个项目的滥用用例模型
       - 为威胁的度量采用一个权重系统
     - TA 3：将补偿控制与对内部和第三方软件的每个威胁具体联系起来
       - 明确评估来自第三方组件的风险
       - 用补偿控制详细描述威胁模型。
   - 安全需求
     - SR 1：在软件需求分析阶段明确地将安全考虑在内
       - 从业务功能推导出安全需求
       - 为需求评估安全和遵守指导
     - SR 2：根据业务逻辑和已知风险增加安全需求的深度
       - 为资源和能力建立一个访问控制矩阵中
       - 根据已知风险指定安全需求
     - SR 3：为所有软件项目和第三方的附属项目强制要求安全需求
       - 将安全需求写入供应商协议
       - 为安全需求扩展审计计划。
   - 安全架构
     - SA 1：将主动安全指导的想法引入到软件设计过程中
       - 维护推荐的软件框架列表
       - 将安全原则明确运用到设计中
     - SA 2：将软件设计过程引导向已知安全服务和默认安全设计
       - 明确并促进安全服务和基础设施
       - 明确来自架构的安全设计模式
     - SA 3：正式控制软件设计过程并验证安全部件的使用
       - 建立正式的参照架构和平台
       - 验证框架、模式和平台的使用
   - 设计审核
     - DR 1：为软件设计提供专门的审核，以确保排除已知风险的最低线
       - 确定软件攻击层面
       - 根据已知安全需求分析设计
     - DR 2：根据安全的最佳实践为软件设计审核提供评估服务
       - 检查提供安全机制的完整性
       - 为项目团队部署设计审核服务
     - DR 3：需求评估并验证已完成部分，以详细了解保护机制
       - 为敏感资源开发数据流图
       - 为设计审核建立发布关卡
   - 代码审核
     - CR 1：随机查找基本的代码级漏洞和其他高风险安全问题。
       - 根据已知安全需求建立审核检查列表
       - 为高风险代码执行定点审核
     - CR 2：通过自动化方式在开发过程中使代码审核更加准确和有效
       - 使用自动化的代码分析工具
       - 将代码分析集成到开发流程当中
     - CR 3：必须进行全面的代码审核过程，以发现语言级别和特定应用程序的风险
       - 为特定应用程序问题自定义代码分析
       - 为代码审核建立发布关卡
   - 安全测试
     - ST 1：根据编程和软件需求，建立处理过程以执行基本的安全测试
       - 从已知安全需求推出测试用例
       - 为软件发布执行渗透测试
     - ST 2：通过自动化使在开发过程中的安全测试更加完善和有效
       - 使用自动化的安全测试工具
       - 将安全测试整合到开发过程中
     - ST 3：在部署前要求进行特定应用程序的安全测试以确保基本的安全
       - 为特定应用程序使用自动化的安全测试
       - 为安全测试建立发布关卡
   - 漏洞管理
     - VM 1：理解对于漏洞报告或事件的高级别计划
       - 为安全事件确定联络点
       - 建立非正式安全响应团队
     - VM 2：为响应过程阐述期望，以改善一致性和交流
       - 建立一致的事件响应流程
       - 采用安全事件报告流程
     - VM 3：在响应过程中为积极规划提供反馈，而改善分析和数据收集
       - 为事件执行根源分析;
       - 收集每一事件的度量指标
   - 环境强化
     - EH 1：了解应用程序和软件组件的基本操作环境
       - 维护操作环境说明
       - 确定并安装关键的安全软件升级和补丁
     - EH 2：通过强化操作环境提高对应用程序操作的信心
       - 建立常规补丁管理流程
       - 监控基准基础架构配置状态
     - EH 3：以已知最佳实践验证应用程序的健康和操作环境状态
       - 确定并部署相关操作的保护工具
       - 为配置环境扩展审计计划
   - 操作实现
     - OE 1：实现开发团队和操作人员之间对于与安全相关的关键数据的沟通交流
       - 为部署获得的重要的安全信息
       - 为典型的应用程序警报记录流程
     - OE 2：通过提供详细的步骤为持续的安全操作提高期望
       - 创建每次发布的变更管理流程
       - 维护正式的操作安全指南
     - OE 3：针对完整性而对安全信息和部件检验进行强制宣传
       - 为操作信息扩展操作审计计划
       - 对应用程序组件执行代码签名
```

## 安全内建成熟度模型（BSIMM）

```maturity
 - 安全内建成熟度模型（BSIMM）
   - 策略与指标
   - 配置管理和漏洞管理
   - 软件环境
   - 渗透测试
   - 安全测试
   - 代码审查
   - 架构分析
   - 标准和要求
   - 安全功能和设计
   - 攻击模型
   - 训练
   - 合规与政策
```
