AIGC在金融场景是如何落地的? 了解详情
写点什么

微软发布安全开发周期流程能否拥抱敏捷?

  • 2009-11-20
  • 本文字数:2312 字

    阅读完需:约 8 分钟

近日,微软发布了《安全开发周期(Security Development Lifecycle,下文简称 SDL)流程指南 4.1a 》, 以指导开发团队将安全需求无缝地引入到软件开发过程之中。SDL 是微软内部全公司软件项目强制使用的安全流程,并在众多旗舰级产品得到应用。鉴于敏捷方法 在社区和微软内部的广泛应用,此次发布的指南专门列出了一章讲解如何将 SDL 与敏捷方法集成。由于 SDL 一贯应用在微软内部的传统瀑布式开发方法之上,所 以此次发布引发了社区的激烈讨论。

为了响应对软件安全性的要求,微软根据微软内部的软件开发流程定义了安全开发周期流程(SDL),以指导开发团队将安全需求无缝地引入到软件开发过程之中,其目标是:

使设计、代码和文档中与安全相关的漏洞减到最少,在软件开发的生命周期中尽可能早地清除漏洞。

SDL 针对整个软件开发流程——从软件开发的开始阶段到整个开发周期结束——定义了每个开发阶段的安全需求和实施措施,来达到最终软件的安全性和保密性。SDL 的完整生命周期分为五个阶段——需求定义、设计、实现、验证和发布,再加上前期的团队培训和后期的响应。SDL 在每个阶段都定义了相应的安全任务,指明了团队需要分别关注的安全问题,比如在设计阶段对安全威胁进行建模(Threat Modeling)。团队通过在软件开发过程中相应地采纳这些改进,最终减少软件中的缺陷漏洞,改善软件安全特性。经典的 SDL 流程如下图所示:

图 1 SDL 与传统瀑布开发方法的结合

自从 2004 年起,SDL 就是微软内部全公司软件项目强制使用的安全流程,并且在众多旗舰级产品,比如 Vista 和 SQL Server 等软件的开发过程中,都得到了广泛的应用。随着敏捷方法在软件开发社区以及微软内部广泛受到拥蹙,SDL 4.1a 专门列出了一章分析如何裁剪 SDL,使之能与轻量的敏捷软件开发方法结合在一起使用,其出发点是:

以一种同时保障敏捷方法和 SDL 流程原则的方法,把经受考验的微软安全性开发周期(SDL)方法与敏捷方法学结合在一起。

为了能在敏捷方法中顺利采纳 SDL 流程,SDL 指出了两个必要的调整:

  1. 纳入敏捷开发流程的 SDL 必须足够精益。这意味着对于每个特性,开发团队只是完成足够的 SDL 工作即可。
  2. 与传统瀑布型开发方法吻合很好的 SDL 中各个阶段(设计、实现、验证和发布)与敏捷方法并不吻合,必须采用更敏捷的方式。

对于 SDL 与敏捷方法结合,最大的问题是敏捷发布周期可能短到一周,团队在每次发布之中实施完整的 SDL 需求显然时间不够。但是,它也不是“不可能完成的任务”:

  • SDL 定义了一系列的安全任务,这些任务可以很好地嵌入到敏捷开发流程里面
  • 相对而言,SDL 文档量很少,除了安全威胁模型可能产生一定的文档

接下来,SDL 以敏捷方法族中的 Scrum 为例,介绍了如何将 SDL 定义的任务与 Scrum 中的 Sprint 结合在一起。开发团队可以将 SDL 任务划为不同的特征,然后作为非功能性需求添加到 Sprint backlog 里面。结合 Scrum 和 SDL 的各自特点,SDL 将包含的任务划分为三类:

  1. 每次 Sprint 都必须执行的需求
    最关键的一部分安全性需求,必须在每次 Sprint 里面都执行检查,比如不要使用被禁止的 API 等等
  2. 桶内需求(bucket )
    这些需求仍然需要定期地执行,但不需要每次 Sprint 里面都执行
  3. 一次性需求
    这些需求只需要在整个项目开发过程执行一次即可

如此之后,SDL 任务在整个 Scrum 流程中的分布示意图如下:

图 2 SDL-Scrum 结合后的示意图

随后,SDL-Agile 介绍了将 SDL 任务应用到每个 Sprint 里面的具体实践:其中包括对团队成员安全知识培训,引入并熟悉工具等等。特别指出的是,因为安全威胁建模(threat modeling)在传统的 SDL 中是主要的产出物来源,同时又是每个项目必须采取的安全性检查,SDL 专门介绍了如何将敏捷开发方法与安全威胁建模流程结合在一起。最后,SDL-Agile 通过一个小例子介绍了在 Scrum 项目 Sprint 的具体开发里面,开发团队如何计划、完成 SDL 任务,以及 SDL 如何帮助团队改善产品的安全特性。

