DevOps 环境安全态势

已完成

随着对源代码管理系统和持续集成/持续交付管道的网络攻击的增加,保护 DevOps 平台免受 DevOps 威胁矩阵中识别的各种威胁至关重要。 此类网络攻击可以启用代码注入、特权提升和数据外泄,可能会造成广泛影响。

DevOps 态势管理是 Microsoft Defender for Cloud 中的一项功能,特点有:

  • 提供有关整个软件供应链生命周期安全状况的见解。
  • 使用高级扫描程序进行深入评估。
  • 涵盖组织、管道和存储库的各种资源。
  • 允许客户通过发现并执行所提供的建议来减少攻击面。

DevOps 扫描程序

为了提供调查结果,DevOps 态势管理使用 DevOps 扫描程序通过针对安全配置和访问控制运行检查,以此识别源代码管理和持续集成/持续交付管道中的弱点。

Microsoft 内部使用 Azure DevOps 和 GitHub 扫描程序来识别与 DevOps 资源相关的风险,减少攻击面并增强公司 DevOps 系统。

连接 DevOps 环境后,Defender for Cloud 会自动配置这些扫描程序,在多个 DevOps 资源中每 24 小时执行一次定期扫描,包括:

  • 内部版本
  • 安全文件
  • 变量组
  • 服务连接
  • 组织
  • 存储库

DevOps 威胁矩阵风险降低

DevOps 态势管理可帮助组织发现和修正 DevOps 平台中的有害错误配置。 这会导致可复原的零信任 DevOps 环境,该环境针对 DevOps 威胁矩阵中定义的一系列威胁进行了强化。 主要态势管理控制措施包括:

  • 作用域内机密访问:通过确保每个管道仅有权访问其功能所需的机密,尽量减少敏感信息的泄露,并减少未经授权的访问、数据泄漏和横向移动的风险。
  • 自托管运行程序和高权限的限制:通过避免自托管运行程序并确保管道权限默认为只读,防止未经授权的执行和潜在升级。
  • 增强的分支保护:通过强制实施分支保护规则并防止恶意代码注入,维护代码的完整性。
  • 优化的权限和安全存储库:通过跟踪最低基本权限和启用存储库的机密推送保护,减少未经授权进行访问和修改的风险。

DevOps 威胁矩阵

我们开发 DevOps 威胁矩阵的目标是构建一个全面的知识库,防御者可使用此库来跟踪和建立针对相关攻击技术的防御。 以 MITRE ATT&CK 框架为基础,我们收集了与 DevOps 环境相关的技术和攻击途径,还创建了专门针对 DevOps 攻击方法的矩阵。

值得注意的是,必须从 DevOps 的角度看待此矩阵中的战术。 例如,运行 Windows 或 Linux OS 的虚拟机中的执行技术与 DevOps 管道中的执行技术不同。 在 Linux 示例中,执行意味着在 OS 中运行代码。 当我们谈论 DevOps 环境时,这意味着在管道或 DevOps 资源中运行代码。 除了使用此威胁矩阵对攻击和相应的防御方法进行分类外,防御者还可与红队合作,不断测试假设并寻找新的潜在攻击技术。

MITRE ATT&CK 定义

MITRE ATT&CK 矩阵是一个可公开访问的知识库,可用于了解攻击者在网络攻击中使用的各种策略和技术。

知识库分为多个类别:预攻击、初始访问、执行、暂留、特权提升、防御规避、凭据访问、发现、横向移动、收集、渗透以及命令和控制。

策略 (T) 表示 ATT&CK 技术或子技术的使用“原因”。 这是攻击者的策略目标:执行操作的原因。 例如,攻击者可能想要实现凭据访问。

技术 (T) 表示攻击者“如何”通过执行操作来实现策略目标。 例如,攻击者可能会转储凭据来实现凭据访问。

ATT&CK 中的常识 (CK) 表示众所周知的事情,实质上是攻击者所用策略和技术的记录在案的惯例运作方式。

初始访问

初始访问战术是指攻击者可能用来获取 DevOps 资源(存储库、管道和依赖项)的访问权限的技术。 以下技术可能是后续行动的先决条件:

源代码管理 (SCM) 身份验证 - 如果有身份验证方法来管理组织的源代码,则有访问权限。 它可以是个人访问令牌 (PAT)、SSH 密钥,也可以是任何其他允许的身份验证凭据。 向组织发动网络钓鱼攻击就是攻击者可用来实现此技术的一种方法。

持续集成 (CI) 和持续交付 (CD) 服务身份验证 - 类似于 SCM 身份验证,攻击者可以利用对 CI/CD 服务的身份验证来攻击组织的 DevOps。

组织的公共存储库 - 访问组织中配置有 CI/CD 功能的公共存储库。 根据组织的配置,这些存储库可能能够在拉取请求 (PR) 创建后触发管道运行。

