写点什么

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

评论 1 条评论

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

【得物技术】代码覆盖率原理与得物app实践

得物技术

测试 原理 代码 得物技术 覆盖率

架构师第8周作业

Geek_xq

APICloud AVM多端开发 |《生鲜电商app开发》项目源码教程

YonBuilder低代码开发平台

大前端 移动开发 APP开发 APICloud

在GitHub中向开源项目提交PR的过程

worry

GitHub pull request

Java 程序经验小结:剖析@SuppressWarinings注解

后台技术汇

28天写作

GitHub标星150K的神仙笔记,3个月肝完成功面进美团定级3-2

Java架构之路

Java 程序员 架构 面试 编程语言

2021年,字节/百度/阿里相继发布50W+优质Java岗(含内部面试真题及答案)

996小迁

Java 程序员 架构 面试

从姚安娜出道说起

三只猫

28天写作 社交泛娱乐

2021字节、华为、滴滴Java内部面试题(含答案),新鲜出炉!

比伯

Java 编程 架构 面试 程序人生

电商网站商品管理(二)多种搜索方式

escray

elasticsearch elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

[5/28]产品运维保障体系的质量实践

L3C老司机

架构师训练营第十三周笔记

李日盛

笔记

技术创新是PC市场发展基石,英特尔占据明显领先优势

E科讯

Nginx 的负载均衡模式有哪些?它的实现原理是什么?

李尚智

nginx 架构 微服务

PHP转JAVA开发30分钟实战攻略

dothetrick

Java php

安卓开发实战!闭关在家37天“吃透”这份345页PDF,成功定级腾讯T3-2

欢喜学安卓

android 程序员 面试 移动开发

使用 kubectl-rabbitmq 部署和运维 K8S 上的 RabbitMQ 集群

郭旭东

RabbitMQ kubectl kubectl plugin

9. 细节见真章,Formatter注册中心的设计很讨巧

YourBatman

Converter ConversionService Formatter

为什么印度不会成为世界工厂?

JiangX

印度 28天写作 世界工厂

百度面试被算法血虐,闭关29天肝完445页算法神仙笔记成功入职字节跳动!

Java架构之路

Java 程序员 架构 面试 编程语言

华云大咖说|企业混合云构建之道

华云数据

云计算 桌面云

二本学渣考研失败,为什么Android要采用Binder作为IPC机制?已开源

欢喜学安卓

android 程序员 面试 移动开发

架构师第八周总结

Geek_xq

矿机挖矿软件系统开发|矿机挖矿APP开发

系统开发

技术人员如何写好周报

猿话

一文带你学会AQS和并发工具类的关系

伯阳

AQS java 并发 ReentrantLock 多线程高并发 lock锁

我们为什么打比方

石云升

28天写作 确认偏误 打比方

极客训练营知识点思维导图

jorden wang

训练营第十三周作业

大脸猫

超越身边80%的人,其实没有你想象的那么难

架构精进之路

认知提升 成长笔记 七日更 28天写作

区块链2021狂想曲:迎接以技术为名的春天

脑极体

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