Tutoriales

Extraiga la imagen del contenedor del tiempo de ejecución del contenedor subyacente

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.

  1. 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) Con upload_runtime.
  2. Una vez que la imagen se está ejecutando, el contenedor se volverá a ejecutar en el contenedor mientras se está ejecutando.
  3. 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.
  4. 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.

  1. upload_runtime Es el punto de entrada de la imagen y sirve como whoc Contenedor PID 1.
  2. El usuario debe ejecutar whoc Contenedor y llame al archivo puntiagudo /proc/self/exe (P.ej docker exec whoc_ctr /proc/self/exe).
  3. Una vez que se produce la ejecución, el contenedor se volverá a ejecutar en el contenedor mientras se está ejecutando.
  4. 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 whocArchivo 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'

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba