2025 AI基础设施风向标,不看必后悔!#AI基础设施峰会 了解详情
写点什么

Kubernetes 安全指南

  • 2021-12-17
  • 本文字数:3377 字

    阅读完需:约 11 分钟

Kubernetes 安全指南

在容器部署方面,Kubernetes 可以说是这个行业的领导者。据Statista报导,约 46%的受访者表示,他们会使用 Kubernetes 来实现计算机应用的部署、管理和扩展的自动化。

  

即使如此,在容器生命周期的阶段,我们仍需要注意一些安全问题。在开发和部署阶段,我们应采取措施缓解包括错误配置等已知漏洞的风险,而在运行阶段,我们还应有面对威胁时快速响应能力。

  

为此,企业应对 K8s 攻击树和其相关文档有深入的了解。攻击树本质上是一个树状视图形式的威胁模型,为潜在的安全威胁和对应缓解措施提供详细的可视化展示。

  

我们可以以这个威胁模型为参考,检查潜在安全漏洞,查找可能被黑客利用、对系统造成破坏的常见攻击向量。或利用攻击树测试 Kubernetes 的安全性,并在安全事件发生时获得输出日志的可见性。

  

但攻击树不是万能的,它只负责 Kubernetes 的安全性,不能保证端对端容器是否安全。在软件部署生命周期中添加的任何其他应用程序和组件也不在它监管的范围内。

  

当我们决定在生产环境中使用 Kubernetes 时,我们必须要考虑到系统的整体安全。根据美国国家安全局(NSA)发布的指南,常见安全威胁包含内部威胁、人为恶意攻击和供应链风险。

  

这就意味着我们必须要在项目的开始就建立 Kubernetes 的安全实践,这样才能更好地保护云基础架构的关键区域和云原生环境。

Kubernetes 攻击的种类

  

说起 Kubernetes 的攻击手段,大致可以分为三类:外部攻击者、恶意容器,以及被渗透的或恶意用户。

第一类:外部攻击者

  

为避免服务暴露在不信任的网络中,我们还需要对管理服务等控制措施的使用保持警惕。举例来说,一个没有集群访问权限的攻击者,在无需任何形式的认证协议的情况下,却可以以网络的形式直接接触到集群上运行的应用程序,甚至还有机会访问其管理接口。

第二类:恶意容器

  

如果攻击者成功攻陷一个容器,那么他们接下来会设法提高自己的权限,并最终接管整个集群。而如果我们没有有效的手段组织他们获取完整集群的管理权限,那么我们将只能坐以待毙。

  

这类风险的缓解措施是必须保证所有的端口都要在集群网络上可见,所有用户都要使用多重验证手段,并且避免容器中挂载服务账号,如果无可避免,确保账号权限受到限制。

  

通过使用各种网络策略,再加上 Magalix 的“策略即代码”,我们可以限制 pod 和命名空间的访问权限。

第三类:被渗透的或恶意用户

  

当我们忙于处理受损账户或恶意用户时,黑客盗窃的凭证仍旧有效,这时他们还可以执行命令攻击网络访问和 Kubernetes 的 API。缓解这类危险的策略和最佳实践是执行“最小特权”的策略,以及对所有用户采用基于角色的访问控制(RABC)。

主要攻击向量

  

在 2020 年,CNCF金融用户组发表了一个针对一般 Kubernetes 集群的威胁模型练习,主要为各类潜在威胁和其对应缓解措施提供一个详细的图解,并提供一个检查清单帮助团队识别 Kubernetes 集群内的常见漏洞和易被利用的点。


由 CNCF 提供的 Kubernetes 可信边界

  

借助STRIDE方法论,CNCF 分析了 Kubernetes 架构中的每一个元素,并总结出了一个平台内潜在安全问题的列表。STRIDE 是六类威胁的首字母缩写:伪装身份、篡改数据、拒绝承认、信息泄露、拒绝服务、权限提升。

  

其中一些主要的攻击向量有:

服务 Token

  

服务 Token 在一般情况下是默认挂载到每个 pod 上的,但如果黑客成功骇入任何一个容器,那么他们将可以使用同一个凭据进一步利用该容器。

  

若要缓解此风险,我们必须建立严格的 RBAS 策略,并禁用服务 Token 自动挂载的协议。

受损容器

  

集群内的远程执行点是黑客们的主要集火点之一。除了利用服务 Token 之外,其他的攻击向量还包括所有运行中容器上,默认暴露的网络控制面板。

网络端点

  

