SDL简介

SDL的全称是Security Development Lifecycle,即:安全开发生命周期。SDL过程大致分为16个阶段。

  1. 培训

    开发团队的所有成员都必须接受适当的安全培训,了解相关的安全知识。

  2. 安全要求

    确定安全的要求和需要做的事情。

  3. 质量门、bug栏

    确定安全和隐私质量的最低可接受级别。

  4. 安全和隐私风险评估

    确定软件中需要深入评析的功能环节。

  5. 设计要求

    确定好安全需求,尽可能避免安全引起的需求变更。

  6. 减小攻击面

    包括关闭或限制对系统服务的访问,应用“最小权限原则”,以及尽可能地进行分层防御。

  7. 威胁建模

    明确可能来自的攻击有哪些方面。

  8. 使用指定的工具

    在使用工具的版本上,需要提前与安全团队进行沟通。

  9. 弃用不安全的函数

    禁用不安全的函数或API,使用安全团队推荐的函数。

  10. 静态分析

    代码静态分析可以由相关工具辅助完成,其结果与人工分析相结合。

  11. 动态分析

    动态分析是静态分析的补充,用于测试环节验证程序的安全性。

  12. 模糊测试

    故意向应用程序引入不良格式或随机数据诱发程序故障。

  13. 威胁模型和攻击面评析

    在项目后期重新对威胁模型和攻击面进行评析。

  14. 事件响应计划

    受SDL要求约束的每个软件在发布时都必须包含事件响应计划。

  15. 最终安全评析

    发布之前仔细检查对软件执行的所有安全活动。

  16. 发布、存档

    发布的同时仍需对各类问题和文档进行存档,为紧急响应和产品升级提供帮助。

敏捷SDL

敏捷SDL是为敏捷开发设计的。

敏捷SDL的思想其实就是以变化的观点实施安全的工作。需求和功能可能一直在变化,代码可能也在变化,这要求在实施SDL的时候需要在每个阶段更新威胁模型和隐私策略,在必要的环节迭代模糊测试、代码安全分析等工作。

SDL实战经验

  1. 与项目经理进行充分沟通,排出足够的时间。
  2. 规范公司的立项流程,确保所有项目都能通知到安全团队,避免遗漏。
  3. 树立安全部门的权威,项目必须由安全部门审核完成后才能发布。
  4. 将技术方案写入开发、测试的工作手册中。
  5. 给工程师培训安全方案。
  6. 记录所有的安全bug,激励程序员编写安全的代码。