左移安全是什么,为什么和如何

我们生活在一个网络安全危机的时代,左倾安全是解决方案的一部分。不仅攻击频率在增加,攻击的平均次数也增加了到2021年将超过15%美国的发展轨迹没有停止的迹象,但威胁也变得越来越复杂。威胁行为者正在利用更复杂的攻击方法,例如社会工程攻击,其数量增加了270%2021年,部署“隐形病毒旨在逃避传统的检测方法。

然而,这并不意味着企业必须在面对规模和强度都破纪录的网络安全攻击时袖手旁观。他们可以通过将安全“向左”转移来反击。通过这样做,他们不仅可以更早地发现风险,而且还可以在减轻威胁方面投入更少的时间和资源。2022世界杯阿根廷预选赛赛程

请继续阅读本文,全面了解左移安全性的含义、它的价值以及如何在实践中左移安全性的示例。

什么是左移安全?

左移安全是一种应用程序安全方法,强调在软件开发生命周期中尽早检测和减轻安全问题。

要理解这意味着什么,您必须首先了解软件开发生命周期(有时也称为软件交付生命周期或软件开发管道)在DevOps中是如何工作的。通常,团队开发的每个新应用程序或应用程序版本都要经过一系列阶段:

  • 编码,即编写单个特性或功能单元的代码。
  • 集成,在此期间,将功能或更改集成到主应用程序代码库中。
  • 建筑这意味着将源代码和依赖项编译成可以执行的二进制文件的过程。
  • 测试,当工程师运行测试以验证应用程序是否满足性能要求时。
  • 部署,或者将应用程序放入生产环境的过程。
  • 运行时,这是应用程序在生产环境中运行时发生的情况。

来源://www.si-fil.com/blog/shift-left-security-with-golang-in-vs-code/

传统上,安全性测试发生在交付生命周期的测试阶段。有时,直到应用程序已经部署到生产环境中,它们才会发生。然而,在左倾的安全方法下,DevOps团队尽可能早地开始安全测试——理想情况下,只要编写了新的源代码。

例如,在左移方法下,您可以在编译和分级代码之前扫描源代码以识别应用程序依赖项。有了这些信息,您就可以确定是否引入了任何依赖项易受攻击的开源组件到代码库中。如果不加以解决,当您的应用程序部署到生产环境中时,这些漏洞将成为一个活跃的安全威胁。

另一个例子是,左移策略可以帮助您检测错误配置的访问控制,这些访问控制会造成安全风险,因为它们会削弱应用程序的安全状态。如果在将应用部署到生产环境之前没有更新访问控制,那么就会将配置风险引入到生产环境中。

转移安全性并不意味着您不再需要在生产环境中执行安全性监视。当然,您仍然应该尽一切努力检测生产环境中的威胁。但是,当您将安全性转移到左边时,您还需要在开发生命周期的早期投入大量资金来检测风险和威胁。在开发生命周期中,安全问题越早得到解决,企业的成本效益就越高。

左移的安全概念反映了这一点左移监控和测试这早于左倾安全理念的出现。左移监控和测试包括在软件开发生命周期的早期尽可能地运行性能和可靠性测试,而左移测试强调在开发生命周期的早期进行安全性测试。

左移安全的主要好处

采用左倾安全策略的组织可以获得以下几个关键好处:

及早发现风险

也许最明显的事实是左移安全帮助团队及早发现风险。通过扩展,它为工程师提供了更多的反应时间,同时也降低了风险或漏洞造成的威胁的严重性。

如果你在生产中的应用中发现了一个零日漏洞,你需要立即采取行动解决它,因为它随时都可能被利用。在这种情况下,解决方案通常意味着遵循阻力最小的路径(例如关闭应用程序,直到您可以更新它以修复漏洞),而不是应用破坏性较小的缓解措施。但是,如果您在开发过程中检测到问题,您就可以在对用户造成最小干扰的情况下解决它,而不必将其视为危机情况。

最小化生产环境中的威胁

在开发生命周期的早期检测风险和威胁还可以显著减少威胁参与者利用应用程序中的风险或漏洞的机会。

尽管攻击者有可能破坏开发和测试应用程序的预生产环境(例如,攻击期间)SolarWinds攻击),在生产环境中受到主动攻击的风险要高得多。在生产环境中,应用程序暴露给最终用户,在大多数情况下,暴露给Internet,因此威胁参与者在生产环境中发现和利用漏洞要比在开发或测试环境中容易得多,开发或测试环境通常不能从Internet直接访问。

更快、更经济地修复威胁

一般来说,越早检测到安全风险或威胁,处理它们所花费的时间和精力就越少。

例如,如果在编译代码并将其转移到测试之前捕获了安全问题,则可以简单地更新代码。您将不会浪费时间来构建和测试您最终会废弃的应用程序版本。相反,如果你在生产之前没有发现问题,你就必须确定威胁的根本原因,更新源代码,重新构建应用程序,测试更新版本,最后部署它——这个过程可能需要数周时间,而在应用程序构建之前更新源代码可能只需要几分钟,如果漏洞很容易解决的话。

而且,由于时间就是金钱,更快地缓解问题不仅节省了开发人员的工作,还降低了业务成本。当开发人员花更多的时间来构建新的应用程序和特性,而花更少的时间来修复安全漏洞时,企业可以利用编码人员做更多的事情。

