概述
Docker的安全问题中,容器逃逸(Container Escape)是一个核心的风险。容器逃逸指的是攻击者能够从容器内部突破到宿主操作系统,进而获取系统权限或对系统进行破坏。这一问题直接影响到Docker容器的隔离性,是Docker环境中特有的安全隐患。
至于其它安全问题,如web应用漏洞、数据泄露、身份验证失败等,是与Docker容器本身无关的,它们是更广泛的网络和应用安全问题,适用于任何环境中运行的应用程序。
Docker容器逃逸是指攻击者从一个Docker容器中获取并控制宿主机操作系统的权限。尽管Docker已经实施了多层的安全措施来防止容器逃逸,但仍然存在一些可能被攻击者利用的漏洞和技术。以下是几种常见的Docker容器逃逸方法:
-
特权模式:特权模式是Docker提供的一种允许容器拥有宿主机几乎所有权限的设置。通过运行特权容器,容器内的进程拥有几乎与宿主机上运行的进程相同的权限,这可能导致容器逃逸的风险:容器内的进程可以直接访问宿主机的硬件和内核,允许攻击者执行诸如挂载文件系统、访问设备等操作。 -
危险挂载:Docker容器可以将主机的文件系统使用 -v
选项挂载到容器中。攻击者可以利用这个特性来获取宿主机上的敏感信息或执行恶意代码。 -
漏洞利用:例如,攻击者可以利用宿主机操作系统内核中存在的漏洞来获取宿主机的控制权。除此之外,还有Docker版本漏洞、容器运行时的漏洞、容器内的软件漏洞等各种漏洞可以利用。
这里分享一下绿盟的metarget项目:
https://github.com/Metarget/metarget/blob/master/README-zh.md
特权模式逃逸
原理
在Docker中,容器通常运行在受限权限下,通过Linux的命名空间和控制组来实现与宿主机的隔离。而特权模式 (--privileged 标志) 打开后,容器获得了以下权限:
1、容器内的进程可以直接访问宿主机的设备;
2、容器可以进行一些通常受限的操作(例如,加载内核模块、调整系统级别参数等);
3、容器可以拥有比普通容器更高的控制权限,甚至接管宿主机。
前提
1、受害者容器以特权模式启动;2、攻击者拿到的容器权限为root
以上一篇文章里面的shiro漏洞环境为例,受害者以特权模式启动shiro容器
docker run --privileged -d --name shiro -p8001:8080 vulfocus/shiro-721
攻击者拿到webshell,ls -al / 查看根目录,发现.dockerenv文件,判断为docker容器
关于getshell后如何判断是否为容器环境,这里分享一篇文章:
https://blog.csdn.net/qq_23936389/article/details/131486643
攻击者执行id命令,发现是容器的root权限
攻击者在容器内部执行下面的命令,从而判断容器是不是特权模式,如果是以特权模式启动的话,CapEff 对应的掩码值应该为0000003fffffffff 或者是 0000001fffffffff
cat /proc/self/status | grep CapEff
参考文章:
https://wiki.teamssix.com/CloudNative/Docker/docker-privileged-escape.html
继续,攻击者检测后发现是特权模式启动
逃逸过程
攻击者进行如下操作进行逃逸
1、fdisk -l #查看盘符信息,发现宿主机设备盘符
2、mkdir /escape && mount /dev/vda3 /escape #将外部盘符挂载到内部目录/escape
3、此时,容器内的escape目录相当于宿主机的根目录,验证一下,成功列出宿主机root目录下的文件,证明逃逸成功,后续利用不再赘述
原文始发于微信公众号(仇辉攻防):【云安全】云原生-Docker(三)容器逃逸之特权模式
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论