云安全攻防(十一)之 容器编排平台面临的风险

前言

容器技术和编排管理是云原生生态的两大核心部分——前者负责执行,后者负责控制和管理,共同构成云原生技术有机体,我们以 Kubernetes 为例,对容器编排平台可能面临的风险进行分析

容器编排平台面临的风险

作为最为流行的云原生管理与编排系统,Kubernetes具有强大的功能,但同时也具有较高的程序复杂性。我们知道,风险和程序复杂性之间具有一定程度的关系,不过要分析一个复杂系统的风险并不容易

以下是Kubernetes的架构图:

在这里插入图片描述

一个常见的Kubernetes集群,由一个Master节点和三个 Worker 节点组成,Pod 之间借助CNI插件Flannel 实现通信。 Kubernetes 自身的系统Pod(kube-system命名空间内的Pod)主要运行在Master 节点上,除此之外,每个 Worker 节点上也分别有一个 Flannel Pod 和 kube-proxy Pod,所有业务 Pod 分布在三个 Worker 节点上。另外,每个节点上还有一个 Kubelet 服务,负责管理容器

事实上,编排系统和容器之间并非完全独立,列如,我们在Kubernetes集群中需要以 YAML 声明式文件的形式来创建 Pod,而 Pod 只是 一个在逻辑上的概念,实际由一个或者多个容器组成,对容器的配置须以 Pod 的配置方式下发

我们主要从 Kubernetes的接口、网络、访问控制机制和软件漏洞四个方面来讨论容器编排系统所面临的风险

容器基础设施存在的风险

在 Kubernetes 的环境中,容器基础设施面临的风险主要有以下几点:

  • 不安全的第三方组件、大肆传播的恶意镜像和极其容易泄露的敏感信息, Kubernetes提供了 ConfigMaps 和 Secrets 两种资源来单独存储常规配置和敏感信息
  • 不安全的容器应用、不受限制的资源共享和不安全的配置与挂载
  • 集群网络存在的风险
  • 访问控制机制存在的风险,也就是容器管理程序接口存在的风险
  • 容器的软件漏洞

Kubernetes 组件接口存在的风险

Kubernetes 中组件漏洞众多,绝大多数组件以基于 HTTP 或 HTTPS 的 API 形式提供服务,其中,我们日常接触比较多的服务及其端口如下表所示:

组件默认端口说明
API Server6443基于HTTPS的安全端口
API Server8080不安全的HTTP端口,不建议启用
Kubelet10248用于检查 Kubelet 健康状态的 HTTP 端口
Kubelet10250面向 API Server 提供服务的 HTTPS 端口
Dashboard8001提供 HTTP服务的端口
etcd2379客户端与服务端之间通信的端口
etcd2380不同服务端实例之间通信的端口

接下来,我们对这些服务进行风险分析:

API Server

默认情况下,API Server 在 8080 和 6443 两个端口提供服务,其中 8080端口提供的是没有 TLS 加密的 HTTP 服务,且所有达到该端口的请求将绕过所有认证和授权模块(但是仍然会被准入控制模块所处理)。保留该端口主要是为了方便测试及集群初启动

然而生产环境开放 8080 端口,即使绑定本地回环地址(localhost)也是很危险的。如果将该端口暴露在互联网上,那么任何网络可达的攻击者都能通过该端口直接与 API Server 交互,继而控制整个集群

相比之下,6443端口提供的是使用 TLS 加密的 HTTPS 服务,到达的请求必须通过认证和授权机制才能被成功处理。在认证和授权机制配置正确的情况下,6443 端口提供的服务和安全性会更高

Dashboard

默认情况下,我们需要先执行 Kubectl proxy,然后才能通过本地8001端口访问 Dashboard 。但是,如果直接将Dashboard端口映射在宿主机的节点,或者在执行 Kubectl proxy时指定了额外地址参数,那么所有能够访问到宿主机的用户,包括攻击者,都将能够直接访问 Dashboard

kubetcl proxy --address 0.0.0.0 --accept-hosts='^*$'

另外,默认情况下Dashboard 需要登陆认证,但是,如果用户在 Dashboard 的启动参数添加了 --enable-skip-login 选项,那么攻击者能够直接点击 Dashboard 界面 ”跳过“ 按钮,无需登录便可直接进入Dashboard

Kubelet

我们知道,API Server 是整个Kubernetes的神经中枢,以 RESTful API的形式对外提供了大量的应用接口。事实上,Kubelet 也提供了 RESTful API 服务,供 API Server 调用以获取或改变某个Kubernetes 节点上的资源状态

默认配置下,Kubelet 在 10250 端口开放 API服务,另外还监听 10248端口,以供其他组件检查 Kubelet 的运行状态:

curl http://IP:10248/healthz

10248 端口服务相对简单,不存在特别的风险,但10250端口却未必。默认情况下,API Server 在访问 Kubelet 的 API 时需要使用客户端证书,相对来说比较安全,但是还是有列外的情况:

1)攻击者通过某种方式窃取了 API Server 访问 Kubelet 的客户端证书
2)将Kubelet的 --anonymous-auth 参数设置为 true ,且 authorization mode 设置为 AlwaysAllow

如果出现了上述的情况,则网络攻击者都能够直接将 Kubelet 进行交互,从而实现对其所在节点的控制

etcd

Kubernetes集群内的各种资源及其状态均存储在etcd中,如果有办法读取etcd中的数据,就可能获取高权限,从而控制集群。目前,etcd 启动后监听 2379 和 2380 两个端口,前者用于客户端连接,后者用于多个etcd 实例之间的对端通信。再多节点的集群中,为了实现高可用etcd往往在节点IP上(非本地IP)监听,以实现多节点之间的互通、这可能允许外部攻击者访问etcd

默认情况下,两个端口提供的服务都需要相应证书才能访问(禁止匿名访问),这为etcd 的安全性提供了保障。如果攻击者窃取了证书、或者用户将etcd 设置为 允许匿名访问,那么攻击者就可能直接访问 etcd 并窃取数据

集群网络所存在的风险

为了实现集群 Pod 间相互通信,在安装部署 Kubernetes 后,我们往往还要额外安装一个网络插件,常见的网络插件有 Flannel、Calico 和 Cilium 等

在没有其他网络隔离策略和 Pod 安全策略的默认情况下,由于 Pod 与 Pod 之间彼此可连通,且 Pod 内的root用户具有 CAP_NET_RAW权限,集群内部可能发生网络探测、嗅探、拒绝服务和中间人攻击等网络攻击

访问控制机制存在的风险

Kubernetes 中的访问控制机制主要由认证机制、授权机制和准入机制三个部分组成,每一个部分通常会有一种或多种具体实现的机制可供选择。如果访问控制过于宽松,高权限账户可能会滥用,从而对Kubernetes 自身及正在运行的容器产生威胁,除此之外,如果允许针对Kubernetes 的未授权访问,攻击者可能借此直接获得集群管理员的权限

无法根治的软件漏洞

作为一个复杂系统,Kubernetes自然被曝出许多安全漏洞,这类自然也属于 Kubernetes 所面临的的风险

参考资料:《云原生安全-攻防实践与体系构建》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c++11 标准模板(STL)(std::basic_stringbuf)(三)

定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::allocator<CharT> > class basic_stringbuf : public std::basic_streambuf<CharT, Traits> std::basic_stringbuf…

【Git】 git push origin master Everything up-to-date报错

hello&#xff0c;我是索奇&#xff0c;可以叫我小奇 git push 出错&#xff1f;显示 Everything up-to-date 那么看看你是否提交了message 下面是提交的简单流程 git add . git commit -m "message" git push origin master 大多数伙伴是没写git commit -m "…

Rx.NET in Action 第三章学习笔记

3 C#函数式编程思想 本章内容包括 将 C# 与函数式技术相结合使用委托和 lambda 表达式使用 LINQ 查询集合 面向对象编程为程序开发提供了巨大的生产力。它将复杂的系统分解为类&#xff0c;使项目更易于管理&#xff0c;而对象则是一个个孤岛&#xff0c;你可以集中精力分别处理…

电脑屏幕闪烁?别慌!解决方法在这!

“我新买了一台电脑&#xff0c;还没用几天呢&#xff0c;就出现了电脑屏幕闪烁的情况&#xff0c;这让我感到很烦躁。有什么方法可以解决电脑屏幕闪烁的问题呢&#xff1f;” 使用电脑的过程中&#xff0c;我们不难发现电脑屏幕有时候会出现闪烁的情况&#xff0c;这会导致使用…

【考研数学】高等数学第三模块——积分学 | Part II 定积分(反常积分及定积分应用)

文章目录 前言三、广义积分3.1 敛散性概念&#xff08;一&#xff09;积分区间为无限的广义积分&#xff08;二&#xff09;积分区间有限但存在无穷间断点 3.2 敛散性判别法 四、定积分应用写在最后 前言 承接前文&#xff0c;梳理完定积分的定义及性质后&#xff0c;我们进入…

Datawhale Django后端开发入门Task01 Vscode配置环境

首先呢放一张运行成功的截图纪念一下&#xff0c;感谢众多小伙伴的帮助呀&#xff0c;之前没有配置这方面的经验 &#xff0c;但还是一步一步配置成功了&#xff0c;所以在此以一个纯小白的经验分享如何配置成功。 1.选择要建立项目的文件夹&#xff0c;打开文件找到目标文件夹…

论文阅读——Adversarial Eigen Attack on Black-Box Models