减少延误的风险

在检测到安全问题之前,您让代码在软件交付管道中移动得越深,该问题导致应用程序发布延迟的风险就越高。

同样,当应用程序更新仍然只是源代码时检测到的安全问题通常可以快速轻松地纠正。但是,如果你等到应用程序已经发布——或者更糟的是,等到它已经投入生产——修复问题就会变成一个更长的过程,大大增加了你的团队无法按照承诺的时间表交付更新后的应用程序的风险。

改进开发人员和安全团队之间的协作

更早地检测安全风险和威胁,当它们更容易修复并且不会造成危机情况时,还有助于促进开发人员和安全团队之间更顺畅的协作。当在源代码中检测到问题时,每个小组都可以轻松地退后一步,评估问题并协作解决问题。

另一方面,如果直到生产阶段才发现安全问题,则很可能导致开发人员和安全工程师相互指责。开发人员会责怪安全部门没有发现问题,而安全部门则会责怪开发人员引入了问题。这不是合作的秘诀。

左移安全vs. DevSecOps

左移安全性使得开发人员和安全团队更容易协作,这也是为什么左移安全性经常出现在讨论的上下文中的原因之一DevSecOps-鼓励开发人员、安全团队和IT运营团队之间积极合作的概念。

然而,这并不意味着左倾的安全性和DevSecOps意味着同一件事。DevSecOps是一种理念或目标,组织可以用它来指导他们的安全方法。相比之下,左移安全是一种特定的策略。

将安全向左转移是帮助实现DevSecOps的一个好方法,但是接受向左转移的安全并不意味着你成为一个DevSecOps组织。DevSecOps需要额外的实践,例如在安全团队和开发团队之间保持积极的沟通渠道,并确保开发人员接受足够的培训,以了解现代应用程序面临的安全问题。

左移安全的实践:两个例子

为了了解左移安全性在实践中的情况,让我们考虑两个左移安全性如何帮助团队避免现实世界中的危险情况的示例。

检测容器映像中的漏洞

首先,考虑这样一个场景:您的团队部署了一个基于Ubuntu的容器映像。容器是用Dockerfile构建的,看起来像这样:

从ubuntu:20.04运行apt-get update && \ apt-get install -y python3 && \ apt-get clean CMD ["some-app"]

像所有的操作系统一样,Ubuntu也有很多已知的漏洞在其网站上披露.检测这些漏洞的传统方法是将容器部署到生产环境中,然后扫描生产环境以确定是否有任何易受攻击的软件正在运行。

但是,在左移策略下,您可以部署在构建容器映像之前扫描Dockerfile的工具。这些工具将检测Dockerfile是否使用Ubuntu 20.04作为基本镜像。然后,他们将确定Ubuntu 20.04是否存在任何尚未修补的已知漏洞。如果是,您可以通过使用不同的基本映像来解决威胁,或者通过向Dockerfile添加命令来手动禁用或更新容器中的易受攻击组件来进行这些更改。

处理弱访问控制

作为左移安全的第二个例子,假设你的团队计划部署一个Kubernetes pod,定义如下:

apiVersion: extensions/v1beta1 kind:部署元数据:name: my-app spec: template: spec: containers: -image: my-image name: my-app…securityContext: allowPrivilegeEscalation: false runAsUser: 0

文件的最后一行runAsUser: 0-告诉pod作为UID为0的用户运行。如果您非常了解Linux UID,就会知道UID 0是为根用户准备的。这个pod会以根用户运行,也就是从安全角度来看是有风险的因为当容器中的进程具有根权限时,一些漏洞更容易被利用(或升级为更大的攻击)。

如果对安全性采取左移方法,则可以在运行pod部署文件之前扫描它,以便快速捕获问题,然后只需通过更改runAsUser配置。但是,如果您不在开发生命周期的早期扫描部署,那么在容器已经进入生产环境之前,您可能不会知道您正在以root身份运行容器。另外,此时检测问题要困难得多,因为没有从外部确定容器内部使用的UID的简单方法。

如何转移安全向左

左移安全是一种策略,而不是特定的工具或实践。它可以通过多种方式实现。

然而,一般来说,将左移安全性付诸实践意味着部署可以在代码流经应用程序交付管道时测试和验证其安全性的安全工具。主要工具类别的例子包括:

  • 软件组合分析(SCA): SCA工具发现源代码中的漏洞,例如不安全的开源依赖项。
  • 静态应用安全测试(SAST)SAST工具还可以识别源代码中的一些风险,比如缺乏输入验证。
  • 动态应用安全测试(DAST):动态测试可用于在编译应用程序并在测试环境中运行后发现安全风险。

这些工具可以独立部署。但更简单的方法是利用SDLC安全自动化平台在生命周期的每个阶段自动保护应用程序,确保DevOps团队能够尽可能早地检测到尽可能多的风险。

及早发现是关键

将安全向左转移不会自动保护组织免受当今面临的许多网络安全威胁和风险。但它将使这些威胁和风险在成为针对生产工作负载的攻击载体之前更容易被检测到。此外,早期检测还可以更快、更简单地缓解安全问题。对于开发人员、安全团队和企业来说,这是一个三赢的局面。