终结点泄露 - 通过现有漏洞,攻击者可以利用遭到入侵的开发人员的工作站,从而获得访问组织的 SCM、注册表或开发人员有权访问的任何其他资源的权限。

配置的 Webhook - 如果组织配置了 Webhook,攻击者可以将它用作进入组织网络的初始访问方法,使用 SCM 本身来触发到该网络的请求。 这可能会让攻击者能够访问不打算公开,或者正在运行专用网络中易受攻击的旧软件版本的服务。

执行

执行战术是指恶意攻击者可能用来获取对管道资源(管道本身或部署资源)的执行访问权限的技术。 此部分中的一些技术包含有关执行它们的不同方法的说明,我们也将这些方法称为子技术:

中毒管道执行 (PPE) - 是指攻击者可将代码注入到组织的存储库,导致在存储库的 CI/CD 系统中执行代码的技术。 有不同的子技术用来实现代码执行:

  • 直接 PPE (d-PPE) - 在此场景中,攻击者可以直接修改存储库内部的配置文件。 由于管道由新的拉取请求触发并根据配置文件运行,因此攻击者可以将恶意命令注入到配置文件中,这些命令在管道中执行。
  • 间接 PPE (i-PPE) - 在此场景中,攻击者没法直接更改配置文件,或者触发时不会考虑这些更改。 在这些情况下,攻击者可以感染管道使用的脚本,以便运行代码,例如生成文件、测试脚本、生成脚本等。
  • 公共 PPE - 在此场景中,管道由开源项目触发。 在这些情况下,攻击者可以在公共存储库中使用 d-PPE 或 i-PPE 来感染管道。

依赖项篡改 - 是指攻击者可以通过将恶意代码注入到存储库的依赖项,在 DevOps 环境或生产环境中执行代码的技术。 这样,当依赖项被下载时,会执行恶意代码。 可用于实现代码执行的一些子技术包括:

  • 公共依赖项混淆 - 攻击者发布与专用包同名的公共恶意包的技术。 在此情况下,由于包控制机制中的包搜索通常先在公共存储库中查找,所以会下载恶意包。
  • 公共包劫持(“存储库劫持”) - 通过控制维护人员帐户(例如通过利用 GitHub 用户重命名功能)来劫持公共包。
  • 误植域名 - 发布名称与已知公共包类似的恶意包。 这样,攻击者可以迷惑用户下载恶意包而不是所需的包。

DevOps 资源损害 - 管道的核心是一组执行 CI/CD 代理的计算资源,它还包括其他软件。 攻击者可以利用 OS、代理代码、VM 中安装的其他软件或网络中的其他设备中的漏洞来获取访问管道的权限,从而攻击这些资源。

控制通用注册表 - 攻击者可以控制组织使用的注册表,致使管道 VM 或生产 VM 执行恶意映像或包。

持久性

持久性战术由攻击者可能用来维持对受害者环境的访问权限的不同技术组成:

存储库中的更改 - 攻击者可以使用管道内部的自动令牌来访问代码并将代码推送到存储库中(假设自动令牌有足够的权限执行此操作)。 他们可以通过下面几种子技术实现持久化:

  • 更改/添加代码中的脚本 - 我们可以更改一些初始化脚本/添加新脚本,这样它们会为攻击者下载后门程序/起始代码,所以每次管道执行这些脚本时,攻击者的代码会一并执行。
  • 更改管道配置 - 我们可以在管道中添加新步骤,从而在继续生成过程之前,先将攻击者控制的脚本下载到管道中。
  • 更改依赖项位置的配置 - 目的是使用攻击者控制的包。

注入项目 - 一些 CI 环境具有创建要在不同管道执行之间共享的项目的功能。 例如,在 GitHub 中,我们可以存储项目,并使用 GitHub 操作从管道配置中下载它们。

修改注册表中的映像 - 如果管道有权访问映像注册表(例如,在生成完成后将映像写回注册表),那么攻击者可以在注册表中修改和植入恶意映像,这些映像将继续由用户容器执行。

创建服务凭据 - 恶意攻击者可以利用他们在环境中已经拥有的访问权限并创建新的凭据,以便在初始访问方法丢失时使用。 为此,可以创建到 SCM、应用程序本身、云资源等内容的访问令牌。

权限提升

攻击者使用特权提升技术来提升在受害者环境中的特权,针对已经泄露的资源获得更高的特权:

专用存储库中的机密 - 利用已获得的初始访问方法,攻击者可以扫描专用存储库中的隐藏机密。 在专用存储库中查找隐藏机密的可能性高于公共存储库,因为从开发人员的角度来看,无法从组织外部无法访问专用存储库。

提交/推送到受保护的分支 - 管道有权访问可能配置有宽松访问权限的存储库,这可以允许将代码直接推送到受保护的分支,使得攻击者能够直接将代码注入到重要分支,而不用团队干预。

