1. 简介
SDL 的全称是 Security Development Lifecycle, 即:安全开发生命周期。由微软最早提出,是一种专注于软件开发的安全保障流程。为实现保护最终用户为目标,它在软件开发流程的各个阶段引入安全和隐私问题。
2. 流程
SDL 大致如下,包括了以下七个阶段:
• 安全培训: 安全培训体系:安全意识 + 安全测试 + 安全开发 + 安全运维 + 安全产品
• 需求分析: 确定安全需求和投入占比,寻找安全嵌入的最优方式
• 系统设计: 确定设计要求, 分析攻击面, 威胁建模
• 实现: 使用标准的工具,弃用不安全的函数,静态分析(安全开发规范 + 代码审计)
• 验证: 黑白盒测试,攻击面评估
• 发布: 安全事件响应计划、周期性安全评估
• 响应: 应急响应,BUG 跟踪
培训的内容应包括以下方面:
Part 1:安全设计:包括减小攻击面、深度防御、最小权限原则、服务器安全配置等
Part 2:威胁建模:概述、设计意义、基于威胁建模的编码约束
Part 3:安全编码:缓冲区溢出(针对 C/C++)、整数算法错误(针对 C/C++)、XSS/CSRF(对于 Web 类应用)、SQL 注入(对于 Web 类应用)、弱加密
Part 4:安全测试:安全测试和黑盒测试的区别、风险评估、安全测试方法(代码审计、fuzz 等)
Part 5:隐私与敏感数据:敏感数据类型、风险评估、隐私开发和测试的最佳实践
Part 6:高级概念:高级安全概念、可信用户界面设计、安全漏洞细节、自定义威胁缓解
3.SDL 实战经验
- 与项目经理进行充分沟通,排出足够的时间
- 规范公司的立项流程,确保所有项目都能通知到安全团队,避免遗漏
- 树立安全部门的权威,项目必须由安全部门审核完成后才能发布
- 将技术方案写入开发、测试的工作手册中
- 给工程师培训安全方案
- 记录所有的安全 bug,激励程序员编写安全的编码
4. 需求分析与设计
引用一份之前看到的美的执行 SDL 的 checklist。如下:
5. 开发与测试
- 使用安全的函数,比如 OWASP ESAPI
- 代码审计工具 --Fortify SCA
- 测试阶段 -- 漏洞扫描器 appscan,awvs,webinspect
攻防驱动 SDL:
事前基线:安全编码标准、安全设计
事中措施:代码审计、发布前的安全测试、系统上线流程规范
事后机制:http 全流量 ids、web 日志分析、流量实时审计等
事件驱动:发现了新问题就督促开发部门赶紧修复
6. 总结:
听了很多安全同仁的想法,中小企业不建议推动 SDL,可以做攻防驱动类型的 SDL,因为 SDL 往往需要从上往下推动,归根到底还是 “人” 的问题。SDL 的成功实施,与管理层支持力度有很多关系。
参考文献:
《白帽子讲 Web 安全》
https://mp.weixin.qq.com/s/MR3SmOLj834LK4RBMcZ2pg?
https://xz.aliyun.com/t/226
原文地址 www.cnblogs.com