如何使用whoc将底层容器运行时环境提取至远程服务器

发布时间 - 2025-07-12 00:00:00    点击率:

关于whoc whoc是一款强大且实用的容器镜像工具,旨在帮助研究人员将容器的底层运行时环境提取并传输到远程服务器。借助该工具,用户能够轻松地探索自己感兴趣的CSP容器平台的底层运行时环境。

运行机制 根据漏洞CVE-2019-5736的描述,传统的Linux容器运行时环境会通过/proc/self/exe将自身运行情况暴露给容器。而whoc利用这个链接来读取并执行容器的运行时环境。

动态模式 动态模式是whoc的默认操作模式,主要适用于动态链接的容器运行时。

1、whoc镜像的入口点设置为/proc/self/exe,镜像中的动态链接器ld.so会被upload_runtime替换。

2、当镜像开始运行时,容器运行时会在容器内重新执行。

3、由于运行时环境是动态链接的,内核会加载我们伪造的动态链接器(upload_runtime)至运行时进程,并向其传递执行命令。

4、upload_runtime将通过/proc/self/exe读取运行时代码,并将其发送到配置好的远程服务器。

Wait-For-Exec模式(等待执行) 对于静态链接的容器运行环境,whoc提供了whoc:waitforexec模式来解决。

1、upload_runtime作为镜像入口点,并在whoc容器中以PID 1运行。

2、用户需要在whoc容器中执行并调用指向/proc/self/exe的文件(例如“docker exec whoc_ctr /proc/self/exe”)。

3、执行发生后,容器运行时环境会在容器内部重新执行。

4、upload_runtime通过/proc/$runtime-pid/exe读取运行时代码,并将其发送到配置好的远程服务器。

本地使用 首先,在本地设备上安装并配置好Docker和Python3环境。然后,使用以下命令将项目源码克隆到本地:

代码语言:javascript 代码运行次数:0

运行 复制 ```javascript $ git clone git@github.com:twistlock/whoc.git ```

配置一个文件服务器来接收提取到的容器运行时环境:

代码语言:javascript 代码运行次数:0

运行 复制 ```javascript $ cd whoc $ mkdir -p stash && cd stash $ ln -s ../util/fileserver.py fileserver $ ./fileserver ```

在另一个Shell中,切换到自己的容器环境并运行whoc镜像:

代码语言:javascript 代码运行次数:0

运行 复制 ```javascript $ cd whoc $ docker build -f Dockerfile_dynamic -t whoc:latest src # 或 ./util/build.sh $ docker run --rm -it --net=host whoc:latest 127.0.0.1 # 或 ./util/run_local.sh ```

我们可以看到,文件服务器已经接收到了容器的运行时环境。如果你在vanilla Docker中运行whoc,接收到的运行时环境应为runc。

“--net=host”参数仅适用于本地测试,使得whoc容器能够通过“127.0.0.1”轻松访问主机上的文件服务器。

帮助信息 如果需要获取whoc的主要帮助信息,可以运行以下命令:

代码语言:javascript 代码运行次数:0

运行 复制 ```javascript Usage: upload_runtime [options] Options: -p, --port 远程服务器的端口,默认值为8080 -e, --exec 适用于静态容器运行时的等待执行模式,等待容器执行发生 -b, --exec-bin 在执行模式下,覆盖默认创建的用于执行的二进制文件,默认值为/bin/enter -a, --exec-extra-argument 在执行模式下,向运行时传递一个额外的参数,以防止其快速退出 -r, --exec-readdir-proc 在执行模式下,不是猜测运行时PID(这给whoc一次捕获运行时的机会),而是通过搜索'/proc'下的新进程来查找运行时 ```

项目地址

https://www./link/07e99f116b916656b3fd4f7dd58a3cbe


# linux  # python  # git  # docker  # 工具  # ai  # JavaScript  # for  # github  # https  # 镜像  # 适用于  # 发送到  # 文件服务器  # 模式下  # 值为  # 自己的  # 运行环境  # 你在  # 会在 


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


相关推荐: 手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  Laravel如何实现本地化和多语言支持?(i18n教程)  企业网站制作这些问题要关注  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  Android使用GridView实现日历的简单功能  Laravel如何实现多对多模型关联?(Eloquent教程)  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  iOS验证手机号的正则表达式  网站制作壁纸教程视频,电脑壁纸网站?  如何在Windows 2008云服务器安全搭建网站?  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  个人摄影网站制作流程,摄影爱好者都去什么网站?  Python文件操作最佳实践_稳定性说明【指导】  佛山企业网站制作公司有哪些,沟通100网上服务官网?  简单实现Android文件上传  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  jQuery 常见小例汇总  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  JS去除重复并统计数量的实现方法  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何用IIS7快速搭建并优化网站站点?  JavaScript模板引擎Template.js使用详解  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  PHP 500报错的快速解决方法  如何登录建站主机?访问步骤全解析  Laravel如何实现事件和监听器?(Event & Listener实战)  Laravel如何实现模型的全局作用域?(Global Scope示例)  用v-html解决Vue.js渲染中html标签不被解析的问题  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Android仿QQ列表左滑删除操作  java ZXing生成二维码及条码实例分享  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  详解Android——蓝牙技术 带你实现终端间数据传输  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  如何用低价快速搭建高质量网站?  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Android利用动画实现背景逐渐变暗  linux top下的 minerd 木马清除方法  英语简历制作免费网站推荐,如何将简历翻译成英文?  如何在Windows虚拟主机上快速搭建网站?  Laravel如何使用Collections进行数据处理?(实用方法示例)