CISP学习指南:软件安全

  1. 一、BSI(Build Security In)系列模型
  2. 二、软件安全三大支柱
  3. 三、软件安全接触点
  4. 四、应用风险管理
  5. 五、安全知识
  6. 六、系统安全工程能力成熟度模型(SSE-CMM)
  7. 七、软件安全实践总结
  8. 八、总结

软件安全是信息安全的重要组成部分,通过在软件开发生命周期中融入安全实践,可以从源头上降低安全风险。

一、BSI(Build Security In)系列模型

1.1 BSI的含义

BSI(Build Security In)是指将安全内建到软件过程中,而不是可有可无,更不是游离于软件开发生命周期之外。

BSI的核心理念:

graph TB A["BSI核心理念"] B["安全内建"] C["全生命周期"] D["工程化方法"] A --> B A --> C A --> D B --> B1["不是可有可无"] B --> B2["不是游离于外"] B --> B3["是有机组成部分"] C --> C1["需求阶段"] C --> C2["设计阶段"] C --> C3["实现阶段"] C --> C4["测试阶段"] C --> C5["运维阶段"] D --> D1["系统化方法"] D --> D2["可重复过程"] D --> D3["最优实践"] style B fill:#e3f2fd,stroke:#1976d2 style C fill:#e8f5e9,stroke:#388e3d style D fill:#fff3e0,stroke:#f57c00

💡 BSI的关键特征

BSI强调的核心思想:

🏗️ 安全内建(Built-in)

  • 安全是软件的有机组成部分
  • 不是事后添加的附加功能
  • 从一开始就考虑安全

🔄 全生命周期

  • 贯穿整个软件开发生命周期
  • 不是某个阶段的独立活动
  • 持续的安全保障

🛠️ 工程化方法

  • 使用系统化、工程化的方法
  • 不是临时性的安全措施
  • 可重复、可度量的过程

二、软件安全三大支柱

2.1 软件安全框架

软件安全三大支柱:

