Kubernetes上的运行时容器安全相关的常见安全风险和7个最佳实践

在过去十年中,容器化工作负载和 Kubernetes (K8s) 席卷了软件世界。不幸的是,随着 Kubernetes 成为企业架构的主要组成部分,它成为威胁参与者的高价值目标。一般来说,容器安全,尤其是Kubernetes 安全,是当今企业安全态势的一个基本方面。本文将探讨 Kubernetes 运行时安全性,这是 K8s 安全性最关键的方面之一,包括七个基本的 K8s 运行时安全性最佳实践。

Kubernetes上的运行时容器安全相关的常见安全风险和7个最佳实践-南华中天

什么是 Kubernetes 运行时安全性?

Kubernetes 运行时安全是一组工具、实践和技术,用于保护Kubernetes上运行的容器工作负载。换句话说,Kubernetes 运行时安全是工作负载保护和容器安全的子类别。Kubernetes 运行时安全性处理从容器实例化到终止的安全性。这意味着运行时安全性包括诸如容器是否以 root 身份运行(它们不应该!)之类的事情,但不包括诸如容器镜像扫描之类的主题。

Kubernetes 运行时安全挑战和风险

由于如今在 K8s 上运行的应用程序类型如此之多,因此对于容器或 Kubernetes 而言,没有一套放之四海而皆准的运行时安全风险。然而,大多数企业都面临着一系列 Kubernetes 运行时安全挑战。

以下是与 Kubernetes 上的运行时容器安全相关的四种常见安全风险:

错误配置和不安全配置:2022 年,超过 900,000 个 Kubernetes 集群被发现在线暴露。这是一个很好的例子,说明 K8s 的不安全配置问题有多普遍。

权限升级:威胁行为者获得 K8s 环境的访问权限并升级到更高权限的用户(例如,root)是教科书式的 Kubernetes 运行时安全威胁。

恶意软件:容器镜像中的恶意软件是一个严重的问题。2022 年,Docker Hub 上有超过 1,600 个可用容器,其中包含加密矿工和 DNS 劫持者等恶意软件。在环境中实例化这些容器之一会立即在网络边界后方引入威胁。

K8s 和容器中的漏洞:即使容器本身不是恶意的,它们也常常容易受到具有已知漏洞利用的 CVE 的攻击。

Kubernetes上的运行时容器安全相关的常见安全风险和7个最佳实践-南华中天

原生 Kubernetes 运行时安全工具

Kubernetes 提供了一组有限的本机工具和控件,可以限制运行时风险。这些包括:

秘密:K8s 秘密是存储 API 密钥或密码等信息的数据对象。使用 Secrets 可帮助企业将敏感数据排除在图像和 Pod 规范之外。

准入控制器:使用 K8s 准入控制器,企业可以限制对 Kubernetes API 端点的修改(但不能读取)。

网络策略: Kubernetes 网络策略类似于在网络和传输层强制执行策略的传统 ALLOW 和 BLOCK 防火墙规则。

审核日志:审核日志提供有关集群中发生的操作的详细信息。例如,可以审计 API 活动。这些日志可以允许分析和检测恶意行为。

RBAC:基于角色的访问控制 (RBAC) 允许管理员根据实体的角色限制 K8s API 访问。

由于原生 Kubernetes 运行时安全工具不直接解决实时威胁检测等用例,因此许多企业依赖更强大的工作负载保护工具。

7 个 Kubernetes 运行时安全最佳实践

这六个 Kubernetes 运行时最佳实践可以帮助企业限制许多 K8s 安全威胁。

不要以 root 身份运行容器:以 root 身份运行容器会为特权升级攻击设置威胁参与者。简单地不以 root 身份运行可以减轻许多威胁。

审计和自动化容器配置:公开暴露本应保密的数据或使数据库实例面向互联网是可能导致漏洞的错误配置示例。使用基础架构即代码(IaC)审核配置和自动化配置部署是限制风险的好方法。

锁定网络层:除了 K8s 网络策略和 ​​RBAC 之外,IPS/IDS和 NGFW 等网络安全工具可以在威胁到达工作负载之前检测并阻止它们。此外,企业应尽可能避免暴露 Docker 守护程序套接字。

Kubernetes上的运行时容器安全相关的常见安全风险和7个最佳实践-南华中天

避免特权模式:就像不以 root 身份运行容器一样,企业应避免使用 –privileged 标志运行容器。–privileged 标志允许容器绕过各种确保系统安全的检查。

尽可能使用只读文件系统:只读文件系统可防止威胁参与者将恶意软件直接写入容器的文件系统。这会限制威胁行为者执行攻击的能力。

只运行受信任的容器镜像:一旦管理员实例化受损镜像,公共存储库就会威胁到容器运行时环境中的安全。只有使用可信的容器镜像才能帮助企业限制来自公共镜像存储库的镜像风险。

保护内核级别:SELinux、cgroups 和 AppArmor 等解决方案可以为 Kubernetes 运行时安全性增加一层保护。例如,AppArmor 可以定义限制对各种内核资源访问的策略,以降低应用程序利用它们不应访问的系统功能的风险。

左移补充了有效的 Kubernetes 运行时安全性

当然,安全的任何方面都不存在于真空中。运行时安全性很重要,但安全性在容器实例化之前就开始了。前面提到的一些 Kubernetes 运行时安全最佳实践清楚地表明了这一点,左移安全的概念使这一点更加明确。在开发生命周期的早期集成安全性并在整个过程中提供强大的运行时保护,提供了两全其美的方法。