什么是docker容器逃逸

发布时间 - 2022-07-25 00:00:00    点击率:
docker容器逃逸指的是攻击者通过劫持容器化业务逻辑或直接控制等方式,已经获得容器内某种权限下的命令执行能力的过程和结果;因为docker使用的是隔离技术,因此容器内的进程无法看到外面的进程,但外面的进程可以看到里面,所以如果一个容器可以访问到外面的资源,甚至是获得了宿主主机的权限,这就叫做“Docker逃逸”。

本教程操作环境:linux7.3系统、docker19.03版、Dell G3电脑。

什么是docker容器逃逸

「容器逃逸」指这样的一种过程和结果首先,攻击者通过劫持容器化业务逻辑,或直接控制(CaaS等合法获得容器控制权的场景)等方式,已经获得了容器内某种权限下的命令执行能力;

攻击者利用这种命令执行能力,借助一些手段进一步获得该容器所在直接宿主机(经常见到“物理机运行虚拟机,虚拟机再运行容器”的场景,该场景下的直接宿主机指容器外层的虚拟机)上某种权限下的命令执行能力。

因为Docker所使用的是隔离技术,就导致了容器内的进程无法看到外面的进程,但外面的进程可以看到里面,所以如果一个容器可以访问到外面的资源,甚至是获得了宿主主机的权限,这就叫做“Docker逃逸”。

目前产生Docker逃逸的原因总共有三种:

  • 由内核漏洞引起。

  • 由Docker软件设计引起。

  • 由特权模式与配置不当引起。

接下来依次对这三种逃逸方法做简单说明。

1、由于内核漏洞引起的逃逸

因为Docker是直接共享的宿主主机内核,所以当宿主主机的内核存在安全漏洞时会一并影响Docker的安全,导致可能会造成Docker逃逸。具体流程如下:

  •  使用内核漏洞进入内核上下文

  •  获取当前进程的task struct

  •  回溯task list 获取pid = 1的task struct,复制其相关数据

  •  切换当前namespace

  •  打开root shell,完成逃逸

2、由于Doker软件设计引起的逃逸

比较典型的例子是Docker的标准化容器执行引擎----runc。Runc曾在2019年2月被爆出来过一个Docker逃逸漏洞CVE-2019-5736。其漏洞原理是,Docker、Containerd或其他基于runc的容易在运行时存在安全漏洞,攻击者可以通过特定的容器镜像或者exec操作获取到宿主机runc执行文件时的文件句柄并修改掉runc的二进制文件,从而获取到宿主机的root执行权限,造成Docker逃逸。

3、由于特权模式+目录挂载引起的逃逸

这一种逃逸方法较其他两种来说用的更多。特权模式在6.0版本的时候被引入Docker,其核心作用是允许容器内的root拥有外部物理机的root权限,而此前在容器内的root用户只有外部物理机普通用户的权限。

使用特权模式启动容器后(docker run --privileged),Docker容器被允许可以访问主机上的所有设备、可以获取大量设备文件的访问权限、并可以执行mount命令进行挂载。

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

除了使用特权模式启动Docker会引起Docker逃逸外,使用功能机制也会造成Docker逃逸。Linux内核自版本2.2引入了功能机制(Capabilities),打破了UNIX/LINUX操作系统中超级用户与普通用户的概念,允许普通用户执行超级用户权限方能运行的命令。例如当容器以--cap-add=SYSADMIN启动,Container进程就被允许执行mount、umount等一系列系统管理命令,如果攻击者此时再将外部设备目录挂载在容器中就会发生Docker逃逸。

推荐学习:《docker视频教程》


# docker  # Struct  # Namespace  # cap  # linux  # unix  # 容器内  # 的是  # 普通用户  # 这就  # 机运  # 获得了  # 可以看到  # 这一  # 就会  # 也会 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  打造顶配客厅影院,这份100寸电视推荐名单请查收  独立制作一个网站多少钱,建立网站需要花多少钱?  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  昵图网官方站入口 昵图网素材图库官网入口  如何撰写建站申请书?关键要点有哪些?  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  如何将凡科建站内容保存为本地文件?  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  网站制作大概多少钱一个,做一个平台网站大概多少钱?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  如何在万网自助建站中设置域名及备案?  Android 常见的图片加载框架详细介绍  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  网站制作壁纸教程视频,电脑壁纸网站?  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  中山网站推广排名,中山信息港登录入口?  Laravel如何实现用户注册和登录?(Auth脚手架指南)  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  b2c电商网站制作流程,b2c水平综合的电商平台?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  BootStrap整体框架之基础布局组件  Android仿QQ列表左滑删除操作  使用Dockerfile构建java web环境  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  装修招标网站设计制作流程,装修招标流程?  网站制作企业,网站的banner和导航栏是指什么?  如何在景安服务器上快速搭建个人网站?  如何快速登录WAP自助建站平台?  如何实现建站之星域名转发设置?  如何在IIS中新建站点并配置端口与物理路径?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  javascript基于原型链的继承及call和apply函数用法分析  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  如何批量查询域名的建站时间记录?  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  详解Android——蓝牙技术 带你实现终端间数据传输  bing浏览器学术搜索入口_bing学术文献检索地址  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  JS弹性运动实现方法分析  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性