首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Runc 容器初始化和容器逃逸

runc 功能相对单一,即针对特定的配置,构建出容器运行指定进程,它不能直接用来构建镜像,kubernetes 依赖的如 cri-o 这类 CRI,在 runc 基础上增加了通过 API 管理镜像,容器等功能...create runc list # 列出创建状态的容器 runc start runc list runc delete <container-id...runc 容器初始化流程 runc 目前初始化大致流程如下图所示,其中一些步骤经过了简化: ?...CVE-2019-5736: 改写 runc 容器逃逸 在 2019 年初,爆发了一个容器严重漏洞,运行 docker 的容器环境,普通用户可以通过特殊构建的镜像,运行后改写主机上的 runc,从而进一步进行入侵操作...一个恶意构建的镜像可以将自己的入口改成/proc/self/exe,由于容器入口需要通过 runc 来 clone+execve 启动,这样就使得一个普通的用户容器,访问并执行了主机上的 runc

89520

CVE-2024-21626:runc容器逃逸漏洞

: 提权漏洞 CVSS评分: CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H - 高风险 (8.6) 由于runc存在内部文件描述符泄露,本地攻击者可以通过多种方式进行容器逃逸...: runc将包括宿主机 /sys/fs/cgroup的几个文件描述符泄漏到runc init中,攻击者可以利用这一漏洞欺骗具有特权的用户执行恶意容器镜像,导致pid1进程在宿主机挂载命名空间中拥有一个工作目录...如果容器内的恶意进程知道某个管理进程将使用 --cwd 参数和给定路径调用 runc exec,便可以通过符号链接将该路径替换为 /proc/self/fd/7/。...Snyk 在 Docker 引擎以及其他容器化技术(例如 Kubernetes)使用的runc<=1.1.11的所有版本中发现了一个漏洞。...exec方向实现容器逃逸。

