安全控制 v3:DevOps 安全性

DevOps 安全性涵盖 DevOps 过程中与安全工程和运营相关的控制,包括在部署阶段之前部署关键安全检查(如静态应用安全测试、漏洞管理),以确保整个 DevOps 流程的安全;它还包括常见主题,例如威胁建模和软件供应安全。

DS-1:执行威胁建模

CIS 控制 v8 ID NIST SP 800-53 r4 ID PCI-DSS ID v3.2.1
16.10、16.14 SA-15 6.5、12.2

安全原则:执行威胁建模,以识别潜在威胁并枚举缓解威胁的控制。 确保威胁建模具有以下用途:

  • 在生产运行时阶段保护应用程序和服务。
  • 保护生成工件、基础 CI/CD 管道和其他用于生成、测试和部署的工具环境。

威胁建模至少应包括以下几方面:

  • 定义应用程序的安全要求。 确保在威胁建模中充分满足这些要求。
  • 分析应用程序组件、数据连接及其关系。 确保此分析还包括应用程序范围之外的上游和下游连接。
  • 列出应用程序组件、数据连接以及上游和下游服务可能面临的潜在威胁和攻击途径。
  • 确定可用于缓解枚举威胁的适用安全控制,并识别可能需要制定额外处理计划的任何控制漏洞(例如安全漏洞)。
  • 枚举和设计可以缓解所识别漏洞风险的控制。

Azure 指南:使用威胁建模工具(例如嵌入了 Azure 威胁模型模板的 Microsoft 威胁建模工具)来推动威胁建模过程。 使用 STRIDE 模型枚举内部和外部的威胁,并确定合适的控制。 确保威胁建模过程包括 DevOps 过程中的威胁场景,例如采用错误配置的访问控制策略通过不安全的生成工件存储库注入恶意代码。

如果所用的威胁建模工具不合适,至少应使用基于问卷的威胁建模过程来识别威胁。

确保在应用程序或威胁态势发生重大安全影响变化时,记录并更新威胁建模或分析结果。

实现和其他上下文:

客户安全利益干系人(了解详细信息):

DS-2:确保软件供应链安全性

CIS 控制 v8 ID NIST SP 800-53 r4 ID PCI-DSS ID v3.2.1
16.4、16.6、16.11 SA-12、SA-15 6.3、6.5

安全原则:确保企业的 SDLC(软件开发生命周期)或流程包括一组安全控制,用于管理应用程序依赖的内部和第三方软件组件(包括专有软件和开源软件)。 定义限制条件,防止将易受攻击组件或恶意组件集成和部署到环境中。

软件供应链安全控制至少应包括以下几方面:

  • 确定开发、生成、集成和部署阶段所需的上游依赖项。
  • 当上游有可用的修补程序时,对内部和第三方软件组件进行盘存和跟踪来发现已知的漏洞。
  • 使用静态和动态应用程序测试评估软件组件中的漏洞和恶意软件,以发现未知的漏洞。
  • 确保使用适当的方法缓解漏洞和恶意软件的威胁。 这可能包括源代码本地修复或上游修复、功能排除和/或应用补偿控制(如果直接缓解不可用)。

如果在生产环境中使用第三方闭源组件,则可能无法看见其安全状况。 应考虑其他控制,例如访问控制、网络隔离和终结点安全性,以便在出现与组件相关的恶意活动或漏洞时将影响降至最低。

Azure 指南:对于 GitHub 平台,通过 GitHub 高级安全或 GitHub 原生功能中的以下功能或工具确保软件供应链的安全性:

  • 通过 Advisory Database 使用依赖项关系图扫描、盘存和识别你项目的所有依赖项和相关漏洞。
  • 使用 Dependabot 确保跟踪和修正易受攻击的依赖项,并确保存储库自动与其所依赖的包和应用程序的最新版本保持一致。
  • 从外部获取代码时,使用 GitHub 本机代码扫描功能来扫描源代码。
  • 使用 Azure Defender for Cloud 在 CI/CD 工作流中集成对容器映像的漏洞评估。

