跳到主要内容
版本:v0.6

攻击防护

这些规则针对容器内的常见渗透手法进行防护,例如缓解容器信息泄露、禁用敏感行为等。

缓解信息泄露

mitigate-sa-leak

缓解 ServiceAccount 泄露。

说明

此规则禁止容器进程读取 ServiceAccount 相关的敏感信息,包括 token、namespace、ca 证书。避免 default SA 泄漏、错误配置的 SA 泄漏带来的安全风险,攻击者通过 RCE 漏洞获取 k8s 容器内的权限后,常倾向于通过泄漏其 SA 信息来进行进一步的渗透入侵活动。

在大部分用户场景中,并不需要使用 SA 与 API Server 进行通信。而默认情况下,k8s 会为不需要与 API Server 通信的 Pod 设置 default SA。

原理与影响

禁止 ServiceAccount 文件的读操作。

支持的强制访问控制器
  • AppArmor
  • BPF

mitigate-disk-device-number-leak

缓解宿主机磁盘设备号泄露。

说明

攻击者可能会通过读取容器进程的挂载信息来获取宿主机磁盘设备的设备号,从而用于后续的容器逃逸。

原理与影响

禁止容器进程读取 /proc/[PID]/mountinfo, /proc/partitions

支持的强制访问控制器
  • AppArmor
  • BPF

mitigate-overlayfs-leak

缓解容器 overlayfs 路径泄露。

说明

攻击者可能会通过获取容器进程的挂载信息来获取容器进程 rootfs 在宿主机中的 overlayfs 路径,从而用于后续的容器逃逸。

原理与影响

禁止读取 /proc/mounts/proc/[PID]/mounts/proc/[PID]/mountinfo 文件。

此规则可能会影响容器内 mount 命令的部分功能。

支持的强制访问控制器
  • AppArmor
  • BPF

mitigate-host-ip-leak

缓解宿主机 IP 泄露。

说明

攻击者通过 RCE 漏洞获取 k8s 容器内的权限后,会尝试进一步的网络渗透攻击。因此,限制攻击者借此获取宿主机 IP、MAC 地址、网段等敏感信息,可增加攻击者进行网络渗透的难度和成本。

原理与影响

禁止容器进程读取 ARP 地址解析表(/proc/net/arp/proc/[PID]/net/arp 等),从而获取宿主机 IP 和 Mac 地址等敏感信息。

支持的强制访问控制器
  • AppArmor
  • BPF

disallow-metadata-service

禁止访问云服务器的 metadata service。

说明

攻击者获取容器内的代码执行权限后,会尝试访问云服务器的 Metadata Service 来进行信息泄露。在某些场景下,攻击者可能会获取敏感信息,从而进行权限提升、横向渗透。

此规则禁止容器进程访问云服务器的 Instance Metadata Service。包含两个本地链接保留地址:100.96.0.96169.254.169.254

原理与影响

禁止连接 Instance Metadata Services 的 IP 地址。

支持的强制访问控制器
  • BPF

禁止敏感操作

disable-write-etc

禁止写入 /etc 目录。

说明

攻击者可能会通过修改 /etc 目录中的敏感文件来实施权限提升,例如修改 /etc/bash.bashrc 等实施水坑攻击、修改 /etc/passwd 和 /etc/shadow 添加用户进行持久化、修改 nginx.conf 或 /etc/ssh/ssh_config 进行持久化等。

原理与影响

禁止写入 /etc 目录。

支持的强制访问控制器
  • AppArmor
  • BPF

disable-busybox

禁止执行 busybox 命令。

说明

某些应用服务会以 busybox, alpine 等作为基础镜像进行打包,而这些镜像一般会使用 busybox 工具箱作为基础命令行工具的可执行程序。这也给攻击者提供了很多便利,攻击者可以利用 busybox 执行命令辅助攻击。

原理与影响

禁止 busybox 执行。

若容器内服务依赖 busybox 或相关 bash 命令,开启此策略会导致运行出错。

支持的强制访问控制器
  • AppArmor
  • BPF

disable-shell

禁止创建 Unix Shell。

说明

攻击者通过 RCE 漏洞获取服务的远程代码执行权限后,通常会借助 reverse shell 获取容器内任意命令执行能力。

此规则禁止容器进程创建新的 Unix shell,从而实施反弹 shell 等攻击手段。

原理与影响

禁止 Unix Shell 执行。

有些基础镜像会动态链接 sh 到 /bin/busybox,此情况下还需配合 disable-busybox 策略使用。

支持的强制访问控制器
  • AppArmor
  • BPF

disable-wget

禁止通过 wget 命令下载文件。

说明

攻击者通常会借助 wget 命令从外部下载攻击程序进行随后的攻击(驻留、权限提升、网络扫描、挖矿等)。

此规则通过禁止执行 wget 命令来限制文件下载。

原理与影响

禁止 wget 执行。

有些基础镜像会动态链接 wget 到 /bin/busybox,此情况下还需配合 disable-busybox 策略使用。

支持的强制访问控制器
  • AppArmor
  • BPF

disable-curl

禁止通过 curl 命令下载文件。

说明

攻击者通常会借助 curl 命令发起网络访问、从外部下载攻击程序进行随后的攻击(驻留、权限提升、网络扫描、挖矿等)。

