了解最新技术文章
敏捷软件开发作为一种强调效率和及时响应客户需求的方法,自推出以来就受到了极大的欢迎。VersionOne 发布了一份针对使用敏捷的组织的年度调查,探讨他们的目标以及敏捷如何帮助实现这些目标。最新的报告是第 12 期年度敏捷状况报告,该报告表明敏捷始终如一地为客户提供他们想要的东西,在他们需要的时候,同时需要软件生产商更少的时间和成本承诺。
尽管敏捷方法非常流行并且被普遍认为是有效的,但它并不能帮助软件开发人员解决大多数安全问题。软件不安全的问题并不是敏捷的弱点;而是敏捷的弱点。这是如何使用敏捷的结果。
在敏捷中,用户故事为软件开发人员提供了了解该做什么的规范。批准的用户故事将添加到积压工作中,这只是尚未解决的用户故事列表。许多软件开发人员将安全资格视为非功能性需求,并且非功能性需求被描述为积压的约束,而不是单独的用户故事。
由于安全问题并未以用户故事的形式表达,因此人们认为添加安全功能会减慢速度。因此,当组织转向敏捷软件开发时,安全性往往会被抛在后面。
在瀑布方法中,安全规划通常在初始设计阶段进行(或者至少应该进行)。安全性是预先考虑的,并且是设计阶段之后发生的所有活动的一部分。然后,开发后活动包括整体功能测试阶段的安全测试。
安全测试验证安全设计目标以及功能设计目标是否得到满足。这种方法的优点是可以在所有开发的软件中强制执行应用程序或企业级安全策略。此外,开发后测试可以验证整个应用程序是否统一实现了安全性。
敏捷使用不同的软件开发方法。软件产品被分解为多个构建,创建这些构建的活动称为冲刺。冲刺的重点是在短时间内(通常是两周)生成范围狭窄的可交付成果。这意味着重点放在简单地满足用户故事上。换句话说,成功取决于在两周或更短时间内生成满足用户故事要求的可交付成果。满足无关的约束是一个很好的目标,但它并不总是软件开发人员的“首要任务”。这就是为什么安全性通常不是敏捷的主要设计目标。
您可以开发安全的软件并使用敏捷性。它只是在整个开发过程中采用了稍微不同的方法,特别是如何构建待办事项列表。
在敏捷历史的早期,研究人员意识到需要新技术来确保使用敏捷时的软件安全。2005 年,Mike Siponen、Richard Baskerville 和 Tapio Kuivalainen 发表了一篇学术论文“将安全性集成到敏捷开发方法中”。作者描述了在敏捷开发中使用传统安全方法的问题,然后提出了将特定安全功能集成到开发过程中的技术。
最近的一篇论文表明这个问题仍然需要考虑。2013 年,Davoud Mougouei、Nor Fazlida Mohd Sani 和 Mohammad Moein Almasi 发表了论文“ S-Scrum:Web 服务敏捷开发的安全方法”。作者定义了一种以安全为中心的 Scrum 实现,称为 S-Scrum,它将安全最佳实践融入到敏捷中。这些论文指出,安全问题确实存在,但也存在可行的解决方案。
还有越来越多的行业资源专注于安全敏捷应用程序开发。首先,Microsoft 记录了敏捷的软件开发生命周期 (SDL)。Microsoft 分解了与软件开发相关的最重要的任务,并将每一项任务映射到敏捷方法中的特定阶段。任务或最佳实践被映射到以下三个类别之一:
每个冲刺实践:每个冲刺应该执行的任务
桶实践:应该定期执行但不必在每个冲刺中发生的任务
一次性实践:每个项目必须执行一次的基本任务
他们的指南应该成为任何敏捷商店的强制性文件。您不必实现所有内容,但您至少应该将 Microsoft 的方法与您自己的方法进行比较。这是一个很好的清单,可确保您不会遗漏任何基本的最佳实践。
安全敏捷开发最佳实践的另一个重要资源是开放 Web 应用程序安全项目 (OWASP)。OWASP 于 2001 年首次亮相,同年发布了敏捷宣言。该网站有一个非常好的资源来解决敏捷和安全问题:“敏捷和安全:我们可以两者兼得吗?” 演示涵盖了在敏捷环境中开发安全 Web 应用程序的最佳实践。OWASP 方法不是像 Microsoft 那样对安全任务进行分类,而是描述如何扩展敏捷方法以包含安全性。
大多数以敏捷方式开发安全应用程序的方法都集中在一个基本方面:创建基于安全的用户故事。考虑到用户故事是冲刺活动的驱动力,包含满足安全目标的用户故事是最有意义的。通过将全面的基于安全的用户故事添加到待办事项中,敏捷流程推动了每个冲刺中包含安全性。
例如,除了“作为一个,我想要这样”形式的功能性用户故事之外,还必须包含解决与安全相关的角色的用户故事。它们可以包括用户故事,例如:
作为一名黑客,我可能会输入太长的数据并导致返回意外的数据
作为一名黑客,我可以发送终止 SQL 查询的输入并添加其他 SQL 查询以返回未经授权的数据
作为一名架构师,我想确保所有输出都得到正确编码
您可以将许多与安全相关的用户故事添加到每个冲刺中。OWASP 网站包含一篇关于邪恶用户故事的文章,软件保障非营利组织 SAFECode 发表了一篇论文,详细介绍了更多类型的安全用户故事和任务。这些都是帮助您开始添加以安全为中心的用户故事的重要资源。
最重要的一点是要认识到,只需为用户故事添加安全性,就可以对敏捷软件开发过程的安全性产生巨大影响。
一旦您决定以敏捷方式进行安全软件开发,您应该立即开始实现它。以下是接下来要采取的一些最重要的步骤:
将与安全相关的用户故事添加到您的积压工作中
尽可能实现自动化来执行重复性任务(尤其是测试)
教育开发人员如何编写安全的应用程序
开发并发布您自己组织的安全最佳实践
使开发人员能够承担应用程序安全的责任
保持灵活性并不断构建安全文化
这些是相当笼统的目标,但它们提供了使您的软件更加安全的总体方向。
开发人员教育至关重要。所有软件开发人员都必须精通开发安全应用软件,并有能力为此承担责任。测试的主要目的应该是功能和安全验证。
如果您致力于将安全性作为优先事项,那么敏捷可以提供一个框架,使您的组织能够生成最具响应性、功能性和安全性的应用程序。