关于ci-cd:十大-CICD-安全风险二

41次阅读

共计 2746 个字符,预计需要花费 7 分钟才能阅读完成。

在上一篇文章中,咱们次要介绍了 CI/CD 中流程管制机制有余和身份及拜访治理有余两大平安危险,并为企业及其开发团队在缓解相应危险时给出了一些倡议。明天咱们将持续介绍值得企业高度关注的 CI/CD 平安危险。

依赖链滥用

依赖链滥用(Dependency Chain Abuse)危险是指攻击者滥用与软件开发工作站和构建环境如何获取代码依赖项相干的缺点,导致恶意程序包在拉取时无心中被提取并在本地执行。

危险形容

随着企业中所有开发环境中波及的零碎数量越来越多,治理自编写代码应用的依赖项和内部包变得更加简单。通常应用每种编程语言的专用客户端来获取包,这些包来自自治理的包存储库(例如 Jfrog Artifactory)和特定语言的 SaaS 存储库(例如——Node.js 具备 npm 和 npm 镜像仓库,Python 的 pip 应用 PyPI , 并且 Ruby 的 gems 应用 RubyGems)。

大多数企业可能轻松地检测具备已知破绽的软件包的应用状况,并对自行编写的代码和第三方代码进行动态剖析。然而,在应用依赖项的上下文中,须要一组同样重要的管制来爱护依赖项生态系统,包含爱护定义如何拉取依赖项的过程。

不充沛的配置可能会导致安全意识不强的软件开发人员下载歹意包。在大多数状况下,因为预装置脚本和相似过程旨在在拉取包后立刻运行包的代码,因而这个过程不仅下载了包,并且在下载后立刻执行包。在这种状况下,次要的攻打向量是:

  • 依赖性混同——在公共存储库中公布与外部包名称雷同的歹意包,试图诱使客户端下载歹意包而非公有包。
  • 依赖劫持——取得对公共存储库包的维护者帐户控制权,来上传宽泛应用的包的歹意版本,让用户拉取最新版本的包。
  • Typosquatting – 公布与风行软件包名称类似的恶意软件包,在开发人员拼错软件包名称时无心中获取名称类似的恶意软件包。
  • Brandjacking – 以与特定品牌包的命名约定或其余特色统一的形式公布歹意包,利用与品牌的谬误关联,试图让开发人员无心获取这些包。

影响

应用上述形式之一将包上传到公共包存储库的攻击者,其指标是在拉取包的主机上执行恶意代码。这能够是开发人员的工作站,也能够是拉取软件包的构建服务器。一旦恶意代码运行,就能够在执行的环境中利用它来窃取凭据和横向挪动。另一个潜在的状况是攻击者的恶意代码从构建服务器进入生产环境。在许多状况下,恶意程序包还将持续放弃用户冀望的原始平安性能,从而升高被发现的可能性。

倡议

依据特定于不同语言特定客户端的配置以及外部代理和内部包存储库的应用形式,对应的危险缓解办法在具体执行时会有所不同,不过所有举荐的管制都具备雷同的领导准则:

  • 不应容许任何拉取代码包的客户端间接从 Internet 或不受信赖的起源获取包。相同,应施行以下管制:

    • 每当从内部存储库中提取第三方包时,请确保通过外部代理而不是间接从 Internet 中提取所有包。在代理层部署额定的安全控制,具备针对被拉取的包的进行平安考察的能力。
    • 在实用的状况下,不容许间接从内部存储库中提取包。将所有客户端配置为从外部存储库中提取蕴含预先审查的包的包,并建设平安机制来验证和强制执行此客户端配置。
  • 为拉取的包启用校验和验证和签名验证。
  • 防止将客户端配置为拉取最新版本的软件包。首选配置预先审查的版本或版本范畴。应用特定于框架的技术将组织所需的包版本继续“锁定”到稳固且平安的版本。
  • 范畴:

    • 确保所有公有包都在组织范畴内注册。
    • 确保所有援用公有包的代码都应用包的范畴。
    • 确保客户端被迫仅从您的外部注册表中获取您组织范畴内的包。
  • 当装置脚本作为包装置的一部分执行时,请确保这些脚本存在独自的上下文,该上下文无权拜访构建过程中其余阶段可用的秘密和其余敏感资源。
  • 确保外部我的项目始终在我的项目的代码存储库中蕴含包管理器的配置文件(例如 NPM 中的 .npmrc),以笼罩在获取包的客户端上可能存在的任何不平安配置。
  • 防止在公共存储库中公布外部我的项目的名称。
  • 思考到企业同时应用的包管理器和配置的数量之大,齐全避免第三方链滥用(third party chain abuse)并不容易。因而,倡议确保对检测、监控和缓解措施给予适当的关注,以确保在产生事变时尽快发现并尽可能减少潜在侵害。