graph TB A["软件安全"] B["应用风险管理
Risk Management"] C["软件安全接触点
Touchpoints"] D["安全知识
Knowledge"] A --> B A --> C A --> D B --> B1["识别和评估风险"] B --> B2["制定缓解策略"] B --> B3["持续监控"] C --> C1["代码审核"] C --> C2["架构风险分析"] C --> C3["渗透测试"] C --> C4["安全测试"] D --> D1["安全原则"] D --> D2["最佳实践"] D --> D3["威胁知识"] D --> D4["漏洞模式"] style B fill:#e3f2fd,stroke:#1976d2 style C fill:#e8f5e9,stroke:#388e3d style D fill:#fff3e0,stroke:#f57c00

🚨 常见错误:安全测试不是三大支柱之一

错误说法:软件安全的三根支柱是风险管理、软件安全触点和安全测试

为什么这是错误的:

  • 安全测试只是软件安全接触点的一部分
  • 不是独立的支柱
  • 它属于软件安全接触点中的具体实践

正确的三大支柱:

  1. 应用风险管理(Risk Management)
  2. 软件安全接触点(Touchpoints)
  3. 安全知识(Knowledge)

💡 软件安全三大支柱详解

1️⃣ 应用风险管理(Risk Management)

  • 识别和评估软件面临的安全风险
  • 制定风险缓解策略
  • 持续监控和管理风险
  • 将安全风险纳入业务决策

2️⃣ 软件安全接触点(Touchpoints)

  • 在软件开发生命周期的关键点应用安全实践
  • 包括代码审核、架构风险分析、渗透测试等
  • 将安全融入开发过程
  • 在不同阶段采用不同的安全活动

3️⃣ 安全知识(Knowledge)

  • 安全原则和最佳实践
  • 威胁和攻击模式知识
  • 常见漏洞和缺陷模式
  • 安全设计模式和反模式

常见混淆概念:

概念 层级关系 说明
代码审核、风险分析、渗透测试 具体实践 这些都属于软件安全接触点的具体实施方法
威胁建模 具体实践 是软件安全接触点在设计阶段的重要活动
模糊测试 具体实践 是软件安全接触点在测试阶段的技术手段

2.2 三大支柱的关系

三大支柱如何协同工作:

graph LR A["安全知识"] --> B["应用风险管理"] A --> C["软件安全接触点"] B --> D["安全软件"] C --> D B <--> C style A fill:#fff3e0,stroke:#f57c00 style B fill:#e3f2fd,stroke:#1976d2 style C fill:#e8f5e9,stroke:#388e3d style D fill:#c8e6c9,stroke:#2e7d32

💡 三大支柱的协同作用

安全知识是基础:

  • 为风险管理提供威胁和漏洞知识
  • 指导安全接触点的实施
  • 帮助团队理解安全重要性

应用风险管理是战略:

  • 确定安全优先级
  • 指导资源分配
  • 平衡安全和业务需求

软件安全接触点是战术:

  • 将安全融入开发过程
  • 在关键点应用安全实践
  • 发现和修复安全问题

三、软件安全接触点

3.1 主要接触点

软件开发生命周期中的安全接触点:

graph TB A["需求阶段"] --> A1["安全需求分析"] B["设计阶段"] --> B1["架构风险分析"] B --> B2["威胁建模"] C["实现阶段"] --> C1["代码审核"] C --> C2["安全编码"] D["测试阶段"] --> D1["安全测试"] D --> D2["模糊测试"] D --> D3["渗透测试"] E["部署阶段"] --> E1["安全配置"] E --> E2["部署审查"] F["运维阶段"] --> F1["安全监控"] F --> F2["漏洞管理"] style A fill:#e8eaf6,stroke:#3f51b5 style B fill:#f3e5f5,stroke:#9c27b0 style C fill:#e0f2f1,stroke:#009688 style D fill:#fff3e0,stroke:#ff9800 style E fill:#e8f5e9,stroke:#388e3d style F fill:#fce4ec,stroke:#c2185b

关键接触点详解:

接触点 阶段 主要活动 目标
安全需求分析 需求 识别安全需求、合规要求 明确安全目标
架构风险分析 设计 评估架构安全风险 安全架构设计
威胁建模 设计 识别威胁和攻击面 理解安全威胁
代码审核 实现 审查代码安全问题 发现代码缺陷
安全测试 测试 验证安全控制 确保安全功能
渗透测试 测试 模拟攻击 发现漏洞

3.2 代码审核

代码审核的类型:

graph TB A["代码审核"] B["静态代码审核"] C["动态代码审核"] D["人工代码审核"] A --> B A --> C A --> D B --> B1["不执行代码"] B --> B2["分析源代码"] B --> B3["自动化工具"] C --> C1["执行代码"] C --> C2["运行时分析"] C --> C3["发现运行时问题"] D --> D1["专家审查"] D --> D2["发现逻辑问题"] D --> D3["最佳实践检查"] style B fill:#e3f2fd,stroke:#1976d2 style C fill:#e8f5e9,stroke:#388e3d style D fill:#fff3e0,stroke:#f57c00

3.3 渗透测试

渗透测试的价值:

💡 渗透测试的作用

渗透测试是验证安全性的重要手段:

🎯 模拟真实攻击

  • 从攻击者角度评估系统
  • 发现实际可利用的漏洞
  • 验证安全控制有效性

🔍 发现深层问题

  • 发现设计和实现缺陷
  • 识别配置错误
  • 发现业务逻辑漏洞

📊 提供改进建议

  • 评估风险严重程度
  • 提供修复建议
  • 帮助优先级排序

四、应用风险管理

4.1 风险管理流程

应用风险管理的关键步骤:

graph LR A["风险识别"] --> B["风险评估"] B --> C["风险处置"] C --> D["风险监控"] D --> A A --> A1["识别威胁和漏洞"] B --> B1["评估可能性和影响"] C --> C1["制定缓解措施"] D --> D1["持续监控"] style A fill:#e3f2fd,stroke:#1976d2 style B fill:#fff3e0,stroke:#f57c00 style C fill:#e8f5e9,stroke:#388e3d style D fill:#f3e5f5,stroke:#7b1fa2

风险处置策略:

策略 说明 适用场景
规避 消除风险源 风险过高且可避免
缓解 降低风险 风险可接受但需控制
转移 转移给第三方 可通过保险等转移
接受 接受残余风险 风险很低或成本过高

4.2 风险评估方法

常用风险评估方法:

风险评估方法:
├── 定性评估
│   ├── 专家判断
│   ├── 风险矩阵
│   └── 场景分析
├── 定量评估
│   ├── 年度损失期望(ALE)
│   ├── 投资回报率(ROI)
│   └── 成本效益分析
└── 混合方法
    ├── FAIR(Factor Analysis of Information Risk)
    ├── OCTAVE(Operationally Critical Threat, Asset, and Vulnerability Evaluation)
    └── NIST风险管理框架

五、安全知识

5.1 安全原则

核心安全原则:

graph TB A["安全原则"] B["最小权限"] C["纵深防御"] D["失败安全"] E["完全中介"] F["开放设计"] G["权限分离"] A --> B A --> C A --> D A --> E A --> F A --> G B --> B1["仅授予必要权限"] C --> C1["多层安全控制"] D --> D1["失败时保持安全"] E --> E1["检查每次访问"] F --> F1["不依赖隐蔽性"] G --> G1["分散权力"] style B fill:#e3f2fd,stroke:#1976d2 style C fill:#e8f5e9,stroke:#388e3d style D fill:#fff3e0,stroke:#f57c00 style E fill:#f3e5f5,stroke:#7b1fa2 style F fill:#fce4ec,stroke:#c2185b style G fill:#e1f5fe,stroke:#0277bd

5.2 常见漏洞类型

OWASP Top 10(2021):

排名 漏洞类型 说明
A01 失效的访问控制 未正确实施访问限制
A02 加密机制失效 敏感数据未加密或加密不当
A03 注入 SQL注入、命令注入等
A04 不安全设计 设计阶段的安全缺陷
A05 安全配置错误 不安全的默认配置
A06 易受攻击和过时的组件 使用有漏洞的第三方组件
A07 身份识别和身份验证失效 认证机制缺陷
A08 软件和数据完整性失效 未验证完整性
A09 安全日志和监控失效 缺乏有效监控
A10 服务器端请求伪造(SSRF) 服务器被诱导发起请求

5.3 安全设计模式

常用安全设计模式:

安全设计模式:
├── 认证和授权
│   ├── 单点登录(SSO)
│   ├── 基于角色的访问控制(RBAC)
│   └── OAuth 2.0
├── 数据保护
│   ├── 加密存储
│   ├── 传输加密(TLS/SSL)
│   └── 数据脱敏
├── 输入验证
│   ├── 白名单验证
│   ├── 参数化查询
│   └── 输出编码
└── 会话管理
    ├── 安全会话令牌
    ├── 会话超时
    └── 会话固定防护

六、系统安全工程能力成熟度模型(SSE-CMM)

6.1 SSE-CMM概述

系统安全工程-能力成熟度模型(SSE-CMM,Systems Security Engineering Capability Maturity Model)是评估和改进组织安全工程能力的框架。

SSE-CMM的核心理念:

graph TB A["SSE-CMM"] B["安全工程"] C["能力成熟度"] D["持续改进"] A --> B A --> C A --> D B --> B1["系统化方法"] B --> B2["工程化实践"] B --> B3["全生命周期"] C --> C1["5个成熟度级别"] C --> C2["22个过程域"] C --> C3["可度量"] D --> D1["评估"] D --> D2["改进"] D --> D3["验证"] style B fill:#e3f2fd,stroke:#1976d2 style C fill:#e8f5e9,stroke:#388e3d style D fill:#fff3e0,stroke:#f57c00

6.2 SSE-CMM的正确理解

🚨 SSE-CMM的错误理解

错误说法:基于SSE-CMM的工程是独立工程,与软件工程、硬件工程、通信工程等分别规划实施

为什么这是错误的:

SSE-CMM强调安全工程应该集成到其他工程中,而不是独立存在。

正确理解:

  • ✅ 安全工程应融入软件工程
  • ✅ 安全工程应融入硬件工程
  • ✅ 安全工程应融入通信工程
  • ✅ 安全工程应融入系统工程
  • ❌ 不是独立的、分离的工程

💡 SSE-CMM的核心特性

🤝 组织协作性

  • 需要与开发方、产品供应商、集成商、咨询服务商等协作
  • 安全工程不是孤立的活动
  • 强调跨组织的相互作用

📊 工程规范化

  • 通过成熟度模型使安全工程规范化
  • 可以度量和评估安全工程能力
  • 支持持续改进
  • 使安全工程成为确定的、成熟的和可度量的学科

🔗 工程集成性

  • 安全工程应该集成到软件工程、硬件工程、通信工程等其他工程中
  • 不是独立规划和实施的工程
  • 需要与其他工程协同工作
  • 强调融合而非分离

🏢 全面覆盖性

  • 包括管理、组织和工程活动
  • 不仅仅是系统安全的工程活动
  • 是全面的能力评估框架
  • 覆盖整个组织的安全工程实践

SSE-CMM的关键特征:

特征 说明 重要性
集成性 与其他工程集成,不是独立工程 ⭐⭐⭐⭐⭐
全面性 覆盖管理、组织、工程活动 ⭐⭐⭐⭐⭐
协作性 与多方组织相互作用 ⭐⭐⭐⭐
可度量性 确定的、成熟的、可度量的 ⭐⭐⭐⭐⭐
持续改进 支持能力提升 ⭐⭐⭐⭐⭐

6.3 SSE-CMM的成熟度级别

5个成熟度级别:

graph TB A["SSE-CMM成熟度级别"] B["Level 1
执行非正式"] C["Level 2
计划和跟踪"] D["Level 3
定义良好"] E["Level 4
定量控制"] F["Level 5
持续改进"] A --> B B --> C C --> D D --> E E --> F B --> B1["基本实践"] C --> C1["项目管理"] D --> D1["标准化"] E --> E1["量化管理"] F --> F1["优化"] style B fill:#ffcdd2,stroke:#b71c1c style C fill:#ffccbc,stroke:#d84315 style D fill:#fff3e0,stroke:#f57c00 style E fill:#c8e6c9,stroke:#2e7d32 style F fill:#e3f2fd,stroke:#1976d2

各级别特征:

级别 名称 特征 关键实践
1 执行非正式 临时的、混乱的 基本安全实践
2 计划和跟踪 项目级管理 项目计划、跟踪
3 定义良好 组织级标准化 标准过程、培训
4 定量控制 量化管理 度量、统计控制
5 持续改进 优化 缺陷预防、技术创新

6.4 SSE-CMM的过程域

22个过程域分类:

SSE-CMM过程域:
├── 工程过程域(11个)
│   ├── 管理安全控制
│   ├── 评估影响
│   ├── 评估安全风险
│   ├── 评估威胁
│   ├── 评估脆弱性
│   ├── 建立保证论据
│   ├── 协调安全
│   ├── 监控安全态势
│   ├── 提供安全输入
│   ├── 规定安全需求
│   └── 验证和确认安全
├── 项目过程域(6个)
│   ├── 确保质量
│   ├── 管理配置
│   ├── 管理项目风险
│   ├── 监控和控制技术工作
│   ├── 计划技术工作
│   └── 定义系统工程过程
└── 组织过程域(5个)
    ├── 改进组织系统工程过程
    ├── 管理产品线演进
    ├── 管理系统工程支持环境
    ├── 提供持续技能和知识
    └── 协调与供应商

6.5 SSE-CMM与其他模型的关系

模型对比:

模型 关注点 范围 关系
SSE-CMM 安全工程能力 组织安全工程 专注安全
CMM/CMMI 软件/系统工程能力 组织工程能力 通用框架
ISO 27001 信息安全管理 信息安全管理体系 管理体系
SDL 安全开发 软件开发生命周期 开发实践

SSE-CMM的价值:

  • 📊 评估组织安全工程能力
  • 🎯 识别改进机会
  • 📈 指导能力提升
  • ✅ 验证改进效果
  • 🏆 获得客户信任

七、软件安全实践总结

7.1 安全实践框架

软件安全实践的关键领域:

软件安全实践框架:
├── 人员层面
│   ├── 安全意识培训
│   ├── 安全技能培训
│   └── 安全文化建设
├── 过程层面
│   ├── 安全需求分析
│   ├── 威胁建模
│   ├── 安全设计审查
│   ├── 安全编码
│   ├── 代码审查
│   └── 安全测试
├── 技术层面
│   ├── 安全编码准则
│   ├── 安全开发工具
│   ├── 静态代码分析
│   ├── 动态安全测试
│   └── 渗透测试
└── 管理层面
    ├── 安全策略制定
    ├── 安全度量
    ├── 安全审计
    └── 持续改进

💡 安全实践要点

有效的安全措施:

安全意识培训

  • 提高开发人员安全意识
  • 了解常见安全漏洞
  • 学习安全编码实践

安全编码准则

  • 建立安全编码标准
  • 防止常见安全漏洞
  • 统一安全实践

安全测试环节

  • 在发布前发现漏洞
  • 验证安全控制
  • 持续改进

八、总结

软件安全的核心要点:

  1. BSI模型:将安全内建到软件过程中,使用工程化方法
  2. 三大支柱:应用风险管理、软件安全接触点和安全知识
  3. 接触点:在开发生命周期关键点应用安全实践
  4. 风险管理:识别、评估、处置和监控安全风险
  5. 安全知识:掌握安全原则、漏洞模式和最佳实践
  6. SDL:将安全融入整个开发生命周期

🎯 关键要点

  • BSI强调将安全内建到软件过程中,贯穿整个生命周期
  • 提出的软件安全三大支柱:应用风险管理、软件安全接触点和安全知识
  • 安全测试是软件安全接触点的一部分,不是独立的支柱
  • 软件安全接触点包括代码审核、架构风险分析、渗透测试等
  • 应用风险管理是战略层面的安全管理
  • 安全知识是软件安全的基础
  • 安全应该融入软件开发生命周期的每个阶段

💡 实践建议

  • 建立安全开发生命周期(SDL)
  • 定期进行安全培训
  • 在设计阶段进行威胁建模
  • 实施代码审核和安全测试
  • 建立漏洞响应机制
  • 持续监控和改进安全实践
分享到