十大 CI/CD 安全风险(一)
CI/CD 环境、流程和系统是现代软件组织的核心。他们将代码从开发工程师的工作站传递到生产环境。结合 DevOps 和微服务架构的兴起,CI/CD 系统和流程重塑了工程生态系统:
技术堆栈更加多样化,无论是编码语言,还是流水线中进一步采用的技术和框架(例如 GitOps,K8s)。
采用新的语言和框架的速度越来越快,没有重大的技术障碍。
自动化和基础设施即代码(IaC)实践的使用有所增加。
第三方,无论是外部提供商的形式还是代码中的依赖关系,都已成为任何 CI/CD 生态系统的重要组成部分,新服务的集成通常只需要添加1-2行代码。
以上这些特征允许更快、更灵活和多样化的软件交付。然而,也为攻击者提供了许多新的途径和机会,增加了企业的攻击面。
本系列文章系统整理与 CI/CD 相关攻击媒介进行的广泛研究以及安全漏洞分析结果,帮助企业及其开发团队更好地保护其 CI/CD 生态系统。
流程控制机制不足
流控机制不足(insufficient flow control)指的是由于缺乏强制执行额外批准或审查机制,攻击者在 CD/CD 进程(SCM、CI、Artifact 存储库等)获得系统权限,轻松将恶意代码或工件轻松推送到流水线中的问题。
影响
攻击者获得可以访问 SCM、CI 或流水线下游系统的权限,便能够利用不足的流控机制来部署恶意工件。一旦创建,工件就会通过流水线推送到生产环境且无需任何批准或审查。以下的情况可能出现:
将代码推送到存储库分支,该分支会通过流水线自动部署到生产环境。
将代码推送到存储库分支,然后手动触发将代码运送到生产环境的流水线。
直接将代码推送到实用程序库,供在生产系统中运行的代码使用。
滥用 CI 中的自动合并规则,该规则会自动合并满足一组预定义要求的拉取请求,从而推送未经审查的恶意代码。
滥用分支保护规则不足。例如,排除特定用户或分支来绕过分支保护,从而推送未经审查的恶意代码。
以构建环境创建的合法工件的名义将工件上传到工件存储库,例如包或容器。在这种情况下,缺乏控制或验证可能会导致工件被部署流水线拾取并部署到生产中。
访问生产并直接更改应用程序代码或基础设施(例如 AWS Lambda 函数),无需任何额外的批准/验证。
建议
建立强化流水线流控机制,以确保没有任何个人或程序能够在没有外部验证或验证的情况下通过流水线传送敏感代码和工件。企业可以通过实施以下措施来实现:
在用于生产和其他敏感系统的托管代码的分支上配置分支保护规则。尽可能避免将用户帐户或分支排除在分支保护规则之外。如果用户帐户被授予将未经审查的代码推送到存储库的权限,务必确保这些帐户无权触发连接到相关存储库的部署流水线。
限制自动合并规则的使用,并确保无论在何处使用,要适用于最少量的上下文。彻底检查所有自动合并规则的代码,确保这些不会被绕过,并避免在自动合并过程中导入第三方代码。
在适用的情况下,防止帐户在未经额外批准或审查的情况下触发生产构建和部署流水线。
只允许工件在由预先批准的 CI 服务帐户创建的条件下在流水线传输。防止通过其他账户上传的工件在没有二次审核和批准的情况下在流水线中推送。
检测并防止生产中运行的代码与其 CI/CD 之间的偏差和不一致,并修改任何包含偏差的资源。
身份和访问管理不足
身份和访问管理不足(inadequate identity and access management)的风险源于管理分布在工程生态系统中不同系统(从源代码控制到部署)的大量身份的管理难题。如果身份和访问管理不善,企业受到攻击威胁风险将会大大增加。
软件交付过程由连接在一起的多个系统组成,目的是将代码和工件从开发环境转移到生产环境。每个系统都提供多种访问和集成方法(用户名和密码、个人访问令牌、市场应用程序、oauth 应用程序、插件、SSH 密钥)。不同类型的帐户和访问方法可能具有其独特的配置方法、安全策略集和授权模型。这种复杂性为在整个身份生命周期中管理不同身份以及确保其权限与最小特权原则保持一致带来了巨大挑战。
挑战
在典型环境中,SCM 或 CI 的普通用户帐户是高度宽松的,因为这些系统传统上并不是安全团队的主要关注领域。这些身份主要由需要能够在代码和基础架构中进行重大更改的工程师使用。CI/CD 生态系统中围绕身份和访问管理的一些主要问题和挑战包括:
过分宽松的身份 – 在 SCM 中,确保每个用户和应用程序身份仅被授予所需的权限,并且仅针对其需要访问的实际存储库授予权限并非易事。
过期的身份 — 不活跃和/或不再需要访问但没有针对所有 CI/CD 系统取消配置的人员和程序帐户的员工/系统。
本地身份 — 没有与集中式 IDP 联合访问的系统,创建在相关系统内本地管理的身份。本地帐户在执行一致的安全策略(例如密码策略、锁定策略、MFA)以及正确取消对所有系统的访问权限(例如员工离职)时带来挑战。
外部身份
使用非组织拥有或管理的域中的电子邮件地址注册的员工—在这种情况下,这些帐户的安全性高度依赖于分配给他们的外部帐户的安全性。由于这些帐户不由组织管理,因此不一定符合组织的安全策略。
外部协作者 — 一旦授予外部协作者对系统的访问权限,系统的安全级别就源自外部协作者的工作环境级别,超出了组织的控制范围。
自注册身份 — 在允许自注册的系统中,有效的域地址通常是自注册和访问 CI/CD 系统的唯一先决条件。使用默认/基本权限可能会扩大潜在的攻击面。
共享身份 — 在用户/应用程序之间共享的身份,由于多人/应用程序使用统一身份账户,在进行追踪和调查时无法进行有效分辨,导致问责制度失效。
影响
在 CI/CD 生态系统中存在成百上千个身份(人类和程序化身份),加上缺乏强大的身份和访问管理实践,以及过度宽松帐户的普遍使用,导致系统上的任何用户帐户都可以为环境授予强大的功能,并且可以作为进入生产环境的通行证。
建议
对工程生态系统内所有系统的所有身份进行持续分析和映射(mapping)。对于每个身份,映射身份提供者、授予的权限级别和实际使用的权限级别。确保分析涵盖所有程序化访问方法。
删除环境中不同系统中每个身份的持续工作不需要的权限。
确定禁用/删除陈旧帐户的可接受期限,并禁用/删除任何超过预定不活动期的身份。
避免创建本地用户帐户,使用集中式组织组件 (IdP) 创建和管理身份。每当使用本地用户帐户时,请确保禁用/删除不再需要访问的帐户,并确保所有现有帐户的安全策略与组织的策略相匹配。
持续映射所有外部协作人员,确保他们的身份符合最小特权原则。尽可能为人工帐户和程序帐户授予具有预定到期日期的权限,并在工作完成后禁用其帐户。
防止员工针对 SCM、CI 或任何其他 CI/CD 平台使用他们的个人电子邮件地址或属于非组织拥有和管理的域的任何地址。持续监控不同系统中的非域地址,并及时删除不合规用户。
不允许用户自行注册,并根据需要授予权限。
避免将系统中的基本权限授予所有用户以及自动分配用户帐户的大型群组。
避免使用共享帐户。为每个特定上下文创建专用帐户,并授予相关上下文所需的确切权限集。
十大 CI/CD 安全风险(一)的更多相关文章
- 十大 CI/CD 安全风险(三)
在上一篇文章,我们了解了依赖链滥用和基于流水线的访问控制不足这两大安全风险,并给出缓解风险的安全建议.本篇文章将着重介绍 PPE 风险,并提供缓解相关风险的安全建议与实践. Poisoned Pipe ...
- GitHub 十大 CI 工具
简评:GitHub 上最受欢迎的 CI 工具. 持续集成(Continuous integration)指的是,频繁地(一天多次)将代码集成到主干. 持续集成工具让产品可以快速迭代,同时还能保持高质量 ...
- 如何搭建安全的 CI/CD 管道?
Eolink 前端负责人黎芷君进行了<工程化- CI / CD>的主题演讲,围绕 CI/CD 管道安全的实践,分享自己在搭建 CI/CD 管道过程中所总结的重要经验,与开发者深入讨论 &q ...
- DevSecOps 需要知道的十大 K8s 安全风险及建议
Kubernetes (K8s)是现代云原生世界中的容器管理平台.它实现了灵活.可扩展地开发.部署和管理微服务.K8s 能够与各种云提供商.容器运行时接口.身份验证提供商和可扩展集成点一起工作.然而 ...
- 转:OWASP发布Web应用程序的十大安全风险
Open Web Application Security Project(OWASP)是世界范围内的非盈利组织,关注于提高软件的安全性.它们的使命是使应用软件更加安全,使企业和组织能够对应用安全风险 ...
- ASP.NET Core中的OWASP Top 10 十大风险-SQL注入
不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: https://dotnetcoretutorials.com/201 ...
- 近期关于CI/CD策略以及git分支模型的思考
近两个月由于个人处于新环境.新项目的适应阶段,没怎么提笔写些文章.中间有好几个想法想记录下来分享,但受限于没有很好的时间段供自己总结思考(也可以总结为间歇性懒癌和剧癌发作),便啥也没有更新.借这个周末 ...
- CI/CD持续集成/持续部署 敏捷开发
敏捷软件开发(英语:Agile software development),又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力.它 ...
- Spark 灰度发布在十万级节点上的成功实践 CI CD
原创文章,转载请务必将下面这段话置于文章开头处. 本文转发自技术世界,原文链接 http://www.jasongj.com/spark/ci_cd/ 本文所述内容基于某顶级互联网公司数万节点下 Sp ...
- CI/CD
CI/CD 啥是CI/CD CI: continuous integration, 持续集成.就是频繁地把开发的工作提交到主线代码.主要是为了解决集成问题.什么是集成问题呢,白话说,就是从你本地的代码 ...
随机推荐
- 浅谈一下go语言中的slice及其一些小坑
数组 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成.虽然数组元素可以被修改,但是数组长度是固定的,而且在go语言中数组的长度也是数组类型的组成部分,所以不同长度或不同 ...
- 还在用图片表示三角形与箭头吗?不会用CSS来绘制你就OUT了!!!
作者:WangMin 格言:努力做好自己喜欢的每一件事 你是否还在用图片制作三角形和剪头吗?那就太out了.css可以轻松绘制出你想要的三角形与箭头,而且颜色大小可以随意改变,还不用担心失真等问题.那 ...
- SQL改写案例4(开窗函数取中位数案例)
周总找我问个报表SQL实现逻辑的案例,废话不说给他看看. 原SQL: SELECT d.tname 姓名, d.spname 岗位, d.sum_cnt 报单单量, d.min_cnt 放款单量, d ...
- offscreenCanvas+worker+IndexedDB实现无感大量图片缓存
一个有必要实现的需求 因为项目中需要使用canvasTexture(一个threejs3d引擎中的材质类型),绘制大量的图片,每次使用都会请求大量的oss图片资源,虽然重复请求会有磁盘缓存但毕竟这个磁 ...
- 计算机网络之防火墙和Wlan配置
一.防火墙 防火墙(firewall)是一种安全设备,它的位置一般处于企业网络边界与外网交界的地方,用于隔离不信任的数据包 准确点讲,它就是隔离外网和内网的一道屏障,用于保护内部资源信息安全的一种策略 ...
- VLOOKUP函数10种经典用法
VLOOKUP函数是Excel中非常常用的函数之一,可以用于在一个区域或表格中查找某个值,并返回该值所在行的另一个指定列中的数值.以下是VLOOKUP函数的10种经典用法: 基本的VLOOKUP用法: ...
- 功能不够,SQL来凑,修改数据库的正确姿势?
修改数据库是一项关键任务,需要小心谨慎地执行,以确保数据的完整性和准确性.下面是一个详细的步骤指南,介绍了正确修改数据库的姿势. 第一步:备份数据库 在进行任何数据库修改之前,务必备份数据库.这样,如 ...
- Http的演进
Http的演进 Http在1.1版本之前具有无状态的特点,每次请求都需要通过TCP三次握手四次挥手与服务器重新建立连接.比如某个客户端在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户请求 ...
- [ABC246B] Get Closer
section> Problem Statement From the point $(0,0)$ in a two-dimensional plane, let us move the dis ...
- C++学习笔记三:变量与数据类型(浮点型)
1. 数据类型与所占内存大小 类型 大小 精度 注意 float 4 7 double 8 15 默认 long double 16 >double 精度就是有效数字. 2. 声明和初始 ...