超实用 Kubernetes 安全指南
技术
作者:Fei Huang and Gary Duan
译者:夏天
2018-05-14 07:14

Kubernetes 101

Kubernetes 是非常流行的容器编排工具,可以自动执行容器的部署、更新和监视任务。目前,Kubernetes 几乎可以在市面上所有主要容器管理和云平台上运行,如 Red Hat OpenShift,Docker EE,Rancher,IBM Cloud,AWS EKS,Azure,SUSE CaaS 和 Google Cloud 等。在介绍安全问题之前,首先介绍一些 Kubernetes 的基础知识:

  • 主节点(Master Node):管理 Kubernetes 工作节点群集和在节点上部署 Pod 的服务器。
  • 工作节点(Worker Node):通常用来运行应用程序容器和其他 Kubernetes 组件,如 agents 和 proxies。
  • Pod:Pod 是 Kubernetes 创建或部署的最小/最简单的基本单位。每个 pod 都有自己的 IP 地址,可以包含一个或多个容器(通常是一个容器)。
  • Service:Service 可以用作其底层 pod 的代理,并且可以在复制 pod 中请求进行负载均衡。
  • 系统组件:用于管理 Kubernetes 集群的关键组件包括 API Server,Kubelet 和 etcd。这些组件都是攻击者的潜在目标。实际上,最近特斯拉事件就是黑客通过攻击未受保护的 Kubernetes  控制台来安装加密挖掘软件的。

Kubernetes 网络基础知识Kubernetes 网络中每个 pod 都有自己的 IP 地址,这是非常重要的知识点。Kubernetes(实际上是它的网络插件)负责将主机内部的所有请求发送到相应的 pod。通过 service, load balancer 或 ingress controller,外部访问 Kubernetes 的 pod,然后 Kubernetes 再通过负载均衡和 DNAT 连接到合适的 Pod。由于所有这些覆盖网络都是由 Kubernetes 动态处理的,所以监控网络流量非常困难。

挑战与问题

容器的超动态性为 Kubernetes 的安全带来一系列挑战:

  • East-West 流量大爆炸。容器可以跨主机甚至跨云端进行动态部署,大大增加了 east/west 或内部流量,这导致 Kubernetes 非常容易受到攻击。
  • Attack Surface 增加。每个容器都有不同的 Attack Surface 和可被利用的漏洞。另外,容器编排工具(如 Kubernetes 和 Docker)非常容易引入额外的 Attack Surface。
  • 安全工具不能及时更新。旧模型和安全工具无法适应不断变化的容器环境。

Kubernetes 团队需要回答的问题为了评估容器在运行时的是否安全,Kubernetes 团队可以结合自己情况思考以下安全相关的问题

  • 你是否对正在部署的 Kubernetes pod 有可见性?例如,应用程序 pod 或集群如何互相通信的?
  • 你是否有办法检测容器之间 east/west 流量的不正常行为?
  • 你是否能够监控 pod 内或容器内存在潜在的漏洞?
  • 你是否已经查看 Kubernetes 集群的访问权限并了解内部潜在的攻击媒介?

安全团队需要回答的问题安全过程自动化可以有效保证应用程序开发团队的速度,不会拖慢 DevOps。因此,实现安全过程自动化对于安全团队来说至关重要。Kubernetes 安全团队必须能够回答以下有关容器部署的问题:

  • 你会如何缩短开发人员获得新代码的安全审批流程所需时间?
  • 你如何简化安全报警和运营团队监控工作,并快速查明那些需要特别关注的潜在攻击目标?
  • 你如何在 Kubernetes 环境中分割某特定容器或网络连接?

小心漏洞和攻击媒介

Kubernetes 容器在 pod 中运行时受到的攻击可能来自外部网络,也可能来自内部人员,另外还有钓鱼攻击,自家的系统随时可能成为内部攻击的“便捷通道”。以下是一些典型例子:

  • 容器受损:应用程序配置错误或漏洞让攻击者能够进入容器,探测网络、过程控制或文件系统中的弱点。
  • Pod 之间未经授权的连接:受损容器会尝试与相同或其他主机上正在运行的 Pod 进行连接,以发现漏洞或发起攻击。尽管第 3 层网络控制白名单 pod IP 地址可以提供一些保护,但只能通过第 7 层网络筛选来检测对可信 IP 地址的攻击。
  • 数据通过 pod 泄露:数据窃取通常使用多种技术手段进行配合,其中一项技术就是连接到命令/控制服务器的 pod 中的反向 shell 和隐藏机密数据的网络隧道。

最具破坏力的攻击——杀伤链最具破坏性的攻击通常是一个杀伤链(Kill Chain) 或一系列恶意攻击行为,它们经常同时实施以达到攻击者的目的。这样的攻击可以在几秒钟内迅速发生,或在数天,数周甚至数月内传播开来。

因为攻击者动用了不同资源,所以处理“杀伤链”需要进行多层安全监控。为了在生产环境中获得最佳检测时机,需要着重以下几个方面监控:

  • 网络检查:攻击者首先会通过网络连接进入,然后通过网络扩大攻击范围。网络是攻击者进行攻击的第一入口,随后进行横向移动,最终实现数据窃取的目的。
  • 容器监控:可以通过监视每个容器进程、系统调用和文件系统活动来检测应用程序或系统漏洞,及时查明是否有可疑进程正在尝试提升特权或突破容器束缚。
  • 主机安全:传统的主机(端点)安全工具可以用来检测针对 kernel 或系统资源的攻击。新情况下,主机安全工具还必须能识别 Kubernetes 和容器以保证监管范围。

除上述几个攻击途径之外,攻击者还会攻击部署工具,例如 Kubernetes API 服务器或控制台,以获取机密信息的访问权限或控制正在运行的 pod。

攻击 K8S 基础设施

为了禁用或破坏应用程序、获取机密信息,机密资源或容器的访问权限,黑客还可能对Kubernetes 基础设施进行破坏,如攻击 API 服务器或 Kubelets。在特斯拉事件中,黑客就是利用无保护的控制台访问底层基础设施并运行加密挖掘软件的。
当 API Server token 被盗或者有黑客冒充授权用户时,攻击者就可以堂而皇之地通过部署恶意容器或阻止关键应用程序运行来访问数据库了。
通过攻击 Kubernetes,黑客可以中断正在运行的应用程序,甚至可以控制用于运行容器的底层资源。Kubernetes 中有一些已发布的特权升级机制,攻击者可以利用 Kubelet 访问 etcd 或 service tokens,获得受损容器的集群管理权限。

为生产准备 Kubernetes 工作节点

在容器中部署应用程序之前,应锁定 Kubernetes 工作节点的主机系统。以下是锁定主机最有效方法。建议在生产部署前确认以下步骤保证安全:

  • 使用 namespaces
  • 限制 Linux 功能
  • 启用 SELinux
  • 使用 Seccomp
  • 配置 Cgroups
  • 使用 R / O 安装
  • 使用最小的主机操作系统
  • 更新系统补丁
  • 运行 CIS Benchmark (CIS 基准)安全测试

Kubernetes 运行时安全

容器在生产环境下运行需注意这三个方面:网络过滤,容器检查和主机安全

网络过滤

容器防火墙是一种新型的网络安全产品,它将传统的网络安全技术应用到新的云原生 Kubernetes 环境中。通过防火墙保护容器网络有不同的方法:

  • 基于 IP 地址和端口,进行第 ¾ 层过滤。此方法可以动态地更新 Kubernetes 网络策略,在部署更改和扩展时对他们进行保护。简单的网络分段规则不能为关键业务容器部署提供监控、日志记录和威胁检测功能,但确实可以为一些未经授权的连接提供保护。
  • Web 应用程序防火墙(WAF)通过检测常规攻击策略(类似于 Web 应用程序防火墙的功能)来保护面向 Web 的容器(通常是基于 HTTP 的应用程序)。但是,它的保护范围仅限于通过 HTTP 进行的外部攻击。
  • 第 7 层容器防火墙过滤。具有第 7 层过滤和跨 pod 流量的深度数据包检测的容器防火墙,可以使用网络应用程序协议来保护容器。基于应用程序协议白名单以及内置的常见网络的应用程序攻击(如 DDoS,DNS 和 SQL 注入)进行检测。这种容器防火墙所处位置非常特殊,可以对容器过程进行监控并负责主机安全。

深度包检测(DPI)技术对于集装箱防火墙中的深度网络安全至关重要。攻击通常使用可预测的攻击媒介:头部格式错误的恶意 HTTP 请求,或在可扩展标记语言(XML)对象中包含可执行 shell 命令。基于第 7 层 DPI 检查可以查找和识别这些方法。使用这些技术的容器防火墙可以确定是否允许每个 pod 连接通过,或者是否应该阻止可能的攻击。

鉴于容器和 Kubernetes 网络模型的动态特性,传统的网络可视性、取证和分析工具无法继续沿用。诸如用于调试应用程序和调查安全事件的数据包捕获等简单任务无法完成。需要使用新的 Kubernetes 和容器识别工具来执行网络安全、检查和取证任务。