元数据服务中的证书和标识 - 攻击者在云托管管道上运行后,攻击者可以从管道内部访问元数据服务,并从这些服务中提取证书(需要高特权)和标识。

凭据访问

攻击者使用凭据访问技术来窃取凭据:

用户凭据 - 如果客户需要从 CI 管道访问外部服务(例如外部数据库),这些凭据驻留在管道中(可由 CI 机密、环境变量等设置),并且可由攻击者访问。

服务凭据 - 在某些情况下,攻击者可以找到服务凭据,例如服务主体名称 (SPN)、共享访问签名 (SAS) 令牌等,从而可以直接从管道访问其他服务。

横向移动

横向移动战术是指攻击者用来在不同资源中移动的技术。 在 CI/CD 环境中,这可能是指移动到部署资源、生成项目和注册表或新的目标。

入侵生成工件 - 与其他供应链攻击一样,攻击者控制 CI 管道后,就可以干扰生成工件。 这样,恶意代码就可以在生成完成之前注入到生成材料中,进而将恶意功能注入生成工件。

注册表注入 - 如果管道配置了生成工件的注册表,攻击者可能会使用恶意映像感染注册表,这些映像随后会下载并由使用此注册表的容器执行。

传播到部署资源 - 如果管道配置了部署资源访问权限,那么攻击者对这些资源具有相同的访问权限,这使得攻击者能够传播。 这可能会导致代码执行、数据外泄等,具体取决于授予管道的权限。

防御规避

防御规避技术可以供攻击者用来绕过 DevOps 环境中使用的防御,还能使攻击继续而不被察觉:

服务日志操作 - 日志记录使防御者能够检测其环境中的攻击。 在环境内(例如在生成管道中)运行的攻击者可能会更改日志,防止防御者察觉到有攻击。 这类似于攻击者更改 Linux 计算机上的历史记录日志,阻止任何观察者看到攻击者执行的命令。

编译操作 - 如果攻击者不希望在 SCM 服务中留下任何痕迹,攻击者可能会更改编译过程来注入恶意代码。 这可通过多种方式完成:

  • 动态更改代码 - 刚好在生成过程之前更改代码,而不是在存储库中更改它并在其中留下痕迹。
  • 篡改的编译器 - 在生成环境中更改编译器来引入恶意代码,在该过程开始之前不留下任何痕迹。

重新配置分支保护 - 分支保护工具让组织能够配置批准 PR/提交项放入分支之前的步骤。 攻击者拥有管理员权限后,他们可能会更改这些配置,并在没有任何用户干预的情况下将代码引入分支。

影响

影响战术是指攻击者可以用来利用 CI/CD 资源访问权限达到恶意目的的技术,它不是攻击中的另一个步骤,因为这些技术可能会有干扰且容易被检测到:

分布式拒绝服务 (DDoS) - 攻击者可以使用他们获得访问权限的计算资源来对外部目标发动分布式拒绝服务 (DDoS) 攻击。

加密挖掘 - 计算资源可用于攻击者控制的加密挖掘。

本地拒绝服务 (DoS) - 攻击者在 CI 管道上运行后,可以通过关闭代理、重新启动或重载 VM,从所述管道向客户发动拒绝服务攻击。

资源删除 - 有权访问资源(云资源、存储库等)的攻击者可以永久删除资源来实施拒绝服务。

外泄

渗透战术是指攻击者可以用来将受害者环境中的敏感数据泄露出去的不同技术:

克隆专用存储库 - 攻击者获得 CI 管道的访问权限后,还能够访问专用存储库(例如,可以在 GitHub 中使用 GITHUB_TOKEN),因此可以克隆和访问代码,从而获得专用 IP 的访问权限。

管道日志 - 攻击者可以访问管道执行日志、查看访问历史记录、生成步骤等。这些日志可能包含有关生成和部署的敏感信息,在某些情况下,甚至包含服务、用户帐户等的凭据。

泄露生产资源中的数据 - 如果管道可以访问生产资源,攻击者也能够访问这些资源。 所以,他们可以滥用这种访问权限来泄露生产数据。

DevOps 态势管理建议

当 DevOps 扫描程序发现源代码管理系统和持续集成/持续交付管道中的安全最佳做法出现偏差时,Defender for Cloud 会输出精确且可行的建议。 这些建议具有以下优势:

  • 增强可见性:深入了解 DevOps 环境的安全态势,确保全面掌握任何现有漏洞。 确定缺少的分支保护规则、特权提升风险和不安全的连接,以防止攻击。
  • 基于优先级的操作:首先解决最关键的漏洞,按严重性筛选结果,从而更有效地花费资源和精力。
  • 攻击面减少:解决突出的安全漏洞,大幅减少易受攻击的攻击面,从而强化针对潜在威胁的防御。
  • 实时通知:能够与工作流自动化集成,以便在安全配置发生更改时接收即时警报,从而允许提示操作并确保持续符合安全协议。