此规则禁止容器进程通过 curl 命令访问网络。

原理与影响

禁止 curl 执行。

支持的强制访问控制器
  • AppArmor
  • BPF

disable-chmod

禁止通过 chmod 修改文件权限。

说明

当攻击者通过漏洞获取容器内的控制权后,通常会尝试下载其他攻击代码、工具到容器内实施进一步的攻击(权限提升、横向渗透、挖矿等)。在这个攻击链路中,攻击者通常会利用 chmod 命令修改文件的执行权限。

原理与影响

禁止 chmod 执行。

有些基础镜像会动态链接 chmod 到 /bin/busybox,此情况下还需配合 disable-busybox 策略使用。

支持的强制访问控制器
  • AppArmor
  • BPF

disable-chmod-x-bit

禁止设置文件的可执行属性。

说明

当攻击者通过漏洞获取容器内的控制权后,通常会尝试下载其他攻击代码、工具到容器内实施进一步的攻击(权限提升、横向渗透、挖矿等)。在这个攻击链路中,攻击者通常会调用 chmod 相关系统调用。

原理与影响

禁止通过 chmod 相关系统调用(chmodfchmodfchmodatfchmodat2),设置文件的 execute/search 权限。

支持的强制访问控制器
  • Seccomp

disable-chmod-s-bit

禁止设置文件的 SUID/SGID 属性。

说明

在某些场景下,攻击者可能会尝试调用 chmod 系列的系统调用(chmod/fchmod/fchmodat/fchmodat2),通过设置文件的 s 标记位(set-user-ID, set-group-ID)来实施权限提升攻击。

原理与影响

禁止通过 chmod 相关系统调用(chmodfchmodfchmodatfchmodat2),设置文件的 set-user-ID/set-group-ID 属性。

支持的强制访问控制器
  • Seccomp

disable-su-sudo

禁止执行 sudo、su 命令。

说明

当容器内的进程以非 root 用户运行时,攻击者需要先提权至 root 用户进行后续攻击。而 sudo/su 命令是本地提权的常见途径之一。

原理与影响

禁止 sudo、su 执行。

有些基础镜像会动态链接 su 到 /bin/busybox,此情况下还需配合 disable-busybox 策略使用。

支持的强制访问控制器
  • AppArmor
  • BPF

其他

disable-network

禁止所有网络访问。

说明

您可以使用此规则禁止容器访问网络。

支持的强制访问控制器
  • AppArmor
  • BPF

disable-inet, disable-ipv4

禁止使用 inet4 地址的网络访问。

说明

您可以使用此规则禁止容器进程通过 IPv4 地址访问网络。

支持的强制访问控制器
  • AppArmor
  • BPF

disable-inet6, disable-ipv6

禁止使用 inet6 地址的网络访问。

说明

您可以使用此规则禁止容器进程通过 IPv6 地址访问网络。

支持的强制访问控制器
  • AppArmor
  • BPF

disable-unix-domain-socket

禁止使用 UDS 地址的网络访问。

说明

您可以使用此规则禁止容器进程通过 UNIX domain socket 地址访问网络。

支持的强制访问控制器
  • AppArmor
  • BPF

disable-icmp

禁止使用 ICMP 网络协议。

说明

您可以使用此规则禁止容器进程使用 ICMP 网络协议。

支持的强制访问控制器
  • AppArmor
  • BPF

disable-tcp

禁止使用 TCP 网络协议。

说明

您可以使用此规则禁止容器进程使用 TCP 网络协议。

支持的强制访问控制器
  • AppArmor
  • BPF

disable-udp

禁止使用 UDP 网络协议。

说明

您可以使用此规则禁止容器进程使用 UDP 网络协议。

支持的强制访问控制器
  • AppArmor
  • BPF

限制特定可执行文件

此规则对 “缓解信息泄露”、“禁止敏感操作”、“其他” 三类内置规则的使用场景进行了扩充,使用户可以只对容器内的特定可执行文件及其子进程进行限制。

说明

对指定的可执行文件进行限制,可用于实现两个目的:

  1. 避免沙箱策略影响容器内应用服务的正常执行。
  2. 对容器内指定可执行文件进行限制,增加攻击者成本和难度。

例如,可以利用此功能对容器中的 busybox、bash、sh、curl 进行限制,阻止攻击者利用它们来执行敏感操作。与此同时,应用服务的运行则不受沙箱策略的限制,可以正常执行读取 ServiceAccount token 等敏感操作。

注:受限于 BPF LSM 的实现原理,BPF enforcer 无法安全地提供此功能。

原理与影响

为特定可执行文件开启沙箱限制。

支持的强制访问控制器
  • Apprmor

示例:

  policy:
enforcer: AppArmor
mode: EnhanceProtect
enhanceProtect:
attackProtectionRules:
# All processes in the container are confined by the `disable-write-etc` rule.
- rules:
- disable-write-etc
# Only the executable files listed below and their child processes are confined by the listed rules.
- rules:
- mitigate-sa-leak
- disable-network
- disable-chmod-x-bit
targets:
- "/bin/sh"
- "/usr/bin/sh"
- "/bin/dash"
- "/usr/bin/dash"
- "/bin/bash"
- "/usr/bin/bash"
- "/bin/busybox"
- "/usr/bin/busybox"