容器检查

黑客经常利用特权升级和恶意进程进行攻击或传播。利用 Linux 内核(如Dirty Cow)、软件包、库或应用程序本身的漏洞在容器内进行破坏活动。

检查容器过程和文件系统活动中可疑行为是确保容器安全的关键要素。可疑进程(如端口扫描和反向 shell)或特权升级需要进行全面检测。内置检测和基线行为学习过程的组合,应该可以基于以前的行为检测出异常过程。

如果在设计容器化的应用程序时能考虑微服务原则(容器中的每个应用程序都具有有限的一组功能,并且容器仅包含所需的程序包和库),那么检测可疑进程和文件系统活动会更加容易和准确。

主机安全

如果容器运行的主机(例如 Kubernetes 工作节点)受损会引起以下问题:

  • 升级到 root 权限
  • 窃取用于安全应用或基础架构访问机密
  • 更改集群管理员权限
  • 主机资源破坏或劫持(例如加密挖掘软件)
  • 停止关键业务流程工具基础设施,如 API 服务器或 Docker 守护程序
  • 启动上面“容器检查”部分中提到的可疑流程

像容器一样,主机系统需要监视这些可疑活动。因为容器可以像运行主机一样运行操作系统和应用程序,所以监视容器进程和文件系统活动需要与监视主机具备相同的安全功能。

网络检测、容器检测和主机安全的结合为我们提供了从多个媒介中检测“杀伤链”的最佳方法。

保护 Kubernetes 系统和资源

编排工具,例如 Kubernetes, 以及构建在他们之上的管理平台,如果不受保护的话,很容易受到攻击。容器部署中潜在的 attack surfaces 一旦被暴露很容易被黑客利用。最近的特斯拉黑客攻击和 Kubelet 漏洞利用仅仅是开发/补丁持续循环的开始,更多新技术出现只会让事情变得更复杂。

为了保护 Kubernetes 和管理平台本身免受攻击,为系统资源正确配置 RBAC 至关重要。以下是需要查看和配置适当访问控制的区域:

  • 保护 API 服务器。为 API 服务器配置 RBAC 或手动创建防火墙规则以防止未经授权的访问。
  • 限制 Kubelet 权限。为 Kubelet 配置 RBAC 并管理证书轮换以保护 Kubelet。
  • 对所有外部端口进行身份验证。检查外部可访问的所有端口并删除不必要的端口
  • 对外部端口进行认证。 对于未经认证的服务,限制对白名单来源的访问。
  • 限制或删除控制台访问。除非配置用户使用强密码或双因素身份验证登录,否则不允许控制台/代理访问。

如果能与上文提到的可以锁定工作节点的强大主机安全工具结合使用,就可以保护 Kubernetes 部署基础结构免受攻击。建议使用监视工具来跟踪对基础设施服务的访问,以检测未经授权的连接和潜在的攻击。

安全检查测试

随着容器技术和工具如 Kubernetes 的迅速发展,企业将不断更新,升级和迁移容器环境。运行专为 Kubernetes 环境设计的一组安全测试将确保安全性不会因更新而减弱。越来越多的企业迁移到容器,基础架构,工具和拓扑结构的变化也可能需要对 PCI 等合规性标准进行重新认证。

幸运的是,通过 CIS Benchmarks 测试和 Docker Bench 测试,已经有一套全面的针对 Kubernetes 安全和 Docker 安全检查规则。定期运行这些测试并确认预期结果可以实现安全过程自动化。

这些测试重点关注以下几个方面:

  • 主机安全
  • Kubernetes 安全
  • Docker 守护进程安全
  • 容器安全
  • RBAC 是否正确配置
  • 确保数据在静止和流动过程中的安全

Kubernetes 开源安全工具

开源项目不断发展并相继增加安全功能。以下是其中一些可以考虑使用的项目:

  • Network Policy,Kubernetes 网络策略通过 IP 地址提供自动分段。
  • Istio,Istio 创建了一个 service mesh,用于管理服务到服务的通信,包括路由,身份验证和加密,但它不是检测攻击和威胁的安全工具。
  • Grafeas,Grafeas 提供了一种工具,为审核和管理现代软件供应链定义了一种统一的方式。
  • Clair,Clair 是用于镜像漏洞扫描的简单工具,但缺少注册表集成和工作流程支持。
  • Kubernetes CIS Benchmark,可以使用 Kubernetes CIS Benchmark 中针对 Kubernetes Security 的合规性检查。

原文链接:https://neuvector.com/container-security/kubernetes-security-guide/

203 comCount 0