DevSecOps:高速开发运维的安全秘籍

时间:2019-08-18

  DevSecOps一词最早由Gartner在2012年提出,并从2017年开始逐渐成为热门词汇。DevSecOps可以理解为将安全性融入到DevOps的过程中,在整个开发和运维的过程中将安全作为一项重要的考虑因素,最终实现应用整个生命周期内的安全性。利用DevSecOps实现安全自动化可以在提高研发运维效率的同时增强应用的安全性。

  1970年温斯顿·罗伊斯(Winston Royce)提出了著名的“瀑布模型”。将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工作。

  从1990年代开始逐渐引起广泛关注的一种新型软件开发方法,以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。

  开发、运维和质量保障的结合,加快了应用程序的构建和部署。DevOps带动了持续集成/持续交付(CI / CD)的发展,围绕自动化工具链开发应用程序。尽管实现了很多流程的自动化,但对安全关注始终无法满足应对当下的攻击和网络威胁趋势的需求。

  主张将安全性融入到CI / CD过程中,消减手动测试和配置的过程,并支持持续部署。安全团队将参与到整个开发生命周期中,与开发、测试和质量保证团队紧密合作。

  DevSecOps网站 1首页列举了九大宣言,对DevSecOps的重点内容和实施价值进行了高度概括。分别是:

  DevSecOps自概念提出以来,大多数情况还是在理论和尝试阶段,缺少相关的成熟实践案例。美国威胁检测公司Threat Stack2针对北美大公司和中小企业的 200 多名安全、开发和运营专业人员发起了问卷调查。调查结果显示:

  ► 85% 的受访组织认为缩小DevOps和安全之间的差距应当成为企业的重大目标

  DevSecOps可以图形化3地描绘为,以连续监测和分析为核心,从开发到运行的快速、敏捷迭代。安全的服务交付始于开发,最有效的DevSecOps程序是从开发过程的最初阶段开始,并在其整个生命周期中一直随着流水线推进。

  安全架构师的目标是在整个生命周期内自动合并安全控制,而不需要手动配置,安全控制必须通过DevOps工具链实现自动化。

  随着越来越新的服务或产品在DevSecOps迭代流程中重复循环,审计员和安全架构师希望在服务开发和部署阶段明确区分各成员的职责。成员的权限范围可以通过与现有的IAM系统链接来管理,并为开发阶段、上线生产前阶段和上线生产阶段定义不同的角色。

  基于风险的基本威胁建模应该是DevSecOps的标准最佳实践。从为开发人员提供一个简单的问卷开始,可以从较高的层次评估服务或产品的风险,应该通过开发人员培训、交流以及加强基本编码中的安全最佳实践来开展。

  开发人员在编写代码时,建议在集成开发环境(IDE)中采用轻量级的代码安全扫描工具来快速检查安全性,类似拼写检查器的功能。自动扫描工具和安全测试软件应该是持续集成(CI)测试工具链的一部分。

  许多开发人员从Maven和GitHub等开源软件库下载程序代码。开发人员经常(有意或无意地)下载已知的易受攻击的开源组件和框架。

  在创建和集成包时,应该扫描所有映像(虚拟机VMs、Amazon主机映像、容器和类似的组件)的全部内容,以发现操作系统、应用程序平台和商业软件的漏洞。还应根据行业最佳实践标准的安全配置加固指引,对操作系统和应用程序平台的配置开展扫描。

  在“基础设施即代码”构想下,基础设施是可编程的,并可进行自动化部署和配置。因此,安全基础设施亦可编程。如果基础架构代码化,则安全编码原则也必须应用在用于实现配置自动化的s/ Recipes/ Templates/ Layers,以及必须保证基础设施代码库的安全。

  关于DevSecOps在生产环境中的最佳实践,首先必须确保正在加载和运行的系统及服务确实是预先期望的版本,并且配置无误。

  为了防止入侵,使用白名单来控制服务器上允许运行的可执行程序。默认情况下,所有显示为要执行的软件都会被阻止。白名单可以扩展到包括网络连接、用户访问、管理员访问、文件系统访问、中间件/PaaS访问和流程等各层次。

  在一个先进且有针对性攻击的场景里,完美的预防是不可能的。必须不断监视工作负载和服务,以发现可能表明已遭入侵攻击的异常行为。

  安全架构师应该与IT运营锁定服务器和基础设施,仅允许使用自动化工具进行变更。

  容器共享同一个操作系统平台。在操作系统Kernel层面的成功入侵将对所有其中的容器造成影响。因此我们建议仅仅在相同信任水平层面才使用容器。

  DevSecOps旨在快速开发的DevOps环境中,应在整个支持IT服务的开发和交付过程中自动、透明地运用安全检查和控制。安全的服务交付从开发开始,最有效的DevSecOps程序从开发过程中最早的点开始,并跟踪整个生命周期。从长远来看,尽可能将安全控制自动化,以减少配置不当、错误和管理不善发生的可能性。

  DevSecOps强调安全是整个IT团队(包括开发、运维及安全团队)每个人的责任;将安全从多个点渗透到整个开发和运维的生命周期中,且将安全性考量提前至开发环节前;并将安全以可编程、自动化的方式融入到开发和交付IT服务过程中6。

  Maccherone DevSecOps九大实践要素,其中“黄带”代表如何应对常见威胁来维护客户与品牌,“绿带”代表软件、网络、系统管理员、数据库管理员。

  其中的安全意识、团队工作协议、同业人员评审和安全评估均在强调企业组织对于DevSecOps的接受程度,以及整个企业文化中的安全意识,是影响DevSecOps实践的重要因素。技术能让安全融入DevOps过程,但人、流程以及文化才能推动DevSecOps常态化。

  在实施DevSecOps前,需要考虑业务、技术、流程和人员等因素的影响。实施过程中需尤其重视以下模块:

  一般来说,DevSecOps实施流程可分为计划、开发、建设、测试、安全、部署、操作、监控、扩展和适应10个阶段8。

  DevSecOps专业人员创建基于特征的描述,关注点应在安全性和性能,验收测试标准,应用程序接口和功能以及威胁防御模型上。

  对于开发人员来说,重要的是将可用的资源集中起来进行指导,为他们自己和团队中的其他人提供可靠的实践和代码审查系统。

  自动化构建工具可以极大地提升整个DevSecOps实现过程。这些工具可确保测试驱动开发、发布工件生成标准,并通过统计代码分析,得以利用工具从而确保设计方面与团队的编码和安全标准保持一致。

  DevSecOps中的自动化测试应该利用强大的测试实践,包括前端、后端、API、数据库和被动安全测试。

  传统的测试方法适用于DevSecOps。未来的趋势是在开发过程的后期识别问题。

  通过先进的实践,如安全扫描,我们会更加意识到问题,并可以确定威胁是否严重。

  自动化供应和部署可以快速跟踪开发过程,同时使其更加一致。基础设施即代码工具可以执行上述审计属性和配置,并确保跨IT基础设施的安全配置。

  定期监控和升级是运营团队的重要任务。DevSecOps团队确保部署基础设施即代码工具,以快速有效的方式更新和保护整个组织的基础设施,而不允许人为错误。操作人员必须特别注意零日漏洞。

  持续关注安全方面的违规行为可以使一个组织免于被入侵。因此,有必要实现一个强大的实时连续监控程序,跟踪系统性能,并在早期阶段识别任何漏洞。

  组织不再花费大量的时间和金钱去维护大型数据中心。随着虚拟化解决方案和云的引入,组织可以扩展其IT基础设施,或者在出现威胁时替换它,这是传统数据中心无法做到的。

  持续改进是任何组织成长的关键。一个组织将只能在它的实践(包括DevSecOps实践——安全性、功能性和性能)中实现它所期望的增长。因此,一个组织应该适应持续改进和外部变化趋势。

  许多开发和运营人员,甚至高层领导者认为,速度是开发业务中的首要目标,安全考量与高速开发会互相掣肘。由于效率是大多数企业对开发人员绩效考核的一项重要指标,在实施DevOps的过程中往往会选择牺牲安全性。

  安全意识的培养势在必行。当业务领导者拥有很强的安全意识,DevSecOps的可行性就会大大提升;当开发和运营人员也开始重视安全静心阁559955。DevSecOps才会变得真正得以实施。

  当今的安全基础架构仍是基于硬件的设计,往往落后于软件定义和可编程的概念,所以,用一种自动化的方式将安全控制融合到DevOps 过程就存在挑战。

  多数安全专业人士并不熟悉DevOps方面使用的工具,尤其是在与其互操作性和自动化的功能方面。

  虽然实施DevSecOps过程困难重重,但是其带来的益处显而易见,概述如下9。

  Gartner在2017年10月提出了成功实施DevSecOps的十条建议10。将安全整合到DevOps的DevSecOps会带来思维方式、流程和技术的整体变化。

  简单概括DevSecOps,就是将可以自动化、重复性的安全工作融入到研发体系中。网络安全已成为各企业的重点关注对象,而融合安全和高速开发运维的DevSecOps终将引领未来的安全开发趋势。


友情链接:
Copyright 2018-2021 主页 版权所有,未经授权,禁止转载。