十大 CI/CD 安全风险(二)
在上一篇文章中,我们主要介绍了 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 流水线任务应在控制器节点上具有有限的权限。在适用的情况下,在单独的专用节点上运行流水线任务。
确保执行节点已适当修补。
确保任务运行环境中的网络分段配置为允许执行节点仅访问其在网络中所需的资源。在可能的情况下,不要授予对互联网的无限制访问以构建节点。
当安装脚本作为包安装的一部分执行时,请确保这些脚本存在单独的上下文,该上下文无权访问构建过程中其他阶段可用的机密和其他敏感资源。
十大 CI/CD 安全风险(二)的更多相关文章
- 十大 CI/CD 安全风险(三)
在上一篇文章,我们了解了依赖链滥用和基于流水线的访问控制不足这两大安全风险,并给出缓解风险的安全建议.本篇文章将着重介绍 PPE 风险,并提供缓解相关风险的安全建议与实践. Poisoned Pipe ...
- Python 十大装 X 语法(二)
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手.不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了.本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并 ...
- GitHub 十大 CI 工具
简评:GitHub 上最受欢迎的 CI 工具. 持续集成(Continuous integration)指的是,频繁地(一天多次)将代码集成到主干. 持续集成工具让产品可以快速迭代,同时还能保持高质量 ...
- jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(二)
一张网图 因为我们使用了Docker in Docker技术,就是把jenkins部署在k8s里.jenkins master会动态创建slave pod,使用slave pod运行代码克隆,项目构建 ...
- 如何搭建安全的 CI/CD 管道?
Eolink 前端负责人黎芷君进行了<工程化- CI / CD>的主题演讲,围绕 CI/CD 管道安全的实践,分享自己在搭建 CI/CD 管道过程中所总结的重要经验,与开发者深入讨论 &q ...
- [转] gitlab 的 CI/CD 配置管理
[From] http://blog.51cto.com/flyfish225/2156602 gitlab 的 CI/CD 配置管理 (二) 标签(空格分隔):运维系列 一:gitlab CI/CD ...
- DevSecOps 需要知道的十大 K8s 安全风险及建议
Kubernetes (K8s)是现代云原生世界中的容器管理平台.它实现了灵活.可扩展地开发.部署和管理微服务.K8s 能够与各种云提供商.容器运行时接口.身份验证提供商和可扩展集成点一起工作.然而 ...
- 转:OWASP发布Web应用程序的十大安全风险
Open Web Application Security Project(OWASP)是世界范围内的非盈利组织,关注于提高软件的安全性.它们的使命是使应用软件更加安全,使企业和组织能够对应用安全风险 ...
- ASP.NET Core中的OWASP Top 10 十大风险-SQL注入
不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: https://dotnetcoretutorials.com/201 ...
- Salesforce学习之路-developer篇(二)利用Jenkins和Bitbucket实现Salesforce的CI/CD功能
上文提到,基于CRM的二次开发是必不可少的,但是在实际项目中CI/CD是不可忽略的一个重要部分,与传统的Java,Python项目不同,如果对Salesforce进行持续集成和持续部署呢? 结合找到的 ...
随机推荐
- 2022.7.13 tongyf 讲课纪要
前言 这个笔记记晚了,主要是都在跟 \(LCT\) 进行殊死搏斗,所以博客这方面就挂了很久. tongyf 学长当年是拿到省一之后省选炸了,之后暴切高考.ORZ%%% 这节课讲的是线性dp和背包dp, ...
- Android 锁屏时的生命周期
锁定屏幕前,应用被打开:onCreate->onStart->onResume 此时按下电源键,锁定屏幕:onPause->onStop 解锁屏幕,重新回到应用:onRestart- ...
- MySQL Group by 优化查询
Group by 未加索引 使用的是临时表,加文件排序(数据量小用内存排序) 加个索引(一般是联合索引) 注意:这里加的索引一般不会仅仅是group by后面的字段索引(大多数多少条件是一个以该字 ...
- Langchain使用自己定义的tool
Langchain使用自己定义的tool 快速开始 tool是agent可用于与世界交互的功能.这些工具可以是通用实用程序(例如搜索).其他链,甚至是其他代理. 目前,可以使用以下代码片段加载工具: ...
- influxdb: unable to parse points 异常解决总结
转载请注明出处: influxdb 使用过程经常遇到:unable to parse points 的异常: unable to parse points 是 InfluxDB 抛出的异常,表示无 ...
- Windows 项目的 CMakeLists 编写
前言: 项目一直是以 .sln 解决方案打开和处理的,上传到 github 也是需要将 sln 文件包括到项目里,不太优雅(虽然方便),毕竟现在开源项目基本都是使用 CMake 做跨平台编译 因为项目 ...
- 构建一个语音转文字的WebApi服务
构建一个语音转文字的WebApi服务 简介 由于业务需要,我们需要提供一个语音输入功能,以便更方便用户的使用,所以我们需要提供语音转文本的功能,下面我们将讲解使用Whisper将语音转换文本,并且封装 ...
- 7-8次PTA和期末成绩总结
(1)前言:总结之前所涉及到的知识点.题量.难度等情况 课程成绩统计程序-3在第二次的基础上修改了计算总成绩的方式(修改类结构,将成绩类的继承关系改为组合关系,成绩信息由课程成绩类和分项成绩类组成,课 ...
- .NET企业应用安全开发动向-概览
太长不读版:试图从安全的全局视角触发,探讨安全的重要性,讨论如何识别安全问题的方法,介绍.NET提供的与安全相关的基础设施,以及一些与时俱进的安全问题,为读者建立体系化的安全思考框架. 引言 关于&q ...
- [ARC165D] Substring Comparison
Problem Statement For an integer sequence $X=(X_1,X_2,\dots,X_n)$, let $X[L,R]$ denote the integer s ...