安全开发生命周期 Security Development Lifecycle( SDL ),起源于微软,是一种专注于软件开发的安全保障流程。为实现保护最终用户为目标,它在软件开发流程的各个阶段引入安全和隐私问题。此框架还包括了一系列的强制性的安全活动,并且依据传统软件开发流程阶段进行分类。
在 SDL 流程中,包括了以下七个阶段:
安全训练:这是安全开发生命周期(SDL)的前置要求,一个成熟的安全训练课程会让软件开发团队学会安全和隐私的基础知识,了解专业的技术问题并且对近期安全和隐私问题的趋势了如指掌。
需求:在需求阶段,开发团队会考虑如何更好地让安全和隐私问题整合到日常的开发过程当中,识别关键安全对象,同时尽可能地降低对可用性、项目计划和日程造成的影响。
设计:在设计阶段识别出软件产品的总体需求和结构,并设计最佳实践。在 SDL 设计阶段中关键点是可以使用 SDL 工具 Threat Modeling Tool 进行建模工作。此工具可被安全 / 非安全专家用于创建并分析安全威胁模型,如:
- 进行系统安全设计的交流
- 分析设计中可能出现的安全隐患
- 就完全问题提出建议和管理缓解措施
实现:在实现阶段,开发团队应该按照最佳实践的标准来严格执行并贯穿整个开发过程。
验证:到了验证阶段,软件在功能上已经完成了,而且已经对需求与设计阶段列出的安全和隐私要求测试过了。
发布:发布阶段是当一个开发团队完成了附加的响应计划,进行了最后的安全检查,并且对发布后服务的数据进行了归档。
响应:这是安全开发生命周期 (SDL) 的后置需求。是指在软件项目发布后,产品开发团队必须保证对任何可能的安全隐患和隐私问题作出响应。微软安全响应中心( MSRC )对管理安全响应提供了指导。
安全开发生命周期 (SDL) 包括了多个安全分析,开发和测试工具来开发的各个阶段帮助开发人员。这些工具包括:
- SDL Process Template for Visual Studio Team System
- MSF-Agile+SDL Process Template
- Banned.h
- SiteLock ATL Template
- FxCop
- Code Analysis for C/C++
- Anti-XSS Library
- CAT.NET
- BinScope
- MiniFuzz
- SDL Regex Fuzzer
InfoQ 采访了 SDL 团队的 Bryan Sullivan,探讨了如何帮助架构师和开发人员来开发安全的代码,还讨论了 SDL 框架的未来。Bryan 谈论了 RSA 2010 大会以及 BlackHat 2010 大会上的 Cryptographic Agility 话题中提到的 SDL 框架和工具。
InfoQ:您能否跟我们多谈一点安全开发生命周期(SDL)项目以及你目前在该项目中所扮演的角色?
Bryan Sullivan:微软安全开发生命周期是微软公司发明的开发流程,并且在微软内部使用以开发出更安全的软件。从本质上来说,它是在整个开发过程中,开发团队需要使用的一系列的必须完成的安全和隐私方面的工作。这里给出一些例子:每个团队针对他们的应用程序制作一个威胁模型(threat Model);每个团队必须对自己开发的应用程序进行安全攻击分析(attack surface analysis,译注:Attack Surface Analyzer 是由微软安全工程师和安全科学团队开发的 Windows 攻击分析工具软件)。
我想强调一下这些工作在整个软件开发生命周期中是极为重要的。我们经常看到其他的公司尝试在产品发布前做很多安全测试工作并以此来确保产品的安全性。但是这个方法行不通。验证测试的确是重要的(这是微软安全开发生命周期的一部分),但是系统设计阶段的安全考虑同样重要,这是在安全开发标准中提到的,即便在应用需求中已经考虑了安全。该方法系统性地保证了安全开发过程,让安全开发生命周期(SDL)更加有效。
我在 SDL 团队中的角色是一个特殊的双重角色,我负责保证基于网页的应用安全问题在 SDL 要求的任务中被正确的记录下来。这不仅意味着需要开发团队完成更多相关的工作,还要确保尽一切可能让工具去自动完成这些工作,以此来减少开发团队的工作量。这意味着有些时候我们要开发这些工具,或者由微软其他团队开发,有时我们也使用一些第三方工具。工具从哪里来不重要,重要的是它们能够出色地完成其工作。
所以,我在 SDL 团队的第二个角色就产生了——管理我们内部开发的 SDL 工具对外的发布。我们不认为 SDL 是一个“秘密配方”而需要对外保密——事实上截然相反,我们希望更多的企业能够使用 SDL 框架。这意味着如果我们开发出能够简化流程的工具,我们会和整个(SDL)社区共享。至今,我们已免费发布了许多我们已经在内部使用的工具,例如 SDL Threat Modeling Tool、Binscope Binary Analyzer、Minifuzz File Fuzzer 和 SDL-Agile Process Template。
InfoQ:那么,你们开发 SDL 框架的动力是什么呢?
Bryan:回到 2001 年,微软的产品被两种非常具有攻击力和危险性的蠕虫病毒攻击了,它们是:CodeRed 和 Nimda。业界分析师开始建议企业用户从我们的 IIS 服务器迁移到竞争对手的产品上去。在那时微软的安全开发团队,包括 Steve Lipner,他目前是安全工程战略部门(Security Engineering Strategy)和微软 SDL 团队的高级总管,都认识到制止这些恶意攻击的唯一途径是在代码中解决这些潜在问题。所以他们开始开发 SDL,也就是通过一系列事件来保证系统减少容易受攻击的脆弱点,并且即使系统被侵入也不会受到很大影响。
InfoQ:那么 SDL 是如何对付安全问题的两个子领域:安全的架构和运维安全?
Bryan:就如它的名字,SDL 更加专注于设计和开发阶段的安全问题,而不是运维阶段的安全性。我同意运维阶段的安全问题是非常重要的,但是这个领域是由微软的另一个团队来管理的。我们和这个团队合作很密切,但是对 SDL 本身来它是不包括运维安全需求的。
InfoQ:SDL 能否被应用到一些使用敏捷或者精益开发框架的企业中?
Bryan:当然,我们最初开发的“经典”SDL 框架是用在瀑布(waterfall)模式的开发方法中,就像是那些被 Windows,Office 和 SQLServer 开发团队使用(SDL 框))。不过,我们很快认识到很多网上服务团队(同样受 SDL 需求影响的)和增长中的 xbox 产品团队遵从敏捷开发规范。这些团队发现,在一周这样的发布周期内是很难完成 SDL 所要求的工作的。更大的问题是,基于敏捷的项目是没有计划中的“结束点”来执行最后的安全检测和审计。
为了解决这问题,SDL 团队的一个小组开发了我们称之为 SDL-Agile 或者简称 SDL-A。SDL 包括了所有经典 SDL 所含有事件——毕竟攻击者不关心你用哪种开发模式,所以你使用敏捷模式开发出来的应用必须和瀑布模式开发出来的应用一样安全——但是所有 SDL 所包含的事件会存在一个更适合敏捷开发模式的结构中。微软内部团队自从 2009 年 10 月开始使用 SDL-A,而且我们在今年 2 月份对外发布了 SDL-A,这样外面使用敏捷开发模式的企业可以同样遵循 SDL 框架。
InfoQ:SDL 能在运维安全领域中使用吗,例如,在实施阶段之后?
Bryan:就像我之前提到的,SDL 更适合运用在开发过程中。不过它也有一个明显的例外,SDL 策略会考虑对突发安全事件的响应。
InfoQ:应用安全验证和策略执行的最佳实践是什么?SDL 能否帮助进行架构安全评估?
Bryan:我们确实没有策略执行方面的问题:在微软,SDL 是一个必须遵从的策略,并且它是直接从 Bill Gates 的“可信赖计算机备忘录”里下达的命令,当 Bill Gates 发布了一个必须遵从的策略,所有的微软员工都会执行。一个很重要的点是,如果你希望在公司实施 SDL 策略,得到执行官的同意是非常重要的。如果你有困难,那么我建议你看一下优化的 SDL 模型,你可以在 SDL 网站上找到它: www.microsoft.com/sdl 。优化的模型定义了 SDL 的四个成熟度,以能够提供最高投资回报率(ROI)的事件开始。以 SDL 标准的程度开始,为你的执行团队采集一些 SDL 能够发挥作用的事实,并且说明这能为你的公司节约开支,接着回过头来获得你团队的支持。 对于架构安全评估,我们有 SDL 威胁建模工具(ThreatModelingTool,可以免费从 www.microsoft.com/sdl 下载),它就是为了架构安全评估而设计的。我们听说过很多悲哀的事情,例如开发人员必须把自己想象成为一个“黑客”,这样他的代码才会足够安全。不幸的是,如果你没有受过安全的培训,你很难把自己想象成一个黑客,就像你把自己想象成一个飞机驾驶员,但是你却从未开过飞机。所以我们开发了“威胁建模工具”,它能被安全专家使用,也能被一个非专家使用。你只需把你的应用在 Data Flow Diagram 里建模,“威胁建模工具”就会提醒你需要在有可能出现漏洞的地方加以完善。
InfoQ:SDL 能在非微软的开发环境中使用吗,例如 Java 和 Ruby?
Bryan:当然,SDL 是完全和操作系统,编程语言无关的。经常有这样的误解,SDL 是只能为 Windows 操作系统,或者像微软这样的企业而服务的。SDL 是为了开发出更安全的软件,但是开发的细节或者使用的工具可以是根据操作系统而变化的,只要其核心的原则不发生改变。我们把这些核心原则整理了出来并且把它放到了一个名为“MicrosoftSDL 简化实现”的白皮书里,也发布在 www.microsoft.com/sdl 中。无论你是在 1000 人的 C++ 开发团队中,或者 2 个人在捣鼓 PHP 代码,你都可以简化的 SDL 文档中找到你需要的帮助。
InfoQ:SDL 项目的未来会是怎样?
Bryan:在 2010 接下来的日子里以及 2011 年,我们会注重于初始的开发生命周期;特别是在设计和需求整理阶段。我们会带来一些新工具来帮助开发人员和架构师设计更安全的应用。
InfoQ:谢谢你。
感谢马国耀对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。
评论