DevSecOps的实施步骤及其常见误区 原创

忽略掉安全问题,一切利用DevOps改善工作流程的努力都将付之东流。

只要实施得当,DevOps足以为各类企业组织带来丰硕的回报,比如改善团队间的协作效果、加快产品上市速度、提高整体效率并提升客户满意度等等。但如果不切实考虑安全保障,那么以上一切积极因素都无法真正转化为收益。忽略掉安全问题,一切利用DevOps改善工作流程的努力都将付之东流。DevSecOps则有望破解这一困局。

在本文中,我们将共同了解各类DevSecOps实施步骤及其常见误区。

在DevOps出现之前,企业组织只在软件开发生命周期(SDLC)的最后阶段对产品进行安全检查。由于关注重点主要集中在应用程序开发环节上,因此相当于变相认定安全性不及其他环节重要。到工程师开展安全检查时,产品的大部分开发流程已经结束,因此即使发现了安全缺陷,也意味着必须重新编写无数行代码——这无疑是一项费力且耗时的任务。也正因为如此,企业在这时候往往会选择能修则修、能拖则拖。换言之,安全保障成了一种“安慰剂”,而不是真正值得大力推动及投入的重要工作。

过去十年以来,IT基础设施经历了一场巨大的变化。但大多数安全性与合规性监控工具并没有同步实现升级。最终结果就是,大部分工具无法根据典型DevOps的需求快速测试代码。

此外,网络犯罪攻击则以惊人的速度不断扩大。Juniper Research发布的一份报告预测,随着越来越多业务基础设施的相互对接,2020年内单次数据泄露带来的平均损失将超过1.5亿美元。

很明显,实施DevSecOps将带来直接而积极的影响,成为我们手中抵御潜在攻击挑战的稳固之盾。

安全性贯穿在DevOps流程的各个阶段当中

“既要快速交付代码,又要保障代码安全”,这听起来似乎是种相互矛盾的要求。但DevSecOps表示偏不信这个邪。

DevSecOps是一种以“安全生产、人人有责”的立场处理IT安全工作的方法。它要求将安全实践纳入到DevOps管道当中,希望借此实现安全保障在各个软件开发工作环节中的全面渗透。但这种全流程保护的方法,明显与以往只在软件开发生命周期最终阶段关注安全的传统方法有所冲突。

如果企业已经在推进DevOps,那么考虑转向DevSecOps肯定是个好主意。DevSecOps的核心与DevOps原则高度契合,因此转换工作并不会特别困难。通过转换,企业能够将来自不同学科的技术人员汇聚起来,全面增强现有安全流程。

DevSecOps的常见误区

DevSecOps中也存在着不少误区。比如说,”我们需要‘超级开发者’才能实现DevSecOps“。事实并非如此。DevSecOps的实施并不需要那种“超级英雄”级别的开发人员。只要配合适当的技术与观念培训,充分引导员工们对DevSecOps给予关注,每个人都能成为这股浪潮中的弄潮儿。而且DevSecOps一直强调打破职能孤岛,因此开发团队应该吸纳具有不同技能的人员,为他们提供关于DevSecOps流程及方法的培训课程,最终与整个产品交付管道相匹配。所以,只要培养现有团队即可,并不需要雇用一支全新的独立军团。

另外一个常见误区是,”DevSecOps能替代敏捷化“。其实DevSecOps只是对敏捷化做出了补充,但本身并不能替代敏捷化。二者必须共存,才能保证企业最大限度提升自身业务收益。敏捷化强调促进协作并持续反馈,但与DevSecOps不同的是,敏捷化并不涉及软件的测试、质量保证(QA)与生产等环节。DevSecOps则要求借敏捷之力全方位增强现有业务流程。

第三个误区是,”肯花钱就能实现DevSecOps“。不尽然。我们能买的只是流程工具,例如用于发布管理和CI/CD的工具,但却没法直接买下整个DevSecOps流程。DevSecOps代表的是一种哲学、一种方法论。真正对业务产生直接影响的东西,也就是团队间的高效协作以及团队成员的责任心,是没法直接买到的。

随着越来越多的企业意识到DevSecOps的重要性,DevSecOps工程师也愈发受到人才市场的追捧。那么,最出色的工程师到底该拥有哪些特质?DevSecOps工程师角色本身,必须掌握一些补充性的技能,例如对DevOps核心原则、实践及文化倾向的深刻理解。候选人还应该熟练掌握Python、Java及Ruby等语言。此外,优秀的DevSecOps工程师还应该能轻松运用Chef、Puppet、Checkmarx以及ThreatModeler等程序。

