构建敏捷的安全开发生命周期 QClub 活动总结

阅读数:560 2010 年 9 月 30 日

话题:敏捷.NET架构语言 & 开发文化 & 方法

在 9 月 18 日 InfoQ 与微软合作的QClub 活动中,我们邀请到了来自中国海关的架构师王翔以及澳洲视窗北京研发部负责人、资深软件架构师徐磊来和大家分享威胁建模和敏捷的安全开发两个话题。本文为大家整理了他们的主要演讲内容,并为大家提供了他们演示文档的下载。

威胁建模在软件开发中的重要性

在王翔的演讲中,他介绍了威胁建模在团队开发中应如何应用。主要内容包含以下几点:

  • 威胁建模的概念:威胁来自哪里?我们应该怎样去认识它;威胁在开发过程中的重要性。
  • 处理威胁的方法:怎样在威胁建模过程中完善模型,如何在开发过程中避免威胁,验证规则。
  • 举例:在开发过程中应该如何进行威胁分析。 

在对威胁的认识上,王翔通过比喻给出了详细的介绍。他总结说威胁是必然存在的,永远都不可能把威胁清除干净,所有的开发都一样。我们所能做的是尽可能地把威胁降到最低限度,以满足系统的需求。随后他通过一个简单的模型来为大家解释了“威胁来自哪里”,例如来自 Hacker 的,或者来自用户体验中引发的问题等等。

而在如何建立威胁建模这个问题上,王翔也给出了几种方法。首先通过类数据流图来分析威胁出现在哪里。有很多在开发过程中大家默认为必定正确的地方,其实都是可能出现威胁的。这类威胁如果不能及时被发现和解决的话,很可能在今后的开发、用户体验、交互过程中引发出更多的问题。

在处理威胁这个问题上通常可以采取以下方法来处理威胁:

Spoofing

Authentication

Tampering

Integrity

Repudiation

Nonrepudiation

Information

Confidentiality

Denial of Service

Availability

Elevation of Privilege

Authorization

在介绍这些方法的同时,王翔也给出了很多实例,请读者自行参照本文所提供的 Slides(下载)。。

演讲的最后,王翔介绍了 SDL Threat Modeling Tool 以及 Threat Analysis and Modeling 两款在 SDL 过程中常用来分析威胁的工具,通过它们可以很快的了解到在整个开发过程中,可能或必然会遇到的一些威胁。

安全敏捷开发--微软敏捷的安全开发周期

另外一名演讲嘉宾徐磊是来自澳洲视窗公司的中国区首席代表,同时也是微软 Regional Director(中国 2 名,全球 <150 名)、微软最有价值专家 MVP、Mirosoft ALM。在 SDL 以及 Agile 方面都有很深的研究。他演讲的主要内容包括:

  • 为什么要使用安全开发
  • 微软 SDL 开发的起源
  • 从细节上简化 SDL
  • SDL 在现有的开发过程中如何应用
  • SDL 是否适合敏捷,怎样去结合他们?
  • 在 MSF 中敏捷结合 SDL 的流程模板
  • 团队开发中如何应用敏捷的安全开发周期

在徐磊的介绍中,提到 Windows 7 是微软一款完全使用 SDL 开发的系统,在漏洞这一项 Windows 7 比 Winows XP 减少了 91% 的漏洞。随后他介绍了微软 SDL 从 2002 年 Bill Gates 提出的“安全计算”到现在逐渐成型的完整体系。

SDL 是一个很典型的瀑布软件开发流程,与普通开发流程的区别在于它在头、尾加入了培训和反馈,具体如下:培训-需求-设计-实施-审核-发布-反馈。培训的目的是让整个团队明确什么样的错误是要避免的,从而统一要求,避免在以后开发过程中的错误。反馈是在软件开发的最后通过一个团队来对安全性问题提出建议。

随后徐磊重点对如何让敏捷更好地与 SDL 融合给出了他自己的看法,在结合的过程中出现了很多问题,比如敏捷是没有阶段的,而 SDL 有明确的七个阶段等。接着他提出了两个设想:把 SDL 的要求和任务放到 Product Backlog 里面,这样做的优点是够敏捷,但是在需求不断改变的过程中无法保证在每个迭代里都要去实现,所以不够安全。反过来把整个 SDL 放到一个敏捷的迭代中去,这样会很安全,但是会很繁琐。在详细分析了每个设想后,徐磊最后给出的方法是将 SDL 里的任务分为三类:

  • 每个迭代周期的需求——在敏捷的每个迭代中都要做的任务;
  • 一次性的需求——如在 SDL 中的需求或设计阶段,会要求建立 Bug 跟踪系统,类似这样的工作只做一次就可以了;
  • 桶状需求(Bucket Requirements——优先级比较低的需求,在某个时间段内完成即可的任务。

依照上面的分类对这些任务做优先级的排序,从而在项目的不同阶段、不同的时限内完成了SDL 的需求。

在提问环节中徐磊对与会者提出的有关SDL 开发成本与效率问题也给出自己的看法,他强调说 SDL 只是一种方法,微软做的不一定就是对的,也不一定只有这一种方式,每个团队在使用 SDL 的时候都需要根据自己团队的情况而作出自身的的改变。

关于两位演讲嘉宾的更多细节内容,请下载他们的演讲幻灯片,随后 InfoQ 中文站还会发布他们的演讲视频,敬请期待。