【安全测试】 6 DevSecOps最佳实践:尽早并经常自动化

Chinese, Simplified

希望将安全性集成到其DevOps管道中的组织应采用将应用程序开发,IT操作和安全团队统一在一个共同的DevSecOps规则下的工具和实践。

目标是使安全性成为软件开发工作流程的一部分,而不是像在瀑布式开发模型中那样在循环的后期使用它。

这种转变正在颠覆传统观念,即安全控制应该如何,何时以及在何处集成到软件中,并且正在挑战曾经孤立的群体,以寻找合作的方式来提供快速但安全的代码发布。

“DevSecOps的受欢迎程度稳步上升,”WhiteHat Security首席安全研究官Ryan O'Leary表示。近年来在DevOps模型下结合开发和运营团队的公司通常以更快的速度成功发布代码。

但是,这种趋势加剧了将安全性集成到流程中的需求,因为您发布代码的速度越快,也可以释放更快的漏洞,他说。

以下是寻求实施DevSecOps的组织的关键最佳实践。

 

1.让自动化成为你的朋友



速度是DevOps的主要原则之一。在持续集成和持续部署(CI / CD)环境中,您可以多快地将代码输出门并进入生产阶段,几乎可以胜过其他任何事情。安全旅程的首席执行官,首席顾问兼联合创始人克里斯罗密欧说,为了使安全性成为这个工作流程的一部分,它需要实现自动化。

安全控制和测试需要在开发生命周期的早期和任何地方进行嵌入,并且需要以自动化方式进行,因为组织正在为单个应用程序每天将新版本的代码推向生产50次,他说。

“使用DevOps,你必须超级快速地移动。在这个过程中没有'手动'。如果你没有自动化,你将永远不会成功。”

-Chris Romeo

在具有高度成熟的DevOps实践的组织中,自动化已成为DevSecOps的关键特征。在今年早些时候对近2,300名IT专业人员进行的Sonatype调查中,大约40%的受访者在整个开发生命周期中都进行了自动安全测试。当自动安全测试在生产之前运行时,这不是瀑布式开发模型所发生的情况。

从源代码分析到集成和部署后监控,越来越多的具有一系列功能的工具可用于在整个软件开发生命周期中进行安全性分析和测试。这些包括Checkmarx,Splunk,Contrast Security,Sonatype,Tanium,InSpec,FireEye和Metasploit。

思想自动化



罗密欧表示,在进行安全测试自动化时,请谨慎行事。例如,如果您对夜间构建执行静态应用程序安全性测试(SAST),请确保仅扫描当天为代码所做的更改中感兴趣的内容。

尝试每天对整个应用程序源代码运行自动扫描可能会耗费大量时间并且会破坏您跟上日常更改的能力。

还要考虑将自动化动态应用程序安全性测试(DAST)嵌入到软件开发生命周期中。与静态分析(侧重于在代码本身中发现潜在的安全性问题)不同,DAST在应用程序运行时实时查找漏洞。

自动执行DAST扫描并针对最近或新的代码更改运行这些扫描,以捕获Open Web Application Security Project(OWASP)列表中列出的最常见缺陷(例如SQL注入错误)中列出的安全漏洞,您可能在静态分析期间错过了这些漏洞罗密欧说,你的应用程序代码。您需要以自动化方式,因为您只需要通过一组测试就不会知道您可能会错过什么。

ShiftLeft的联合创始人兼首席执行官Manish Gupta表示,在CI平台中添加自动安全分析可以限制软件开发生命周期早期的易受攻击代码的引入。

自动化可与轻量级嵌入式代理结合使用,以提供有关从自动安全分析中检测到的问题的相关运行时分析。 Gupta表示,采用这些方法可以使开发人员更容易确定需要修复的代码问题的优先级。

2.检查代码依赖性



尽管人们越来越担心使用第三方软件组件的风险,但企业在应用程序中使用的开源软件更多,而不是更少,根据Black Duck Software在2017年初进行的一项调查。

该公司对1,000多个商业应用程序进行的单独审计显示,其中96%包括开源组件。超过六分之一的应用程序包含这些组件中已知的安全漏洞,有些已经存在长达四年。尽管如此,只有27%的受访者表示他们拥有自动识别和补救跟踪功能,可以解决开源软件中的已知缺陷。

Gupta说,了解开源使用是更广泛采用DevSecOps实践的关键。 “云以前所未有的方式推动了创新,使公司能够更快地满足客户需求。这种创新步伐也促使开源软件越来越多地用于组装应用程序,而不是从头开始开发。”

Gupta说,开发人员通常没有时间审查其开源库中的代码或阅读文档,因此管理开源和第三方组件的自动化流程是DevSecOps的基本要求。您需要知道您的开源使用是否导致代码中的上下文和其他漏洞,以及这些漏洞可能对依赖代码产生的影响。

代码相关性检查是DevSecOps的基础,而诸如OWASP Dependency-Check之类的实用程序可以帮助确保您不使用软件中已知漏洞的代码,Security Journey的Romeo说。

OWASP实用程序通过扫描您的代码和相关的开源组件库来工作,以查看它们是否包含任何关键的OWASP缺陷。它适用于开源软件中所有已知漏洞的不断更新的数据库。

3.不要咬人比别人咬的更多



