最常见的 Kubernetes 安全问题以及如何缓解它们

已发表: 2021-03-30

Kubernetes 和容器承诺三件事:

  • 更快的应用程序开发和发布。
  • 更快的错误修复。
  • 增加特征速度。

然而,它通常是以牺牲安全为代价的,这在任何 Web 开发技术中都是不可接受的。

要了解 Kubernetes 的安全状态,以下是 StackRox 在 2020 年底进行的一项调查中的两个因素:

  • 90% 的调查参与者报告说在过去 12 个月中遇到过与容器和 Kubernetes 相关的安全事件。
  • 由于 Kubernetes 的安全问题,44% 的参与者不得不推迟他们的应用程序发布。

这些安全问题背后最常见的原因是什么?

与 Kubernetes 相关的最常见的安全问题
1. 配置错误

调查显示,错误配置导致的风险暴露是容器和 Kubernetes 环境安全中最普遍的风险。

在使用 Kubernetes 制作容器化应用时,配置管理是安全从业者面临的最大风险。

这主要是因为市场上到处都是漏洞扫描工具,但配置管理仍然很大程度上依赖于人工考虑。

以下是有关配置容器化应用程序的一些常见组件以确保安全性不受影响的一些建议。

图片:

避免使用任何非绝对必要的软件。 这包括包管理器、网络工具和 curl 或 Unix shell 等客户端。

请记住,使用任何软件都会增加安全风险。 此外,仅使用来自可靠来源的图像。

秘密:

避免将秘密烘焙到图像中或以其他方式不必要地暴露它们。

作为一种安全做法,使用值得信赖的秘密管理工具来确保部署仅在需要时才安装秘密。

命名空间:

慷慨地使用命名空间。 它们充当 Kubernetes 和网络策略的边界。 命名空间的使用可以限制攻击的影响,并且可以包含错误和攻击,这样它们就不会传播并造成更多的破坏。

运行时特权:

权限规则只有一条:允许最少数量的权限使软件最安全。

网络策略

根据默认设置,pod 可以在 Kubernetes 中独立地相互通信。 但是,实施网络策略来限制 pod 的交互是一种很好的做法。 这可以防止任何威胁在容器和整个应用程序中传播。

持久存储

您需要对持久存储的配置和使用有适当的了解。 这是因为这是其他临时容器设置中唯一的持久向量。

控制平面

如果您是自己管理 Kubernetes 集群,那么配置控制平面非常重要。 这是因为一些集群可以做出全局决策,如果集群被感染,可能会危及整个生态系统。

缓解这些和其他各种与配置相关的安全问题的最佳方法是结合使用手动和自动化工作,以确保以确保 Kubernetes 以及它们所属软件的安全性的方式完成配置的。

2. 漏洞

在过去几年中,在 Kubernetes 和其他容器中发现并利用了许多不同的漏洞。

最常见的漏洞利用包括:

  • 加密采矿。
  • 恶意软件安装。
  • 权限提升。
  • 主机访问。

管理漏洞的有效方法是容器生命周期中需要继续进行的事情,应该包括以下内容:

  • 识别和解决映像中的漏洞,包括已安装操作系统中的漏洞。
  • 检测和缓解您正在使用的编程语言的运行时库中的所有漏洞。
  • 采取措施防止具有风险漏洞的图像进入生产可访问的容器注册表。
  • 采取措施遏制具有一定安全风险的威胁。
  • 在 Kubernetes 集群中使用第三方准入控制器来防止易受攻击的容器组件被调度。
3. 运行时威胁

一旦您缓解了 Kubernetes 安全性中的所有问题,运行时阶段就会有自己独特的一组安全威胁。

即使您已经强调了安全性并以各种可能的方式将风险降至最低,但在运行时也可能存在来自对手的各种威胁。

您可以采取以下措施来减轻这些威胁:

运行时活动监控:

从与安全性最相关的最多容器活动开始监控过程。 这包括流程活动、容器化服务内部和跨容器化服务的网络通信,以及与外部服务器和客户端之间的通信。

利用声明性数据

利用构建和部署时间信息来评估观察到的活动与预期活动之间的差异,以了解是否存在任何可疑活动。

保持网络通讯有限公司

运行时是您可以看到允许的网络流量类型与运行系统所需的流量之间的差异的时间。 这是可用于删除任何可能对 Kubernetes 安全构成威胁的不必要通信的机会。

密切观察过程

观察应用程序一段时间,以了解为应用程序正常运行而执行的所有进程。 列出所有基本进程并随机检查应用程序,以查看是否正在执行任何非通常进程。

4. 合规审核失败

确保 Kubernetes 和容器安全的主要因素之一是合规性。 如果在软件开发生命周期中没有适当强调安全性,则可能导致合规性审计失败。

有许多合规标准可用于 Kubernetes 和容器安全性。

PCI-DSS、HIPAA 和 SOC 2 是行业特定的合规性标准。

在这方面犯的主要错误之一是从一开始就没有将合规审计作为 SDLC 的一部分,或者只在运行时考虑它。 为确保软件中的所有内容均符合要求:

  • 从一开始就将合规性作为 SDLC 的一部分。
  • 使用行业标准使软件的组件兼容。