安全开发流程SDL
一、简介
由微软最早提出的概念,安全开发流程(Security Development Lifecycle),在需求分析、设计、开发、发布所有阶段都引入安全和隐私原则,帮助解决软件安全问题,重点在于开发阶段,而安全培训是SDL最核心的概念。
二、安全开发概念
安全设计,包括:减少攻击面、纵深防御、最小特权原则、安全默认
威胁建模,包括:威胁建模概述、针对威胁模型进行设计、编码威胁模型、测试威胁模型
安全编码,包括:缓冲区超限、整数算术错误、跨站脚本、SQL注入、弱加密、托管代码问题(Microsoft .NET / Java)
安全测试,包括:安全测试与功能测试、风险评估、测试方法、测试自动化
隐私,包括:隐私数据类型、隐私设计最佳做法、风险分析、隐私开发最佳做法、隐私测试最佳做法
三、安全开发流程及核心概念
微软软件安全开发流程图
流程1、培训培训
软件开发团队的所有成员均应接受适当的培训,以随时了解安全基础知识以及安全和隐私方面的最新趋势。开发软件程序的个人每年应该至少参加一次安全培训班。安全培训可以帮助确保在创建软件时考虑到安全性和隐私性,还可以帮助开发团队及时了解安全问题。强烈鼓励项目团队成员寻求适合其需求或产品的其他安全和隐私教育。许多关键知识概念对于成功的软件安全性很重要。这些概念可以大致分为基本或高级安全知识。项目团队的每个技术成员(开发人员,测试人员,程序经理)
流程2、要求
2.1 安全要求 :项目开始,就从根本上考虑安全性和隐私性是软件开发的基本原则。构建可信软件的最佳机会是在新版本或新版本的初始计划阶段,因为开发团队可以识别关键对象并集成安全性和隐私性,从而最大程度地减少对计划和时间表的破坏。
2.2 质量门/bug栏目:质量门定义软件安全的最低可接受标准,bug栏是对安全的定级“严重”“关键”,有助于后期的安全漏洞修复和安全分析
2.3 安全和隐私评估:安全风险评估(SRA)和隐私风险评估(PRA)是安全分析一个必须步骤,内容包括是否项目的威胁模型建立、是否进行项目安全渗透、如何进行安全评级、评级该如何定义
流程3、设计
3.1 设计要求:在设计阶段,您将制定计划,以完成整个SDL过程(从实施,验证到发布)的整个项目。在设计阶段,您将通过功能和设计规范建立最佳实践,以遵循该阶段,并执行风险分析以识别软件中的威胁和漏洞。
3.2 减少攻击面:指程序任何能被用户或者其它程序所访问到的部分,这些暴露给用户的地方往往也是最可能被恶意攻击者攻击的地方。攻击面最小化即是指尽量减少暴露恶意用户可能发现并试图利用的攻击面数量。减少攻击面的措施,包括限制系统访问和“最小权限原则”
3.3 威胁建模:提前为系统建立好威胁攻击模型,明确攻击可能来自于哪方面
流程4、实施
4.1 使用特定的工具:包括开发团队使用的编译和链接器,可能存在安全风险,指定特定的版本和工具,有利于减少安全风险
4.2 禁用不用的函数:废弃的API和函数,需要提前禁止使用
4.3 静态分析:借助工具,与手工人工分析一起完成安全分析
流程5、验证
5.1 动态分析:在测试环节,利用工具进行程序运动的安全验证
5.2 模糊测试:故意向应用程序引入随机不良数据及格式,诱发程序产生故障。模糊测试的基础是必须了解熟悉程序的功能状态、设计规范等
5.3 攻击面分析:产品的设计,在开发实现的过程中,可能有变化,再次对产品应用进行攻击面分析是很有必要
流程6、发布
6.1 时间响应计划:根据SDL要求,每个应用产品在发布的时候,必须包含时间响应计划。应用在发布后的使用过程中,有可能出现新的安全漏洞,必要的安全响应计划有助于为应用减少安全威胁,程序包含第三方包或源码,就添加上第三方包和源码的来源
6.2 最终安全分析:在产品发布前,对应用进行全面的安全检查,即最终安全评估(FSR)
6.3 发布和存档:完成最终安全分析后,需要对安全报告及存在的各类问题进行归档,以便在后续的响应计划和安全事件中,提供必要的帮助
流程7、响应
7.1 发布安全响应:发布产品应用时,同步发布安全响应
四、安全开发的生命周期
微软安全开发的生命周期包括,以下七个阶段:
---SDL之前的要求:安全培训
---要求
---设计
---实施
---验证
---发布
---SDL后需求:响应
在微软的官方文档,每个阶段的安全概念、安全要求、安全建议都有有详细的介绍,有需要可以详细阅读借鉴。
五、总结
SDL,其实就是在产品的不同阶段,加入必须的安全活动干预,需要强有力的执行规范,即使在传统编码研发过程中,只要遵循编码规范,也能避免一部门的安全威胁,而SDL的加入,让产品应用的安全全程提供有力加持。