
Контейнерный образ, который эксфильтрует базовую среду выполнения контейнера на удаленный сервер.
Образ контейнера, который извлекает базовую среду выполнения контейнера и отправляет ее на удаленный сервер. Исследуйте базовую среду выполнения контейнера вашей любимой платформы контейнеров CSP!
Как показано в runc CVE-2019-5736, традиционные среды выполнения контейнеров Linux предоставляют себя контейнерам, которые они запускают, через /proc/self/exe. whoc использует эту ссылку для чтения исполняемой среды выполнения контейнера.
Это режим whoc по умолчанию, который работает с динамически скомпонованными средами выполнения контейнеров.
whoc установлена на /proc/self/exe, а динамический компоновщик образа (ld.so) заменен на upload_runtime.upload_runtime) в процесс среды выполнения и передает ему управление.upload_runtime читает бинарный файл среды выполнения через /proc/self/exe и отправляет его на настроенный удаленный сервер.
Для статически скомпонованных сред выполнения контейнеров whoc поставляется в другой версии: whoc:waitforexec.
upload_runtime является точкой входа образа и работает как PID 1 контейнера whoc.whoc и вызовет файл, указывающий на /proc/self/exe (например, docker exec whoc_ctr /proc/self/exe).upload_runtime читает бинарный файл среды выполнения через /proc/$runtime-pid/exe и отправляет его на настроенный удаленный сервер.
Вам потребуются установленные docker и python3. Клонируйте репозиторий:
git clone [email protected]:twistlock/whoc.git && cd whoc
Настройте файловый сервер для приема извлеченной среды выполнения контейнера:
mkdir -p stash && cd stash
ln -s ../util/fileserver.py fileserver
./fileserver
Из другой оболочки запустите образ whoc в выбранной среде контейнеров, например Docker:
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
Убедитесь, что файловый сервер получил среду выполнения контейнера. Если вы запускаете whoc в стандартном Docker, полученная среда выполнения должна быть runc.
--net=host используется только в локальных тестах, чтобы контейнер whoc мог легко достичь файлового сервера на хосте через 127.0.0.1.
По умолчанию whoc собирается для linux/amd64, но также поддерживает другие архитектуры процессора. Режим ожидания exec можно собрать как обычно. Чтобы собрать whoc в динамическом режиме для других архитектур процессора, необходимо указать аргумент сборки PLATFORM_LD_PATH_ARG с путем динамического компоновщика в целевой архитектуре.
Пример скрипта сборки для arm64 доступен в util/build_arm64.sh.
Справка по основному бинарному файлу whoc, upload_runtime:
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'