什么是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逃逸外,使用功能机制也会造成Do
cker逃逸。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事务操作确保数据一致性