Adversarial Eigen Attack on Black-Box Models 作者&#xff1a;Linjun Zhou&#xff0c; Linjun Zhou 攻击类别&#xff1a;黑盒&#xff08;基于梯度信息&#xff09;&#xff0c;白盒模型的预训练模型可获得&#xff0c;但训练数据和微调预训练模型的数据不可得&#xff…

微信小程序data-item设置获取不到数据的问题

微信小程序data-item设置获取不到数据的问题 简单说明&#xff1a; 在微信小程序中&#xff0c;通过列表渲染使用wx:for根据数组中的每一项重复渲染组件。同时使用bindtap给每一项绑定点击事件clickItem&#xff0c;再通过data-item绑定数据。 **问题&#xff1a;**通过data-i…

【SQL应知应会】索引(二)• MySQL版

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 索引 • MySQL版 前言一、索引1.简介2.创建2.1 索引…

【计算机视觉|生成对抗】带条件的对抗网络进行图像到图像的转换(pix2pix)

本系列博文为深度学习/计算机视觉论文笔记&#xff0c;转载请注明出处 标题&#xff1a;Image-to-Image Translation with Conditional Adversarial Networks 链接&#xff1a;Image-to-Image Translation with Conditional Adversarial Networks | IEEE Conference Publicati…

解决ElementUI动态表单校验验证不通过

这里记录一下&#xff0c;写项目时遇到的一个问题&#xff1a;就是动态渲染的表单项&#xff0c;加验证规则后一直不通过&#xff01;&#xff01;&#xff01; 原代码 html部分&#xff1a; <el-form-itemv-for"(teaclass,index) in addFom.classIds":label&quo…

Android Sutdio 导入libs文件夹下的jar包没反应

有点离谱&#xff0c;笨笨的脑子才犯的错误 首先发现问题&#xff1a;转移项目的时候 直接复制粘贴libs文件夹下的jar包到新项目&#xff0c;在build.gradle文件下 使用语句并应用也没反应&#xff08;jar包没有出现箭头且代码报错&#xff0c;找不到&#xff09; implementa…

2023全球创见者大会|企企通总架构师杨华:基于SRM的电子发票解决方案, 破局企业开票困局

01、2023全球创见者大会 2023年8月8日&#xff0c;金蝶30周年庆典&2023全球创见者大会在深圳国际会展中心隆重举行。现场吸引了4000与会来宾齐聚一堂&#xff0c;超过100位演讲嘉宾组成豪华阵容&#xff0c;举办16场行业峰会&#xff0c;呈现了一场数字化领域备受瞩目…

Vue学习之条件渲染

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>条件渲染</title><!--引入Vue--><script type"text/javascript" src"../vue.js"></script></head><body><!--…

【二开】jeecgboot 开发过程方法扩展二开整理

【二开】jeecgboot 开发过程方法扩展二开整理 org.jeecg.modules.system.controller.CommonController#upload 可以二开统一文件上传 返回值增加文件大小 跟文件名称 //自定义 图片前缀savePath jeecgBaseConfig.getUploadRequestHost() savePath;if(oConvertUtils.isNotEm…

ES 概念

es 概念 Elasticsearch是分布式实时搜索、实时分析、实时存储引擎&#xff0c;简称&#xff08;ES&#xff09;成立于2012年&#xff0c;是一家来自荷兰的、开源的大数据搜索、分析服务提供商&#xff0c;为企业提供实时搜索、数据分析服务&#xff0c;支持PB级的大数据。 -- …

【数据库】Sql Server可视化工具SSMS条件和SQL窗格以及版本信息

2023年&#xff0c;第34周&#xff0c;第1篇文章。给自己一个目标&#xff0c;然后坚持总会有收货&#xff0c;不信你试试&#xff01; SQL SERVER 官方本身就有数据库可视化管理工具SSMS&#xff0c;所以大部分都会使用SSMS。以前版本是直接捆绑&#xff0c; 安装完成就自带有…

使用 AndroidX 增强 WebView 的能力

在App开发过程中&#xff0c;为了在多个平台上保持一致的用户体验和提高开发效率&#xff0c;许多应用程序选择使用 H5 技术。在 Android 平台上&#xff0c;通常使用 WebView 组件来承载 H5 内容以供展示。 一.WebView 存在的问题 自 Android Lollipop 起&#xff0c;WebVie…

LeetCode150道面试经典题-- 存在重复元素 II(简单)

1.题目 给你一个整数数组 nums 和一个整数 k &#xff0c;判断数组中是否存在两个 不同的索引 i 和 j &#xff0c;满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 2.示例 示例 1&#xff1a; 输…

小米发布会:雷军成长故事与创新壮举,AI大模型技术引领未来,雷军探索之路之从创业波折到小米AI领航,成就高端化传奇!

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…