确保所有 Kubernetes 端点免受内部威胁,可以避免黑客利用攻击向量中的弱点。需要注意的是,如果黑客成功攻入一个容器,那么只要 pod 的网络策略允许,他们将迅速获得对端点的访问权限。

拒绝服务攻击(DOS)

  

在版本 1.14 发布之前,针对 DOS 攻击的缓解策略相对较少。

RBAC 的问题

  

RBAC 的错误配置可能会被利用并导致数据泄露,但开发团队可以借助自动化工具来验证和确认策略。

攻击树


CNCF 金融用户组提出了一套可能会协助确定集群内潜在攻击发起点的攻击树,并提出了两种可行方法:1. 自下至上。2. 基于情景。

自下至上的方法

  

这种方法通过找出所有 Kubernetes 平台的入点来达成目标。我们借此摸清所有的安全控制和标准,更好地了解他们的覆盖范围。

基于情景的方法

  

这种方法可以让我们确定在特定情况下暴露于威胁者的攻击向量,并将关注点更多地放在较为普遍攻击向量上。这种基于情景的方法虽然会借用自下至上方法中的大部分细节,但却更加基于现实情况。

  

以下展示的是 GitHub 上开源可用的攻击树总结:

自下至上:执行恶意代码

  

我们一般会选择在一个集群上执行恶意代码,但这也就意味着我们得毁掉一个提供容器访问的应用程序。

  

然而,威胁者只要可以访问容器,他们就会将更多的恶意代码加载到环境之中。如果威胁者拿到了获取镜像的权限,他们可能会污染仓库并将恶意代码扩散到其他分支。

自下至上:确定持久化

  

该攻击树的主要目标是探寻黑客访问集群的不同方式,并研究了其不同的寿命周期。

  

在这种情况下,一个分支会集中探查集群内的秘密,让黑客能发现其他的漏洞区域。另一个分支则侧重于黑客获取容器访问权限后的造成的威胁。攻击者会利用错误的配置,尝试建立对容器、节点或 Pod 重启持久且弹性的权限。

自下至上: 访问敏感数据

  

大多数的方法都是在利用配置错误的 RBAC 权限直接从集群中读取机密数据,另一部分则是通过查看查看日志中存储的所有数据等方式获取数据。可以说,这类方法几乎和窃听网络流量和通信数据差不多。

自下至上:拒绝服务攻击

  

此攻击树主要分析攻击者在集群上发起 DoS 攻击时采用的不同手段。第一种,需要一个受损容器为前提,攻击者会尝试从集群中发起 DoS,耗尽其所有资源。

  

第二种更关注拥有集群控制面板网络权限的威胁者。黑客会尝试在最合适的一个端点上发起冲击堵塞网络,并耗尽目标所有资源。

情景一:受损应用导致黑客在容器中立足

  

该场景重点介绍在利用容器内运行应用程序后,可能会暴露给黑客的攻击向量。黑客可以利用这些向量,通过编程或 shell 访问,远程在容器内执行代码。

情景二:通过网络的攻击

  

此情景侧重于内部威胁。拥有 Kubernetes 集群网络访问权限的内部攻击者,不用直接访问集群便能拥有多种用户权限。不过,合适的 Kubernetes 配置和防火墙可以迅速地应对这类大多数的威胁。

  

更多相关可参见Kubernetes安全审计工作组,以及他们将安全审计工作总结后公布的威胁模型以及白皮书。他们的关注点遍布 Kubernetes 集群的各个部分,这些文档值得我们花时间通读。

其他关于 Kubernetes 安全的最佳实践和推荐包括:


  • (如果可能)始终以最小权限策略运行 Pod 和容器。

  • 要求使用强身份验证和授权协议,限制管理员和用户访问权限(缩小攻击面)。

  • 加密数据以确保机密性。

  • 利用防火墙限制非必要链接。

  • 应用网络分离控制来减少攻击造成的潜在损害。

  • 通过日志审计监控容器活动。

  • 定期检查所有设置,使用漏洞扫描工具识别潜在风险并安装安全补丁。

  • 扫描 Pod 和容器,检查是否存在配置错误或漏洞。

利用 "策略即代码 "保护你的 K8s 环境

  

管理 Kubernetes 并预防黑客攻击载体需要大量的实践经验、配置和可维护性,即使是经验丰富的专家恐怕也会觉得颇具挑战。为此,Magalix 提供的最大的“策略即代码”可扩展库之一,力求简化管理安全 K8 的复杂性。


