十大 CI/CD 安全风险(五)
在本篇文章中,我们将了解第三方服务的监管不足,工件完整性验证及日志可见性不足这三个关键 CI/CD 安全风险,并给出缓解相应风险的建议与措施。
第三方服务监管不足
CI/CD 攻击面包括企业资产,例如 SCM 和 CI,以及被授权访问这些资产的第三方服务。与不受监管地使用第三方服务有关的风险依赖于第三方服务可以极其轻松地被授予对 CI/CD 系统中资源的访问权限,从而有效地扩大了企业的攻击面。
风险描述
如今大部分企业都将第三方链接到其 CI/CD 系统和流程,这样易于实施且易于发挥直接价值,也使第三方成为日常软件开发中不可或缺的一部分,嵌入或授予第三方访问权限的方法正变得越来越多样化。以常见的 SCM—GitHub SAAS—为例,可以通过以下 5 种方法中的一种或多种连接第三方应用程序:
- GitHub 应用程序
- OAuth 应用程序
- 提供给第三方应用程序的访问令牌
- 提供给第三方应用程序的 SSH 密钥
- 发送给第三方的 webhook 事件配置
每种方法都需要几秒钟到几分钟的时间来实施,并为第三方提供多种功能,比如读取单个存储库中的代码,甚至是全面管理 GitHub 组织。尽管这些第三方被授予对系统的潜在高级别许可,但在许多情况下,企业在实际实施之前不需要特殊许可或批准。
构建系统还允许轻松集成第三方。将第三方集成到构建流水线中通常并不会比在流水线配置文件中添加 1-2 行代码或从构建系统的市场安装插件(例如 Github Actions 中的操作、CircleCI 中的 Orbs)更复杂。将第三方功能作为构建过程的一部分导入并执行,并可以完全访问执行它的流水线阶段可用的任何资源。
在大多数 CI/CD 系统中,类似的集成方法以各种形式提供,从而使在整个软件工程生态系统中管理和维护围绕第三方使用的最小特权的过程变得极其复杂。各企业也正在努力应对以下挑战:
- 全面了解哪些第三方可以访问不同的系统
- 第三方拥有哪些访问方法、被授予的权限/访问级别以及实际使用的权限/访问级别
影响
缺乏对第三方实施的管理和可见性会影响企业在其 CI/CD 系统中维护 RBAC。RBAC 的实施不足和第三方的最小特权,加上围绕第三方实施过程的管理和尽职调查不足,显著增加了企业的攻击面。鉴于 CI/CD 系统和环境的高度互联性,单个第三方威胁可被利用,给企业造成巨大损失,例如具有写入权限的第三方存储库,攻击者可以利用该代码将代码推送到存储库,这反过来又会触发构建并在构建系统上运行恶意代码。
建议
围绕第三方服务的管理控制应在第三方使用生命周期的每个阶段实施:
- 批准——建立审查程序,以确保在软件工程生态系统中的任何地方获得资源访问权限的第三方在被授予环境访问权限之前获得批准,并且授予他们的权限级别符合最小特权原则。
- 集成——引入控制和程序以保持对集成到 CI/CD 系统的所有第三方的持续可见性,包括:
- 整合方法。确保涵盖每个系统的所有集成方法(包括市场应用程序、插件、OAuth 应用程序、编程访问令牌等)。
- 授予第三方的权限级别。
- 第三方实际使用的许可级别。
- 持续使用的可见性——确保每个第三方都被限制在其需要访问和删除未使用和/或冗余权限的特定资源的范围内。作为构建过程的一部分集成的第三方应在范围内运行,对机密和代码的访问受限,并具有严格的出入口过滤机制。
取消配置——定期审查所有集成的第三方并删除不再使用的部分。
工件完整性验证不当
由于确保代码和工件验证的机制不足,工件完整性验证不当风险会导致访问 CI/CD 流程中的系统的攻击者将恶意代码或工件推入流水线中。
CI/CD 流程由多个步骤组成,最终负责将代码从开发人员的工作站推送到生产环境。在这个过程中内部资源和工件与从远程位置获取的第三方包和工件相结合,最终资源依赖于分布在不同步骤中的多个来源,由多个贡献者提供,这也意味着多个入口点被创建,通过这些入口点可以篡改最终资源。如果被篡改的资源能够成功地渗透到交付过程中,很可能会以当作受信任的资源一直流向生产环境。
影响
在软件交付过程中,恶意攻击者可能会滥用不当的工件完整性验证,通过流水线传送恶意工件,最终导致恶意代码在 CI/CD 流程中的系统上,或更糟的情况,在生产环境中执行。
建议
防止不当的工件完整性验证风险需要一系列措施,跨越软件交付链中的不同系统和阶段。建议企业考虑以下实践:
- 实施相关流程和技术来验证从开发到生产的整个过程中资源的完整性。生成资源时,该过程将包括使用外部资源签名基础架构对该资源进行签名。在流水线的后续步骤中使用该资源之前,应根据签名权限验证资源的完整性。在这种情况下需要考虑的一些普遍措施有:
- 代码签名——SCM 解决方案提供了使用每个贡献者的唯一密钥对提交进行签名的能力。然后可以利用此措施来防止未签名的提交流下流水线。
- 工件验证软件——使用签名和验证代码和工件的工具提供了一种方法来防止未经验证的软件被交付到流水线中(如 Sigstore)。
- 配置偏差检测——检测配置偏差的措施(例如,未使用签名 IAC 模板管理的云环境中的资源),表明资源由不受信任的源或进程部署。
- 从构建/部署流水线获取的第三方资源(例如作为构建过程的一部分导入和执行的脚本)应遵循类似的逻辑——在使用第三方资源之前,应计算资源的哈希值,并交叉引用官方发布的来自资源提供者发布的哈希。
日志记录和可见性不足
日志记录和可见性不足将给攻击者在 CI/CD 环境中执行恶意活动的机会。强大的日志记录和可见性功能对于企业准备、检测和调查安全相关事件的能力至关重要。虽然工作站、服务器、网络设备以及关键 IT 和业务应用程序通常在企业的日志记录和可见性程序中全面覆盖,但开发环境中的系统和流程通常并非如此。
鉴于利用软件工程环境和流程的潜在攻击向量的数量,安全团队必须培养足够的能力以在这些攻击发生时立即执行检测。由于其中许多向量涉及利用针对不同系统的程序化访问,因此面临这一挑战的关键方面是围绕人工和程序访问创建强大的可见性。鉴于 CI/CD 攻击向量的复杂性,系统的审计日志(例如用户访问、用户创建、权限修改)和应用日志(例如将事件推送到存储库、执行)具有同等的重要性构建,上传工件。
影响
恶意攻击者为了达成攻击目的,逐渐将注意力转移到开发环境。企业如果无法确保围绕这些环境进行适当的日志记录和可见性控制,则可能无法检测到违规行为,而且企业在缓解/补救以及事件调查能力也会大大降低。对于受到攻击的企业来说,时间和数据至关重要,集中放置所有相关数据源将在事件响应场景中起到完全不同的作用(成功补救或破坏性打击)。
建议
实现足够的日志记录和可见性有几个要素:
- 映射环境——如果不熟悉涉及潜在威胁的所有不同系统,就无法实现强大的可见性能力。潜在的违规可能涉及参与 CI/CD 流程的任何系统,包括 SCM、CI、工件存储库、包管理软件、容器注册表、CD 和编排引擎(例如 K8s)。识别并建立组织内使用的所有系统的清单,包含这些系统的每个实例(例如 Jenkins)。
- 识别并启用合适的日志源——一旦识别了所有相关系统,下一步就是确保启相关日志。应通过允许的所有各种措施,围绕人工访问和程序访问优化可见性。所有相关审计日志源以及应用日志源都非常重要,应当给予同等重视。
- 将日志传送到集中位置(例如 SIEM),来支持不同系统之间日志的聚合和关联,方便进行检测和调查。
- 为检测异常和潜在的恶意活动创建警报,包括每个系统本身的异常和代码传送过程中的异常,这涉及多个系统并且需要更深入地了解内部构建和部署过程。
本系列文章至此篇已完结,在五篇文章中我们陆续介绍了十大 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 ...
- PMBOK(第五版)学习笔记二-十大知识领域(P87)
五大项目管理过程组:启动.规划.执行.监控.收尾过程组 十大知识领域是:项目整合管理.项目范围管理.项目时间管理.项目成本管理.项目质量管理.项目人力资源管理.项目沟通管理.项目风险管理.项目采购管理 ...
- 近期关于CI/CD策略以及git分支模型的思考
近两个月由于个人处于新环境.新项目的适应阶段,没怎么提笔写些文章.中间有好几个想法想记录下来分享,但受限于没有很好的时间段供自己总结思考(也可以总结为间歇性懒癌和剧癌发作),便啥也没有更新.借这个周末 ...
- Kubernetes+Jenkins+Nexus+Gitlab进行CI/CD集成
前面已经完成了 二进制部署Kubernetes集群,下面进行CI/CD集成. 一.流程说明 应用构建和发布流程说明: 1.用户向Gitlab提交代码,代码中必须包含Dockerfile: 2.将代码提 ...
- Jenkins+GitLab+SonnarQube搭建CI/CD全流程
1. CI/CD 1.1 CI - 持续集成 持续集成( Continuous integration , 简称 CI )指的是,频繁地(一天多次)将代码集成到主干.持续集成的目的就是让产品可以快速迭 ...
随机推荐
- python 安装包时 ERROR: Failed building wheel for webrtcvad
报错信息: error: subprocess-exited-with-error × Building wheel for webrtcvad (pyproject.toml) did not ru ...
- 微信小程序:音乐播放器
音乐资源使用的是QQ音乐资源.图片资源使用的网易云音乐的专辑图片. HTML: <view class="container"> <div wx:for=&quo ...
- Util应用框架基础(一) - 依赖注入
本节介绍Util应用框架依赖注入的使用和配置扩展. 文章分为多个小节,如果对设计原理不感兴趣,只需阅读基础用法部分即可. 概述 当你想调用某个服务的方法完成特定功能时,首先需要得到这个服务的实例. 最 ...
- 斗地主AI出牌助手--在线调用斗地主AI,实现自动斗地主
简介 程序基于Python3.7开发的斗地主AI出牌助手,目前支持欢乐斗地主桌面版,微信版,也可以自己制作相应其他版本. 此出牌助手核心是识别出三位玩家出牌内容,调用基于DouZero封装的API接口 ...
- 微盟&致远OA&聚水潭&YonSuite系统对接集成整体解决方案
前言:大部分的企业都可能只用一套系统组织架构复杂,业务流程繁琐,内部同时有OA系统.BI系统.ERP系统......且各个系统都需要独立登陆,造成IT部门数据监管困难!如何在同一套中台系统上关联多管理 ...
- SMTP操作使用详解并通过python进行smtp邮件发送示例
转载请注明出处: 1.SMTP SMTP 的全称是"Simple Mail Transfer Protocol",即简单邮件传输协议.它是一组用于从源地址到目的地址传输 ...
- Qt官网开源最新版下载安装保姆级教程
什么是Qt(了解请跳过) Qt 基本介绍 Qt 是一个跨平台C++图形用户界面应用程序开发框架. 有关 Qt 的详细介绍,可以参考这篇文章: Qt是什么?Qt简介(非常全面) - 李清龙的文章 - 知 ...
- jdk9模块化
JDK 9是Java开发语言的一个重大版本.其中最令人兴奋的新特性之一是模块化系统.模块化系统提出了一种新的代码组织方式,它可以帮助开发人员更好地组织和管理代码,从而使Java应用程序更加可维护.可扩 ...
- 创建一个循环写入数据有事务提交的oracle函数示例
/*创建函数*/create or replace function fnc_testtempInfo(startDate IN varchar2, endDate in varchar2) retu ...
- 创建定义store并使用组合式api、选项式api
在项目根目录创建store文件夹(此步骤和vuex相同) 在步骤一的store文件夹下根据不同的用途场景创建单独的store文件(等同于vuex中分模块). 定义store基本步骤 步骤 导入defi ...