对于 Azure DevOps,可使用第三方扩展实现类似的控制,用于盘存、分析和修正第三方软件组件及其漏洞。

实现和其他上下文:

客户安全利益干系人(了解详细信息):

DS-3:安全 DevOps 基础结构

CIS 控制 v8 ID NIST SP 800-53 r4 ID PCI-DSS ID v3.2.1
16.7 CM-2、CM-6、AC-2、AC-3、AC-6 2.2、6.3、7.1

安全原则:确保 DevOps 基础结构和管道遵循各环境(包括生成、测试和生产阶段)中的最佳安全做法。 这通常包括以下范围的安全控制:

  • 用于存储源代码、生成的包和映像、项目生成工件和业务数据的生成工件存储库。
  • 托管 CI/CD 管道的服务器、服务和工具。
  • CI/CD 管道配置。

Azure 指南:在将 Azure 安全基准应用于 DevOps 基础结构安全控制时,确定以下控制的优先级:

  • 保护生成工件与基础环境,确保 CI/CD 管道不会成为插入恶意代码的渠道。 例如,查看 CI/CD 管道以识别 Azure DevOps 的核心区域(如组织、项目、用户、管道 (生成 & 发布) 、连接和生成代理)中的任何错误配置,以识别任何错误配置,例如开放访问、弱身份验证、不安全的连接设置等。 对于 GitHub,使用类似的控制保护组织权限级别
  • 在管道中配置 Azure AD、本机服务和 CI/CD 工具中的标识/角色权限和权利策略,从而确保对管道的更改已获得授权。
  • 使用 Azure 托管标识、即时访问等功能,避免向开发人员或测试人员等个人帐户提供永久性“持续”特权访问。
  • 从 CI/CD 工作流作业中使用的代码和脚本中删除密钥、凭据和机密,并将其保存在密钥存储或 Azure Key Vault 中。
  • 如果运行自托管生成/部署代理,请遵循 Azure 安全基准控制(包括网络安全、状况和漏洞管理以及终结点安全性)以保护环境。

实现和其他上下文:

客户安全利益干系人(了解详细信息):

DS-4:将静态应用程序安全测试集成到 DevOps 管道

CIS 控制 v8 ID NIST SP 800-53 r4 ID PCI-DSS ID v3.2.1
16.12 SA-11 6.3、6.5

安全原则:确保静态应用程序安全测试 (SAST) 是 CI/CD 工作流程中限制控制的一部分。 可根据测试结果设置限制,防止易受攻击的包提交到存储库、生成到包中或部署到生产中。

Azure 指南:将 SAST 集成到管道中,以便可以在 CI/CD 工作流中自动扫描源代码。 Azure DevOps 管道或 GitHub 可将以下工具和第三方 SAST 工具集成到工作流中。

  • GitHub CodeQL(用于源代码分析)。
  • Microsoft BinSkim Microsoft BinSkim Binary Analyzer(用于 Windows 和 * nix 二进制分析)。
  • Azure DevOps 凭据扫描程序和 GitHub 本机机密扫描(用于在源代码中进行凭据扫描)。

实现和其他上下文:

