Kubernetes Hardening

支持 HackTricks

用于分析集群的工具

Kubescape 是一个 K8s 开源工具,提供多云 K8s 单一视图,包括风险分析、安全合规性、RBAC 可视化器和镜像漏洞扫描。Kubescape 可扫描 K8s 集群、YAML 文件和 HELM 图表,根据多个框架(如 NSA-CISAMITRE ATT&CK®)检测配置错误、软件漏洞和 RBAC(基于角色的访问控制)违规,计算风险评分并即时显示风险趋势。

kubescape scan --verbose

工具 kube-bench 是一个检查 Kubernetes 是否安全部署的工具,通过运行 CIS Kubernetes Benchmark 中记录的检查项来实现。 您可以选择:

  • 从容器内运行 kube-bench(与主机共享 PID 命名空间)

  • 运行一个在主机上安装 kube-bench 并直接在主机上运行 kube-bench 的容器

  • Releases 页面 安装最新的二进制文件,

  • 从源代码编译。

工具 kubeaudit 是一个命令行工具和 Go 包,用于审计 Kubernetes 集群以解决各种不同的安全问题。

Kubeaudit 可以检测是否在集群中的容器内运行。如果是,则会尝试审计该集群中的所有 Kubernetes 资源:

kubeaudit all

这个工具还有一个参数 autofix,用于自动修复检测到的问题。

该工具 kube-hunter 用于在 Kubernetes 集群中寻找安全弱点。该工具旨在提高 Kubernetes 环境中安全问题的意识和可见性。

kube-hunter --remote some.node.com

Kubei 是一个漏洞扫描和 CIS Docker 基准工具,允许用户准确和立即评估其 Kubernetes 集群的风险。Kubei 扫描 Kubernetes 集群中使用的所有镜像,包括应用程序 pod 和系统 pod 的镜像。

KubiScan 是一个用于扫描 Kubernetes 集群中风险权限的工具,针对 Kubernetes 的基于角色的访问控制(RBAC)授权模型。

Mkat 是一个用于测试其他类型高风险检查的工具,与其他工具相比。主要有 3 种不同的模式:

  • find-role-relationships:查找哪些 AWS 角色在哪些 pod 中运行

  • find-secrets:尝试识别 K8s 资源中的秘密,如 Pods、ConfigMaps 和 Secrets。

  • test-imds-access:尝试运行 pod 并尝试访问元数据 v1 和 v2。警告:这将在集群中运行一个 pod,请非常小心,因为也许您不想这样做!

审计 IaC 代码

Popeye 是一个实用程序,用于扫描实时 Kubernetes 集群并报告部署资源和配置的潜在问题。它根据部署的内容而不是磁盘上的内容对集群进行清理。通过扫描集群,它检测配置错误,并帮助您确保最佳实践得以实施,从而预防未来的问题。它旨在减少在野外操作 Kubernetes 集群时所面临的认知负担。此外,如果您的集群使用度量服务器,它会报告潜在的资源过度/不足分配,并在集群资源不足时尝试警告您。

KICS 在以下基础设施即代码解决方案中查找安全漏洞、合规性问题和基础设施配置错误:Terraform、Kubernetes、Docker、AWS CloudFormation、Ansible、Helm、Microsoft ARM 和 OpenAPI 3.0 规范

Checkov 是用于基础设施即代码的静态代码分析工具。

它扫描使用 Terraform、Terraform plan、CloudformationAWS SAMKubernetesDockerfileServerlessARM Templates 部署的云基础设施,并使用基于图形的扫描检测安全和合规性配置错误。

kube-score 是一个执行 Kubernetes 对象定义的静态代码分析工具。

安装方法:

发行版命令 / 链接

预构建的 macOS、Linux 和 Windows 二进制文件

Docker

docker pull zegl/kube-score (Docker Hub)

Homebrew(macOS 和 Linux)

brew install kube-score

Krew(macOS 和 Linux)

kubectl krew install score

提示

Kubernetes PodSecurityContext 和 SecurityContext

您可以配置Pod 的安全上下文(使用 PodSecurityContext)和即将运行的容器安全上下文(使用 SecurityContext)。有关更多信息,请阅读:

Kubernetes SecurityContext(s)

Kubernetes API 硬化

非常重要的是保护对 Kubernetes Api 服务器的访问,因为具有足够特权的恶意行为者可能会滥用它并以多种方式损害环境。 重要的是保护访问白名单源以访问 API 服务器并拒绝任何其他连接)和身份验证(遵循最小特权原则)。绝对不要****允许 匿名 请求

常见请求流程: 用户或 K8s ServiceAccount –> 身份验证 –> 授权 –> 准入控制。

提示

  • 关闭端口。

  • 避免匿名访问。

  • NodeRestriction;禁止特定节点访问 API。

  • 基本上防止 kubelets 添加/删除/更新具有 node-restriction.kubernetes.io/ 前缀的标签。此标签前缀保留供管理员为了工作负载隔离目的而标记其节点对象,kubelets 将不被允许修改具有该前缀的标签。

  • 同样,允许 kubelets 添加/删除/更新这些标签和标签前缀。

  • 使用标签确保安全的工作负载隔离。

  • 避免特定 pod 访问 API。

  • 避免将 ApiServer 暴露给互联网。

  • 避免未经授权的访问 RBAC。

  • 使用防火墙和 IP 白名单设置 ApiServer 端口。

apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
volumes:
- name: sec-ctx-vol
emptyDir: {}
containers:
- name: sec-ctx-demo
image: busybox
command: [ "sh", "-c", "sleep 1h" ]
securityContext:
runAsNonRoot: true
volumeMounts:
- name: sec-ctx-vol
mountPath: /data/demo
securityContext:
allowPrivilegeEscalation: true

一般加固

您应该根据需要定期更新Kubernetes环境,确保:

  • 依赖项是最新的。

  • 补丁和安全补丁已安装。

发布周期:每3个月会有一个新的次要发布版本 -- 1.20.3 = 1(主要).20(次要).3(补丁)

更新Kubernetes集群的最佳方式是(来自 这里):

  • 按照以下顺序升级主节点组件:

  • etcd(所有实例)。

  • kube-apiserver(所有控制平面主机)。

  • kube-controller-manager。

  • kube-scheduler。

  • 云控制器管理器(如果使用)。

  • 升级Worker节点组件,如kube-proxy、kubelet。

支持HackTricks

Last updated