上一篇文章,我们着重介绍 PPE 风险,并提供缓解相关风险的安全建议与实践。在本篇文章中,我们将会了解凭据使用环境管理不善与不安全的系统配置,并给出相应的风险缓解建议。

凭据使用管理不善

由于与凭据周围的访问控制、不安全的秘密管理和过于宽松的凭据有关的缺陷,凭据环境管理不善会给攻击者提供获取和使用散布在整个流水线中的各种秘密和令牌的能力的机会。

风险描述

CI/CD 环境由多个相互通信和身份验证的系统构建而成,由于凭据可能存在的多种上下文,因此在保护凭据方面有不小的挑战。应用程序在运行时使用应用程序凭据,流水线使用生产系统的凭据将基础架构、工件和应用程序部署到生产环境,开发人员将凭据用作其测试环境的一部分以及代码和工件中的一部分。

这种不同的上下文,以及用于存储和使用它们的大量方法和技术,为凭据的不安全使用创造了机会。影响凭据环境安全的一些主要风险在于:

  1. 包含凭据的代码被推送到 SCM 存储库的其中一个分支:由于没能发现代码中包含的敏感信息,或未能了解相关风险,将包含凭据的代码推送到 SCM 存储库的分支。凭据会暴露给对存储库具有读取权限的任何人,即使从推送到的分支中删除,信息也会继续出现在提交历史记录中,任何具有存储库访问权限的人都可以查看。

  2. 在构建和部署过程中不安全地使用凭据:这些凭据用于访问代码存储库、读取和写入工件存储库,以及将资源和工件部署到生产环境。鉴于开发人员需要访问大量的流水线和目标系统,必须明确以下几个问题:

  • 在哪种情况下,使用哪种方法,使用了什么凭据?

  • 每个流水线能否仅访问所需的凭据?

  • 流经流水线的未经审查的代码可以访问凭据吗?

  • 这些凭据如何被调用并注入到构建中?这些凭据是否只能在运行时访问,并且只能从需要它们的上下文中访问?

  1. 容器镜像层中的凭据:仅用于构建镜像的凭据仍然存在于其中一个镜像层中,任何能够下载镜像的人都可以使用。

  2. 传输到控制台输出的凭据:流水线中使用的凭据通常有意或无意地打印到控制台输出。这可能会使凭据以明文形式在日志中公开,任何有权访问构建结果的人都可以查看。这些日志可能会流入日志管理系统,从而扩大其暴露面。

  3. 未轮换凭据:由于凭据遍布整个工程生态系统,因此这些凭据暴露给大量员工和承包商。未能轮换凭据会导致拥有有效凭据的人员和工件数量不断增加。对于流水线使用的凭据,如果企业秉持“未损坏就不修复”的理念进行管理,那么未轮换的凭据则会长期有效,安全风险也会随着拥有有效凭据人员的数量增加而增加。

影响

凭据是攻击者最常利用的工具,攻击者试图将凭据用于访问高价值资源或部署恶意代码和工件。而在凭据管理不善的开发环境中,攻击者获得了多种获取凭据的途径。最大的风险还是人为因素,由于缺乏安全管理凭据相关知识以及对凭据轮换可能影响流程的担忧,使得凭据暴露于风险中,让许多企业的高价值资源面临因凭据暴露而受到损害的风险。

建议

  • 从代码到部署,建议建立程序来持续映射软件开发生态系统中不同系统中发现的凭据。确保每组凭据都遵循最小权限原则,确保所需权限被精准授予到相关服务的使用。

  • 避免在多个上下文中共享同一组凭据。这增加了实现最小特权原则的复杂性,并对问责制产生负面影响。

  • 建议使用临时凭据,减少使用静态凭据。如果需要使用静态凭据,建议建立定期轮换所有静态凭据并检测陈旧的凭据的相关程序。

  • 将凭据的使用配置为仅限于预定条件(例如限定特定源 IP 或身份),以确保即使在受到破坏的情况下,泄露的凭据也不能在您的环境之外使用。

  • 检测推送到代码存储库并存储在其中的密钥。使用诸如 IDE 插件之类的控件来识别本地更改中使用的密钥、每次代码推送时的自动扫描以及对存储库及其过去提交的定期扫描。

  • 确保 CI/CD 系统中使用的机密以允许每个流水线和步骤仅访问其需要的机密的方式限定范围。

  • 使用内置的供应商选项或第三方工具来防止机密被传送到未来构建的控制台输出。确保所有现有输出不包含机密。

  • 验证是否从任何类型的工件(例如容器镜像、二进制文件或 Helm Chart的层)中删除了机密。

