La forma más fácil de encontrar vulnerabilidades en las imágenes de Docker usando Snyk

Snyk es un editor especializado en analizar vulnerabilidades en el código de los archivos de configuración de infraestructura, incluidos los presentes en contenedores y paquetes de aplicaciones.

Snyk ofrece una plataforma en la nube primero, pero ofrece varios productos.

Snyk OpenSource se integra a través de la CLI del editor en un flujo Git. Una vez iniciado, el software detecta vulnerabilidades, las clasifica por grado de sensibilidad y corrige automáticamente los errores de seguridad conocidos. Esta funcionalidad se puede incorporar al ciclo de solicitud de extracción para aplicar al código enviado a los repositorios.

Snyk Infrastructure as Code, por otro lado, analiza las vulnerabilidades y las corrige en los archivos de configuración JSON y YAML de Kubernetes. Aquí, un motor de reglas le permite configurar la sensibilidad de las detecciones dentro de los repositorios de Git según los parámetros decididos por los administradores.

Snyk Container le permite probar las imágenes de la ventana acoplable y los registros asociados en el momento de su creación y después. El programa se puede integrar en CLI, SCM, herramientas de CI, registros de contenedores y Kubernetes.

Hoy veremos cómo podemos usar Snyk Container, que viene integrado con Docker para detectar vulnerabilidades.

Ejemplo de archivo acoplable

Lo primero que necesita para usar Snyk para detectar vulnerabilidades es una imagen acoplable. En este ejemplo, usaremos la siguiente imagen acoplable:

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 localmente a través del siguiente comando:

docker build -t 0xyz0/python-app.

Ahora tenemos una imagen para analizar.

Escanea la imagen desde el cliente Docker

La integración del servicio Snyk con Docker hace que este proceso sea increíblemente simple. Para iniciar el escaneo, solo debes ejecutar lo siguiente:

docker scan 0***0/python-app

Este comenzará con el análisis donde devolverá un resultado más o menos extenso, dependiendo de las vulnerabilidades que encuentre, y con un resumen final:

El escaneo de Docker muestra todas las vulnerabilidades de la imagen.

Como puedes ver, no solo te dice cuántas vulnerabilidades ha encontrado. Incluso si se desplaza hacia arriba, puede ver cuáles son y su criticidad, pero también hace recomendaciones sobre la imagen base que debe usar.

También puede consultar los detalles de la vulnerabilidad desde el Base de datos de vulnerabilidades de Snyk.

En mi caso me ofrece varias alternativas, así que voy a modificar mi Dockerfile con la primera opción:

FROM python:3.7.11-slim

ADD . /code

WORKDIR /code

RUN pip install -r requirements.txt

EXPOSE 8000

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

Si reconstruyo la imagen y la escaneo:

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

Verá que la salida ahora muestra menos vulnerabilidades y, en este caso, le indica que actualmente está utilizando la imagen base más segura:

El escaneo de Docker garantiza que está utilizando la imagen base más segura

También puede obtener un informe más detallado si agrega el archivo docker que genera la imagen al comando:

docker scan -f Dockerfile 0***0/python-app

E incluso excluir la imagen base del análisis, en caso de que quieras centrarte en lo que has hecho mal:

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

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

Pero para esto, debes tener una de las suscripciones pagas. Sin embargo, puede ejecutarlo localmente, con el plan gratuito que tiene solo por iniciar sesión en Docker Hub (tiene límites de escaneo claros), mientras desarrolla o desea verificar qué tan segura es una imagen de terceros que desea. usar.

Usando Snyk con acciones de Github

Lo primero que hay que hacer es crear un repositorio y dentro crear una carpeta.

.github / worflows /

Luego, usar Snyk Container en Github es crear una nueva imagen o tomar esa imagen que creamos en Docker Hub. Para usar Snyk, debe crear un nuevo secreto llamado SNYK_TOKEN, y para obtener el token, debe crear una cuenta en Snyk. Desde Configuración general, donde dice API Token, puedes generarlo rápidamente.

Con el token, puede crear el secreto en Github y usarlo en la Acción. Ahora, debe pasarle el nombre del repositorio que se creó en Docker Hub. A continuación, debe pasar el mensaje que debe enviar. Puede acceder a las salidas de los pasos para usar como una variable en el mensaje.

with:
args: 'A new commit has been pushed. Please verify github action:
| worflow $ {{fromJson (steps.repo.outputs.result) .html_url}} / actions
| Exec: $ {{steps.prep.outputs.created}}
| Version: $ {{steps.prep.outputs.version}} '

¿Cómo ejecutar todo el flujo de trabajo? Simple con solo presionar Master. Github Action detectará el archivo dentro de .github/workflows/.

Palabras finales 👈

Con la creciente popularidad de los contenedores, los incidentes de brechas de seguridad son cada vez más comunes, la mayoría de los cuales se deben a errores de configuración en el despliegue de los contenedores. Snyk proporciona una herramienta eficiente y sencilla que puede ayudarnos a evitar errores de configuración y detectar las vulnerabilidades más comunes en las imágenes de Docker.