前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用whoc将底层容器运行时环境提取至远程服务器

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

作者头像
FB客服
发布2022-01-05 08:16:19
5090
发布2022-01-05 08:16:19
举报
文章被收录于专栏:FreeBuf

关于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
复制
$ git clone git@github.com:twistlock/whoc.git

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

代码语言:javascript
复制
$ cd whoc

$ mkdir -p stash && cd stash

$ ln -s ../util/fileserver.py fileserver

$ ./fileserver

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

代码语言:javascript
复制
$ cd whoc

$ docker build -f Dockerfile_dynamic -t whoc:latest src  # or ./util/build.sh

$ docker run --rm -it --net=host whoc:latest 127.0.0.1  # or ./util/run_local.sh

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

“--net=host”只适用于本地测试,因此whoc容器可以轻松通过“127.0.0.1”访问主机的文件服务器。

帮助信息

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

代码语言:javascript
复制
Usage: upload_runtime [options] <server_ip>

 

Options:

 -p, --port                 Port of remote server, defaults to 8080

 -e, --exec                 Wait-for-exec mode for static container runtimes, waits until an exec to the container occurred

 -b, --exec-bin             In exec mode, overrides the default binary created for the exec, default is /bin/enter

 -a, --exec-extra-argument  In exec mode, pass an additional argument to the runtime so it won't exit quickly

 -r, --exec-readdir-proc    In exec mode, instead of guessing the runtime pid (which gives whoc one shot of catching the runtime),

                            find the runtime by searching for new processes under '/proc'

项目地址

https://github.com/twistlock/whoc

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于whoc
  • 运行机制
    • 动态模式
      • Wait-For-Exec模式(等待执行)
      • 本地使用
        • 帮助信息
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档