探索典型 Docker 和 Kubernetes 安装的(缺失的)安全性

探索典型 Docker 和 Kubernetes 安装的(缺失的)安全性
我从事 IT 工作已经 20 多年了,但不知何故,我从来没有抽出时间接触容器。 从理论上讲,我了解它们的结构和工作原理。 但由于我从未在实践中遇到过它们,所以我不确定它们引擎盖下的齿轮到底是如何转动的。

此外,我不知道他们的安全状况如何。 但同样,这个理论听起来不错,“随着安全性的增加,可用性降低”这句老歌在我的脑海中挥之不去。 所以我想,既然用容器做一切都很容易,那么那里的安全性就低于标准。 事实证明,我是对的。

为了快速开始,我报名了课程 黑帽 2020年题为“从白手起家:Docker Swarm 和 Kubernetes 环境的渗透与防护“。

该课程由 Sheila A. Berta 和 Sol Ozzan 教授,首先描述了 Docker 容器的工作原理以及部署到 Kubernetes 时的流程。 这是一门完全实践性的课程 - 学生必须在上课前在他们的机器上安装 Docker 和 microk8s - 这是了解这些工具如何相互交互、找到弱点以及最重要的是尝试阻止它们的好方法。

不幸的是,虽然课程承诺两天后成为“王子”,但我感觉一切才刚刚开始,我还有很多东西要学。

探索典型 Docker 和 Kubernetes 安装的(缺失的)安全性

在深入探讨我的崇高观察之前,有必要先解释一下什么是容器。 在开发世界中,在个人计算机上编写的代码完美运行被认为是正常的,但是当您尝试在某个服务器上运行它时,它根本无法运行。 容器试图通过提供独立的机器来克服这个问题,您可以轻松地将这些机器从一台服务器移动到另一台服务器,并且知道它们将始终工作。 顾名思义,它们包含完成工作所需的代码、库和其他软件。 另一方面,Kubernetes 是 容器编排平台。 原则上,它可以用来无缝管理数百或数千个不同的容器。

以下是我从红队和蓝队角度的一些发现。

红队

大多数容器内容以 root 身份运行:这意味着如果容器遭到破坏,您将拥有对该容器的完全访问权限。 这使得接下来的步骤变得更加容易。

在容器内安装 docker.sock 是危险的:如果您在容器内拥有 root 权限,并且还在具有 Docker 套接字 (/var/run/docker.sock) 的容器内安装了 Docker,则您有可能探索整个集群,包括访问任何其他容器。 此类访问无法通过网络隔离或其他方式来阻止。

环境变量通常包含秘密数据:在大多数情况下,人们使用普通环境变量将密码发送到容器。 因此,如果您有权访问该帐户,则可以监视这些环境变量,以便以后扩展您的权限。

Docker API可以给出很多信息:默认配置的 Docker API 会在未经授权的情况下运行,并且会产生大量信息。 使用 Shodan,您可以轻松找到开放端口的列表,然后获取有关集群的详细信息 - 并继续进行完整捕获。 趋势科技写了这篇文章 最有趣的文章.

蓝队

不要以 root 身份运行容器内容:尽管以 root 身份运行更容易,但您不应该这样做。 相反,通过显示 uid 来运行具有重置权限的应用程序,或者在从 CLI 运行时使用 --user 选项,或者在 Dockerfile 中指定 USER。

不允许将软件安装在容器中:几乎每次攻击都是从种植东西开始的。 从 nmap 到 ifconfig 再到 Docker 本身(在容器内),在容器中安装任何东西已经很常见了。 出于同样的原因,您应该始终阻止所有未使用的端口。 这还有助于防止在您的计算机被感染时传输控制命令。 除了防止安装程序之外,值得确保在容器本身中安装完成任务所需的最少数量的应用程序。

保护 docker.sock:必须受到保护,因为容器和集群之间的通信是通过此套接字进行处理的。 由于我不想在本文中详细介绍,请阅读 来自 Docker 的注释,会发生什么,以及如何阻止这一切。

使用 Docker 密钥代替环境变量: 有秘密 大约从2017年开始。 尽管这并不安全,但它仍然比环境变量更好地将秘密数据传递到容器。

如果本文激起了您对容器的兴趣,您可以轻松安装 Docker 或 microk8s(Kubernetes 的小型版本)。 这是 有针对 Linux 和 MacOS 安装 Docker 的说明,以及 这里 — 有关为 Windows、Linux 和 MacOS 安装 microk8s 的说明。

安装后就可以去 这是快速入门指南 来自 Docker,类似的选项 提供 以及 microk8s。

如果您想要或需要参加有关 Docker 的综合课程,其中实用的演讲者会检查其所有工具:从基本抽象到网络参数、使用各种操作系统和编程语言的细微差别,那么请尝试“Docker 视频课程” 您将熟悉该技术并了解在何处以及如何最好地使用 Docker。 同时,获取最佳实践案例 - 最好在安全的情况下并在从业者的支持下从有关耙子的故事中学习,而不是亲自从带有尖刺手柄的耙子本身学习。

来源: habr.com

添加评论