Cómo construir imágenes arbitrarias de Dockerfile sin comprometer al host

5

Estoy creando un servidor que construirá imágenes directamente desde Dockerfile:

docker build -t arbitrarydocker .

Este archivo docker se construirá en el mismo servidor que los otros Dockerfiles del cliente, que pueden tener secretos. ¿Cómo puedo bloquear el proceso que hace docker build -t arbitrarydocker . para que no haga cosas como:

ADD /contents/of/host/secrets ./space/in/hacker/docker/container

La mejor manera que puedo pensar es dividir el proceso y ejecutarlo con un usuario inventado que tiene acceso de directorio limitado a una sola carpeta donde sus propios secretos se guardan con capacidades limitadas. También me pregunto si hay una manera de borrar totalmente la memoria después de crear el dockerfile para que los datos no se filtren a la siguiente compilación del cliente.

Si la única forma de hacerlo de manera segura es tener un servidor de compilación dedicado por cliente, entonces puedo hacerlo, pero me gustaría evitarlo.

Todas las compilaciones se realizan en Centos.

    
pregunta Dr.Knowitall 08.01.2018 - 22:54
fuente

2 respuestas

0

Puede generar las imágenes desde un contenedor sin privilegios, lo que también agregará cierta protección contra otras amenazas al host (por ejemplo, ejecución de comandos arbitrarios). Kaniko es un ejemplo de una herramienta para hacer exactamente eso.

    
respondido por el Tim Allclair 23.05.2018 - 03:10
fuente
0

Voy a indicar lo obvio aquí y solo digo, "no incluya / contents / of / host / secrets en la máquina virtual de su constructor". Presumiblemente, sin embargo, tiene algo que hace que la respuesta obvia sea menos obvia y correcta.

Así que volvamos al otro bit obvio, y señale que "la compilación arbitraria de Docker" es literalmente "ejecución de código arbitrario", ya que el proceso de compilación de Docker es imperativo (no declarativo), y hacer que su dockerfile haga cosas como descargar y ejecutar código arbitrario desde Internet es Totally A Thing ™ en el mundo de construcción de Docker.

En otras palabras, todo el proceso de compilación de Docker es potencialmente malicioso, por lo que deberías pensar en ello en términos de código proporcionado por el atacante de la zona de pruebas. Necesita un límite de seguridad sólido entre el entorno de tiempo de ejecución del creador (atacante) y prácticamente todo lo demás. Ha escuchado que los contenedores de la ventana acoplable no son un límite de seguridad, pero los contenedores de la ventana acoplable controlados por el atacante ni siquiera pretenden ser un límite de seguridad. El constructor debe ejecutarse en su propia VM, y todo el acceso entre él y sus propios sistemas debe estar mediado por canales de comunicación bien definidos; Sin acceso por la puerta trasera.

Con eso en mente, pensemos nuevamente en /contents/of/host/secrets . La construcción de la ventana acoplable se ejecuta en la máquina virtual del constructor. La máquina virtual está aislada porque no confías en ella, y no tiene acceso a secretos que no has compartido intencionalmente con el atacante. Ahí está tu solución sensata.

Para la limpieza: simplemente elimine la VM. Reinicie de nuevo desde su imagen HD "prístina".

Ya que la rueda que estás inventando se ha inventado muchas veces antes, te recomiendo que revises las soluciones existentes para obtener ideas sobre cómo resolvieron los problemas a los que te enfrentas.

    
respondido por el tylerl 19.12.2018 - 09:07
fuente

Lea otras preguntas en las etiquetas