太阳集团2138备用网址

  • 防弹少年团金泰亨蓝发登各国热搜 玩儿转红粉金黑棕各种发色实力演绎“有颜任性”【组图】 2019-04-25
  • 龙烨为袁竹逍遥画派配画诗欣赏之三 2019-04-25
  • 因应增值税下调 多个豪车品牌在华降价 2019-04-25
  • “小屏论”话两会:“习语”暖人心 2019-04-25
  • 低价 贴心 保障 国美3.15,为消费者保驾护航低价贴心保障 国美315,为消费者保驾护航-国美 2019-04-25
  • 中央政治局同志向党中央和习近平总书记述职 2019-04-25
  • China Daily Website 2019-04-25
  • 【守护好我们的美丽家园】新疆的明天一定会更好 2019-04-25
  • 22年后紫霞仙子归来 可至尊宝已经不是他了 2019-04-25
  • 【独家V观】你好 意大利 2019-04-25
  • 合肥一文化公司人去楼空老板跑路 老人购买保健品被骗上万元 2019-04-25
  • 北京二手房交易实现一网通办 20分钟就办完 ——凤凰网房产北京 2019-04-25
  • NBA史上最牛的9大名帅 波波在这里只能排倒三 2019-04-25
  • 《阿丽塔》要和《流浪地球》抢票房 2019-04-24
  • 百城住宅均价环比涨幅持续收窄 变化大多在1%内 2019-04-24
  • 欢迎来到 黑吧太阳集团2138备用网址 是业内专业的游戏平台,为你提供各式各样的精品游戏,最全的游戏项目,同时还为您提供各种游戏专题游戏攻略人气论坛。

    打破Docker:runC容器逃逸漏洞的深入分析及多种利用方法(CVE-2019-5736)

    来源:本站整理 作者:佚名 时间:2019-02-25 TAG: 我要投稿

    太阳集团2138备用网址 www.r-island.com 2019年2月11日,runC的维护团队报告了一个新发现的漏洞,该漏洞最初由Adam Iwaniuk和Borys Poplawski发现。该漏洞编号为CVE-2019-5736,漏洞影响在默认设置下运行的Docker容器,并且攻击者可以使用它来获得主机上的root级访问权限。
    runC维护团队成员Aleksa Sarai发现LXC存在同样的缺陷。但与Docker相反,只有特权LXC容器才容易受到攻击。runC和LXC都对漏洞进行了修复,并发布了新的版本。
    该漏洞一经公布,就获得了非常多的关注,许多技术站点和商业公司都撰写专门的文章来说明这一漏洞。在Twistlock,我们的CTO John Morello撰写了一篇精彩的文章,其中包括Twistlock平台提供的所有相关细节和缓解措施。
    最初,官方表示漏洞利用代码在2月18日之前不会公开发布,以防止恶意攻击者在用户还没有及时更新的时间段内进行该漏洞的武器化利用。但是,在漏洞披露后的几天内,有几个人决定发布他们自己的漏洞利用代码,这直接导致了runC团队在2月13日就公布了他们的漏洞利用代码。因为,他们已经无法阻止人们对这一漏洞的积极研究。
    关于该漏洞的基本描述、发现过程和概念证明,请阅读《影响大量云服务厂商的严重漏洞:runC容器逃逸漏洞分析(CVE-2019-5736)》。本文将在此基础上,深入分析这一漏洞,并探讨多种漏洞利用方法。
    关于RunC
    RunC是一个容器运行时,最初是作为Docker的一部分开发的,后来作为一个单独的开源工具和库被提取出来。作为“低级别”容器运行时,runC主要由“高级别”容器运行时(例如Docker)用于生成和运行容器,尽管它可以用作独立工具。
    像Docker这样的“高级别”容器运行时通常会实现镜像创建和管理等功能,并且可以使用runC来处理与运行容器相关的任务:创建容器、将进程附加到现有容器等。
    Procfs
    要了解漏洞,我们首先需要了解一些procfs的基础知识。Proc文件系统是Linux中的一个虚拟文件系统,主要提供有关进程的信息,通常安装在/proc上。它在某种意义上来说是虚拟的,因为它在磁盘上实际不存在。相反,内核会在内存中创建它。它还可以被认为是一个内存为文件系统公开的系统数据接口。每个进程在procfs中都有自己的目录,位于/proc/[pid]:

    如上图所示,/proc/self是指向当前正在运行进程的目录的符号链接(在本例中为pid 177)。每个进程的目录中都包含几个文件和目录,其中包含有关该进程的信息。与本次研究的漏洞相关的几个信息是:
    · /proc/self/exe – 进程正在运行的可执行文件的符号链接;
    · /proc/self/fd – 包含进程打开的文件描述符的目录。
    例如,我们运行ls /proc/self可以列出/proc/self下的文件,我们能够看到,/proc/self/exe指向“ls”可执行文件。

    这是有道理的,因为访问/proc/self的正是Shell生成的“ls”进程。
    漏洞分析
    让我们回顾一下runC团队提供的漏洞概述:
    该漏洞允许恶意容器(以最少的用户交互)覆盖主机runc二进制文件,从而在主机上蝴蝶root级别代码执行。用户交互的级别能够允许上下文中的任何一个容器以root身份运行任何命令:
    1、使用攻击者控制的映像创建新的容器;
    2、将(docker exec)附加到攻击者之前具有写入权限的已有容器中。
    这两种情况看起来可能不同,但都需要runC来启动容器中的新进程,并以类似的方式实现。在这两种情况下,runC的任务是在容器中运行用户定义的二进制文件。在Docker中,这个二进制文件是启动新容器时映像的入口点,或者是附加到现有容器时的docker exec参数。
    运行这个用户二进制文件时,它必须已经被限制在容器内,否则可能会威胁主机安全。为了实现这一点,runC创建了一个名为“runC init”的子进程,它将所有需要的限制放在其自身(例如:输入、设置命名空间),并有效地将其自身放置在容器中。然后,现在在容器中的runC init进程调用execve系统调用,使用用户请求的二进制文件覆盖自身。

    这是runC用于创建新容器以及将进程附加到现有容器的方法。

    研究人员发现,攻击者可以通过要求runC运行/proc/self/exe来欺骗runC执行其自身,这是一个指向主机上runC二进制文件的符号链接。

    然后,容器中具有root访问权限的攻击者可以使用/proc/[runc-pid]/exe作为对主机上runC二进制文件的引用,并对其进行覆盖。由于runC二进制文件由root拥有,因此需要在容器中进行root访问后才能执行此攻击。在下次执行runC时,攻击者将在主机上实现代码执行。由于runC通常以root身份运行(例如:通过Docker守护程序),因此攻击者将获得主机上的root访问权限。
    * 为什么不使用runC init?
    上面的图片可能会误导一些读者,让人以为漏洞(即欺骗runC执行其自身)是多余的。也就是说,为什么攻击者不能简单地覆盖/proc/[runc-init-pid]/exe呢?
    针对类似runC漏洞的修补程序CVE-2016-9962可以缓解此类攻击。CVE-2016-9962漏洞具体来说,是runC init进程拥有来自宿主机的打开文件描述符,容器中的攻击者可以利用它来遍历主机的文件系统,从而打开容器。这个漏洞的部分修补程序在进入容器之前就将runC init进程设置为“不可转储”(Non-dumpable)。

    [1] [2] [3]  下一页

    【声明】:太阳集团2138备用网址(http://www.r-island.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@www.r-island.com,我们会在最短的时间内进行处理。