A-A+

DevSecOps:在DevOps World中保护软件

2019年05月24日 13:54 汪洋大海 暂无评论 阅读 47 views 次

Tanya Janca  - 特色图片

改进和确保软件安全性的做法通常被称为(应用安全领域),或简称为“AppSec”。在传统的瀑布式系统开发生命周期(SDLC)中,AppSec通常是事后的想法,在发布之前雇用某人(一名渗透测试人员)来进行最后一分钟的安全测试,或者完全没有。

慢慢地,许多开发商店开始添加更多AppSec活动,例如安全代码审查,提供安全的编码指南或标准,为开发人员提供安全工具,以及介绍许多其他改进最终产品整体安全性的好主意。有些公司甚至创建了自己的专注于应用程序安全性的团队。但是,目前还没有就定义完整的AppSec程序的内容达成一致的标准化,也没有定义何时有人可以说“工作完成”或者他们在软件安全方面做得“足够”。这条线似乎因团队,业务,政府和国家而异,这使得衡量难度很大。

我们的行业现在正逐渐接受DevOps作为新标准:人员,流程和产品,旨在提高弹性,加快修复速度,并加快产品上市速度。尽管DevOps最明显的标志往往是自动化的持续集成和/或持续交付管道(CI / CD),但创建DevOps商店和文化实际上还有很多。

首先,快速回顾一下DevOps的三种方式,如中所述

DevOps手册:

  • 优先考虑整个软件创建系统的效率和速度,而不仅仅是您的部分。这意味着,如果您努力工作以使您的责任区域更有效率,但是还有其他方面将整个系统推迟,那么您的工作就没有增加价值。
  • 努力缩短和放大反馈循环,以便尽快修复缺陷(设计问题)和错误(代码问题),当它更快,更便宜,更容易实现时。
  • 持续学习:为改善日常工作分配时间。

DevOps + Application Security = DevSecOps

随着行业向DevOps的转变,AppSec也不得不改变,通过三种方式编织,以确保生产出最高质量的软件。随着开发和操作系统现在努力提高整个系统的效率(第一种方式),安全性必须学习与它们一起冲刺,为管道添加安全检查并将其活动分解为更小更快的部分。随着对更快反馈的新要求(第二种方式),安全团队无法再在SDLC结束时进入。他们需要从一开始就存在。最后,DevOps需要不断学习(第三种方式),实验和冒险的文化,这意味着让每一刻都成为安全团队的教学时刻。

为三种方式添加安全性 - 在DevOps环境中执行AppSec - 通常称为DevSecOps。考虑到这一点,本文将介绍一些解决第一种和第二种方法的策略,使用工具将DevOps管道更改为DevSecOps管道。

实践中的DevSecOps:构建DevSecOps管道的五种方法

策略#1:武器化你的单位测试

第一个策略是武器化你的单元测试; 你已经拥有它们,为什么不重用它们?常规单元测试通常是“积极测试”,这意味着它会验证您的代码是否应该执行它应该执行的操作。假设您正在从数据库中的表中读取记录。您可能希望确保可以搜索一条,多条或零条记录。这些通常是积极的用例 - 确保它做你希望它会做的事情。

让我们来看看负面用例。在这种情况下可能发生什么样的攻击?您的应用程序会优雅地处理攻击(和失败)吗?可以添加的一些标准有效负载(恶意请求)将包括单引号,两个单引号,双引号和对命令的附加调用(创建,删除,更新,并集)。如果应用程序发出未处理的错误或以与预期不同的方式作出反应,则它将无法通过测试并中断构建。

例如,如果一个单引号在您的应用程序中创建一个不同于两个单引号的反应,这意味着您正在与数据库直接通信,并且在没有不确定的条件下,您是否应该允许该代码出门。

策略#2:验证第三方组件的安全性

第二种策略是验证您的第三方组件,库,应用程序依赖项或您作为应用程序一部分调用的任何其他代码的安全性,这些代码是由其他人(而不是您的开发团队)编写的。目前,第三方组件占所有应用程序中50%以上的代码,其中26%的组件包含已知漏洞(来源)。向项目添加依赖项时,您将接受它们可能包含的每个漏洞的风险。

