0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

k8s安全漏洞如何解决

阿铭linux 来源:lp 2019-03-26 14:27 次阅读

具体来说,恶意用户可以使用 KubernetesAPI 服务器连接到后端服务器以发送任意请求,并通过 API 服务器的 TLS 凭证进行身份验证。这一安全漏洞的严重性更在于它可以远程执行,攻击并不复杂,不需要用户交互或特殊权限。

更糟糕的是,在 Kubernetes 的默认配置中,允许所有用户(经过身份验证和未经身份验证的用户)执行允许此升级的发现 API 调用。也就是说,任何了解这个漏洞的人都可以掌控你的 Kubernetes 集群。

最后的痛苦之处在于,对于用户而言,没有简单的方法来检测此漏洞是否已被使用。由于未经授权的请求是通过已建立的连接进行的,因此它们不会出现在 Kubernetes API 服务器审核日志或服务器日志中。请求确实会出现在 kubelet 或聚合的API服务器日志中,但是却无法与正确通过 Kubernetes API 服务器授权和代理的请求区分开来。

现在,Kubernetes 已经发布了修补版本 v1.10.11、v1.11.5、v1.12.3 和 v1.13.0-rc.1。如果仍在使用 Kubernetes v1.0.x 至 Kubernetes v1.9.x 版本,请即刻停止使用并升级到修补版本。

如果由于某种原因无法进行升级,也必须暂停使用聚合的 API 服务器,并从不应具有对 kubelet API 的完全访问权限的用户中删除 pod exec/attach/portforward 权限。

Kubernetes作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。API Server是集群内部各个组件通信的中介,也是外部控制的入口。所以Kubernetes的安全机制基本就是围绕保护API Server来设计的。

Kubernetes使用了认证(Authentication)、鉴权(Authorization)、准入控制(Admission Control)三步来保证API Server的安全。

Kubelet 认证

默认情况下,所有未被配置的其他身份验证⽅法拒绝的,对kubelet的HTTPS端点的请求将

被视为匿名请求,并被授予system:anonymous⽤户名和system:unauthenticated组。

如果要禁⽤匿名访问并发送 401 Unauthorized 的未经身份验证的请求的响应:

启动kubelet时指定 --anonymous-auth=false

对kubelet HTTPS端点启⽤X509客户端证书身份验证:

--client-ca-file 提供 CA bundle 以验证客户端证书

启动apiserver时指定--kubelet-client-certificate和--kubelet-client-key标志

Secret

Kubernetes设计了⼀种资源对象叫做Secret,分为两类,⼀种是⽤于ServiceAccount的

service-account-token

另⼀种是⽤于保存⽤户⾃定义保密信息的Opaque。我们在ServiceAccount中⽤到包含三个

部分:Token、ca.crt、namespace。

token 是使⽤API Server私钥签名的JWT。⽤于访问API Server时,Server端认证。

ca.crt ,根证书。⽤于Client端验证API Server发送的证书。

namespace , 标识这个service-account-token的作⽤域名空间。

更详细参考:https://k8smeetup.github.io/docs/admin/kubelet-authenticationauthorization/

通过kubelet攻击Kubernetes

通过kubelet默认配置对Kubernetes集群上的API Server发起特权访,特权访问有可能会获取集群中的敏感信息,也可能导致节点上机器命令执⾏。

API Server提供了对集群各种资源访问和控制的REST API。

在缺少对TLS身份验证,⽽在⼀些默认配置中启⽤了,--anonymous-auth 默认为true

允许匿名身份访问API,端⼝为10250

/pods # 列出正在运⾏中的pod

/exec # 在容器中运⾏命令并反回信息

这⾥我从shodan上随意找的IP进⾏测试

https://192.168.4.110:10250/pods

获取信息执⾏容器中的命令:

CURL请求:

不过有点可惜,较⽼版本现在已经⾏不通了。

除了通过curl请求,提供了这样的⼀个脚本执⾏Kubelet Anonymous RCE :

https://github.com/serain/kubelet-anon-rce

帮助⽂档例⼦:

如果能执⾏命令可以通过:

/var/run/secrets/kubernetes.io/serviceaccount 获取token

然后访问kube-api server

测试步骤:

1. 访问pods获取信息

2. 获取namespace、pods、container

3. 执⾏exec获取token

4. /var/run/secrets/kubernetes.io/serviceaccount

5. 利⽤Token访问API Server进⾏对pods操作

Kube-Hunter寻找漏洞

使⽤Kube-hunter寻找Kubernetes集群中的安全漏洞。

会对apiserver、dashboard、etcd、hosts、kubelet、ports、proxy进⾏测试。

https://github.com/aquasecurity/kube-hunter

通过⼀些信息判断,发现匿名身份验证,可以访问pods 查看信息。

对外⽹IP扫描:

Kubelet API | 91.xxx.xxx.x2:10255

Kubelet API | 91.xxx.xxx.x2:10250

API Server | 91.xxx.xxx.x2:6443

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    9046

    浏览量

    85238
  • API
    API
    +关注

    关注

    2

    文章

    1489

    浏览量

    61854
  • 安全漏洞
    +关注

    关注

    0

    文章

    150

    浏览量

    16708

原文标题:干货 | k8s安全漏洞如何解决 (上)

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    k8s核心原理学习指南3

    k8s学习3 - 核心原理
    发表于 09-25 16:37

    OpenStack与K8s结合的两种方案的详细介绍和比较

    OpenStack与K8S结合主要有两种方案。一是K8S部署在OpenStack平台之上,二是K8S和OpenStack组件集成。
    的头像 发表于 10-14 09:38 2.7w次阅读

    如何使用kubernetes client-go实践一个简单的与K8s交互过程

    【导读】Kubernetes项目使用Go语言编写,对Go api原生支持非常便捷。 本篇文章介绍了如何使用kubernetes client-go实践一个简单的与K8s交互过程
    的头像 发表于 02-02 11:16 6803次阅读
    如何使用kubernetes client-go实践一个简单的与<b class='flag-5'>K8s</b>交互过程

    Docker不香吗为什么还要用K8s

    Docker 虽好用,但面对强大的集群,成千上万的容器,突然感觉不香了。 这时候就需要我们的主角 Kubernetes 上场了,先来了解一下 K8s 的基本概念,后面再介绍实践,由浅入深步步为营
    的头像 发表于 06-02 11:56 3421次阅读

    简单说明k8s和Docker之间的关系

    这篇文章主要介绍了k8s和Docker关系简单说明,本文利用图文讲解的很透彻,有需要的同学可以研究下 最近项目用到kubernetes(以下简称k8sks之间有
    的头像 发表于 06-24 15:48 3382次阅读

    K8S集群服务访问失败怎么办 K8S故障处理集锦

    问题1:K8S集群服务访问失败?     原因分析:证书不能被识别,其原因为:自定义证书,过期等。 解决方法:更新证书即可。 问题2:K8S集群服务访问失败? curl: (7) Failed
    的头像 发表于 09-01 11:11 1.6w次阅读
    <b class='flag-5'>K8S</b>集群服务访问失败怎么办 <b class='flag-5'>K8S</b>故障处理集锦

    K8S(kubernetes)学习指南

    K8S(kubernetes)学习指南
    发表于 06-29 14:14 0次下载

    mysql部署在k8s上的实现方案

    的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。这里主要讲 mysql 部署在 k8s 上,mysql 部署在 k8s 上的优势主要有以下几点。
    的头像 发表于 09-26 10:39 2486次阅读

    虹科分享|如何解决勒索软件安全漏洞

    近年来,各种网络攻击的数量和频率都在增加,每分钟都会发生数次勒索软件的攻击入侵。如何解决勒索软件安全漏洞?答案是使用移动目标防御(MTD)技术。MTD技术利用多态性,以不可预测的方式向对手隐藏应用程序和操作系统目标。欢迎阅读,了解更多。
    的头像 发表于 07-22 14:24 670次阅读
    虹科分享|如<b class='flag-5'>何解</b>决勒索软件<b class='flag-5'>安全漏洞</b>

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    k8s是什么意思? kubernetes简称K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful
    发表于 07-19 13:14 1101次阅读

    什么是K3sK8sK3sK8s有什么区别?

    Kubernetes,通常缩写为 K8s,是领先的容器编排工具。该开源项目最初由 Google 开发,帮助塑造了现代编排的定义。该系统包括了部署和运行容器化系统所需的一切。
    的头像 发表于 08-03 10:53 7375次阅读

    k8s生态链包含哪些技术

    1. Apache APISIX Ingress 定义   在 K8s 生态中,Ingress 作为表示 K8s 流量入口的一种资源,想要让其生效,就需要有一个 Ingress Controller
    的头像 发表于 08-07 10:56 1198次阅读
    <b class='flag-5'>k8s</b>生态链包含哪些技术

    K8S落地实践经验分享

    k8s 即 Kubernetes,是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。
    的头像 发表于 01-02 11:45 1055次阅读
    <b class='flag-5'>K8S</b>落地实践经验分享

    k8s云原生开发要求

    IO性能。网络要求稳定,建议使用私有网络VPC,并配置与Kubernetes兼容的网络插件。操作系统需与K8s版本匹配,虚拟化平台支持Docker等。此外,还需关注安全配置,如禁用Swap、调整Sysctl等,以及etcd数据存储后端的配置。合理配置硬件可确保
    的头像 发表于 10-24 10:03 185次阅读
    <b class='flag-5'>k8s</b>云原生开发要求

    混合云部署k8s集群方法有哪些?

    混合云部署k8s集群方法是首先需在本地与公有云分别建立K8s集群,并确保网络连接。接着,配置kubeconfig文件连接两集群,并安装云服务插件以实现资源互通。然后,编写Deployment文件部署应用,并使用kubectl命令应用至集群。最后,验证应用状态并监控集群性能
    的头像 发表于 11-07 09:37 119次阅读