Kubernetes 容器创建时具有过多的 Linux 功能

编辑

Kubernetes 容器创建时具有过多的 Linux 功能

编辑

此规则检测到部署的容器具有一个或多个危险的宽松 Linux 功能。有能力部署具有添加功能的容器的攻击者可以利用这一点,在集群内进行进一步的执行、横向移动或提权。此规则中检测到的功能已在容器逃逸到主机中使用。

规则类型:查询

规则索引:

  • logs-kubernetes.*

严重性:中等

风险评分: 47

运行频率:5 分钟

搜索索引范围:无 ( 日期数学格式,另请参阅 额外的回溯时间)

每次执行的最大警报数: 100

参考:

标签:

  • 数据源:Kubernetes
  • 战术:执行
  • 战术:提权

版本: 5

规则作者:

  • Elastic

规则许可证:Elastic License v2

调查指南

编辑

分类和分析

调查 Kubernetes 容器创建时具有过多的 Linux 功能

Linux 功能旨在将 root 权限划分为较小的单元。每个功能都赋予线程执行特定特权任务的足够权限。在 Kubernetes 中,容器在创建时会获得一组默认功能,这些功能可以删除或添加。添加的功能使 Pod 中的容器具有额外的特权,这些特权可用于更改核心进程、更改集群的网络设置或直接访问底层主机。以下功能已在容器逃逸技术中使用:

BPF - 允许创建 BPF 映射,加载 BPF 类型格式 (BTF) 数据,检索 BPF 程序的 JIT 编译代码等。DAC_READ_SEARCH - 绕过文件读取权限检查以及目录读取和执行权限检查。NET_ADMIN - 执行各种与网络相关的操作。SYS_ADMIN - 执行一系列系统管理操作。SYS_BOOT - 使用 reboot(2) 和 kexec_load(2) 重启并加载新的内核以供以后执行。SYS_MODULE - 加载和卸载内核模块。SYS_PTRACE - 使用 ptrace(2) 跟踪任意进程。SYS_RAWIO - 执行 I/O 端口操作 (iopl(2) 和 ioperm(2))。SYSLOG - 执行特权的 syslog(2) 操作。

误报分析

  • 虽然这些功能默认不包含在容器中,但某些合法镜像可能需要添加它们。此规则为信任的容器镜像的例外情况留出了空间。要添加例外,请将受信任的容器镜像名称添加到查询字段 kubernetes.audit.requestObject.spec.containers.image。

设置

编辑

需要启用审核日志的 Kubernetes Fleet 集成或类似结构的数据才能与此规则兼容。

规则查询

编辑
event.dataset: kubernetes.audit_logs
  and kubernetes.audit.annotations.authorization_k8s_io/decision:"allow"
  and kubernetes.audit.verb: create
  and kubernetes.audit.objectRef.resource: pods
  and kubernetes.audit.requestObject.spec.containers.securityContext.capabilities.add: ("BPF" or "DAC_READ_SEARCH"  or "NET_ADMIN" or "SYS_ADMIN" or "SYS_BOOT" or "SYS_MODULE" or "SYS_PTRACE" or "SYS_RAWIO"  or "SYSLOG")
  and not kubernetes.audit.requestObject.spec.containers.image : ("docker.elastic.co/beats/elastic-agent:8.4.0" or "rancher/klipper-lb:v0.3.5" or "")

框架:MITRE ATT&CKTM