BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Bryan Sullivan探讨安全开发生命周期

| 作者 Srini Penchikala 关注 34 他的粉丝 ,译者 陈亮 关注 0 他的粉丝 发布于 2011年2月15日. 估计阅读时间: 12 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

安全开发生命周期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中文站用户讨论组中与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT