【云安全】云原生- K8S kubeconfig 文件泄露
什么是 kubeconfig 文件?
kubeconfig 文件是 Kubernetes 的配置文件,用于存储集群的访问凭证、API Server 的地址和认证信息,允许用户和 kubectl 等工具与 Kubernetes 集群进行交互。它通常包含多个集群的配置,支持通过上下文(context)切换不同的集群、用户和命名空间。kubeconfig 文件的典型路径是 ~/.kube/config,但也可以通过 KUBECONFIG 环境变量指定其他路径。
组成部分
- clusters: 存储 Kubernetes 集群的信息,包括集群的 API 服务器地址和 CA 证书。
- users: 存储与集群进行交互的用户信息,包括认证凭证(如用户名、密码、Bearer token 或证书)。
- contexts: 定义了一个上下文,关联了特定的集群、用户和命名空间,用户通过上下文来决定连接哪个集群。
- current-context: 指定当前使用的上下文。
泄露风险
如果 kubeconfig 文件被泄露,攻击者可以使用其中的信息访问 Kubernetes 集群。具体风险包括:
- 非法访问集群:攻击者可以用泄露的 kubeconfig 文件直接连接到集群,执行任意操作,甚至获取敏感数据。
- 数据泄露:集群中可能存储了大量敏感数据(如私密配置、数据库凭证等),攻击者一旦访问成功,可能会窃取数据。
- 权限滥用:如果文件中包含管理员权限,攻击者可以完全控制集群,修改配置,甚至删除资源。
常见的泄露途径
1. 版本控制系统(VCS)
- 错误提交:开发人员不小心将
kubeconfig
文件提交到 GitHub、GitLab 或其他公共代码库。 - 未配置
.gitignore
:如果没有正确设置.gitignore
文件,kubeconfig
文件可能会被误提交到版本控制系统,导致泄露。 - 历史记录泄露:即使文件已删除或更改,如果历史提交记录中包含了该文件,它仍然可以通过版本控制系统恢复。
2. 不当的文件权限
- 操作系统权限配置不当:如果
kubeconfig
文件的权限过于宽松(如 777),非授权用户或程序也可以访问该文件。 - 误共享文件:将
kubeconfig
文件存储在共享文件夹或公共目录中,导致文件被其他用户访问。
3. 开发环境泄露
- 不安全的开发机器:如果开发人员在未加密的本地计算机上存储
kubeconfig
文件且机器遭到入侵,攻击者可以获取该文件。 - 共享开发环境:如果开发环境被多个开发人员共享,并且没有进行严格的访问控制,
kubeconfig
文件也可能被其他人访问。
4. 云平台配置错误
- 不当的 IAM 配置:如果将 Kubernetes 集群的凭证(如 token 或证书)存储在云提供商的存储中(例如 AWS S3、Google Cloud Storage),并且存储桶或对象没有正确的访问控制策略,可能导致凭证被泄露。
- 错误配置的 API 访问:如果云平台上设置的 Kubernetes 访问控制策略不严格,恶意用户可能通过漏洞获得凭证。
5. 容器镜像
- 凭证硬编码在镜像中:某些开发人员可能会将凭证硬编码到应用程序中或将
kubeconfig
文件放入容器镜像中,从而使凭证在镜像被拉取时泄露。 - 容器共享:在多个容器之间不当共享 Kubernetes 凭证可能会导致泄露。
6. 日志文件泄露
- 错误的日志记录:应用程序或集群的日志文件中可能意外记录了
kubeconfig
文件的内容或认证信息(如 token、证书等)。 - 日志文件权限不足:如果日志文件的权限过于宽松,攻击者可能从日志文件中提取出凭证信息。
7. 社交工程与钓鱼攻击
- 钓鱼邮件:攻击者通过钓鱼邮件或社交工程手段,诱使用户将
kubeconfig
文件上传到不安全的地方或通过不安全的方式发送。 - 假冒网站:攻击者可能创建假冒的 Kubernetes 登录页面或API接口,诱使用户上传
kubeconfig
文件,进而窃取凭证。
8. 不当的文件备份和迁移
- 备份未加密:如果
kubeconfig
文件被备份但没有进行加密,备份文件可能成为泄露途径。 - 无安全传输:在迁移或传输
kubeconfig
文件时,使用不安全的方式(如 FTP 或未加密的 HTTP)可能导致文件在传输过程中被窃取。
9. 恶意软件与病毒
- 木马或恶意软件:攻击者可能通过恶意软件或病毒窃取本地文件,包括
kubeconfig
文件。这些恶意软件可能会扫描本地文件系统并自动上传敏感文件。 - 键盘记录器:如果计算机感染了键盘记录器,攻击者可以捕捉到用户输入的凭证。
10. 不当的第三方工具或插件
- 不信任的工具:一些第三方工具、插件或应用程序可能会不安全地处理或存储 Kubernetes 凭证。如果这些工具存在漏洞或不安全的设计,它们可能会导致
kubeconfig
文件的泄露。 - 公开共享的 API:通过某些 API 或工具访问 Kubernetes 集群时,如果没有加密传输或者 API 配置不当,可能导致凭证泄露。
11. 共享或过期的凭证
- 与他人共享凭证:如果管理员或开发人员将
kubeconfig
文件共享给他人,但没有撤销过期或不再使用的凭证,也可能导致凭证泄露。 - 公共访问控制:某些情况下,
kubeconfig
文件可能与其他用户共享或传递,而没有采取适当的访问控制。
利用方式
攻击者获取到config文件后,如何利用?
1. kubectl 官方客户端连接工具
安装工具 | Kubernetes
我这里使用scoop安装kubectl工具
#获取node信息
kubectl -s https://192.168.48.142:6443 --kubeconfig=config --insecure-skip-tls-verify get node#获取pod信息
kubectl -s https://192.168.48.142:6443 --kubeconfig=config --insecure-skip-tls-verify get pod#创建恶意pod
kubectl -s https://192.168.48.142:6443 --kubeconfig=config --insecure-skip-tls-verify create -f 1.yaml
2. dashboard 登录
使用Kubeconfig方式进行登录,选择获取到的config文件
登录成功,创建恶意pod
如何防范
为了防止 Kubernetes kubeconfig
文件泄露,需要采取一系列的安全措施来保护该文件及其内容。以下是一些有效的防护措施:
1. 限制文件访问权限
文件权限设置:确保 kubeconfig
文件只能由授权用户访问,使用操作系统的文件权限控制功能,限制文件的读写权限。
设置文件权限为 600(仅允许文件所有者读写):
chmod 600 ~/.kube/config
目录权限:确保 .kube
目录的权限足够严格,防止其他用户查看文件:
chmod 700 ~/.kube
2. 避免加入版本控制系统
使用 .gitignore
:确保 kubeconfig
文件和其他敏感配置文件不被意外提交到 Git 仓库。将 .kube/
目录添加到 .gitignore
文件中,防止泄露:
echo ".kube/" >> .gitignore
3. 使用环境变量指定路径
限制文件位置:通过设置 KUBECONFIG
环境变量指定 kubeconfig
文件的路径,这样可以将敏感配置文件存放在更安全的位置,而不是默认的 ~/.kube/config
。
export KUBECONFIG=/path/to/secure/config
限制环境变量访问:确保只有授权的进程和用户能够访问 KUBECONFIG
环境变量。避免通过共享的环境或配置文件暴露该变量。
4. 使用安全的身份验证和认证方式
避免存储敏感凭证:避免将 API Token 或证书等敏感凭证直接存储在 kubeconfig
文件中。可以使用外部的认证机制(如 OAuth2、AWS IAM、Azure AD)来替代硬编码凭证。
使用短期证书或 Token:如果必须使用 Token 或证书,尽量使用短期有效的证书或 Token,并定期轮换它们。
启用多因素认证:尽量启用多因素认证(MFA),增加一个额外的安全层,减少凭证泄露的风险。
5. 限制访问控制
最小权限原则:为用户和服务帐户分配最小权限,确保即使 kubeconfig
文件泄露,攻击者获得的权限也受到限制。使用 RBAC(Role-Based Access Control)确保用户只能访问他们需要的资源。
限制 API 服务器访问:通过防火墙、IP 白名单或 VPN 等方式,限制对 Kubernetes API Server 的访问,避免外部未经授权的访问。
6. 审计和监控
启用审计日志:启用 Kubernetes 审计日志,以便在发生敏感操作时能够及时发现。这样可以追踪任何滥用 kubeconfig
文件的行为。
监控配置文件访问:监控 kubeconfig
文件的访问和修改操作,任何未经授权的访问都能被迅速识别并响应。
7. 定期审计和更新 kubeconfig
文件
定期更换凭证:定期更换 kubeconfig
文件中的 Token、证书和凭证,减少凭证泄露后的潜在风险。
清理无用的 kubeconfig
文件:确保只有必要的用户或机器持有 kubeconfig
文件,对于不再使用的配置文件及时删除。
8. 加密存储
加密文件存储:如果需要在磁盘上存储 kubeconfig
文件,可以考虑使用加密文件系统或工具,如 LUKS(Linux Unified Key Setup)来加密磁盘分区,确保即使文件被窃取,也无法被轻易解密。
9. 在容器和云环境中使用 IAM/Service Account
容器化部署:如果在容器环境中部署 Kubernetes 客户端,避免将 kubeconfig
文件直接嵌入容器镜像。使用基于环境变量或 Kubernetes Secrets 等方式管理凭证。
云平台 IAM:在云平台(如 AWS、Azure、GCP)中,利用 IAM(Identity and Access Management)来管理访问,而不是依赖本地的 kubeconfig
文件。例如,AWS 可以使用 eks
配置文件或 IAM 角色来访问 Kubernetes。
总结
kubeconfig
文件是 Kubernetes 集群访问的关键凭证,泄露可能导致严重的安全后果。通过限制文件访问、避免上传至版本控制系统、使用更安全的认证方式、启用审计和监控等措施,可以大大降低 kubeconfig
文件泄露的风险,保护 Kubernetes 集群免受攻击。
相关文章:

【云安全】云原生- K8S kubeconfig 文件泄露
什么是 kubeconfig 文件? kubeconfig 文件是 Kubernetes 的配置文件,用于存储集群的访问凭证、API Server 的地址和认证信息,允许用户和 kubectl 等工具与 Kubernetes 集群进行交互。它通常包含多个集群的配置,支持通过上下文&am…...
【愚公系列】《Python网络爬虫从入门到精通》008-正则表达式基础
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...

【Linux】Ext2文件系统、软硬链接
Ext2文件系统 一.理解硬件1.磁盘、服务器、机柜、机房2.磁盘的物理结构3.磁盘的存储结构4.磁盘的逻辑结构1.理解过程2.真实过程 5.CHS地址、LBA地址转换 二.引入文件系统1.引入"块"概念2.引入"分区"概念3.引入"inode"概念 三.Ext2文件系统1.宏观…...

ATF系统安全从入门到精通
CSDN学院课程连接:https://edu.csdn.net/course/detail/39573...

【算法专场】哈希表
目录 前言 哈希表 1. 两数之和 - 力扣(LeetCode) 算法分析 算法代码 面试题 01.02. 判定是否互为字符重排 编辑算法分析 算法代码 217. 存在重复元素 算法分析 算法代码 219. 存在重复元素 II 算法分析 算法代码 解法二 算法代码 算法…...

