前 言
现如今,大部分企业已经在内部实现了 DevOps 实践。DevOps 为团队提供了交付可靠软件和快速更新的方法论。这种方法让团队更专注于质量而不是将时间浪费在运维上。然而,结果是,安全实践往往被留在交付流水线末端的安全专家手中。然后,由于意外往往出现在交付阶段的最后,所以使得特定的安全方法在交付过程中产生了不必要的支出。因此,团队没有足够的时间修复代码,并反复开始相同的流程,最终导致交付成本高且效率低。
随着大多数公司开始进行数字化转型,DevSecOps 已经变得越来越重要。随着这些计划的实施,公司正在向云端转移。这使得本地基础设施逐渐转移到公有云上。云服务提供商提供了具有成本效益、可扩展、高度可用和可靠的解决方案。然而,这些优势也伴随着新的安全挑战。
DevSecOps 将安全纳入 DevOps,作为 SDLC 的一个组成部分,而不是在软件开发几近完成后才开始考虑安全问题。它还将安全责任分配给团队成员,在于安全专家的协作中,团队可以实现一种“安全即代码(Security as code)”的文化,鼓励将安全与 SDLC 流水线中的其他组件放在同一位置对待。
什么是 DevSecOps ?
DevSecOps 是全栈式的,横跨整个 IT栈,包括网络、主机、服务器、云、移动端和应用安全。这些层都逐渐被各类软件替代,因此应用安全成为 DevSecOps 的关注点。DevSecOps 横跨整个软件开发生命周期,包括开发和运维。在开发中,安全的重点是识别和预防漏洞,而在运维中,监控和防御攻击是主要目标。
那么团队可以将 DevSecOps 实践和工具应用于非 DevOps 项目吗?答案是肯定的。如果您的团队目标是以最具成本效益的方式生产高度安全的软件,那么 DevSecOps 就是前进的方向。
实行 DevSecOps 的企业已经大受裨益。根据 Gartner 的数据,这些早起采用者的安全测试跟上频繁的应用程序更新的可能性要高出2.6倍,并且修复漏洞的时间减少了2倍。
借助 DevSecOps,开发、运维、测试和安全团队进行合作,并整合资源,以便在开发过程中尽早发现安全问题。开发也不会停滞不前,最终的结果是在更快、更有效的工作流程中创建更安全、更高质量的应用程序。
如果你是一名 IT 安全专业人员, DevSecOps 可以让你在谈判桌上拥有一席之地。你的团队不再被看作是一个沉重的枷锁,你们的意见将在开发之初就得到重视,你的组织将把你看作是推动安全集成的牵头人。
如果你是一名开发人员,你也会从 DevSecOps 中受益良多。因为对软件的安全性要求是不会消失的,如果只在最后一刻处理安全问题,那么只会拖累你的进度。安全是当今软件质量的一个重要组成部分,在开发阶段就开始注重软件安全,你的客户会为此感谢你。
DevSecOps 的5个要素
1、协作
协作的起点是在整个组织内建立一种安全责任共担的心态,同时得到领导层的支持。围绕着一个共同的目标,即在满足所有安全和合规要求的前提下,尽可能快地开发和发布高质量的产品,从而巩固合作。
安全团队从熟悉 DevOps 实践开始做好自己的工作,并将其整合到安全中。例如,频繁提供安全功能,并尽可能将安全任务自动化。反过来,开发人员也应该学习安全的最佳实践,对安全性的要求、风险意识和安全工具等。
2、沟通
开发人员和安全专家之间的沟通差距必须被弥合。安全专家需要用开发人员的术语来阐述控制的必要性和合规的好处。例如,在讨论安全风险时,以项目延迟和开发人员计划外的额外工作为例,将使解决这些风险的重要性深入人心。
开发人员应该清楚地了解他们身上的安全责任,这样他们就可以完全接受他们在一个更安全和合规的组织中的角色。这些责任包括意识到潜在的安全风险,并在编写代码时牢记安全的最佳实践。开发人员还应该准备好在整个开发过程中进行漏洞测试,以便在发现漏洞时及时进行修复。
3、自动化
自动化可能是一个成功的 DevSecOps 计划中最关键的组成部分。它可以让安全措施嵌入到开发过程中,并确保安全不会成为安全团队的负担。自动化的安全测试和分析可以集成到整个 CI/CD 流水线中,在不拖累创新和开发工作流程的情况下提供安全的软件。现在,开发人员和安全团队都很满意。
自动化还可以实现有价值的安全控制,如中断构建。这种安全故障保护机制是基于一个自动化的风险评分系统,当风险超过预先确定的阈值时就会发出警报。然后,所有的构建过程都会被冻结,直到开发人员补救安全问题。一旦安全问题被修复,开发人员可以继续完成构建并交付应用程序。
4、工具与架构安全
安全的软件始于安全的 DevOps 环境。保护工具、访问和架构在任何 DevOps 系统中都是至关重要的。安全团队应该带头选择和检查所有系统安全工具的配置,以确保在这些系统被批准广泛使用前已经配置好合适的功能。
识别和访问管理应该被认真对待。安全团队应该控制对 DevOps 架构和数据的访问权限,在整个开发流水线中保护凭证的使用。多因素认证(MFA)、最低访问权限以及对高级权限的临时访问都是你可以利用的访问控制策略。此外,CI/CD 流水线应该被隔离,以限制横向移动,所有不必要的访问 DevOps 工具的账户应该被消除。
有了 DevSecOps,安全和合规性控制被纳入基础设施,以涵盖所有环境,包括云。所有工作站和服务器都要接受定期的安全监控、漏洞扫描和补丁。可以使用自动化工具来扫描所有代码,以确保在检查代码库时没有遗漏。另外,所有新的虚拟机和容器都会自动接受正确配置的控制,以帮助抵御自动重建。集中的存储系统存放 DevOps 工具和密钥,所有这些都受到加密和多因素认证(MFA)的保护。
5、测试
安全测试是作为产品发布前的最后一步来运行的。理想情况下,测试应该贯穿整个开发过程。Keatron Evans,Infosec Skills Infosec Institute 的作者和顾问,解释说:“传统上,应用程序在完成开发后再进行测试,但如果开发人员在自动、持续的基础上进行测试,会更有效。开发者应该能够在整个开发过程中进行基本的 OWASP 十大测试,而不是测试一个完全构建完成的应用程序,因为前者将可以解决一半的网络安全问题。”
为了保持安全与发展同步,自动化测试的注入是至关重要的。自动化可以帮助执行简单的流程,如在代码被检查到代码库之前扫描代码的密钥,以确保密码没有被记录在事件日志中,以及搜索应用程序的恶意代码。
有效的测试方案包括静态应用安全测试(SAST)、动态应用安全测试(DAST)和不太频繁但同样重要的技术,如渗透测试、Red Teaming 和 Threat Modeling。后者可能很有价值,因为它们从黑客的角度接近代码,而不破坏生产环境。现在,许多组织通过“Bug 赏金”计划来激励进行彻底的测试,奖励发现潜在的安全问题。
如何将 DevSecOps 引入企业?
过渡到 DevSecOps 方法需要时间。为了确保整个组织的认同,建议采取循序渐进的方式。以下是引入 DevSecOps 计划时需要记住的一些关键点:
- 在组织内部建立一种以安全为中心的文化,强调安全是组织成员共同的责任。
- 寻找方法在整个开发过程中尽早整合自动化安全测试。
- 通过安全意识培训来引导开发人员了解安全威胁、安全编码要求和工具。
- 让开发人员接触当前的黑客技术,教他们像黑客一样思考和攻击代码。
- 让安全团队提供强大的渗透测试、红队练习和威胁建模,以积极测试代码。
- 在共享的跟踪系统中监控安全问题,以便在所有部门中获得最大的可见度。
- 提供相关的指标,以证明随着时间的推移DevSecOps 项目在持续改进并提供价值。
- 认识到开发人员需要时间来完全改变他们的思维方式和习惯。在日常活动中继续强调安全的概念并提升安全意识。