【云安全】云原生-K8S(四)安全问题分析

Kubernetes(K8S)因其强大的容器编排能力成为了云计算和微服务架构的首选,但同时也带来了复杂的安全挑战。本文将概述K8S的主要安全问题,帮助安全工程师理解潜在威胁,并采取相应的防护措施。 

K8S 攻击面概览

下面两张图总结了 K8S 集群架构中可能存在的安全问题,并在第一张K8S 集群基础架构图中直观标出了潜在的攻击点。

下面是K8S组件存在隐患的默认端口:

组件名称默认端口
api server8080/6443
dashboard8001/30000+/自定义
kubelet10250/10255
etcd2379
kube-proxy8001
docker2375
kube-scheduler10251
kube-controller-manager10252

Kubernetes (K8s) 的安全问题主要来源于不安全的配置,尤其是未授权访问,另外就是配置的泄露。K8s 作为一个复杂的容器编排系统,涉及多个组件和配置文件,如果没有良好的安全控制和严格的配置管理,可能会引发各种安全风险。


一、API Server 未授权访问

API Server 是 Kubernetes 集群的核心管理接口,所有资源请求和操作都通过 kube-apiserver 提供的 API 进行处理。默认情况下,API Server 会监听两个端口:8080 和 6443。如果配置不当,可能会导致未授权访问的安全风险。

8080 端口默认情况下不启用,该端口不需要认证和授权检查。如果意外暴露(v1.20以下版本),攻击者可以直接访问集群资源,导致未授权访问。--insecure-port 和 --insecure-bind-address 参数已经被 废弃,在 Kubernetes v1.20+ 版本中它们已经无法正常使用,尤其是 --insecure-port,只能被设置为 0,否则会导致 API Server 启动失败。

6443 端口默认启用,并且要求认证。如果配置错误,例如将 `system:anonymous` 用户绑定到 `cluster-admin` 用户组,攻击者可能绕过认证,获得集群管理员权限,造成未授权访问。

具体分析文章:【云安全】云原生- K8S API Server 未授权访问-CSDN博客


二、Kubectl Proxy 不安全配置

kubectl proxy 的作用是将 Kubernetes API Server 暴露给本地网络或客户端,允许你通过本地代理与 Kubernetes 集群进行交互。具体来说,kubectl proxy 可以暴露以下内容:

1、Kubernetes API Server

暴露的内容:kubectl proxy 允许你通过代理访问 Kubernetes API Server,进行集群管理和操作。这包括访问集群资源(如 Pods、Services、Deployments、ConfigMaps 等),执行命令(例如 kubectl get、kubectl apply)。

风险:如果没有配置适当的认证和授权,任何可以访问代理端口的用户都可以通过它进行操作,甚至执行恶意行为。即导致了“API Server未授权访问”

漏洞复现:

kubectl proxy --port=8080 --address=0.0.0.0 --accept-hosts='.*' &#验证,查看进程
ps aux | grep kubectl | grep -v grep#关闭
kill <PID>

典型的API Server未授权访问页面,具体分析见上文“API Server 未授权访问”

2、Kubernetes Dashboard

暴露的内容:如果你在集群中部署了 Kubernetes Dashboard,kubectl proxy 可以暴露该 Dashboard 的 Web 界面,使你能够通过浏览器访问 Dashboard。默认情况下,Dashboard 可以在 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ 访问。

风险:如果没有启用适当的认证(如 OIDC 或 RBAC),攻击者可能利用代理访问 Dashboard,并进行未授权的操作。具体分析见下文“Dashboard未授权访问”!

3、集群内的其他服务

暴露的内容:kubectl proxy 还可以访问集群中暴露的其他服务和端点。例如,通过代理,你可以访问 Kubernetes 集群中的某些 HTTP 服务,尤其是那些已通过 Kubernetes Service 暴露的服务。

风险:如果某些服务没有进行适当的身份验证或授权控制,攻击者可能利用 kubectl proxy 访问这些服务,并执行恶意操作。

4、API 扩展端点

暴露的内容:Kubernetes 支持 API 扩展,如自定义资源定义(CRDs)。kubectl proxy 允许你访问和管理这些扩展 API 端点。