Beszel监控Docker安装
一、Beszel Hub安装 #Beszel Hub安装 mkdir -p ./beszel_data && \ docker run -d \--name beszel \--restartunless-stopped \-v ./beszel_data:/beszel_data \-p 8090:8090 \henrygd/beszel#创建账号 账号/密码:adminadmin.com/adminadmin.com 二、Besz…...
如何学习Elasticsearch(ES):从入门到精通的完整指南
如何学习Elasticsearch(ES):从入门到精通的完整指南 嘿,小伙伴们!如果你对大数据搜索和分析感兴趣,并且想要掌握Elasticsearch这一强大的分布式搜索引擎,那么你来对地方了!本文将为…...
【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis
mybatis 的常用配置 配置数据库连接 #驱动类名称 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #数据库连接的url spring.datasource.urljdbc:mysql://127.0.0.1:3306/mybatis_test characterEncodingutf8&useSSLfalse #连接数据库的名 spring.datasourc…...

CSV格式和普通EXCEL格式文件的区别
CSV 文件(.csv) 普通的 Excel 文件(.xlsx 或 .xls) 主要体现在 文件格式、数据存储、功能支持 等方面: 文件格式 比较项CSV 文件 (.csv)Excel 文件 (.xlsx/.xls)文件类型纯文本文件二进制或 XML 格式数据分隔逗号(,)…...