不安全的系统配置

不安全的系统配置风险源于流水线中不同系统(例如 SCM、CI、Artifact 存储库)的安全设置、配置和加固方面的缺陷,这类风险往往扩大了企业的攻击面,给攻击者可趁之机。

风险描述

CI/CD 环境由多个供应商提供的多种系统组成。为了优化 CI/CD 安全性,企业及其开发团队需要高度重视流经流水线的代码和工件,以及每个单独系统的状态和弹性。与存储和处理数据的其他系统类似,CI/CD 系统涉及所有级别的各种安全设置和配置——应用程序、网络和基础设施,这些设置对 CI/CD 环境的安全状况和潜在危害的敏感性有重大影响。攻击者总是在寻找潜在的 CI/CD 漏洞和错误配置,这些漏洞和错误配置可以用来为他们谋取利益,比如:

  • 使用过时版本或缺少重要安全补丁的自我管理系统和/或组件。

  • 具有过于宽松的网络访问控制的系统。

  • 对底层操作系统具有管理权限的自托管系统。

  • 具有不安全系统配置的系统。配置通常确定与授权、访问控制、日志记录等有关的关键安全功能。在许多情况下,默认配置集并不安全,需要优化。

  • 凭据环境管理不当的系统——例如未禁用的默认凭据、过于宽松的编程令牌等等。

  • 虽然使用 SaaS CI/CD 解决方案消除了与系统强化和网络内横向移动相关的一些潜在风险,但组织仍需要高度关注并安全配置其 SaaS CI/CD 解决方案。每个解决方案都有自己的一套独特的安全配置和最佳实践,这对于保持最佳安全状态至关重要。

影响

攻击者可能会利用其中一个 CI/CD 系统中的安全漏洞来获得对系统的未经授权的访问,甚至破坏系统并访问底层操作系统。攻击者可能会滥用这些漏洞来操纵合法的 CI/CD 流程、获取机密令牌并可能访问生产环境。在某些情况下,这些缺陷可能会让攻击者有机会在开发环境内和 CI/CD 系统的上下文之外横向移动。

建议

  • 维护正在使用的系统和版本的清单,包括每个系统的指定所有者对应的映射图。持续检查这些组件中的已知漏洞。如果有可用的安全补丁,请更新易受攻击的组件。如果没有,应当考虑移除组件/系统,或通过限制对系统的访问或系统执行敏感操作的能力来减少利用漏洞的潜在影响。

  • 确保对系统的网络访问符合最小访问原则。

  • 建立安全检查流程,来定期检查所有系统配置中可能影响系统安全状况的任何设置,并确保所有设置都是最佳的。

  • 确保按照最小权限原则授予流水线执行节点的权限。在这种情况下,一个常见的错误配置是向开发人员授予执行节点上的调试权限。虽然在许多组织中这是一种常见做法,但必须考虑到任何能够在调试模式下访问执行节点的用户,都可能在将所有机密加载到内存并使用节点身份时暴露所有敏感信息。因此请谨慎为拥有此类权限的开发人员升级权限。

下一篇文章为本系列文章的最后一篇,我们将了解第三方服务的监管不足工件完整性验证及日志可见性不足这三个 CI/CD 安全风险及缓解相应风险的建议与措施。

十大 CI/CD 安全风险(四)的更多相关文章

  1. 十大 CI/CD 安全风险(三)

    在上一篇文章,我们了解了依赖链滥用和基于流水线的访问控制不足这两大安全风险,并给出缓解风险的安全建议.本篇文章将着重介绍 PPE 风险,并提供缓解相关风险的安全建议与实践. Poisoned Pipe ...

  2. GitHub 十大 CI 工具

    简评:GitHub 上最受欢迎的 CI 工具. 持续集成(Continuous integration)指的是,频繁地(一天多次)将代码集成到主干. 持续集成工具让产品可以快速迭代,同时还能保持高质量 ...

  3. jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(四)

    前景提要 jenkins与gitlab结合,实现代码自动拉取:https://www.cnblogs.com/zisefeizhu/p/12548662.html jenkins与kubernetes ...

  4. 如何搭建安全的 CI/CD 管道?

    Eolink 前端负责人黎芷君进行了<工程化- CI / CD>的主题演讲,围绕 CI/CD 管道安全的实践,分享自己在搭建 CI/CD 管道过程中所总结的重要经验,与开发者深入讨论 &q ...

  5. DevSecOps 需要知道的十大 K8s 安全风险及建议

    Kubernetes (K8s)是现代云原生世界中的容器管理平台.它实现了灵活.可扩展地开发.部署和管理微服务.K8s 能够与各种云提供商.容器运行时接口.身份验证提供商和可扩展集成点一起工作.然而 ...

  6. 转:OWASP发布Web应用程序的十大安全风险

    Open Web Application Security Project(OWASP)是世界范围内的非盈利组织,关注于提高软件的安全性.它们的使命是使应用软件更加安全,使企业和组织能够对应用安全风险 ...

  7. ASP.NET Core中的OWASP Top 10 十大风险-SQL注入

    不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: https://dotnetcoretutorials.com/201 ...

  8. .Net Core DevOps -免费用Azure四步实现自动化发布(CI/CD)

    前言 linux 大行其道的今天想必大家都已经拥抱 core 了吧,通常的方案都是 gitlab+jenkins+centos,但是这样的方案不适合我这种懒人,一直在寻求简单的解决方案,在寻求方案的过 ...

  9. Salesforce学习之路(四)利用Jenkins和Git实现Salesforce的CI/CD功能

    上文提到,基于CRM的二次开发是必不可少的,但是在实际项目中CI/CD是不可忽略的一个重要部分,与传统的Java,Python项目不同,如果对Salesforce进行持续集成和持续部署呢? 结合找到的 ...

  10. 近期关于CI/CD策略以及git分支模型的思考

    近两个月由于个人处于新环境.新项目的适应阶段,没怎么提笔写些文章.中间有好几个想法想记录下来分享,但受限于没有很好的时间段供自己总结思考(也可以总结为间歇性懒癌和剧癌发作),便啥也没有更新.借这个周末 ...

随机推荐

  1. helm仓库harbor搭建及上传helm

    1.仓库搭建(harbor) 注意: 基础环境为docker 使用docker-compose安装 1.1.docker安装 # 安装需要的软件包 # yum-util 提供yum-config-ma ...

  2. 火山引擎ByteHouse:如何优化ClickHouse物化视图能力?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近期,火山引擎 ByteHouse 升级了基于 ClickHouse 的物化视图能力,为解决数据量爆炸式增长带来的 ...

  3. Hive的使用以及如何利用echarts实现可视化在前端页面展示(四)---连接idea使用echarts可视化界面

    说来惭愧,我的javaweb烂得一批,其他步骤我还是很顺利地,这个最简单的,我遇到了一系列问题.只能说,有时候失败也是一种成功吧 这一步其实就是正常的jdbc,没什么可说明的,但是关于使用echart ...

  4. Java 21 官方速览:全面拥抱虚拟线程

    前言 首先,感谢一下不少xdm私信关心我的身体状况,我也不是什么厉害的大佬,点开通知看到一堆私信还是蛮感动的. 近来有意大幅缩短了更新频率,增加了日常调养身体的时间,淋巴结确实变小了,睡眠也逐渐正常, ...

  5. 0x00.常用名词、文件下载、反弹shell

    下载文章 方法一:下载谷歌插件fireshot,捕捉整个页面 方法二:使用js代码 f12进入控制台,粘贴如下代码 (function(){ $("#side").remove() ...

  6. Java实现相似结构表算法

    [产品需求] 对所有元数据进行分析,匹配出表字段相似度达到阈值的向相似结构表关系数据. 网上没有搜到相关算法实现,只能自己动手了. [算法实现] 简单点实现的话,可以轮询所有表,每张表都和其它表进行匹 ...

  7. 09 - Shell流程控制语句

    1. if-else语句 能够使用if条件语句进行条件判断 1.1 if 语法 if 条件 then 命令 fi if 条件; then 命令; fi 1.2 if-else 语法 if 条件 the ...

  8. lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O

    -- create a class Animal={name = "no_name" , age=0 } function Animal:bark(voice) print(sel ...

  9. 笔记3:Tensorflow2.0实战之MNSIT数据集

    最近Tensorflow相继推出了alpha和beta两个版本,这两个都属于tensorflow2.0版本:早听说新版做了很大的革新,今天就来用一下看看 这里还是使用MNSIT数据集进行测试 导入必要 ...

  10. HTML之CSS Animation 属性常用动画

    引入下面的样式表后 -webkit-animation: tada 1s ease 0.3s infinite both; -webkit-animation: name duration timin ...