将咱们的DevSecOps方法分红多层,能够在对强大安全性的需求与快速移动并常常部署的需求之间找到适当的平衡。php
DevOps运动改变了咱们集成和发布的方式。它使咱们从缓慢的发行周期(有时是每一年的发行周期)过渡到天天(有时甚至是每小时)发行。咱们可以编写代码并几乎当即看到生产中的变化。DevOps是突破壁垒并支持对市场变化、客户需求快速响应的使人惊叹的第一步,可是仍然须要打破一堵重要的壁垒,咱们须要折中的一个重要群体:安全运营(SecOps)。安全
为了在生产变动持续集成和部署(CI/CD)中包括这个相当重要的小组,咱们将DevOps从新定义为DevSecOps。咱们在这项工做中面临的挑战与在将开发和运营整合在一块儿时所面临的挑战相同:开发人员但愿快速行动并常常进行更改,而运营则须要稳定和不频繁的更改。安全团队倾向于支持稳定性和不频繁的更改,由于更改可能意味着重复安全测试并再次对环境进行认证。网络
当咱们以DevOps的速度前进时,咱们如何指望这些团队天天或每周重作他们的工做?异步
安全分层
在深刻探讨这个问题以前,咱们应该谈谈一种关键的安全实践:分层安全或深度防护。分层安全是一种应用多种安全措施的实践,每一层都与前一层和下一层重叠,以建立一个安全控制网络,这些网络能够一块儿工做以保护技术系统。ide
在分层安全方法中,公司经过使用诸如WAN网关防火墙和静态数据加密之类的访问控制来减轻对技术系统的***。控件列表很普遍,但要点是,没有任何控件能够充分保护技术系统。一样的方法适用于对咱们的应用程序执行安全性分析。
工具
与公司的应用程序安全团队联系,询问他们使用哪些扫描工具来确保编写的应用程序安全。可能的是,他们不会使用一种工具进行答复,由于没有一种工具能够所有完成。相反,他们可能会为您提供他们使用或指望开发团队使用的工具列表或工具类型。性能
这使咱们回到了以前的问题:在进行全部这些扫描并使用全部这些工具时,咱们如何指望维持一个持续的部署周期?这是一项艰巨的任务。其中一些扫描和工具须要花费数小时,数天或更长时间。单元测试
内联扫描
尽管某些安全工具和扫描器确实须要很长的时间才能运行,但仍有一些更快的工具能够在开发生命周期的早期使用,以造成咱们的第一层DevSecOps。这就是左移背后的想法:将流程从开发生命周期的末尾(或右侧)移到开始或中间,即再向左移。测试
第一层应包括须要几秒钟(或几分钟)运行的工具和扫描程序。一些常见的示例是代码lint,单元测试,SonarQube之类的静态代码分析器,OWASP Dependency Checker等第三方依赖项漏洞检查,以及集成测试的子集。加密
您可能会问:“整理代码和运行单元测试如何适合DevSecOps?” 软件中的错误能够为正在寻找的对手提供完美的解决方案。例如,OWASP在过去的两个关键Web应用程序安全报告(2013年和2017年) 中将代码注入列为第一漏洞。单元测试和静态代码分析能够帮助捕获咱们的一些错误,并可能有助于防止代码中的安全漏洞。
因为这些工具扫描只须要不多的时间,所以最好将它们推到开发生命周期中的最左侧。当开发人员将代码推送到咱们的Git存储库并打开请求时,这些工具和扫描程序将运行以确保代码在合并以前经过。除了确保咱们的主干分支保持可构建状态外,在开发生命周期的早期就拥有这些工具还能够尽早且常常向开发人员提供反馈。
部署前扫描
DevSecOps的第二层与咱们的部署管道内联运行的工具,须要几分钟甚至一小时才能完成。这可能包括更深刻的第三方漏洞扫描,Docker镜像扫描和恶意软件扫描。
该层的关键之一是,扫描器和工具在生成构建工件以后且在将它们存储到Artifactory或Amazon Elastic Container Registry等任何位置以前均可以运行。更重要的是,此层中的任何故障都应当即中止当前部署,并向开发团队提供反馈。
另外一个关键是在这一层以及全部将来的层中实现并行化。开发人员但愿尽快部署他们的更改,而且连续运行屡次扫描(每次扫描可能长达一个小时)会没必要要地减慢部署周期。经过并行运行这些工具,部署速度的下降等于运行时间最长的扫描。
部署后扫描
DevSecOps的下一层包括在将代码部署到预生产环境以后咱们可使用的工具和扫描程序。这些工具可能包括性能和集成测试以及应用程序扫描程序,例如OWASP Zap。咱们应该努力使这一层快速运行,但愿在一小时或更短的时间内运行,以向开发人员提供快速反馈并限制对CD流程的影响。
为确保咱们不会错误地将易受***的代码部署到生产中,此层应做为CD管道的一部分运行,目的是在任何扫描程序发现漏洞或如下状况时删除工件,回滚环境。不然失败。
根据行业,安全性和法规要求,咱们能够在此层成功完成后自动将部署到生产中。管道中应该已经有足够的自动扫描和测试,能够合理地证实应用程序的安全性和坚固性。
持续扫描
咱们讨论的大多数扫描仪和工具都已嵌入CI/CD管道中。咱们的目标是在平衡这些工具对CI/CD管道的时间线的影响的同时,为应用程序的安全性提供合理的保证。
DevSecOps的最后一层是持续续扫描或持续续安全性(CS)。正如持续集成,测试和部署是DevOps的代名词同样,持续安全性是DevSecOps的代名词和基石。该层包括Nessus,Qualys,IBM App Scan等工具,以及其余基础结构,应用程序和网络扫描工具。
CS并不是嵌入在CI/CD管道中,而是做为异步的,并向开发人员提供持续的反馈。开发人员如何接收和响应该反馈须要进行讨论和达成共识。开发人员将在收到任何反馈后当即对其进行处理,并在较长的周转时间内解决。
这些工具和扫描程序的启动方式以及运行频率是利益相关者应赞成CS的另外一个方面。部署完成后,能够经过CI/CD管道启动具备API的工具。其余可能根据须要或基于必定的时间节奏来完成。不管如何完成,重要的是这些工具和扫描仪不会仅运行一次,甚至每一年运行一次或两次。相反,这些工具和扫描仪应尽量频繁地运行,并应对应用程序有意义。
结论
正如咱们不能经过使用一两个工具或安全性原则来确保技术系统的安全性同样,咱们应用程序的安全性也不能仅取决于一两个工具或扫描仪的类型。它采用分层的方法来应用不一样的工具和扫描程序,以合理地确保咱们的应用程序及其运行的基础结构的安全性。