上一篇文章,我们着重介绍 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. QT(4)-QAbstractItemView

    @ 目录 1 说明 2 常用函数 2.1 交替行颜色 2.1.1 alternatingRowColors 2.1.2 setAlternatingRowColors 2.2 autoScroll 2 ...

  2. 神经网络入门篇:详解计算一个神经网络的输出(Computing a Neural Network's output)

    一个神经网络的输出 首先,回顾下只有一个隐藏层的简单两层神经网络结构: 图1.3.1 其中,\(x\)表示输入特征,\(a\)表示每个神经元的输出,\(W\)表示特征的权重,上标表示神经网络的层数(隐 ...

  3. 基于Spark对消费者行为数据进行数据分析开发案例

    原创/朱季谦 本文适合入门Spark RDD的计算处理. 在日常工作当中,经常遇到基于Spark去读取存储在HDFS中的批量文件数据进行统计分析的案例,这些文件一般以csv或者txt文件格式存在.例如 ...

  4. 聊聊魔塔社区MGeo模型的部署与运行

    从现今与今后的发展来看,单一的业务不再仅仅依靠于传统的技术开发,而是应该结合AI模型来应用.实践.只有这样,才能更数智化,更高效化,更贴合时代的发展. 魔塔 社区就类似国外的Hugging Face, ...

  5. UVA529 加成序列

    传送门 题目分析 一道 dfs,迭代加深 我们可以很快的猜出来最终 \(m\) 的长度必然是小于 \(10\) 的. 而这种浅深度的问题正好适用于迭代加深. 之后考虑剪枝 优化搜索顺序 : 我们要让序 ...

  6. Java Junit单元测试(入门必看篇)

    Hi i,m JinXiang 前言 本篇文章主要介绍单元测试工具Junit使用以及部分理论知识 欢迎点赞  收藏 留言评论 私信必回哟 博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言 ...

  7. Codeforces Round #704 (Div. 2) A~C题解

    写在前边 链接:Codeforces Round #704 (Div. 2) D就不补了,大fst场. A. Three swimmers 链接:A题链接 题目大意: 给定三个游泳者的到达岸边的周期, ...

  8. Codeforces Round #703 (Div. 2) A、B、D、E题解

    写在前边 链接:Codeforces Round #703 (Div. 2) 这次的交互题是真不会做. A. Shifting Stacks 链接:A题链接 题目大意: 有\(n\)摞高度分别为\(h ...

  9. numpy数组基础

    目录 创建数组 多维数组切片 数组属性 使用数组 数组特殊运算符 索引进阶 花式索引 创建数组 在numpy中,创建数组有很多种方法,例如如下的例子: import numpy as np sws_1 ...

  10. 通信技术 Communication

    缩写 全称 翻译 备注 I2C Inter-Integrated Circuit 集成电路总线 通信协议 SPI Serial Peripheral Interface 串行外设接口 通信协议 QSP ...