in

Una imagen de contenedor que extrae el tiempo de ejecución del contenedor subyacente




Una imagen de contenedor que extrae el tiempo de ejecución del contenedor subyacente y lo envía a un servidor remoto. Explore el tiempo de ejecución del contenedor subyacente de su plataforma de contenedor CSP preferida.

¿Como funciona?

Como muestra runc CVE-2019-5736, los tiempos de ejecución de contenedores de Linux tradicionales se exponen a los contenedores que atraviesan /proc/self/exe. whoc utilice este enlace para leer el tiempo de ejecución del contenedor que se está ejecutando.

Modo dinámico

Es decir whoc Modo estándar que funciona con tiempos de ejecución de contenedores vinculados dinámicamente.

  1. los whoc El punto de entrada de la imagen está activado. colocar /proc/self/exey el enlazador dinámico de la imagen (ld.so) es reemplazado por fake_ld.
  2. Tan pronto como se haya ejecutado la imagen, el tiempo de ejecución del contenedor se ejecuta nuevamente dentro del contenedor.
  3. Dado que el tiempo de ejecución está vinculado dinámicamente, el kernel carga nuestro enlazador dinámico falso en el proceso de tiempo de ejecución y le entrega la ejecución.
  4. fake_ld obtiene un descriptor de archivo para el binario en tiempo de ejecución abriéndolo /proc/self/exey ejecuta upload_runtime.
  5. upload_runtime lee el archivo binario en tiempo de ejecución /proc/self/fd/<runtime-fd> y lo envía al servidor remoto configurado.

Espere el modo Exec

Para tiempos de ejecución de contenedores vinculados estáticamente, whoc viene en un sabor diferente: whoc:waitforexec.

  1. upload_runtime es el punto de entrada de la imagen y se ejecuta como whoc Contenedor PID 1.
  2. Se espera que el usuario ingrese whoc Contenedor y obtenga un archivo que apunte a /proc/self/exe (p.ej. docker exec whoc-ctr /proc/self/exe)
  3. Tan pronto como se lleva a cabo la ejecución, el tiempo de ejecución del contenedor se ejecuta nuevamente dentro del contenedor
  4. upload_runtime lee el binario en tiempo de ejecución /proc/<runtime-pid>/exe y lo envía al servidor remoto configurado

Prueba localmente

Necesitas docker y python3 Configurar. Clona el repositorio:

$ git clone [email protected]:twistlock/whoc.git

Configure un 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

En otro caparazón ejecute el whoc Imagen en el entorno de contenedor que desee, por ejemplo, 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

Asegúrese de que el servidor de archivos haya recibido el tiempo de ejecución del contenedor. Mientras caminamos whoc En Vanilla Docker, se debe ejecutar el tiempo de ejecución del contenedor recibido.

--net=host sólo se utiliza en pruebas locales para que el whoc El contenedor podría llegar fácilmente al servidor de archivos en el host a través de 127.0.0.1.

ayuda

Ayuda para whocbinario principal, 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'



What do you think?

Written by Helen Lafayette

Deja una respuesta

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

GIPHY App Key not set. Please check settings

Evite la tristeza de las compras: cómo comprar en línea de forma segura durante la temporada navideña

Los errores de escucha clandestina en los chips MediaTek afectan al 37% de todos los teléfonos inteligentes y el IoT en todo el mundo