在 SDL 4.2 指南发布之后,社区里面也是传来不少声音。如 Jon Oltsik 认为:这次发布非常重要,因为:

  1. 敏捷开发方法被广泛应用。微软也在内部使用,因此将敏捷与 SDL 结合起来是一项非常重要的企业目标。
  2. 软件安全性普遍很差 —— 特别是一些 web 应用系统。
  3. 软件安全性在很多网络安全改进计划中,比如由 SAIC 和 SAFECode.org 研究并提出的 Cyber Supply Chain Assurance Model 等都是处于核心位置。

虽然指南中给出了一个 Scrum 团队拥抱 SDL 的例子,但也有一些人士对该指南仍然抱有一些疑虑, David West 就指出:

这里要解决的问题还包括谁来负责(SDL 与敏捷方法结合的)工作。…该工作的复杂性会导致一些任务被分解成一部分使用敏捷开发,一部分使用传统方法进行开发。这样,专家需要既驱动传统开发和测试,同时又指导团队进行敏捷方法的开发和测试。

Rex Black 也提出:

SDL 里面的一些实践,比如使风险文档流线化和风险分析流程等等对 SDL 进入“真实的敏捷世界”可能会挑战重重…这些出现在 SDL 实践实施到敏捷开发方法过程中的挑战对于最终的采纳会是一个显著的障碍。

当然,有人也从 4.2 指南之中闻出了不同的味道, Sean Michael Kerner 指出:

对我而言,如果说微软没有敏捷开发方法的安全实践,那实在是有些奇怪。同时也说明,大型项目,如 windows 或者 office 办公软件等并没有采用敏捷方法。
……微软看上去现在前进得越来越快,这样他们能拥抱开源社区开发者们一直所知道的一切。快速编码迭代可以引向更好的软件。而且,没错,它也能同样安全。

亲爱的读者,您可以从这里下载该《安全性开发周期(SDL)流程指南 4.1a》。您是如何看 SDL-Agile 呢?您觉得敏捷和安全特性是冲突的吗?如果不是,您在实际项目上又是如何做到两者结合的呢?留下您的意见,跟大家一起分享吧。

2009-11-20 17:262063
用户头像

发布了 76 篇内容, 共 22.5 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

架构实战营 1 期模块 7 作业——业务异地多活架构

tt

架构实战营

如何使用 GeoTrellis 和 React 构建地理处理应用程序

gisbook

GitHub spark Web GIS React

OkHttp源码解读HTTP

Changing Lin

9月日更

13. AlphaGO带给人类的启示到底是什么

数据与智能

人工智能

在 Discourse 中如何使用输入对话框

HoneyMoose

去中心化身份务实

CECBC

Django 框架的神奇之处,几行代码就能自动入库,微型博客第 3 篇

梦想橡皮擦

9月日更

Vue进阶(幺零幺):npm install -g 和 npm install --save-dev 的关系

No Silver Bullet

Vue 9月日更

使用 Jackson – 将字符串转换为 JsonNode 对象

HoneyMoose

基于 Apache APISIX,爱奇艺 API 网关的更新与落地实践

API7.ai 技术团队

Apache APISIX Meetup 爱奇艺 企业案例

架构实战营模块七作业

maybe

Java 8 及其后续版本的新遍历 forEach

HoneyMoose

Redis集群docker部署

非晓为骁

redis Docker redis集群

IntelliJ IDEA 快速插入 for 循环

HoneyMoose

【Flutter 专题】53 图解 BackdropFilter 高斯模糊

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

在智能运维中如何进行指标异常检测与分类?

云智慧AIOps社区

算法 场景应用落地 异常检测 智能运维 指标

顶会CIKM'21论文解读:基于图神经网络的人类行为轨迹恢复模型

华为云开发者联盟

图神经网络 华为云数据库 轨迹分析 CIKM PeriodicMove

TLS协议分析 (八) 实现与开源项目

OpenIM

模块七作业:王者荣耀商城异地多活架构设计

Felix

多环境

程序员鱼皮

Java c++ Python 大前端 后端

测试金字塔,你在哪一层?

华为云开发者联盟

软件测试 测试 软件质量 单元测试 华为云DevCloud

我在 InfoQ 创作的思路规划

baiyutang

写作技巧 9月日更

架构学习模块二

George

如何修改 Discourse 的域名

HoneyMoose

原来搭建淘客项目如此简单,app、web、小程序轻松搞定

Silently9527

Java uniapp 淘宝客开源

手撸二叉树之二叉树的所有路径

HelloWorld杰少

9月日更

华为云发布【云巢】智慧康养物联网加速器,加入立享多项扶持

华为云开发者联盟

物联网 华为云 应用开发 云巢 智慧康养

贯穿全产业链做数字孪生产品,给你更好的选择

一只数据鲸鱼

数据可视化 工业4.0 制造业 数字孪生

国家发改委:利用区块链等新技术开展绿色电力交易试点

CECBC

【LeetCode】路径总和Java题解

Albert

算法 LeetCode 9月日更

架构实战营模块七-王者荣耀商城异地多活架构设计

hello

架构训练营

  • 扫码添加小助手
    领取最新资料包
微软发布安全开发周期流程能否拥抱敏捷?_研发效能_金明_InfoQ精选文章