一、安全开发生命周期(SDL)
即Security Development Lifecycle,是一个帮助开发人员构建更安全的软件和解决安全合规要求的同时降低开发成本的软件开发过程。 自2004年起,微软将SDL作为全公司的计划和强制政策,SDL的核心理念就是将安全考虑集成在软件开发的每一个阶段:需求分析、设计、编码、测试和维护。从需求、设计到发布产品的每一个阶段每都增加了相应的安全活动,以减少软件中漏洞的数量并将安全缺陷降低到最小程度。
安全开发生命周期 (SDL)是侧重于软件开发的安全保证过程,旨在开发出安全的软件应用。
二、SDL安全活动
SDL是微软提出的从安全角度指导软件开发过程的管理模式,在传统软件开发生命周期 (SDLC) 的各个阶段增加了一些必要的安全活动,软件开发的不同阶段所执行的安全活动也不同,每个活动就算单独执行也都能对软件安全起到一定作用。当然缺少特定的安全活动也会对软件的安全性带来影响。
图1:微软SDL安全活动简图
图2:微软SDL安全活动简图
SDL的安全活动包括:
1、培训
1.1、核心安全培训
开发团队的所以成员都必须接受适当的安全培训,了解相关的安全知识。
培训对象包括开发人员、测试人员、项目经理、产品经理等。
2、要求
2.1、确定安全要求
在项目确立之前,需要提前与项目经理或者产品owner进行沟通,确定安全的要求和需要做的事情。确认项目计划和里程碑,尽量避免因为安全问题而导致项目延期发布。
2.2、质量门/bug栏
质量门和bug栏用于确定安全和隐私质量的最低可接受级别。
bug栏是应用于整个开发项目的质量门,用于定义安全漏洞的严重性阈值。例如,应用程序发布时不变的包含具有关键或者只要评级的已知漏洞。Bug栏一经设定,便绝不放松。
2.3、安全和隐私风险评估
安全风险评估(SRA)和隐私风险评估(PRA)是一个必需的过程,必须包括以下信息:
①(安全)项目的哪些部分在发布前需要威胁建模?
②(安全)项目的哪些部分在发布前需要进行安全设计评审?
③(安全)项目的哪些部分在发布前需要双方认可的团队进行安全测试?
④(安全)是否存在安全顾问认为有必要增加的安全测试或分析,用以缓解安全风险?
⑤(安全)模糊测试要求的具体范围是什么?
⑥(安全)隐私影响评级?
3、设计
3.1、确定设计就要求
在设计阶段应仔细考虑安全和隐私问题,在项目初期确定好安全需求,尽可能避免安全引起的需求变更。
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)是在发布之前仔细检查对软件执行的所以安全活动。通过FSR将得出以下三种不同的结果。
①通过FSR。在FSR过程中确定所有安全和隐私问题都得到修复或缓解。
②通过FSR但是存在异常。在FSR过程中确定所有安全和隐私问题都已得到修复或缓解,或者所有异常都已得到圆满解决,无法解决的问题记录下来,在下次发布时更正。
③需上报问题的FSR。如果团队未满足所有SDL要求,并且安全顾问和产品团队无法达成可接受的折中,则安全顾问不能批准项目,项目不能发布。团队必须在发布之前解决所有可解决的问题,或者上报高级管理层进行抉择。
6.3、发布/存档
在通过FSR或者虽有问题但达成一致后,可以完成产品的发布。但发布的同时仍需对各种问题和文档进行存档,为紧急响应和产品升级提供帮助。
7、响应
执行事件响应计划