当前位置: 首页 > news >正文

【云安全】云原生- 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 格式数据分隔逗号(,&#xff09…...

使用 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)

题目链接&#xff1a;Dashboard - Codeforces Round 1004 (Div. 2) - Codeforces A. Adjacent Digit Sums 思路 只有两种情况&#xff1a;n1之后没有进位&#xff0c;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 &#xff0c;意味“高性能的npm”。 pnpm由npm/yarn衍生而来,解决了npm/yarn内部潜在的bug,极大的优化了性能,扩展了使用场景。被誉为“最先进的包管理工具”。 pnpm安装指令: npm i -g p…...

vscode调试redis

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

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...