将安全性纳入敏捷开发和CI/CD中
- 来源:计算机世界 smarty:if $article.tag?>
- 关键字:开发团队,软件安全,实践 smarty:/if?>
- 发布时间:2020-05-03 11:04
之所以会出现DevOps,是因为需要频繁发布的开发团队与需要维护可靠性和稳定性的运营团队之间在文化上、功能上和技术上存在隔阂。DevOps文化致力于解决思维方式、协作和实践上的差异以实现各自目标和DevOps实践,其中包括持续集成/持续交付(CI/CD)、基础设施即代码(IaC)、AIOps(通过在应用程序监视中内置机器学习实现)。
随着越来越多的人和企业开始采用DevOps,“DevOps”一术语显然已经无法再准确描述这一活动的全部范畴、实践和要求。我曾经呼吁使用“DevQaOps”这一术语,并推荐在可行的情况下使用前移安全测试。
每个人对安全负责也很重要。将安全性转移到开发和运营中(即DevSecOps)可以帮助用户实现这一目标。
软件安全性从开发人员开始
在DevOps出现之前,开发团队通常只在应用程序发布过程的最后阶段才开始进行安全实践,变更咨询委员会(CAB)通常会要求有这一步骤。由于安全团队是在流程后期才加入的,因此他们理解业务需求、熟悉技术变更、评估风险以及进行安全测试的时间都相当有限。当安全团队发现了问题,要想在不影响时间表的情况下修复问题时会显得非常仓促。如果发现的问题需要进行实质性的代码更改,那么开发团队就会面临一个进退两难的选择。
在发布流程的后期进行安全性测试对于DevOps团队来说是一个重大风险,因为这样可能会增加发布频率和对微服务的投资。据DORA和Google Cloud发布的《2019年度DevOps促进状态报告》(Accelerate:State of DevOps 2019)显示,43%的受访者为每天或每周都需要发布应用程序的高绩效或精英企业。由于DevOps开始被大量应用在生产部署当中,这使得用户需要有一种综合性方法来频繁部署最佳安全实践,同时这也要求用户在开发流程的早期就开始部署。
敏捷开发团队和信息安全团队之间需要在以下领域进行协作:
· 审查安全要求、架构和编码实践。
· 在CI/CD管道中进行自动化安全测试。
· 监视应用程序所面临的威胁并解决安全问题。
在以下部分中,我将针对这些领域提供一些指导原则。
在安全性要求、架构和编码实践方面进行协作
开发团队和信息安全团队必须在敏捷开发流程的早期(甚至在编码开始之前)就安全性展开合作。在Puppet、CircleCI和Splunk发布的《2019年DevOps状态报告》中,研究人员明确了几种开发和信息安全团队相互协作的最佳实践:
· 安全和开发团队应当就威胁模型展开协作。
· 应在产品待办事项列表中优先考虑功能性和非功能性安全要求。
· 安全要求应当被视为设计约束条件。
敏捷开发团队可以通过标记高等级安全风险要求和进行安全审查来实施这些实践。开发团队应与信息安全团队在需求、架构、设施和应用程序部署方面展开合作,以捕获用户信息、管理授权和处理敏感数据。
为了降低代码更改的风险,敏捷团队应以用户的角度编写验收标准,以解决信息安全团队的安全要求和约束。
敏捷开发人员还应该按照设计原则来审查OWASP(开放 Web 应用程序安全项目)的安全性,其中包括以下几种最佳实践:
· 在密码过期等领域建立起由安全性驱动的默认策略。
· 在定义角色和授权访问业务流程时实施最低权限原则。
· 深入理解职责分离、“不信任”服务等安全原则,最小化攻击面以及避免安全性变得模糊不清。
· 通过深入了解根本原因和整体性修复,快速解决安全问题。
最后,开发团队和信息安全团队应共同总结出一套可供参考的编码最佳实践,例如卡内基梅隆大学的编码实践、密歇根大学安全计算的最佳实践,以及所用编程语言和平台的最佳安全编码实践。
如果要将应用程序部署到公有云,用户还应查看例如Google Cloud安全性概述、AWS安全性设计、Azure上设计安全应用程序的站点等最佳实践。
在持续集成/持续交付(CI/CD)管道中进行安全性测试
下一步要考虑安全性的是CI/CD管道,在此管道中,自动化代码和安全验证能够分割构建并警告开发人员。建立CI/CD管道标准时应考虑的一些较常见的安全实践和工具:
· 静态应用程序安全测试(SAST)平台(如SonarQube、Veracode、Sentinel Source和Checkmarx)可针对不同的漏洞和模式扫描代码。例如,SonarQube可扫描恶意输入(污点分析)、跨站点脚本、敏感数据暴露和已知漏洞。Veracode称,他们已经扫描了超过11万亿行代码,误报率低于5%。Checkmark可使用20多种编程语言,并符合PCI-DSS、HIPAA、FISMA等法规标准。所有这三个工具均可在多个IDE和CI/CD平台上运行。此外,用户还可以选择开源的SAST工具,例如CodeWarrior和NodeJsScan。目前OWASP已列出了20多种SAST工具,并指出它们可以发现配置问题、身份验证和访问控制中的漏洞。
· 附属扫描工具可审查包括开源库在内的基础软件组件,并报告漏洞。GitLab Secure拥有SAST和其他安全工具,包括依赖性检测,并且可以与Java、JavaScript、PHP、Python、Ruby、Scala和Go一起使用。OWASP Dependency Check还可与Jenkins、CircleCI和SonarQube進行集成。Snyk开源安全管理器能够让开发人员查找和修复开源漏洞。微软最近发布了一款名为Application Inspector的代码分析工具,可以针对400种模式进行报告,其中包括影响安全性的功能。
· 滲透测试的出现已经有一段时间了,但是传统上许多公司都设置有在软件开发生命周期(SDLC)中测试代码、构建和部署流程独立性的安全团队。目前比较流行的工具OWASP Zed Attack Proxy(OWASP ZAP)可以嵌入CI/CD工具(如Jenkins)中并触发部署。ZAP项目负责人Simon Bennetts曾就ZAP的All Day DevOps系列产品指出:“使用得越早越好。ZAP在自动化方面具有许多亮点。”
· DevOps、云计算和开发工具通常都有自己的安全插件。例如,Jenkins和Azure DevOps有40多个安全插件,CircleCI也有20多个安全插件。微软Azure已发布了自己的持续安全性方法,AWS则为CodePipeline用户提供了DevSecOps准则。 随着安全技术、集成和devops工具的快速发展,信息安全和开发团队应定期检查这些工具以查找新的安全插件。
· 另一个重要的考虑因素是保护CI/CD管道本身。保护键和参数的安全对于安全性来说至关重要,为此CircleCI、Jenkins和Azure都提供了锁定这些键和参数的工具和建议。
利用监视和AIOps形成安全性闭环
在保护基础设施即代码、强化容器安全和配置云服务方面有着一整套DevSecOps规范。此外,在数据安全性、身份管理和物联网设备安全方面也有专门的DevSecOps主题。如果用户的工程和开发项目涵盖基础设施、移动、网络、物联网和分析,那么用户还将在这些领域中找到专门的安全实践和工具。
除了基础设施和数据安全之外,从事应用程序开发的所有人都必须熟知应用程序在生产环境中的工作方式。审查事件,参与对深层次原因的分析以及纠正缺陷都是应用程序开发的重要职责。对于开发人员来说,这通常意味着改进应用程序监视工具的日志记录和审查分析功能。
作为一种新兴的运营技术,AIOps利用了机器学习和自动化功能简化了DevOps和应用程序监视。运营团队通常会使用许多不同的监视工具,但是使用多个工具可能会减慢解决事件的速度,尤其是在复杂的多云环境中以及开发团队频繁进行修改时。
AIOps工具聚合了多个监视工具、应用程序日志文件或基础设施组件的运营数据,然后再利用机器学习来帮助识别事件,触发自动响应并减少解决问题的时间。这些工具还可以通过筛选纵向操作数据来帮助发现异常值和延缓问题的发展速度。通过这种类型的分析可以发现许多安全问题。
对安全问题的审查监视和AIOps工具可以帮助信息安全和开发团队将运营中的安全事件反馈至敏捷开发流程中并进行修复。虽然这是一种被动性安全措施,但是对于致力于管理和提高应用程序安全性的敏捷团队和devops 部门而言,这是一项至关重要的实践。
解决软件安全问题需要在敏捷开发流程开始时就积极主动采取措施,使用开发管道中的最佳实践和工具,以及基于监视生产系统的被动措施。安全威胁总是瞬息万变,因此敏捷团队和DevOps部门需要不断审查安全实践并验证新方法。
本文作者Isaac Sacolick为《驱动数字技术:通过技术实现业务转型的领导者指南》一书的作者。该指南介绍了许多关于敏捷性、DevO ps和数据科学的实践,对成功的数字化转型计划具有重要的指导意义。
Isaac Sacolick
