写点什么

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:346209

评论 1 条评论

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

Java培训MySQL体系构架、存储引擎和索引结构

@零度

MySQL JAVA开发

java不使用客户端授权密码直接用账号密码发送带附件的邮件

爱好编程进阶

程序员 后端开发

蒙牛乳业加入星策开源社区,携手推动企业智能化转型建设

星策开源社区

人工智能 机器学习 企业数智化 智能化转型

我以为自己MySQL够牛逼了,直到看到了Alibaba的面试题,是我不配了。。

Java架构追梦

Java 后端开发 MySQL 运维 程序员面试

Java8新特性-Optional

爱好编程进阶

Java 程序员 后端开发

与多家机构战略合作,背后彰显PlatoFarm元宇宙龙头的实力

西柚子

使用APICloud & MobTech SDK 快速实现分享到社交平台功能

YonBuilder低代码开发平台

APP开发 APICloud MobTech袤博科技 社交分享

HDI硬件设备接口介绍

科技汇

使用xdebug调试php详细教程

CRMEB

GitHub上超火的阿里调优专家的677页Java性能调优笔记,已让我拿下5个offer

爱好编程进阶

Java 程序员 后端开发

Java中当对象不再使用时,不赋值为null会导致什么后果?

爱好编程进阶

Java 程序员 后端开发

秒云 (元来云志)获邀加入中国开源云联盟,共筑开源生态

MIAOYUN

开源 开源生态 开源中国

助力提升研发效能的“黄金三角”

博文视点Broadview

划重点,2022 常见的面试题和八股文都为大家总结出来了

Java架构追梦

程序员 java面试 后端开发 Java面试八股文

【高并发】如何使用互斥锁解决多线程的原子性问题?这次终于明白了!

冰河

并发编程 多线程 协程 异步编程 精通高并发系列

大数据培训Spark SQL知识点与实战分析

@零度

spark 大数据开发

Hibernate实现CRUD(附项目源码)

爱好编程进阶

Java 程序员 后端开发

OpenHarmony新增两个分布式能力!快来了解~

科技汇

简述数仓的时间域函数

华为云开发者联盟

数据库 时间 时间戳 GaussDB(DWS) 时间域函数

低通信量是筛选分布式多方安全计算常用安全协议方案的先决条件

易观分析

安全多方计算 低通信量

华为云持续快速增长,IaaS市场排名中国第二、全球第五

科技热闻

聊聊如何在华为云IoT平台进行产品开发

华为云开发者联盟

物联网平台 IoT 华为云 iotda 设备接入

DM 是如何处理 DML 的丨TiDB 工具分享

PingCAP

JAVA API调用elasticsearch实现基本增删改查

爱好编程进阶

程序员 后端开发

web前端培训React 中Router的必备知识点

@零度

前端开发 React

云电脑的四重守护,安全有谱

天翼云开发者社区

安全 云电脑

Java-进阶:集合框架1

爱好编程进阶

程序员 后端开发

npm install xxxx --legacy-peer-deps命令是什么?

华为云开发者联盟

前端 npm install 依赖树 对等依赖关系

【架构视角】一篇文章带你彻底吃透Spring

潘大壮

spring 后端 springboot 后端开发

蚂蚁三面被挂,幸获内推,历经5轮终于拿到口碑offer

Java架构追梦

java面试 后端开发 程序员面试 大厂Offer

原生JavaScript灵魂拷问(二),你能全部答对吗?

战场小包

JavaScript 前端 4月月更

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