3.7 如何看待SDL
SDL(安全开发生命周期)优化模型如图3-1所示。
图3-1 SDL优化模型
SDL起源于微软,2004年将SDL引入其内部软件开发流程中,目的是减少其软件中的漏洞数量和降低其严重级别。SDL侧重于长期维护、流程改进并能够帮助开发过程应对不断变化的威胁状况。早些年微软的产品安全问题比较多,微软在某一年甚至下令所有产品线开发计划停止半年,全部用于整顿安全问题。起初SDL适用于传统的瀑布模型和螺旋式开发,到了2010年SDL增加了敏捷的部分改进,用于应对互联网下的Web开发,目前SDL的“全貌”如图3-2所示。
图3-2 SDL整体框架
基本软件安全培训应涵盖的基础概念如下所示。
安全设计,包括以下主题:
减小攻击面
深度防御
最小权限原则
安全默认设置
威胁建模,包括以下主题:
威胁建模概述
威胁模型的设计意义
基于威胁模型的编码约束
安全编码,包括以下主题:
缓冲区溢出(对于使用 C 和 C++ 的应用程序)
整数算法错误(对于使用 C 和 C++ 的应用程序)
跨站点脚本(对于托管代码和 Web 应用程序)
SQL 注入(对于托管代码和 Web 应用程序)
弱加密
安全测试,包括以下主题:
安全测试与功能测试之间的区别
风险评估
安全测试方法
隐私,包括以下主题:
隐私敏感数据的类型
隐私设计最佳实践
风险评估
隐私开发最佳实践
隐私测试最佳实践
高级概念方面的培训,包括但不限于以下方面:
高级安全设计和体系结构
可信用户界面设计
安全漏洞细节
实施自定义威胁缓解
先看这份培训列表。能把这些彻底讲明白的人其实还是资深工程师以上的人。有人可能觉得我说的夸张了,原因在于大部分互联网公司的研发环境主要是Web,有很多人能把SQL注入、XSS、CSRF这些讲清楚,但问题是这样就算SDL了么?非也,当下热闹的安全大会各种讲攻防的议题,但这些离真正的产品安全设计还差很远,行业的普遍现状是能做入侵检测,能把漏洞修补原理说清楚,但很少有人能把安全架构设计非常体系化的讲清楚。很多人认为SDL在互联网公司无法完全落地的原因是因为DevOps模式下的频繁交付导致SDL显得过于“厚重”,我觉得这只说对了一半,根据大多数互联网公司现行的模式,我加了一个帽子,姑且就叫“攻防驱动修改”吧。