注:原文来自《白帽子讲Web安全》
微软安全开发生命周期
SDL 的全称:Security Development Lifecycle,即安全开发生命周期。它是由微软最早提出的,在软件工程中实施,是帮助解决安全问题的办法。SDL 是一个安全保证的过程,其重点是软件开发,它在开发的所有阶段都引入了安全和隐私的原则。SDL 的大致步骤如下:
阶段1: 培训
开发团队的所有成员都必须接受适当的安全培训,了解相关的安全知识。微软推荐的培训,会覆盖安全设计、威胁建模、安全编码、安全测试、隐私等方面知识。
阶段2: 安全要求
在项目确定之前,需要提前与项目经理或者产品owner进行沟通,确定安全的要求和需要做的事情。确定项目计划和里程碑,尽量避免因为安全问题而导致项目延期发布。
阶段3: 质量门/bug栏
质量门和bug栏用于确定安全和隐私质量的最低可接受级别。
阶段4:安全和隐私风险评估
安全风险评估(SRA)和隐私风险评估(PRA)是一个必要的过程,用于确定软件中需要深入评析的功能环节。这些评估必须包括以下信息:
- 1)(安全)项目的那些部分在发布前需要威胁模型?
- 2)(安全)项目的哪些部分在发布前需要进行安全设计评析?
- 3)(安全)项目的哪些部分(如果有)需要由不属于项目团队且双方认可的小组进行渗透测试?
- 4)(安全)是否存在安全顾问认可有必要增加的测试或分析要求以缓解安全风险?
- 5)(安全)模糊测试要求的具体范围是什么?
- 6)(隐私)隐私影响评级如何?
阶段5: 设计要求
在设计阶段应仔细考虑安全和隐私问题,在项目初期确定好安全需求,尽可能避免安全 引起的需求变更。
阶段6: 减小攻击面
减小攻击面与威胁建模紧密相关,不过它解决安全问题的角度稍有不同。减小攻击面通过减少攻击者利用潜在弱点或漏洞的机会来降低风险。减小攻击面包括关闭或限制对系统服务的访问,应用”最小权限原则“,以及尽可能地进行分层防御。
阶段7: 威胁建模
为项目或产品面临的威胁建立模型,明确可能来自的攻击有哪些方面。微软提出了STRIDE模型以帮助建立威胁模型,这是非常好的做法。
阶段8: 使用指定的工具
开发团队使用的编译器、链接器等相关工具,可能会涉及一些安全相关的环节,因此在使用工具的版本上,需要提前与安全团队进行沟通。
阶段9: 弃用不安全的函数
许多常用函数可能存在安全隐患,应该禁用不安全的函数或API,使用安全团队推荐的函数。
阶段10: 静态分析
代码静态分析可以由相关工具辅助完成,其结果与人工分析相结合。
阶段11: 动态程序分析
动态分析是静态分析的补充,用于测试环节验证程序的安全性。
阶段12: 模糊测试(Fuzzing Test)
模糊测试是一种专门形式的动态分析,它通过故意向应用程序引入不良格式或随机数据诱发程序故障。模糊测试策略的制定,以应用程序的预期用途,以及应用程序的功能和设计规范为基础。安全顾问可能要求进行额外的模糊测试,或者扩大模糊测试的范围和增加持续时间。
阶段13: 威胁模型和攻击面评析
项目经常会因为需求变更等因素导致最终的产出偏离原本设定的目标,因此在项目后期重新对威胁模型和攻击面进行评析是有必要的,能够及时法相问题并修正。
阶段14: 事件响应计划
受SDL要求约束的每个软件在发布时都必须包含事件响应计划。即使在发布时不包含任何已知的漏洞的产品,也可能在日后面临新出现的威胁。需要注意的是,如果产品中包含第三方的代码,也需要留下第三方的联系方式并加入事件响应计划,以便在发生问题时能够找到对应的人。
阶段15: 最终安全评析
最终安全评析(FSR)是在发布之前仔细检查对软件执行的所有安全活动。通过FSR将得出以下三种不同的结果:
- 通过FSR。
- 通过FSR但有异常。
- 需要上报问题的FSR。
阶段16: 发布/存档
在通过FSR或者虽有问题但达成一致后,可以完成产品发布。但发布的同时仍需对各个问题和文档进行存档,为紧急响应和产品升级提供帮助。
SAMM
相对于微软的SDL,OWASP推出了SAMM(Software Assurance Maturity Model),帮助开发者在软件工程的过程中实施安全。