风险:如果这些自定义资源没有严格的访问控制,攻击者可以通过 kubectl proxy 修改或删除重要资源。


    三、etcd 未授权访问

    在 Kubernetes (K8s) 中,etcd 是一个关键的分布式键值存储系统,它存储了集群的所有配置信息和状态数据。由于它存储着 K8s 集群的核心数据,因此保护 etcd 是非常重要的。以下是 etcd 未授权访问产生的原因:

    1、未加密的数据传输:

    默认情况下,etcd 可能会在集群中使用未加密的 HTTP 通信协议。没有加密的传输可能导致中间人攻击(MITM),攻击者可能会截获、篡改或伪造请求,进而导致敏感数据泄露。

    2、未加密的数据存储:

    如果 etcd 的数据存储未加密,存储在磁盘上的敏感数据(如 API 密钥、身份验证凭证等)可能会被未经授权的用户访问。如果攻击者能够访问存储卷,他们可能会窃取这些数据。

    3、缺乏认证和授权:

    如果 etcd 没有启用身份验证和授权机制,任何能够访问 etcd 实例的用户或进程都可以读写数据。缺乏访问控制会导致潜在的安全漏洞,攻击者可以篡改配置或获取敏感数据。

    4、不安全的集群通信:

    如果 etcd 集群之间的通信没有加密或者没有正确配置 TLS,集群成员之间的通信可能会受到攻击。攻击者可以伪造数据或与集群进行恶意交互。

    5、未经审计的访问:

    如果没有启用审计日志,etcd 可能无法记录所有对数据的访问和修改。缺乏审计日志使得追踪恶意行为变得困难,增加了诊断和响应的复杂性。

    6、Etcd 服务的暴露:

    如果 etcd 服务被公开在互联网上且没有妥善保护(如防火墙规则、网络隔离、身份验证等),攻击者可以直接访问 etcd,造成安全风险。

    具体分析文章:【云安全】云原生- K8S etcd 未授权访问-CSDN博客


    四、Kubelet 未授权访问

    Kubelet未授权访问通常指的是未经过身份验证的用户或服务能够直接访问Kubelet的API,可能导致集群安全风险。Kubelet负责管理每个节点上的Pod和容器,若未授权访问未被妥善管控,攻击者可以利用此漏洞获取敏感信息或控制容器。

    该问题主要是由 /var/lib/kubelet/config.yaml 以下不安全配置引起

    10250端口:默认开启端口,但是需要授权

    10255端口:只读端口,默认不开放,需要进行配置

    具体分析文章:【云安全】云原生- K8S Kubelet 未授权访问-CSDN博客


    五、kubeconfig文件泄露

    kubeconfig 文件是 Kubernetes 的配置文件,kubectl 使用它来连接和与 Kubernetes 集群交互。它通常位于 ~/.kube/config 路径下,包含多个上下文、集群、用户的配置信息,用于定义 kubectl 如何与不同的集群进行通信。 

    kubeconfig 文件如果泄露,可能会导致攻击者获得对 Kubernetes 集群的访问权限。常见的泄露途径包括:将其上传至版本控制系统(如 GitHub)时未忽略该文件,存储在不安全的目录中,或通过不当的权限管理使得文件可被其他用户读取。攻击者可以通过 Webshell、GitHub 等方式获取到此文件,从而通过 API Server 接管整个 Kubernetes 集群,控制所有容器。kubeconfig 文件作为集群的管理凭证,包含关于集群的详细信息,如 API Server 地址、认证凭证等。如果攻击者能够访问到该文件(如办公网员工机器被入侵或文件泄露到 GitHub),他们可以直接通过 API Server 获得集群的控制权限,导致严重的安全风险和隐患。

    具体分析文章:【云安全】云原生- K8S kubeconfig 文件泄露-CSDN博客


    六、Dashboard未授权访问

    面板安装教程:【云安全】云原生-K8S(三) 安装 Dashboard 面板-CSDN博客 

    漏洞复现

    通过以下命令编辑deployment

    kubectl -n kubernetes-dashboard edit deployment kubernetes-dashboard

    将以下配置添加到args字段中

    - --enable-skip-login

    这样就可以在登录界面点击跳过登录进dashboard 

    将默认的Kubernetes-dashboard绑定cluster-admin,拥有管理集群管权限 

    kubectl create clusterrolebinding dashboard-1 --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:kubernetes-dashboard

    访问Kubernetes 仪表盘,出现了跳过按钮,点击跳过进入dashboard

    创建恶意POD


    总结

    K8S提供了强大的容器编排能力,但同时也带来了诸多安全风险,尤其是未授权访问风险。至于其他web安全通用问题(如XSS、SQL注入等)和容器特有的安全问题(如镜像漏洞、容器隔离性问题等),虽然对K8s来说也是需要关注的,但从K8s本身的架构和配置角度来说,确实更多的是与配置相关的安全问题。如果你有任何关于K8S安全的疑问或想深入了解具体攻击手法,欢迎在评论区讨论!

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/17910.html

    如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    【Unity新手】Text不显示字的问题解决办法

    很多同学在unity里导入了一个Text发现字没有显示出来为什么呢&#xff1f; 首先在网络上下载一个.ttf或者.otf字体文件&#xff0c;导入资源&#xff0c;比如说我下载了黑体.otf 然后导入unity&#xff0c;右键字体TextMesgPro-FontAsset 然后字体设置里添加上就可以了

    基于Flask的影视剧热度数据可视化分析系统的设计与实现

    【FLask】基于Flask的影视剧热度数据可视化分析系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 随着互联网技术的飞速发展&#xff0c;影视剧行业的数据量呈爆炸性增长&#x…

    React 低代码项目:组件设计

    React 低代码项目&#xff1a;组件设计 Date: February 6, 2025 React表单组件 **目标&#xff1a;**使用 Ant Design 表单组件&#xff0c;开发登录、注册、搜索功能 内容&#xff1a; 使用 React 表单组件、受控组件使用 Ant Design 表单组件使用 表单组件的校验和错误提…

    vue-plugin-hiprint (vue2

    页面效果 <template><div><div class="d-flex flex-column mt5"><div class="d-flex flex-row " style="margin-bottom: 10px;justify-content: center;"><!-- 纸张大小 A3、A4 等 --><div class="paper…

    C++17 中的 std::reduce:详细教程

    文章目录 1. 简介2. 函数签名3. 使用场景3.1 简单的累加操作3.2 自定义归并操作3.3 并行计算的性能优势 4. 注意事项4.1 归并操作的结合律和交换律4.2 默认值的使用 5. 总结 1. 简介 std::reduce 是 C17 标准库中引入的一个算法&#xff0c;用于对范围内的元素进行归并操作。它…

    kafka介绍,kafka集群环境搭建,kafka命令测试,C++实现kafka客户端

    目录 kafka介绍kafka集群环境搭建zookeeper安装与配置kafka安装与配置 kafka命令测试C实现kafka客户端librdkafka库编译新版本cmake编译cppkafka库编译C实现kafka生产者和消费者客户端 kafka介绍 定义与概述 Apache Kafka 是一个开源的分布式流处理平台&#xff0c;最初由 Lin…

    华为云+硅基流动使用Chatbox接入DeepSeek-R1满血版671B

    华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 硅基流动 1.1 注册登录 1.2 实名认证 1.3 创建API密钥 1.4 客户端工具 OllamaChatboxCherry StudioAnythingLLM 资源包下载&#xff1a; AI聊天本地客户端 接入Chatbox客户端 点击设置 选择SiliconFloW API 粘贴1.3创…

    阿里云百炼平台对接DeepSeek官方文档

    目录 1、支持的模型 2、快速开始 2.1、OpenAI兼容 2.1.1、python示例代码 返回结果 2.1.2、Node.js示例代码 返回结果 2.1.3、HTTP示例代码 返回结果 2.2、DashScope 2.2.1、python示例代码 返回结果 2.2.2、java示例代码 返回结果 2.2.3、HTTP代码示例 返回结…

    【深度强化学习】策略梯度算法:REINFORCE

    策略梯度 强化学习算法进阶 Q-learning、DQN 及 DQN 改进算法都是基于价值&#xff08;value-based&#xff09;的方法&#xff0c;其中 Q-learning 是处理有限状态的算法&#xff0c;而 DQN 可以用来解决连续状态的问题。在强化学习中&#xff0c;除了基于值函数的方法&#…

    DeepSeek接口联调(postman版)

    第一步&#xff1a;获取API key 获取APIkeys链接https://platform.deepseek.com/api_keys 点击创建 API key 即可免费生成一个key值&#xff0c;别忘记保存。 第二步&#xff1a;找到deepseek官方接口文档 文档地址&#xff1a;https://api-docs.deepseek.com/zh-cn/ 第三步…

    Sublime Text 3 中的 Pylinter 配置

    在 Sublime Text 3 中配置 Pylinter&#xff08;如 pylint&#xff09;来进行 Python 代码静态分析&#xff0c;可以帮助你提升代码质量、检测潜在的错误、强制遵守编码标准等。为了在 Sublime Text 3 中配置 pylint&#xff0c;你需要确保 pylint 已安装&#xff0c;并设置好相…

    LC-搜索二维矩阵II、相交链表、反转链表、回文链表、环形链表、环形链表ll

    搜索二维矩阵II 方法&#xff1a;从右上角开始搜索 我们可以从矩阵的右上角开始进行搜索。如果当前元素 matrix[i][j] 等于 target&#xff0c;我们直接返回 true。如果 matrix[i][j] 大于 target&#xff0c;说明 target 只能出现在左边的列&#xff0c;所以我们将列指针向左…

    支持列表拖拽嵌套,AI流式输出的多模态文档编辑器flowmix/docx: 全面升级

    hi, 大家好, 我是徐小夕. 马上又到周五了, 最近也收到很多用户对 flowmix/docx 多模态文档编辑器的反馈&#xff0c;我们也做了一波新功能的升级&#xff0c;今天就和大家分享一下 flowmix/docx 多模态文档编辑器的最新更新. 演示地址: https://flowmix.turntip.cn/docx 以下是…

    服务器中部署大模型DeepSeek-R1 | 本地部署DeepSeek-R1大模型 | deepseek-r1部署详细教程

    0. 部署前的准备 首先我们需要足够算力的机器&#xff0c;这里我在vultr中租了有一张A16显卡一共16GB显存的服务器作为演示。部署的模型参数为14b的。如果需要部署满血版本671b的&#xff0c;需要更大的算力支持&#xff0c;这里由于是个人资金有限&#xff0c;就演示14b的部署…

    Linux软件编程(1)

    1.总述&#xff1a; 2.标准io与文件io 标准C库提供的一套文件操作接口&#xff1b; Linux内核为Linux操作系统提供的一套文件操作接口。 3.函数接口&#xff1a; 注意 &#xff1a;什么是文件流&#xff1f; 数据从文件流入和流出体现的字节流。 注意&#xff1a;od -c 文件…

    网页五子棋——通用模块

    目录 项目创建 通用功能模块 错误码 自定义异常类 CommonResult jackson 加密工具 项目创建 使用 idea 创建 SpringBoot 项目&#xff0c;并引入相关依赖&#xff1a; 配置 MyBatis&#xff1a; 编辑 application.yml&#xff1a; spring:datasource: # 数据库连接配…

    【工具】在idea运行go后端

    场景&#xff1a;从gitee仓库下载一个go语言前后端分离项目&#xff0c;想跑通前后端 ---------------------------------------------------------------------------------------------------------------------- 后端 1.下载插件 在idea的setting里面输入go&#xff0c;…

    通达信如何导出以往的分时数据

    1当天分时数据的导出 以梦网科技为例&#xff0c;在分笔交易上面右键&#xff0c;选择“放大”&#xff0c;放大后选择“选项”&#xff0c;选择“数据导出”&#xff0c;弹出界面中修改路径与文件名即可。 2以往数据的导出 以梦网科技为例&#xff0c;今天是2025年2月14号…

    【面试题系列】Java 多线程面试题深度解析

    本文涉及Java 多线程面试题&#xff0c;从基础到高级&#xff0c;希望对你有所帮助&#xff01; 一、基础概念类 1. 请简述 Java 中线程的几种状态及其转换条件 题目分析&#xff1a;这是多线程基础中的基础&#xff0c;考查对线程生命周期的理解&#xff0c;在多线程编程中&…

    Java Virtual Machine(JVM)

    JVM跨平台原理 跨平台&#xff1a;一次编译&#xff0c;到处运行 本质&#xff1a;不同操作系统上运行的JVM不一样&#xff0c;只需要把java程序编译成一份字节码文件&#xff0c;JVM执行不同的字节码文件。 Java是高级语言&#xff0c;提前编译一下&#xff08;变成字节码文件…