前言
读了这本《DevSecOps敏捷安全》的书,感觉收获颇丰。就决定从这本开始,把读书笔记整理出来。首先放一张大图,完整了展现了一个DevSecOps的可视化方案。
开发安全入门
1. 软件开发与SDLC
SDLC的典型阶段:
- 问题定义阶段
- 需求分析阶段
- 软件设计阶段
- 软件开发阶段
- 软件测试阶段
- 运行和维护阶段
日常实践中可也可以按照5个阶段划分:
- 软件准备阶段
- 软件开发阶段
- 软件部署阶段
- 软件运营阶段
- 软件废弃阶段
涉及到的安全的挑战:
- 软件准备阶段,发现风险并梳理安全需求并提出符合要求的安全设计,团队安全意识缺乏与安全能力不足
- 软件开发阶段,提高团队安全开发能力,措施与工具(培训,审计SCA)
- 软件部署阶段,上线前发现隐患(渗透?)
- 软件运营阶段,监控与安全事件应对
- 软件废弃阶段,合规的销毁数据,服务下线,企业制度缺失,执行落地难。
传统的方式:上线前后人工渗透测试,自动化扫描(毕其功于一役,所谓应急式安全管理)
2. 各个阶段的安全活动
1. 准备阶段:
- 安全意识和安全能力培训
- 软件需求分析、架构设计的威胁建模 可以包括:安全培训、安全标准、情报、攻击面分析、应对策略、威胁建模、设计审核、物理安全
2. 开发阶段:
- 环境安全(开源组件,制品库等)
- 安全编码规范和安全测试标准(测试工作也要覆盖一些潜在安全漏洞而不仅仅是业务功能)
- 模糊测试(需要程序和人协同参与)
- 静态应用安全测试(SAST)---代码审计 a. 介入时间更早,可以用IDE插件 b. 还可以是谁家APP、二进制 c. 误报率高 d. 时间较长,不利于持续交付(敏捷)
3. 部署阶段
- 建立测试环境测试,模拟真实环境的测试,开发人员参与维护(标记维护过程的变化)
- 全面审计,软件架构整体的安全检查
- 黑盒漏扫(DAST)
- 渗透测试(也包括对数据合规的要求)
4. 运营阶段
- 安全监控
- 变更处理
- 技术支持
- 事件响应
5. 废弃阶段
- 服务下线
- 合规与隐私保护,隐私内容的设备清除与物理销毁(最小化留存原则)
3. 安全开发现状
国内现状:
2015年 GB/T 18336-2015《信息技术 安全技术 信息技术安全评估准则 》 2024年 GB/T 18336-2024《信息技术 安全技术 信息技术安全评估准则 》发布替代了上面这个
开发安全关注点:
- 安全文化
- 流程管控
- 安全技术,缺陷检测技术
- 安全运营体系
关于安全左移
未雨绸缪的融入安全于SDLC中
4. SDL
SDL 的常用模型
NIST SSDF模型(政府组织)
最佳实践:
更像是对下面的融合因为开发的较晚。
微软SDL模型
主要包括7个阶段:培训、需求、设计、实施、验证、发布、响应7个阶段
最新的如下:
有通用性、windows应用程序,web程序都可以,文档详细,被很多企业学习,可以使用工具进行威胁建模。(参考链接:https://learn.microsoft.com/zh-cn/azure/security/develop/threat-modeling-tool)
OWASP CLASP模型
视图:概念视图、角色视图、活动评估视图、活动实施视图、漏洞视图 考量核心问题:做的时机,不做的风险、做的成本(符合人性哈)
可以新项目,也可以集成,无法与敏捷类结合
McGraw BSI模型
三大支柱:风险管理框架、7个安全接触点、安全知识
7个安全触电:代码审查、风险分析、渗透测试、基于风险的安全测试、滥用案例、安全需求分析、安全操作
对代码审查有利,具有灵活性。
SDL的建设
解决方案类型:
- 事件驱动类型,救火队
- 合规驱动类型,安全基线
- 技术驱动类型,产品和服务
- 风险驱动类型
安全团队
解决问题:
- 成员角色
- 章程
- 严重性和优先级
- 运营参数
- 计划
- 行动手册
- 访问更新的机制
从独立的SDL流程逐步向融合的SDL流程过度
融入的过程需要考虑两部分:
- 规范制定,管理制度、技术规范、培训、代码规范等
- 管理流程建设,不同项目配置不同流程和参与人员
安全开发工具
1. 威胁建模工具
上文提的微软SDL的工具,STRIDE模型,基于数据流图(DFD)
步骤如下:
- 分析业务场景,绘制DFD
- 识别威胁
- 提出缓解措施
- 安全验证 用到的图标工具如下:
2. 代码审计工具
通常为工具+人的方式 常用工具:Cobra、Upsource、Fortify、Checkmarx CxSAST、Synopsys Coverity、SonarQube、CodeQL
3. 模糊测试工具
同行是测试工具实现,但是对算法引擎要求高 工具:AFL Fuzz、libFuzzer、Honggfuzz、Peach Fuzz、Syzkaller
4. 渗透测试工具
渗透测试的常用流程:
常用工具:灵脉BAS(了解不多)、AppScan、AWVS、Nessus、Nmap、Metasploit、Canvas、Cobalt Strike 以上漏洞个人觉得都是漏洞扫描工具,渗透过程更多使用burpsuite抓包分析,人工行为,效果才是最好的。
SDL的建设技巧
最主要的还是安全管理工作:具体实施以及质量管控
挑战
威胁建模:
- 缺乏工具匮乏
- 安全开发沟通不充分
- 安全的非创收性质难以让企业推动其落地
- 应对威胁的时间精力消耗庞大
- 场景多而难以复用
开源治理:
- 三方开源库不一定可靠
- 许可证存在问题
- 定位和响应能力不足(层层依赖导致问题)
全流程管控
- 风险优先级还比较模糊。(扫描了一堆漏洞,漏洞等级高但是不代表风险等级高)
- 没有漏洞威胁管控平台(无法协同,无法统一管理)
从开发修复的难度到运营阶段修复的难度和成本逐级增加
漏洞修复的一般流程:
敏捷开发 敏捷开发的特点:周期短,版本迭代快,SDL方式管理,时间很局促,冲突很大,无法提前介入。