Buscar vulnerabilidades en imágenes de Docker con Snyk

Ya queda poco para que comience el Bootcamp de DevOps de Lemoncode y es por ello que estoy revisando y actualizando el contenido de todas las demos que tengo para contar Docker. Aprovechando que estas tienen un año he querido escanear aquellas imágenes que utilicé entonces en busca de vulnerabilidades ¡y bingo! no puedes descuidarte tampoco en este aspecto, al igual que con los secretos. En este artículo te cuento cómo lo hago.

Dockerfile de ejemplo

Para que veas cómo ejecutarlo y qué información te aporta voy a utilizar este Dockerfile de ejemplo:

FROM python:3.4-alpine

ADD . /code

WORKDIR /code

RUN pip install -r requirements.txt

EXPOSE 8000

CMD ["python", "app.py"]

Lo primero que debemos hacer es generar la imagen en local a través del siguiente comando:

docker build -t 0gis0/python-app .

Ahora ya tenemos una imagen que analizar.

Escanear la imagen desde el cliente de Docker

La forma de hacer este proceso es súper sencilla, gracias a integración que se ha hecho con el servicio Snyk. Para comenzar el escaneo solo debes ejecutar lo siguiente:

docker scan 0gis0/python-app

Esto comenzará con el análisis donde devolverá una salida más o menos extensa, dependiendo de las vulnerabilidades que encuentre, y con un resumen final:

docker scan muestra todas las vulnerabilidades de tu imagen

En él, como ves, no solo te dice cuántas vulnerabilidades ha encontrado, incluso si haces scroll hacia arriba puedes ver en detalle cuáles son y su criticidad, sino que además te hace recomendaciones en cuanto a la imagen base que deberías de utilizar. En mi caso me ofrece varias alternativas, por lo que voy a modificar mi Dockerfile con la primera de las opciones:

FROM python:3.7.11-slim

ADD . /code

WORKDIR /code

RUN pip install -r requirements.txt

EXPOSE 8000

CMD ["python", "app.py"]

Si vuelvo a generar la imagen y a escanearla:

docker build -t 0gis0/python-app . && docker scan 0gis0/python-app

Verás que la salida ahora muestra muchas menos vulnerabilidades y en este caso te dice que ahora ya estás usando la imagen base más segura:

docker scan asegura que estás usando la imagen base más segura

También puedes incluso obtener un informe más detallado, si añades al comando el Dockerfile que genera la imagen:

docker scan -f Dockerfile 0gis0/python-app

E incluso excluir del análisis la imagen base, por si solo quieres centrarte el «lo que has hecho mal tú» 😛

docker scan -f Dockerfile --exclude-base 0gis0/python-app

Este servicio también puede integrarse con los repositorios de Docker Hub:

Habilitar el escaneo de vulnerabilidades cuando haces push

Pero para ello debes tener una de las suscripciones de pago.

El escaneo de vulnerabilidades en Docker Hub es de pago

Sin embargo, puedes lanzarlo en local, con el plan gratuito que tienes solo por estar logado a Docker Hub (tiene limites de escaneo claro), mientras desarrollas o quieres comprobar cómo de segura es una imagen de terceros que quieres usar.

¡Saludos!

logo lemoncode

 

 

Bootcamp DevOps

Si tienes ganas de meterte en el área de DevOps, formo parte del
equipo de docentes del Bootcamp DevOps Lemoncode, ¿Te animas a
aprender con nosotros?

Más Info