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

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

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

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

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

Snyk container

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

Ejemplo de archivo Docker

Lo primero que necesita para utilizar Snyk para detectar vulnerabilidades es una imagen docker. En este ejemplo, utilizaremos la siguiente imagen docker :

DESDE python:3.4-alpine
ADD . /code
WORKDIR /code
EJECUTE pip install -r requirements.txt
EXPOSE 8000 CMD
["python", "app.py"]

Lo primero que debemos hacer es generar la imagen localmente mediante el siguiente comando:

docker build -t 0xyz0/python-app.

Ahora tenemos una imagen para analizar.

Analice la imagen desde el cliente Docker

La integración del servicio Snyk con Docker hace que este proceso sea increíblemente sencillo. Para iniciar el escaneado, sólo tiene que ejecutar lo siguiente

docker scan 0***0/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:

El escaneo Docker muestra todas las vulnerabilidades de la imagen

Como puede ver, no sólo le indica cuántas vulnerabilidades ha encontrado. Incluso si se desplaza hacia arriba, puede ver cuáles son y su criticidad, sino que también le hace recomendaciones sobre la imagen base que debería utilizar.

También puede consultar los detalles de la vulnerabilidad en la 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

EJECUTE pip install -r requisitos.txt

EXPONGA 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 muestra ahora menos vulnerabilidades y, en este caso, le indica que está utilizando la imagen base más segura:

Docker scan le asegura que está utilizando la imagen base más segura

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

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

E incluso excluir la imagen base del análisis, por si quiere centrarse en lo que ha hecho mal:

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

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

Pero para ello, debe disponer de una de las suscripciones de pago. Sin embargo, puede lanzarlo localmente, con el plan gratuito que tiene sólo por estar conectado a Docker Hub (tiene límites claros de escaneo), mientras desarrolla o quiere comprobar cómo de segura es una imagen de terceros que quiere utilizar.

Uso de Snyk con acciones de Github

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

.github / worflows /

A continuación, para utilizar el contenedor Snyk en Github es crear una nueva imagen o tomar la imagen que hemos creado en Docker Hub. Para utilizar Snyk, hay que crear un nuevo secreto llamado SNYK_TOKEN, y para obtener el token, hay que crear una cuenta en Snyk. Desde Ajustes Generales, donde dice Token API, puede generarlo rápidamente.

Con el token, puede crear el secreto en Github y utilizarlo en la Acción. Ahora, tiene que pasarle el nombre del repositorio creado en Docker Hub. A continuación, tiene que pasarle el mensaje que tiene que enviar. Puede acceder a las salidas de los pasos para utilizarlas como variable en el mensaje.

con:
args: 'Un nuevo commit ha sido empujado. Por favor, verifique la acción github:
| worflow $ {{fromJson (pasos.repo.salidas.resultado) .html_url}} / acciones
| Ejecución: $ {{steps.prep.outputs.created}}
| Versión: $ {{steps.prep.outputs.version}} '

¿Cómo ejecutar todo el flujo de trabajo? Simple sólo empujando Master. Acción Github detectará el archivo dentro de .github / flujos de trabajo /.

Palabras finales 👈

Con la creciente popularidad de los contenedores, los incidentes de violaciones 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 eficaz y sencilla que puede ayudarnos a evitar errores de configuración y a detectar las vulnerabilidades más comunes en las imágenes Docker.