这些策略包括:- 容器不应以 root 权限运行- 容器不应共享 hostIPC- 容器不应使用 hostPort- 容器不应挂载 Docker 套接字- 容器不应缺失安全上下文- 容器不应缺失存活探针- 服务不应使用 NodePort- 禁止 RBAC 的动词通配符- 用 RBAC 的集群角色绑定保护集群管理员权限- 容器应将根文件系统挂载为只读

  

Magalix 还提供以编程方式,安全符合规定地执行“策略即代码”标准,以开发者为中心,持续补充云原生应用程序的部署协议。这样,集群内的所有自动化操作都可通过监控仓库变化进行观测。

  

不仅如此,我们还可以通过一个集中的开发手册,让“策略即代码”贯彻整个软件开发生命周期,在不影响安全的情况下加速创新发展。

  

如果开发团队可以根据本文中提供的建议搭建开发云原生应用程序,那么环境的安全将得到保证,并提供更好的用户体验。

  

原文链接

Kubernetes Main Attack Vectors Tree: An Explainer Guide

2021-12-17 15:346127

评论 1 条评论

发布
用户头像
而如果我们没有有效的手段【组织/阻止】他们获取完整集群的管理权限,那么我们将只能坐以待毙。
2022-01-21 13:21
回复
没有更多了
发现更多内容

.net core增强工作流组件,基于稳定平台,多项目整合开发

雯雯写代码

6个JDK自带JVM调优工具,一次性打包给你说清楚

田维常

jvm调优

《程序员面试金典》.pdf

田维常

面试

这才是图文并茂:我写了1万多字,就是为了让你了解AQS是怎么运行的

鄙人薛某

Java 并发编程 AQS 并发 ReentrantLock

【JVM】肝了一周,吐血整理出这份超硬核的JVM笔记(升级版)!!

冰河

性能优化 内存模型 JVM 堆栈 JVM笔记

SQL数据库集合运算

正向成长

SQL表联结 SQL集合运算

容器和虚拟机到底有啥区别?

网管

容器 虚拟机

微服务架构中的“参天大树”:SpringBoot+SpringCloud+Docker

小Q

Java 学习 容器 面试 微服务

直播卖货已成趋势

anyRTC开发者

音视频 WebRTC RTC

支撑2715​亿元海量订单 揭秘京东大促背后的数据库基石

京东科技开发者

数据库 数据仓库 云服务 云数据库

厉害了!阿里内部都用的Spring+MyBatis源码手册,实战理论两不误

小Q

Java spring 学习 面试 mybatis

区块链数字货币商城系统开发模式

薇電13242772558

区块链 数字货币

什么是服务器租用?

德胜网络-阳

Java中NullPointerException的完美解决方案

Silently9527

java8 Optional

影视剪辑类自媒体运营心得:如何抓住观众的痛点

石头IT视角

这份算法攻略,我拿到了5个大厂的offer

yes

面试 算法 笔试

2020双十一,阿里云GRTN拉开直播和RTC技术下半场的序幕

阿里云CloudImagine

架构 云直播 直播 流媒体 直播架构

为什么容器内存占用居高不下,频频 OOM

996小迁

Java 架构 容器 面试 k8s

Java中的线程与C++中的区别

jiangling500

Java c++ 线程

响应式关系数据库处理R2DBC

程序那些事

MySQL R2DBC 程序那些事 响应式系统 响应式数据库

读完某C++神作,我只记住了100句话

MySQL从删库到跑路

c++

甲方日常 52

句子

工作 随笔杂谈 日常

SpringBoot-技术专题-Hystrix学习介绍

码界西柚

基于Vue实现一个有点意思的拼拼乐小游戏

徐小夕

Java GitHub 开源 H5游戏 H5

2020年底备战—从技术到面试合集

iOSer

ios 编程 面试

花四个月和阿里面试官“大战”7回合,成功将其“斩于马下”!复盘面试题及答案!

Java架构追梦

Java 阿里巴巴 面试 java架构

超越竞争文化:致善式创新能否打造手机产业的“海法城”

脑极体

Vokenization:一种比GPT-3更有常识的视觉语言模型

脑极体

解读登录双因子认证(MFA)特性背后的TOTP原理

华为云开发者联盟

算法 totp 密钥

有点意思的gif动图生成平台开发实战(二)

徐小夕

Java Vue 大前端 GIF React

程序员如何判断跳槽岗位是否有坑!

Java架构师迁哥

Kubernetes 安全指南_服务革新_Andrew Zola_InfoQ精选文章