使用 Vite + React 19 集成 Tailwind CSS 与 shadcn/ui 组件库完整指南
使用 Vite React 19 集成 Tailwind CSS 与 shadcn/ui 组件库完整指南 🌟 前言一、创建 React 19 项目二、集成 Tailwind CSS1️⃣ 安装依赖2️⃣ 配置 Vite 插件3️⃣ 引入 Tailwind4️⃣ 启动项目 三、配置路径别名1️⃣ 修改 TypeScript 配置2️⃣ 安装类型声明3…...
【java】基本数据类型和引用数据类型
在 Java 中,数据类型分为 基本数据类型 和 引用数据类型。它们的本质区别在于存储方式和操作方式。下面我会详细解释这两种数据类型,并用通俗易懂的语言帮助你理解。 1. 基本数据类型(Primitive Data Types) 基本数据类型是 Java…...

mybatis-lombok工具包介绍
Lombok是一个实用的]ava类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。 使用前要加入Lombok依赖...

2. grafana插件安装并接入zabbix
一、在线安装 如果不指定安装位置,则默认安装位置为/var/lib/grafana/plugins 插件安装完成之后需要重启grafana 命令在上一篇讲到过 //查看相关帮助 [rootlocalhost ~]# grafana-cli plugins --help //从列举中的插件过滤zabbix插件 [rootlocalhost ~]# grafana…...

零基础学CocosCreator·第九季-网络游戏同步策略与ESC架构
课程里的版本好像是1.9,目前使用版本为3.8.3 开始~ 目录 状态同步帧同步帧同步客户端帧同步服务端ECS框架概念ECS的解释ECS的特点EntityComponentSystemWorld ECS实现逻辑帧&渲染帧 ECS框架使用帧同步&ECS 状态同步 一般游戏的同步策略有两种:…...
为什么配置Redis时候要序列化配置呢
序列化和反序列化?: 序列化:将对象转换为二进制数据,以便存储到Redis中。 反序列化:将Redis中的二进制数据转换回对象,以便在应用程序中使用。 1. 默认序列化器的问题 如果不配置序列化器,Re…...
使用爬虫获取1688商品分类:实战案例指南
在电商领域,获取商品分类信息对于市场分析、选品决策和竞争情报收集至关重要。1688作为国内领先的B2B电商平台,提供了丰富的商品分类数据。通过爬虫技术,我们可以高效地获取这些分类信息,为商业决策提供有力支持。 一、为什么选择…...

C#打印设计器
C# 打印设计器,功能强大却操作简单,小白也能快速上手! 主要功能: 支持多种设计元素: 文字、图片、图形、二维码、条形码等,满足您多样化的设计需求。 灵活排版,精准定位: 支持拖拽…...
Codeforces Round 1004 (Div. 2)(A-E)
题目链接:Dashboard - Codeforces Round 1004 (Div. 2) - Codeforces A. Adjacent Digit Sums 思路 只有两种情况:n1之后没有进位,y-x1。n1之后进位(y-x-1)%90。 代码 void solve(){int x,y;cin>>x>>y;if(y-x1){cout<<…...

pnpm的使用
pnpm的使用 1.安装和使用2.统一包管理工具下载依赖 1.安装和使用 pnpm:performant npm ,意味“高性能的npm”。 pnpm由npm/yarn衍生而来,解决了npm/yarn内部潜在的bug,极大的优化了性能,扩展了使用场景。被誉为“最先进的包管理工具”。 pnpm安装指令: npm i -g p…...

vscode调试redis
系统:ubuntu redis:redis-6.0.3 1.在vs中安装c/c编译插件 2.用vscode打开redis-6.0.3 3.在菜单中找到run->Add Configuration… 4.会在目录中生成一个./vscode目录,里面包含launch.json,修改launch.json中的program:${workspaceFolder}…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...