Organización Mundial de la Salud Es la imagen del contenedor la que extrae el tiempo de ejecución del contenedor subyacente y lo envía al servidor remoto. ¡Empuje el tiempo de ejecución del contenedor subyacente de su plataforma de contenedor CSP favorita!
¿Como funciona?
Como se muestra en runc CVE-2019-5736, El tiempo de ejecución del contenedor de Linux tradicional se expone al contenedor en el que se ejecutan /proc/self/exe
. whoc
Utilice este enlace para leer el tiempo de ejecución del contenedor que lo ejecutó.
Modo dinámico
Este es whoc
El modo predeterminado para vincular dinámicamente el tiempo de ejecución del contenedor.
- esta
whoc
El punto de entrada de la imagen se establece en/proc/self/exe
, Y el enlazador dinámico de la imagen (ld.so
) Conupload_runtime
. - Una vez que la imagen se está ejecutando, el contenedor se volverá a ejecutar en el contenedor mientras se está ejecutando.
- Dado que el tiempo de ejecución está vinculado dinámicamente, el kernel cargará nuestro enlazador dinámico falso (
upload_runtime
) Al proceso en tiempo de ejecución y pasarle la ejecución. upload_runtime
Al leer archivos binarios en tiempo de ejecución/proc/self/exe
Y envíelo al servidor remoto configurado.
Espere el modo de ejecución
Para el tiempo de ejecución del contenedor vinculado estáticamente, whoc
Hay otro sabor: whoc:waitforexec
.
upload_runtime
Es el punto de entrada de la imagen y sirve comowhoc
Contenedor PID 1.- El usuario debe ejecutar
whoc
Contenedor y llame al archivo puntiagudo/proc/self/exe
(P.ejdocker exec whoc_ctr /proc/self/exe
). - Una vez que se produce la ejecución, el contenedor se volverá a ejecutar en el contenedor mientras se está ejecutando.
upload_runtime
Al leer archivos binarios en tiempo de ejecución/proc/$runtime-pid/exe
Y envíelo al servidor remoto configurado.
Prueba localmente
necesitas docker
con python3
Instalar en pc. Clona el repositorio:
$ git clone [email protected]:twistlock/whoc.git
Configure el servidor de archivos para recibir el tiempo de ejecución del contenedor extraído:
$ cd whoc $ mkdir -p stash && cd stash $ ln -s ../util/fileserver.py fileserver $ ./fileserver
Corre desde otro caparazón whoc
La imagen en el entorno de contenedor de su elección, como 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
Vea que el servidor de archivos recibió el tiempo de ejecución del contenedor.Si tu corres whoc
En Vanilla Docker, el tiempo de ejecución del contenedor recibido debe ser correr.
--net=host
Solo para pruebas locales con el fin de whoc
El contenedor puede acceder fácilmente al servidor de archivos en el host de las siguientes maneras 127.0.0.1
.
Otras plataformas
por defecto whoc
es para linux/amd64
, Pero también es compatible con otras arquitecturas de CPU. Puede construir el modo de espera para ejecutar como de costumbre.Hospedarse whoc
En el modo dinámico de otras arquitecturas de CPU, debe completar PLATFORM_LD_PATH_ARG
Utilice los parámetros de construcción de ruta del enlazador dinámico en la arquitectura de destino.
Un script de compilación de muestra arm64
Disponible en util/build_arm64.sh
.
ayuda
ayuda whoc
Archivo binario principal, upload_runtime
:
Usage: upload_runtime [options]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'