此问题 使用具有已知漏洞的组件,多年来一直保留在OWASP十大问题上 。幸运的是,MITER 创建了Com mon Vulnerability Enumerator数据库  (CVE),美国政府创建了国家漏洞数据库(NVD),这两个数据库 都包含可以搜索的所有公开(即公开披露)漏洞的列表。在任何管道中快速有效。

有几种付费和免费工具可以执行不同质量和可用性的功能。如果可能的话,应该使用两个工具以防错误或遗漏某些东西,因为每个工具使用不同的方法来验证组件,并且不仅仅是这两个可以搜索的数据库。无论您编写何种类型的应用,都应该验证第三方组件是否存在漏洞; 这个检查太快,容易错过。没有管道应跳过此步骤; 这是一场如此巨大的胜利。

策略#3:审核您的系统和设置的状态

第三种策略是验证服务器或容器的补丁和配置的状态加密状态 (密钥长度,算法,过期,运行状况,强制HTTPS和其他TLS设置)和安全标头 (浏览器/客户端强化)。虽然您的系统管理员可能认为他们已应用了修补程序或各种设置,但此步骤是审核并验证该策略是否符合您应用程序的实际情况。有些工具可以一次完成所有这三个工具,有些工具只能专注于其中的一个或多个。不应将应用程序发布到具有安全性错误配置的平台上     缺少补丁或加密不良,任何用户也不应该使用不使用他们用来访问它的浏览器中提供的安全功能的网站。

策略#4:向您的管道添加动态应用程序安全测试(DAST)

第四种策略是通过启动脚本攻击和模糊  测试(以自动方式使用格式错误的数据注入来发现错误)来对应于运行的应用程序(在Web服务器上作为管道中的一个步骤)添加动态应用程序安全测试 (DAST)。与之前的三个建议不同,DAST不是一个快速的过程,因此,应采用以下一个或两个选项; 仅运行基线扫描和/或在不发布到prod 的并行安全管道中运行它,仅在数小时后运行,并且无限量地完成。    

基线扫描本质上是有限的,仅执行被动分析(缺少标题和其他明显问题)和一小部分动态测试,仅查找最严重的违规者。并行安全管道是一个回转或具有死胡同的管道,从不破坏构建,并且仅为了执行长期和深入的安全测试而运行,将结果传递给AppSec团队以进行进一步调查。开发人员会忽略并行安全管道的结果,因为许多都是误报或需要进一步调查。

基线扫描和并行安全管道都应该由应用程序安全团队进行调整,以最大限度地减少误报。

策略#5:向您的管道添加静态应用程序安全测试(SAST)

最后一种策略是将代码的静态应用程序安全性测试(SAST)添加到管道(也称为静态代码分析)。一般来说,SAST工具不仅非常慢(运行数小时甚至数天)并且可能非常昂贵,但它们通常也具有超过90%的误报率,这可能使这一建议成为令人惊讶的。但是,如果您只搜索一种类型的漏洞(例如XSS注入)   )根据代码冲刺并仔细调整工具,您可能会从应用程序中清除整个错误类。在sprint开始之前与开发人员共享课程或参考资料将导致更快和更少的修复,并且在管道中执行此早期活动(甚至在他们的代码到达管道之前提供对开发人员的访问)是另一种确保良好结果的方法。SAST可以(也应该)在并行安全管道中运行完成。

结论

总而言之,本文提出了为DevOps管道添加安全性的五种策略:

  1. 武器化你的单元测试
  2. 验证您的项目依赖性是否容易受到攻击
  3. 验证服务器/容器的修补程序和配置,加密和浏览器强化设置
  4. 动态应用程序安全性测试(DAST)
  5. 静态应用程序安全性测试(SAST)

将这些流程添加到您的管道将导致生成无限更安全的应用程序。

本着持续学习的精神(DevOps的第三种方式),作为OWASP DevSlop项目的一部分,我们在Mixer Twitch 上每周举办一次直播,我们会调查这些策略等等,并深入研究AppSec的所有领域和我的个人博客上的Cloud Native Security 

此文章为机器翻译,文章来源:https://www.devsecopsdays.com/articles/devsecops-securing-software-in-a-devops-world

布施恩德可便相知重

微信扫一扫打赏

支付宝扫一扫打赏

×

给我留言