SAST工具允许开发人员在编写代码时扫描代码,以便他们可以收到有关可能导致安全问题的问题的即时反馈。这些工具可帮助开发人员识别和修复潜在的安全漏洞,这是正常工作流程的一部分,因此应该是DevSecOps实践的重要组成部分。

然而,引入这些工具时的关键是要小心思考。罗密欧说,通常情况下,当安全团队在CI / CD链中实施静态测试工具时,团队倾向于检查一大堆安全问题,最终只会给开发人员带来问题。

相反,最好一次打开一个或两个安全检查,让开发人员习惯于将安全规则合并到他们的工作流程中。

例如,在开发中引入SAST工具时,您可以首先启用捕获SQL注入错误的规则。一旦您的开发人员看到该工具如何帮助他们在编码期间捕获错误,他们就更有可能想要使用它。 “在开启越来越多的规则之前,你需要建立对工具的信任。”

构建DevSecOps功能时,将其分解为可管理的块。 “解决这个问题的最佳方法是查看DevSecOps版本中所有不同活动的整体集合,”罗密欧说。选择一个开始并证明它有效,然后再转向下一个。

他说,进入和破坏事物的安全专业人员只会放慢速度并与开发人员发生冲突。在开始时要小心思考,并在采取下一步措施之前取得一些成功。

“你在这里处理的是一种不同的文化。”

-Romeo

 

4.有些工具比其他工具更有用



将安全性插入敏捷DevOps所需的许多工具仍在出现,因此在购买时要记住一些关键注意事项。

例如,整合是至关重要的,WhiteHat Security的O'Leary说。 “安全产品需要能够集成到开发流程中,并使开发和安全团队能够一起工作,而不是仅仅把东西扔到篱笆上,”他说。

如果开发人员必须不遗余力地开始扫描,他们很可能会放弃扫描工具。 “安全产品需要让开发人员能够轻松快速启动扫描并获得结果,而无需离开现有工具集,”O'Leary说。

其他关键要求是速度和准确性。安全工具应该快速工作。但O'Leary告诫说,误报可能是DevOps环境中的绝对杀手。

需要开发人员或安全工程师抽出时间来验证扫描结果的工具几乎没有帮助。您的工具生成的结果需要快速,准确且立即可操作。

“误报是快速发展的死亡。”

-Ryan O'Leary

为瀑布开发模型设计的安全工具在DevSecOps世界中几乎没有用处。 ShiftLeft的Gupta表示,您需要的工具可以帮助您的开发人员在编写软件时识别漏洞并确定其优先级。代码漏洞的识别需要基于对软件本身的理解,而不是将其与签名进行匹配。

Gupta对于购买此类工具时组织需要考虑的内容提出了一些建议。您选择的任何工具都应该可以保护您免受已知漏洞的影响,但不会受到未知威胁和关键OWASP十大风险的影响。

这些工具还可以帮助您识别和解决您使用的开源软件组件中的风险,并以帮助您缩短平均解决时间的方式识别问题。

“广泛采用DevSecOps的挑战是提出不会对发布和部署周期造成拖累的工具和流程。”

-Manish Gupta

5.威胁建模很难,但无论如何都要做



SANS Institute建议您在转移到DevSecOps之前进行威胁建模和风险评估。威胁建模练习可以帮助您的安全组织更好地了解您的资产受到的威胁,资产的类型和敏感性,现有的保护这些资产的控制措施以及需要解决的控制措施中的任何差距。

此类评估有助于识别其他安全方法可能遗漏的应用程序架构和设计中的缺陷。

罗密欧说,在DevOps环境中进行威胁建模可能具有挑战性,因为它可以减缓CI / CD环境的速度。

“DevOps更多的是关于动态设计。实际上,有些DevOps人员根本不做任何设计并说代码就是他们的设计。这很危险。”

-Romeo

您无法以与DevOps几乎所有其他方面相同的方式自动化威胁建模过程。但罗密欧表示,威胁建模对于DevOps工作的整体成功仍然至关重要,因为它可以让您的开发人员从攻击者的角度考虑他们的软件。

6.培训开发人员进行安全编码



采用DevSecOps时,您将面临多重挑战。其中最大的问题就是从利益相关者那里获得支持。 O'Leary说,开发,安全和运营团队经常在自己的孤岛中运营,并有自己的议程和任务。 “向公司提出这些组织可以合并的案例有时候会有点困难。”

获得培训开发团队进行安全编码所需的投资和时间是另一项重大挑战。 “开发人员通常不知道他们是以不安全的方式编码。它仍然没有经常教授,并且不是开发团队的优先考虑,”O'Leary说。他说,必须在培训开发人员的安全方面进行投资。

“防止漏洞的最佳方法是永远不要编写代码。”

-O'Leary

许多DevSecOps实践和工具仍在不断涌现,目前对DevSecOps的定义仍未达成共识。但很明显,在持续集成和快速发布周期的世界中,您不能再忽视应用程序安全性。 Gupta说,安全是另一个共同的主题。

“它越来越成为一种共同的责任,建立在软件开发生命周期中的每个人都对其负责的理念之上。”

 

原文:https://techbeacon.com/security/6-devsecops-best-practices-automate-early-often

本文:

讨论:请加入知识星球或者小红圈【首席架构师圈】

SEO Title
6 DevSecOps best practices: Automate early and often