在敏捷环境下构建安全软件--书评

184 阅读6分钟

确保软件应用程序的安全并没有随着敏捷软件开发方法(如Scrum)的出现而完全变得容易。在这篇文章中,我回顾了《敏捷应用安全》这本书(作者是Laura Bell、Michael Brunton-Spall、Rich Smith和Jim Bird),介绍了它的一些关键观点,并总结了为什么我发现它如此有洞察力。

这本书指导软件开发团队如何切实地将安全融入他们的敏捷过程。我把它推荐给两类读者:(1)想学习如何更有效地处理敏捷软件开发过程中的安全问题的信息安全专业人员;(2)为保持应用程序更安全而奋斗的这类敏捷团队的成员。

敏捷应用安全 - O'Reilly UK Ltd.版权所有。

无论是作为开发人员、架构师、Scrum Master、产品所有者,还是信息安全专家--本书都提供了将安全整合到DevOps的有用策略和模式。

本书的五个主要观点

虽然该书涵盖了广泛的主题,但以下是该书中最能引起我共鸣的五个观点。

大多数安全流程是为瀑布项目建立的

为什么我们需要另一本关于软件开发人员的软件安全书籍?敏捷不仅仅是一个流行词,它已经完全改变了大多数组织开发软件的方式。然而,传统的安全实践是为遵循瀑布模式的项目建立的,具有前期的需求。

由于敏捷项目中的需求变化很快,安全专家不能再在项目开始时就进行计划和决策,而是需要不断与scrum团队合作。

他们的工作不再是抑制不断变化的需求(以减少未能注意到安全问题的风险),而是通过向应用程序开发人员提供指导、工具和基础设施,成为推动者(类似于DevOps团队中的传统运营部门)。

另一方面,向敏捷过渡也意味着每个开发人员都需要考虑到安全实践,并且团队要对其应用程序的安全分担全部责任。

测试驱动的安全

每当一个已知漏洞的补丁被应用时(无论是通过更新外部库还是通过修复自己的应用程序代码),大多数公司都没有程序来保证该漏洞被正确修复,并且不会在未来的版本中出现。在这里,作者提出了测试驱动安全(TDS)的概念:与测试驱动开发(TDD)类似,TDS建议开发者修复漏洞之前编写(安全)测试。这既保证了漏洞的实际修复(即补丁或源代码的改变起了作用),也保证了修复的永久性(因为测试是在每个构建管道中执行)。

TDS的另一个好处是,安全测试会自动记录预期的行为(例如,"验证SSH的root登录被禁用"),并且可以在不同的项目中重复使用。Mozilla使用TDS作为其安全流程的一部分,并发表了一篇关于它的信息量很大的维基文章

谨慎地挑选你的供应链

众所周知,微服务架构的一个主要好处是能够为工作挑选最好的工具:每个团队应该可以自由选择他们想要的编程语言、框架和库,以最大限度地提高生产力。然而,从安全的角度来看,这是有问题的。正如作者所指出的,软件应用的攻击面随着使用的库数量的增加而增加。虽然这在一定程度上可以通过在构建管道中设置自动漏洞扫描(如OWASP依赖性检查或商业替代品)来处理,但他们仍然建议减少外部依赖的数量。

在为工作选择最佳工具的自由和减少供应商的数量之间找到一个平衡点仍然是一个困难的工作,这也是SBA研究最近强烈推荐的一个讲座的一部分。

将安全纳入需求

"[......]没有用户会知道他们在会话层需要安全令牌来进行CSRF保护--也不应该期望他们知道" - 敏捷应用安全,第5章

书中的这句话完美地总结了一个重要的原则:作为专业的软件开发者,我们的工作是在设计软件时牢记安全需求并使其可见,而不是我们的客户或雇主的工作。书中建议尝试将安全需求转化为用户故事("安全故事 "或 "攻击者故事"),以提高其可见性,并让整个团队尽早参与进来。

作者推荐的一个具体资源是OWASP应用安全验证标准(ASVS)项目。它列出了网络和移动软件项目的常见安全故事,可以作为一个检查清单(例如,在实现用户登录时要验证的33个项目,如 "验证所有的认证挑战,无论是成功还是失败,都应在相同的平均响应时间内做出响应")。如果你只从这本书中得到一个建议,那就这样吧。浏览一下这份70页的PDF检查表,我几乎可以保证你至少能在你目前的项目中找到一件需要修复的东西。

安全测试--手动与自动

由于敏捷团队的行动非常快,并接受不断变化的需求,他们严重依赖自动测试(最好是作为构建管道的一部分来执行)。作者认为,仅靠单元测试通常不足以发现影响安全的错误,因为大多数这样的错误是由缺失的控制或不准确的假设造成的。

探索性的手动测试仍然是捕捉代码中安全问题的最有效技术之一。这可以作为scrum团队的一部分在内部组织(其中一个或多个开发人员被分配到渗透测试员的角色),或者作为外部渗透测试的一部分--重要的是,代码要定期检查安全弱点。

然而,安全测试在CI/CD管道中确实有其位置。

  • 以安全为重点的静态代码分析
  • 对秘密进行提交前扫描(例如,github.com/awslabs/git…
  • 对库和容器镜像中的已知漏洞进行扫描
  • 使用OWASP ZAP等工具进行自动应用程序扫描

摘要

作为一个最近负责改进Scrum团队安全实践的人,我发现这本书非常有用,可以作为深入挖掘所提出的主题的一个起点。它包含了很多可操作的建议和其他材料的链接,并且很好地展示了安全软件开发生命周期在2020年可能出现的全貌。

The postBuilding Secure Software in Agile Environments - A Book Reviewappeared first onBernhard Knasmüller on Software Development.