基于流水线的访问控制有余

流水线执行节点能够拜访执行环境内外的泛滥资源和零碎。在流水线中运行恶意代码时,攻击者利用有余的基于流水线的访问控制(Pipeline-based access control, PBAC)危险滥用授予流水线的权限,以便在 CI/CD 零碎外部或内部横向挪动。

危险形容

流水线是 CI/CD 的要害外围。执行流水线的节点执行流水线配置中指定的命令,来进行大量的波及敏感信息的流动:

  • 拜访源代码,并进行构建和测试。
  • 从不同地位获取机密信息,例如环境变量、保存库、基于云的专用身份服务(例如 AWS 元数据服务)和其余地位。
  • 创立、批改和部署工件。

PBAC 指的是每个流水线以及该流水线中的每个步骤正在运行的上下文。 鉴于每条流水线的高度敏感和要害性质,必须将每个流水线限度为它须要拜访的确切数据和资源集。现实状况下,每个流水线和步骤都应该受到限制,以确保在攻击者可能在流水线上下文中执行恶意代码的状况下,潜在的侵害水平最小。PBAC 包含与流水线执行环境相干的泛滥元素的管制:

  • 在流水线执行环境中拜访:对代码、秘密、环境变量和其余流水线的拜访。
  • 对底层主机和其余流水线节点的权限。
  • 互联网出入口的过滤。

影响

一段可能在流水线执行节点的上下文中运行的恶意代码,领有其所运行的流水线阶段的齐全权限。它能够拜访秘密、拜访底层主机并连贯到有问题的流水线的任何零碎能够拜访。这可能导致秘密数据的泄露、CI 环境内的横向挪动,可能拜访 CI 环境之外的服务器和零碎,以及将歹意工件部署到流水线中,甚至生产环境中。攻击者毁坏流水线执行节点或将恶意代码注入构建过程的场景的潜在毁坏水平,取决于环境中 PBAC 的粒度。

倡议

  • 不要将共享节点用于具备不同敏感性级别 / 须要拜访不同资源的流水线。共享节点应仅用于具备雷同秘密级别的流水线。
  • 确保 CI/CD 零碎中应用的秘密以容许每个流水线和步骤仅拜访其须要的秘密的形式限定范畴。
  • 在每次流水线执行后将执行节点复原到其原始状态。
  • 确保运行流水线工作的操作系统用户已依照最小权限准则被授予执行节点的操作系统权限。
  • CI/CD 流水线工作应在控制器节点上具备无限的权限。在实用的状况下,在独自的专用节点上运行流水线工作。
  • 确保执行节点已适当修补。
  • 确保工作运行环境中的网络分段配置为容许执行节点仅拜访其在网络中所需的资源。在可能的状况下,不要授予对互联网的无限度拜访以构建节点。
  • 当装置脚本作为包装置的一部分执行时,请确保这些脚本存在独自的上下文,该上下文无权拜访构建过程中其余阶段可用的秘密和其余敏感资源。
正文完
 0