GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo inspeccionar el contenido de una imagen Docker sin iniciar un contenedor

Las imágenes de Docker pueden agrupar archivos binarios y bibliotecas arbitrarios en un único blob de datos. Inspeccionar lo que realmente hay dentro de una imagen lo ayuda a evaluar su idoneidad e identificar cualquier riesgo de seguridad.

La forma más fácil de explorar el contenido de una imagen implica iniciar un contenedor, obtener una sesión de shell y luego usar comandos de terminal regulares como ls y cd para ver su estructura de directorios desde dentro. Sin embargo, esto no es ideal en entornos críticos para la seguridad:crear un contenedor con una imagen desconocida podría exponerlo a un script de punto de entrada malicioso.

Estas son técnicas que puede usar para inspeccionar los archivos de una imagen sin iniciar un contenedor.

Crear un contenedor sin iniciarlo

docker create es una contraparte menos conocida de docker run . Crea un nuevo contenedor encima de una imagen dada sin iniciarlo. Puede iniciarlo más tarde con docker start comando.

Crear un nuevo contenedor no es peligroso ya que permanecerá inerte hasta que se ejecute. Puede compararlo aproximadamente con la definición de los ajustes de configuración para una VM que no usa. Incluso si está configurado para arrancar desde un sistema operativo ISO contaminado, no causará ningún daño a su entorno.

docker create --name suspect-container suspect-image:latest

El comando anterior crea un nuevo contenedor llamado suspect-container que se basará en la suspect-image:latest imagen.

Exportación del sistema de archivos del contenedor

Ahora que tiene un contenedor válido pero detenido, puede exportar su sistema de archivos usando docker export dominio. Como el contenedor nunca se inició, puede estar seguro de que la exportación representa con precisión el sistema de archivos definido por las capas de su imagen.

docker export suspect-container > suspect-container.tar

Terminará con un archivo tar en su directorio de trabajo que contiene todo dentro de su imagen. Abra o extraiga este archivo usando su software favorito para explorar los directorios de imágenes y listar y ver archivos.

Si no necesita guardar o abrir el archivo, sino que prefiere obtener la lista de archivos en su terminal, modifique el tar comando:

docker export suspect-container | tar t > suspect-container-files.txt

tar t enumera el contenido del archivo de entrada. Terminará con una lista de todo en su imagen dentro de suspect-container-files.txt .

Uso de "guardar imagen acoplable"

Una variación de esta técnica es usar docker image save . Este comando guarda directamente los datos de una imagen en un archivo tar.

docker image save suspect-image:latest > suspect-image.tar

Este método produce un archivo que se centra en la imagen, no en contenedores creados a partir de ella. El tar incluirá un manifest.json archivo, que describe las capas de la imagen y un conjunto de directorios que contienen el contenido de todas las capas individuales.

Esto es útil cuando está evaluando el rol de cada capa en la construcción de la imagen. Sin embargo, crear y exportar un contenedor detenido es una forma más accesible de explorar el sistema de archivos final de la imagen.

Lista de capas con “historial de imágenes de docker”

Otra forma de inspeccionar el contenido de una imagen es ver su lista de capas con el docker image history comando.

docker image history suspect-image:latest

Esto expone las instrucciones de Dockerfile que componían las capas de la imagen. No le permitirá ver archivos y directorios individuales en el sistema de archivos de la imagen, pero puede ser más efectivo para resaltar comportamientos sospechosos.

Cada línea en la salida del comando representa una nueva capa en la imagen. La columna "CREADO POR" muestra la instrucción Dockerfile que creó la capa.

Escanear la lista de capas lo ayuda a identificar rápidamente acciones sospechosas que podrían indicar que está usando una imagen maliciosa. Busque binarios desconocidos en RUN instrucciones, cambios inesperados en las variables de entorno y CMD sospechosos y ENTRYPOINT declaraciones.

Podría decirse que las dos últimas capas son las más importantes para evaluar al inspeccionar el historial de una imagen. Te dicen exactamente qué se iniciará cuando docker run o docker start un contenedor. Si cualquiera de las instrucciones parece sospechosa o desconocida, considere usar las técnicas anteriores para inspeccionar completamente los archivos binarios o scripts a los que se hace referencia.

Acceder al sistema de archivos de una imagen proporciona una vista muy granular de su contenido donde el contenido malicioso puede pasar fácilmente desapercibido, incluso después de una inspección manual. La lista de capas expuesta por docker image history no puede ayudarlo a encontrar elementos del sistema de archivos disfrazados, pero es más eficaz para sacar a la superficie operaciones claramente maliciosas, como descargas furtivas de spyware o anulaciones de variables de entorno.

Herramientas de terceros

Las herramientas de código abierto de terceros también están disponibles para ayudarlo a enumerar el contenido de las imágenes. Por lo general, ofrecen capacidades de filtrado para que pueda enumerar rápidamente los paquetes del sistema operativo instalado, las dependencias del lenguaje de programación y los archivos comunes.

La inspección de imágenes está integrada en el motor de escaneo de contenedores de Anchore. Puede usarlo ejecutando anchore-cli image content my-image:latest después de haber instalado Anchore. Esto proporciona una lista completa del contenido del sistema de archivos de la imagen de destino.

Otra opción es Dive, una herramienta creada expresamente para visualizar contenido de imágenes. Utiliza un enfoque basado en capas y resalta los cambios en el sistema de archivos realizados con cada nueva capa. Navega a través del sistema de archivos utilizando una vista de terminal interactiva basada en árbol.

Conclusión

Las imágenes de Docker suelen ser opacas en el punto de consumo. Los registros populares no proporcionan una lista de archivos en sus API o interfaces de usuario. Esta funcionalidad tampoco está integrada en la CLI de Docker. Aunque muchos desarrolladores utilizan imágenes tal cual, una imagen no auditada puede resultar intolerable en entornos de alto riesgo.

Puede inspeccionar una imagen sospechosa exportándola a un archivo y examinando su contenido. Esto mantiene la imagen inerte, evitando que se ejecute contenido malicioso, al tiempo que proporciona una vista completa del sistema de archivos que crearía en un contenedor.

Puede aumentar aún más su postura de seguridad al combinar la exploración de contenido manual con escaneos de imágenes automatizados. Estos aceleran el proceso de detección de vulnerabilidades conocidas, pero pueden no ser efectivos para encontrar nuevos archivos maliciosos depositados en ubicaciones ocultas. El uso de múltiples técnicas le permite ampliar su cobertura y capturar el conjunto más amplio posible de archivos sospechosos.


Docker
  1. Cómo ejecutar MySQL en un contenedor Docker

  2. Cómo instalar Vim en un contenedor Docker

  3. Cómo utilizar el comando de inspección de Docker

  4. Cómo modificar imágenes de Docker

  5. Cómo crear una imagen personalizada desde un contenedor Docker

Cómo ejecutar PHPMyAdmin en un contenedor Docker

Cómo ejecutar Grafana en un contenedor Docker

Cómo crear una imagen de Docker desde un contenedor en ejecución

Cómo crear una imagen de ventana de Docker con la etiqueta de compilación de Docker

Cómo configurar un contenedor Apache Docker

Cómo usar Docker Commit para cambiar imágenes de contenedores