Kubernetes Hardening

支持 HackTricks

分析集群的工具

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

kubescape scan --verbose

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

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

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

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

  • 从源代码编译。

工具 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计划、CloudformationAWS SAMKubernetesDockerfileServerlessARM模板提供的云基础设施,并使用基于图形的扫描检测安全和合规性配置错误。

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

要安装:

提示

Kubernetes PodSecurityContext和SecurityContext

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

Kubernetes API加固

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

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

提示

  • 关闭端口。

  • 避免匿名访问。

  • NodeRestriction;不允许特定节点访问API。

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

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

  • 确保通过标签实现安全的工作负载隔离。

  • 避免特定Pod访问API。

  • 避免ApiServer暴露在互联网上。

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

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

SecurityContext加固

默认情况下,如果未指定其他用户,则在启动Pod时将使用root用户。您可以使用类似以下的模板在更安全的上下文中运行您的应用程序:

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。

  • 如果使用云控制器管理器,则升级它。

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

支持HackTricks

Last updated