《DevSecOps敏捷安全》读书笔记一

简介:读《DevSecOps敏捷安全》整理的读书笔记。

前言

读了这本《DevSecOps敏捷安全》的书,感觉收获颇丰。就决定从这本开始,把读书笔记整理出来。首先放一张大图,完整了展现了一个DevSecOps的可视化方案。

2

开发安全入门

1. 软件开发与SDLC

SDLC的典型阶段:

  1. 问题定义阶段
  2. 需求分析阶段
  3. 软件设计阶段
  4. 软件开发阶段
  5. 软件测试阶段
  6. 运行和维护阶段

日常实践中可也可以按照5个阶段划分:

  1. 软件准备阶段
  2. 软件开发阶段
  3. 软件部署阶段
  4. 软件运营阶段
  5. 软件废弃阶段

3

涉及到的安全的挑战:

  1. 软件准备阶段,发现风险并梳理安全需求并提出符合要求的安全设计,团队安全意识缺乏与安全能力不足
  2. 软件开发阶段,提高团队安全开发能力,措施与工具(培训,审计SCA)
  3. 软件部署阶段,上线前发现隐患(渗透?)
  4. 软件运营阶段,监控与安全事件应对
  5. 软件废弃阶段,合规的销毁数据,服务下线,企业制度缺失,执行落地难。

传统的方式:上线前后人工渗透测试,自动化扫描(毕其功于一役,所谓应急式安全管理)

2. 各个阶段的安全活动

1. 准备阶段:

  1. 安全意识和安全能力培训
  2. 软件需求分析、架构设计的威胁建模 可以包括:安全培训、安全标准、情报、攻击面分析、应对策略、威胁建模、设计审核、物理安全

2. 开发阶段:

  1. 环境安全(开源组件,制品库等)
  2. 安全编码规范和安全测试标准(测试工作也要覆盖一些潜在安全漏洞而不仅仅是业务功能)
  3. 模糊测试(需要程序和人协同参与)
  4. 静态应用安全测试(SAST)---代码审计 a. 介入时间更早,可以用IDE插件 b. 还可以是谁家APP、二进制 c. 误报率高 d. 时间较长,不利于持续交付(敏捷)

3. 部署阶段

  1. 建立测试环境测试,模拟真实环境的测试,开发人员参与维护(标记维护过程的变化)
  2. 全面审计,软件架构整体的安全检查
  3. 黑盒漏扫(DAST)
  4. 渗透测试(也包括对数据合规的要求)

4. 运营阶段

  1. 安全监控
  2. 变更处理
  3. 技术支持
  4. 事件响应

5. 废弃阶段

  1. 服务下线
  2. 合规与隐私保护,隐私内容的设备清除与物理销毁(最小化留存原则)

3. 安全开发现状

国内现状:

2015年 GB/T 18336-2015《信息技术 安全技术 信息技术安全评估准则 》 2024年 GB/T 18336-2024《信息技术 安全技术 信息技术安全评估准则 》发布替代了上面这个

开发安全关注点:

  1. 安全文化
  2. 流程管控
  3. 安全技术,缺陷检测技术
  4. 安全运营体系

关于安全左移

未雨绸缪的融入安全于SDLC中

4

4. SDL

SDL 的常用模型

NIST SSDF模型(政府组织)

最佳实践: 5

更像是对下面的融合因为开发的较晚。

微软SDL模型

主要包括7个阶段:培训、需求、设计、实施、验证、发布、响应7个阶段

6

最新的如下:

7

有通用性、windows应用程序,web程序都可以,文档详细,被很多企业学习,可以使用工具进行威胁建模。(参考链接:https://learn.microsoft.com/zh-cn/azure/security/develop/threat-modeling-tool

OWASP CLASP模型

视图:概念视图、角色视图、活动评估视图、活动实施视图、漏洞视图 考量核心问题:做的时机,不做的风险、做的成本(符合人性哈)

8

可以新项目,也可以集成,无法与敏捷类结合

McGraw BSI模型

三大支柱:风险管理框架、7个安全接触点、安全知识

7个安全触电:代码审查、风险分析、渗透测试、基于风险的安全测试、滥用案例、安全需求分析、安全操作

9

对代码审查有利,具有灵活性。

SDL的建设

解决方案类型:
  1. 事件驱动类型,救火队
  2. 合规驱动类型,安全基线
  3. 技术驱动类型,产品和服务
  4. 风险驱动类型
安全团队

解决问题:

  1. 成员角色
  2. 章程
  3. 严重性和优先级
  4. 运营参数
  5. 计划
  6. 行动手册
  7. 访问更新的机制

10

从独立的SDL流程逐步向融合的SDL流程过度

11

12

融入的过程需要考虑两部分:

  1. 规范制定,管理制度、技术规范、培训、代码规范等
  2. 管理流程建设,不同项目配置不同流程和参与人员
安全开发工具
1. 威胁建模工具

上文提的微软SDL的工具,STRIDE模型,基于数据流图(DFD)

13

14

步骤如下:

  1. 分析业务场景,绘制DFD
  2. 识别威胁
  3. 提出缓解措施
  4. 安全验证 用到的图标工具如下:

15

16

17

18

2. 代码审计工具

通常为工具+人的方式 常用工具:Cobra、Upsource、Fortify、Checkmarx CxSAST、Synopsys Coverity、SonarQube、CodeQL

3. 模糊测试工具

同行是测试工具实现,但是对算法引擎要求高 工具:AFL Fuzz、libFuzzer、Honggfuzz、Peach Fuzz、Syzkaller

4. 渗透测试工具

渗透测试的常用流程:

19

常用工具:灵脉BAS(了解不多)、AppScan、AWVS、Nessus、Nmap、Metasploit、Canvas、Cobalt Strike 以上漏洞个人觉得都是漏洞扫描工具,渗透过程更多使用burpsuite抓包分析,人工行为,效果才是最好的。

SDL的建设技巧

最主要的还是安全管理工作:具体实施以及质量管控

20

挑战

威胁建模:

  1. 缺乏工具匮乏
  2. 安全开发沟通不充分
  3. 安全的非创收性质难以让企业推动其落地
  4. 应对威胁的时间精力消耗庞大
  5. 场景多而难以复用

开源治理:

  1. 三方开源库不一定可靠
  2. 许可证存在问题
  3. 定位和响应能力不足(层层依赖导致问题)

全流程管控

  1. 风险优先级还比较模糊。(扫描了一堆漏洞,漏洞等级高但是不代表风险等级高)
  2. 没有漏洞威胁管控平台(无法协同,无法统一管理)

从开发修复的难度到运营阶段修复的难度和成本逐级增加

21

漏洞修复的一般流程:

22

敏捷开发 敏捷开发的特点:周期短,版本迭代快,SDL方式管理,时间很局促,冲突很大,无法提前介入。

updatedupdated2025-02-282025-02-28