除此之外,DevSecOps专业人士还需要了解风险评估与威胁建模技术的复杂性,理解最新网络安全威胁、现代最佳实践及其他相关软件。在工作经验层面,拥有DevSecOps从业经历当然是最好的。但纯IT安全(不涉及DevOps)从业经验也足以支撑起DevSecOps工程师们敏锐的安全嗅觉。

DevSecOps最佳实践

在DevSecOps的规划与实施过程中,这几方面因素发挥着重要作用:

首先,安全编码实践。安全编码的重要意义,在于开发出对安全漏洞具有较高抵御能力的软件。而非安全的编码实践可能引发多种软件安全风险,例如泄露企业组织内的机密信息。因此,最重要的是保证开发人员拥有充分的技能储备,并积极在时间与成本投入方面给予支持。此外,企业还应建立并遵循编码标准,帮助开发人员们编写出更多高质量代码。

第二,拥抱自动化。与DevOps一样,自动化在DevSecOps中同样至关重要。为了在CI/CD环境中让安全保障速度与代码交付速度相匹配,安全也必须迈向自动化新时代。没有这一前提,大型企业组织根本无法有效保护开发者每天提交的大量代码版本。

对于自动化安全测试,我们必须做出万全的考虑。出于错误目的而选择了错误的自动化工具,反而可能带来巨大的危害。静态应用程序安全测试(SAST)工具目前被广泛应用于开发周期早期的持续检测与问题识别方案。只有匹配实际需求选择合适的安全自动化工具,产品的顺利交付才能真正得到有效保障。

第三,左移方法。左移测试方法的核心,是在周期之初就将安全性融入应用程序之内,而不再等待交付链最后阶段的到来。这种方式的主要优势在于加快潜在漏洞的识别速度并即刻加以解决。这种方法本身虽然好处多多,但也会带来不少隐患。左移方法的一大常见挑战,就是会暂时中断现有DevOps工作流程。这确实是个问题,但如果企业决意采用DevSecOps,那么左称方法从长远来看仍是一项不可或缺的最佳实践。

第四,人员、流程与技术。在DevSecOps的成功实施方面,人员、流程与技术可谓三位一体,缺一而不可。哪怕其他条件再完备,如果员工对文化革新不感兴趣,那么成熟有效的DevSecOps环境根本无从谈起。虽然说服高层管理团队接纳这样的重大转变可能困难重重,但因安全态势恶劣而频繁引发的重大数据泄露事件应该引起大家的高度重视。所以除了安全专家的引导之外,尽可能发展安全拥护者对于DevSecOps的良好运作同样至关重要。

任何流程都由多个环节组成,其中最重要的当然是工作流标准化与文档化。一般来说,企业组织内的各个团队需要执行不同的流程,而DevSecOps则需要团队共同商定统一流程、并通过协同执行加强开发周期中的安全水平。同时,技术能够帮助人们高效执行DevSecOps流程,其具体实践中涉及的常见技术包括自动化与配置管理、安全即代码、自动合规性扫描以及主机强化等等。

如何实施DevSecOps

可以想见,DevSecOps的实施将是一个复杂的流程。我们现在将这个流程拆解成以下几个具体步骤,虽然还没有任何具体的、连续的路线图式步骤设计,但其中大多涵盖以下环节。

首先,一切以规划为起点。规划的战略水平与简洁程度将直接决定最终实施结果。因此,单靠对功能特性的描述还远远不够,专家们还需要建立起测试验收标准、用户设计以及威胁模型。下一阶段则是开发环节,团队应首先对现有实践的成熟度开展评估。在此阶段,大家可以通过多个来源收集资源以作为路线指导,也可以建立起代码审查系统。由此支撑起的统一架构,将成为DevSecOps后期成功的重要基础。

之后则是构建环节,自动化构建工具无疑是这一阶段中绝对的主角。利用此类工具,我们可以构建脚本、将源代码组合为机器码等。自动化构建工具不仅提供多种强大的功能、丰富的插件库,还具备多种易于上手的用户界面,其中一部分甚至能够自动检测易受攻击的库并及时加以替换。下一步则是测试,通过稳定可靠的测试实践将强大的自动化测试框架全面引入管道当中。部署工作通常通过IaC工具进行,由其自动执行流程并加快软件交付速度。

