上一篇文章,我们着重介绍 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. 从零开始学习web前端技术路线图

    最近我侄子快实习了,学校跟培训机构合作,交两万多可以参与一个培训,培训四个月,可以包就业.侄子问我,是否要去培训,培训出来可以找到工作吗? 现在很多大学生,上学的时候谈恋爱,玩游戏,快要毕业就焦虑了. ...

  2. WebSocket connection to 'ws://127.0.0.1:8089/websocket/0,1,10,admin' failed:

    WebSocket连接失败 背景: 相同项目数据库从mysql变更到sqlite,代码层面基本没有变更,但是WebSocket连接失败,查找多方原因,未找到问题,最后发现新项目JDK为OpenJDK, ...

  3. 舵机驱动——STM32F407ZGT6探索者——HAL库

    舵机驱动--STM32F407ZGT6探索者--HAL库 1.材料准备 开发板:正点原子STM32F407ZGT6探索者 舵机:SG90 舵机线材分辨:褐色 / 红色 / 橘黄色 -- GND / V ...

  4. [转]深入HBase架构解析

    HBase架构讲解非常清晰的一篇文章,转自 http://www.blogjava.net/DLevin/archive/2015/08/22/426877.htmlhttp://www.blogja ...

  5. 用ps命令查看进程的内存

    http://blog.csdn.net/tigerscorpio/article/details/5960705 http://blog.csdn.net/licanhua/article/deta ...

  6. 改变element dialog弹窗的关闭按钮样式

    .el-dialog__headerbtn { top: 8px !important; background: url('https://你路径资源的url图片') left no-repeat; ...

  7. .NET8依赖注入新特性Keyed services

    什么是Keyed service Keyed service是指,为一个需要注入的服务定义一个Key Name,并使用使用Key Name检索依赖项注入 (DI) 服务的机制. 使用方法 通过调用 A ...

  8. Windows 搭建 Flutter 开发环境

    安装 去官网地址下载 Flutter SDK. 下载地址:https://flutter.dev/docs/development/tools/sdk/releases 将安装包解压到你想安装 Flu ...

  9. QT实战 之翻金币游戏

    QT实战 之翻金币游戏 相较于原版的优化: 关卡数据不是用静态的config配置,而是动态生成,每次打开的关卡都生成不同的游戏数据,增加了可玩性: 关卡数据依据关卡等级的不同而生成不同难度的数据,随关 ...

  10. Windows风格的个人网盘,支持文档在线编辑

    这是一个Windows页面风格的个人网盘,支持普通文本.文档.表格.xmind等在线编辑,支持Windows的小组件,例如计算器.WhiteBoard.python 等,其他更多功能待你来发现,也待你 ...