1.8K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CVE-2024-21626|runc容器逃逸漏洞

    0x00 前言 runc是一个遵循oci标准的用来运行容器的命令行工具。runc的使用非常灵活,可以与各种容器工具和平台集成,如Docker、Kubernetes等。...0x01 漏洞描述 由于内部文件描述符泄漏,本地威胁者可以通过多种方式实现容器逃逸: 通过使新生成的容器进程(来自runc exec)在主机文件系统命名空间中拥有一个工作目录,或诱使特权用户运行恶意镜像并允许容器进程通过...runc run 访问主机文件系统,从而获得对主机文件系统的访问权限。...这些攻击还可用于覆盖半任意主机二进制文件,从而实现容器逃逸。.../blog/docker-security-advisory-multiple-vulnerabilities-in-runc-buildkit-and-moby/ https://blog.csdn.net

    74110

    CVE-2019-5736 runc容器逃逸漏洞复现

    0X1 漏洞详情 Docker、containerd或者其他基于runc容器运行时存在安全漏洞,攻击者可以通过特定的容器镜像或者exec操作可以获取到宿主机的runc执行时的文件句柄并修改掉runc的二进制文件...0X2影响范围:Docker版本 < 18.09.2 或者使用 runc版本 <= 1.0-rc6的环境,请自行根据厂商建议进行修复。...然后运行命令:docker run -d cve /bin/bash -c "tail -f /dev/null" 备份docker-runc文件,在kali下该文件目录在/usr/sbin/目录下:...然后进入容器内: ? 到root目录下,运行run.sh脚本 ? kali下开启另一个终端进行端口监听: ? 退出容器然后再重新进入容器,漏洞被触发,shell反弹过来 ? ? 至此,漏洞复现完毕!...0X4 漏洞修复 升级docker或者runC

    4.1K30

    真正运行容器的工具:深入了解 runc 和 OCI 规范

    有一个关于如何运行容器和管理容器映像的开放容器计划(OCI) 和规范。runc 符合此规范,但还有其他符合 OCI 的运行时。...使用 runc 运行 OCI 应用程序包 我们准备好将我们的应用程序包作为名为 的容器运行test: runc run test 接下来发生的事情是我们最终进入了一个新创建的容器内的 shell!...它有类似start,stop和 run的命令来做容器生命周期管理,但是容器的配置总是来自文件,而不是来自命令行: { "ociVersion": "1.0.1-dev",...runc 如何找到我们的容器?...runc 最重要的部分是它跟踪 OCI运行时规范。尽管几乎每一个容器,这些天与runc催生,它不具有与runc催生。

    3.6K41

    升级Docker后重启容器出现错误Unknown runtime specified docker-runc

    前言 笔者维护的Docker版本为1.13.1,,在对其版本升级到18.06.1之后,启动旧版本创建的容器时遇到这个错误: [root@template-centos7 /data]#docker start...mysql33 Error response from daemon: Unknown runtime specified docker-runc Error: failed to start containers...: mysql33 解决过程 在查阅资料后,得知因为「当您从不兼容的版本升级docker并且升级后无法启动docker容器时会出现这种情况」,解决办法如下: [root@template-centos7.../root]#grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g' [root...template-centos7 /root]#systemctl stop docker [root@template-centos7 /root]#systemctl start docker 改完之后重启dokcer,容器就可以启动了

    2.7K20

    【云原生攻防研究】— runC再曝容器逃逸漏洞(CVE-2024-21626)

    漏洞背景及介绍 RunC是一个基于OCI标准的轻量级容器运行时工具,用来创建和运行容器,该工具被广泛应用于虚拟化环境中,然而不断披露的逃逸漏洞给runC带来了严重的安全风险,如早期的CVE-2019-5736...此外,在 runC 1.1.12版本之前,runC在调用后也没有验证最终工作目录是否位于容器的挂载namespace内。...攻击方式2:runC exec容器逃逸攻击 攻击方式1中的fd泄露和缺乏工作目录验证同样也适用于runC exec命令。...漏洞原理分析 触发CVE-2024-21626漏洞的核心问题是runC run 或者 runC exec 的过程中存在没有及时关闭的fd,从而导致文件描述符泄漏在容器环境中,用户可以通过这个文件描述来进行容器逃逸...具体来说,在容器启动过程中,runC会设置容器的Cgroup信息,runC run 命令会创建一个用于操作 Cgroup 的接口类型对象 cgroups.Manager,根据runC 操作 Cgroup

    1.6K10

    从 docker 到 runC

    docker-containerd 负责管理所有本机正在运行的容器,而一个 docker-containerd-shim 进程只负责管理一个运行的容器,它相当于 docker-runc 的一个封装,充当...实际上,在容器启动的过程中,docker-runc 进程是作为 docker-containerd-shim 的子进程存在的。...docker-runc 进程根据配置找到容器的 rootfs 并创建子进程 bash 作为容器中的第一个进程。...当这一切都完成后 docker-runc 进程退出,然后容器进程 bash 由 docker-runc 的父进程 docker-containerd-shim 接管。...事实上 docker-containerd-shim 的存在是非常有必要的,其目的有如下几点: 它允许容器运行时(即 runC)在启动容器之后退出,简单说就是不必为每个容器一直运行一个容器运行时(runC

    61960

    IOC容器对Bean的生命周期

    Bean的生命周期在IOC容器中,Bean的生命周期经历以下几个阶段:2.1 实例化Bean首先,IOC容器通过反射机制实例化Bean对象。...IOC容器对Bean生命周期的控制IOC容器通过以下几个方面来控制Bean的生命周期:3.1 配置元数据IOC容器通过配置元数据,如XML配置文件、注解或Java配置类等,了解Bean的创建、属性赋值、...配置元数据告诉IOC容器应该如何处理Bean的生命周期。3.2 反射机制IOC容器使用反射机制来实例化Bean对象并执行其方法。反射机制允许IOC容器在运行时动态地创建对象、调用方法和访问属性。...总结IOC容器对Bean的生命周期进行了全面的控制,从实例化到销毁的整个过程都由容器负责管理。通过配置元数据、反射机制和依赖注入,IOC容器能够在适当的时机创建、初始化和销毁Bean对象。...因此,在Java开发中,合理使用IOC容器对Bean的生命周期进行管理,是非常重要的。

    24420

    浅析容器运行时奥秘——OCI标准

    规范了容器的配置、执行环境和生命周期管理。...runC是一个符合OCI规范的轻量级容器运行时生命周期管理工具,最初由Docker贡献给社区,来源于Docker原有的运行时管理部分。...BUNDLE CREATED OWNER [root@breeze runc]$ 至此完成了runC容器的整个生命周期管理过程展示。...runC只是个命令行工具,不是常驻进程,对于大规模的编排需求,无法通过网络调用实现。同样,也无法实现整个容器生命周期的自动化管理。 bundle的管理。...容器的bundle没有统一的管理,“ship anywhere”的愿望看起来可望不可及。 bundle的生命周期管理现在还没解决。runC的delete操作并不是清理bundle。 网络能力弱。

    4.3K43

    docker 启动容器提示:Error response from daemon: unknown or invalid runtime name: docker-runc

    服务器docker版本升级/或者重装后,导致不兼容问题 错误:Error response from daemon: unknown or invalid runtime name: docker-runc...Error: failed to start containers: 495f12d4ced5 2、解决方式 更改/var/lib/docker/containers目录中的文件参数,把docker-runc...替换为runc 命令如下:grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g'...递归搜索目录和子目录,只列出含有匹配的文本行的文件名,而不显示具体的匹配内容 xargs:衔接执行之前得到的值;总体意思是把/var/lib/docker/containers中含有‘docker-runc...’的文件搜索出来,并把‘docker-runc’字符为runc

    2K50

    直接使用runc 部署Nginx

    使用 runc`部署 Nginx 需要几个步骤。首先,确保你已经安装了 runc。接下来,请按照以下步骤操作: 1. 创建容器根文件系统(rootfs): 下载并解压 Nginx 容器镜像。...你可以使用 runc spec 命令生成一个默认的配置文件模板: cd /opt/nginx/ runc spec 打开生成的 config.json 文件,并进行以下更改: 设置 root.path...启动容器: 使用 `runc` 命令启动 Nginx 容器: cd /opt/nginx sudo runc run nginx-container 这将在前台启动一个名为 `nginx-container...停止容器runc kill nginx-container 5.删除容器runc delete nginx-container 总结 runc 是一个轻量级的容器运行时,允许您轻松部署和管理单个容器...本文介绍了如何使用 runc 创建、运行、停止和删除 Nginx 容器,以及如何查看容器日志、配置容器网络和管理容器数据。尽管我们主要关注了 Nginx 容器,但这些方法同样适用于其他类型的容器

    36220

    容器中的 Shim 到底是个什么鬼?

    每一个 Containerd 或 Docker 容器都有一个相应的 "shim" 守护进程,这个守护进程会提供一个 API,Containerd 使用该 API 来管理容器基本的生命周期(启动/停止),...shim 将 Containerd 进程从容器生命周期中分离出来,具体的做法是 runc 在创建和运行容器之后退出,并将 shim 作为容器的父进程,即使 Containerd 进程挂掉或者重启,也不会对容器造成任何影响...该 shim 使用 runc 来执行容器,并且只支持 cgroup v1。目前 v1 版 shim API 已被废弃,并将于 Containerd 2.0 被删除。...以 runc 为例,我们使用 runc create --pid-file= 命令创建容器runc 会分叉出一个新进程(runc init)用来设置沙箱,然后等待调用 runc start...shim 的另一个重要部分是将容器生命周期事件返回给 containerd ,包括:TaskCreate TaskStart TaskDelete TaskExit, TaskOOM, TaskExecAdded

    7.2K70
    领券