客户安全利益干系人(了解详细信息

DS-5:将动态应用程序安全测试集成到 DevOps 管道

CIS 控制 v8 ID NIST SP 800-53 r4 ID PCI-DSS ID v3.2.1
16.12 SA-11 6.3、6.5

安全原则:确保动态应用程序安全测试 (DAST) 是 CI/CD 工作流程中限制控制的一部分。 可根据测试结果设置限制,防止漏洞生成到包中或部署到生产中。

Azure 指南:将 DAST 集成到管道中,以便可以在 Azure DevOps 或 GitHub 中设置的 CI/CD 工作流中自动测试运行时应用程序。 自动化渗透测试(包含手动辅助验证)也应是 DAST 的一部分。

Azure DevOps 管道或 GitHub 支持将第三方 DAST 工具集成到 CI/CD 工作流。

实现和其他上下文:

客户安全利益干系人(了解详细信息):

DS-6:在整个 DevOps 生命周期内加强工作负载的安全性

CIS 控制 v8 ID NIST SP 800-53 r4 ID PCI-DSS ID v3.2.1
7.5、7.6、7.7、16.1、16.7 CM-2、CM-6、AC-2、AC-3、AC-6 6.1、6.2、6.3

安全原则:确保在开发、测试和部署阶段的整个生命周期内保护工作负载。 使用 Azure 安全基准评估可以在默认情况下设置为护栏或在部署阶段之前左移的控制(例如网络安全、标识管理、特权访问等)。 具体而言,请确保在 DevOps 过程中实现以下控制:

  • 在 CI/CD 工作流、基础结构管理(基础结构即代码)和测试中使用 Azure 或第三方工具实现自动部署,以减少人为错误和攻击面。
  • 确保 VM、容器映像和其他生成工件免受恶意操纵。
  • 在 CI/CD 工作流中进行部署之前,扫描工作负载生成工件(也就是容器映像、依赖项、SAST 和 DAST 扫描)
  • 在生产环境中部署漏洞评估和威胁检测功能,并在运行时持续使用这些功能。

Azure 指南:Azure VM 指南:

  • 使用 Azure 共享映像库共享和控制组织内不同用户、服务主体或 AD 组对映像的访问。 请使用 Azure 基于角色的访问控制 (Azure RBAC) 来确保只有授权用户才能访问自定义映像。
  • 定义 VM 的安全配置基线,以消除不必要的凭据、权限和包。 通过自定义映像、Azure 资源管理器模板和/或 Azure Policy 来宾配置来部署和强制实施这些配置基线。

Azure 容器服务指南:

  • 使用 Azure 容器注册表 (ACR) 创建专用容器注册表,在该注册表中可以通过 Azure RBAC 限制精细访问,这样只有授权服务和帐户才能访问专用注册表中的容器。
  • 使用 Defender for Azure Container Registry 对专用 Azure 容器注册表中的映像进行漏洞评估。 此外,还可用 Azure Defender for Cloud 将容器映像扫描集成到 CI/CD 工作流中。

对于 Azure 无服务器服务,请采用类似的控制,确保安全控制左移到部署之前的阶段。

实现和其他上下文:

客户安全利益干系人(了解详细信息):

DS-7:在 DevOps 中启用日志记录和监视

CIS 控制 v8 ID NIST SP 800-53 r4 ID PCI-DSS ID v3.2.1
8.2、8.5、8.9、8.11 AU-3、AU-6、AU-12、SI-4 10.1、10.2、10.3、10.6

安全原则:确保日志记录和监视范围包括 DevOps(和任何其他开发过程)中使用的非生产环境和 CI/CD 工作流元素。 如果未正确监视生产环境,针对这些环境的漏洞和威胁会给生产环境带来巨大的风险。 还应监视 CI/CD 生成、测试和部署工作流中的事件,以识别 CI/CD 工作流作业中的任何偏差。

Azure 指南:在整个 DevOps 过程中使用的非生产和 CI/CD 工具环境(例如 Azure DevOps 和 GitHub)中启用和配置审核日志记录功能。

还应监视 Azure DevOps 和 GitHub CI/CD 工作中用于生成、测试和部署作业的事件,以识别 CI/CD 作业中的任何异常结果。

通过日志记录流或 API 将上述日志和事件引入 Azure Sentinel 或其他 SIEM 工具,以确保正确监视和会审安全事件以便于处理。

按照 Azure 安全基准 - 日志记录和威胁检测的指导,实现对工作负载控制的日志记录和监视。

实现和其他上下文:

客户安全利益干系人(了解详细信息):