作为另一大关键步骤,运营维护无疑是运营团队的一项常规职能。考虑到零日漏洞可能引发的巨大威胁,运营团队必须给予关注;此外,运营团队还需要重视人为错误蔓延,包括使用DevSecOps通过IaC工具快速高效地保护企业自有基础设施。流程中的另一项重要因素,在于使用强大且持续性的监控工具,借此保证安全系统能够按预期形式运行。

规模扩展同样不容忽视。虚拟化技术的出现,意味着企业不再需要浪费资源来维护大型数据中心。相反,一旦发生任何威胁,企业也可以直接扩展IT基础设施规模以消化突发冲击。

以上只是DevSecOps实施中的一些基础步骤。根据项目的具体规模与复杂性,路线图可能还需要涵盖另外一些特定附加步骤。

DevSecOps挑战

当然,DevSecOps的实施也必然伴随着一系列挑战。

阻碍大部分企业转向DevSecOps的头号挑战,当数文化层面的抵触情绪,毕竟人更喜欢待在自己熟悉的舒适区内。另外,在传统软件开发模式当中,安全保障更多属于“马后炮”式的措施,聊胜于无而已。

此外,DevSecOps还强调将开发人员与安全专家统一起来,共同建立起协作环境。但这两大团队间总是存在一定程度的摩擦,甚至认定对方总在跟自己作对。这种观点导致二者“老死不相往来”,直接违背了DevSecOps的核心原则。只有改变这种两头,才能让DevSecOps文化思维在企业内发展成熟、开花结果。

另一大常见挑战,在于人们往往认定安全保障会拖慢工作速度、甚至阻碍创新尝试。为了满足现代业务需求,开发人员希望不断加快代码的交付速度。但是,安全团队的核心重点在于保障代码安全,而这两个截然不同的目标导致团队之间难以彼此理解、协同工作。

根据Cybersecurity Ventures发布的报告,到2021年全球网络安全职位空缺将多达350万个。由此可以推断,尽管安全漏洞与攻击事件一直在不断增加,但市场上仍然缺乏充足的网络安全工程师人才。为此,安全专家稀缺很可能成为中小型企业机构的巨大难题。

与开发及安全团队间的协作不同,运营与安全结合的复杂度往往更高。对于前两者,我们只需要向开发人员传授安全最佳实践,并引导他们与安全团队密切合作。虽然这一切确实会改变开发者的某些日常习惯,但总体来说变化不大。但在尝试引导运营团队与安全团队协作时,情况就完全不同了。当运营工程师发现任何异常时,他们想到的往往并不是安全漏洞。对他们来说,最大的隐患往往来自软件配置错误或者基础设施故障。但对安全团队来说,异常会让他们本能地意识到可能存在潜在漏洞。因此,运营工程师们必须重新调整自己对运营环境的分析方法。

DevSecOps的助益

DevSecOps最重要、也最明显的助益就是帮助提高整体安全性。如前所述,大家可以在管道的早期阶段发现漏洞,由此降低修复难度。而且由于持续监控到位,DevSecOps还能增强威胁搜寻能力。从商业角度来看,产品安全度越高、营销难度就越低。

从SDLC的起步阶段搜寻漏洞,意味着能够以更低成本将其修复。多个团队将聚集一处共同处理安全问题,由此改善问责能力。这种协作还有助于提出更加快速有效的安全响应策略,进而构建起更强大的安全设计模式。

DevSecOps还最大限度降低了安全瓶颈的出现频率。在运行安全检查之前,安全专家不必等待开发周期彻底完成。这两大因素进一步加快了产品交付速度。

DevSecOps还能够帮助企业更好地遵循行业标准法规。《通用数据保护条例》(GDPR)等法规要求人们以更谨慎的态度处理数据。DevSecOps则为管理人员提供更全面的合规要求印象,以框架的形式降低合规性难度。

小结

毫无疑问,DevSecOps将彻底改变企业的安全实现方式。但出于种种原因,包括缺乏对DevSecOps本质的正确认识、员工态度消极、预算有限以及术语定义含糊不清等,不少中小型企业对于DevSecOps仍然抱有怀疑态度。

但必须承认,DevSecOps完全有能力从技术及业务层面为企业带来巨大助益。虽然在起步阶段总会有些小问题,但从长远来看,DevSecOps的实施将帮助企业一步步脱胎换骨,助力迎来一条未曾设想的发展道路。

来源:至顶网软件与服务频道

0赞

好文章,需要你的鼓励

2021

06/24

17:24

分享

点赞

邮件订阅
白皮书