Skip to main content

Snyk Container y Cloud Native Buildpacks: seguridad de aplicaciones nativas de la nube, de la manera correcta

Escrito por

Pas Apicella

blog feature snyk container pink

24 de agosto de 2021

0 minutos de lectura

¿Estás ejecutando microservicios en contenedores? ¡Felicitaciones! Es un paso importante para satisfacer las necesidades del negocio y entregar aplicaciones a tus clientes lo antes posible. Pero ¿cómo podemos mitigar los posibles riesgos asociados con una implementación de software más rápida? Es sencillo: con Snyk.

Snyk Container, en combinación con una herramienta de compilación que crea imágenes de contenedor compatibles con OCI, te ayudará a mitigar ese riesgo y a enfocarte en lo que realmente importa: una experiencia de primera para tus clientes. Veamos cómo funciona.

La diferencia entre las imágenes de Docker y las imágenes compatibles con OCI

Para asegurarse de que todos los entornos de ejecución de contenedores puedan ejecutar imágenes producidas por cualquier herramienta de compilación, la comunidad de contenedores de código abierto creó la Open Container Initiative (OCI) para definir estándares de la industria para los formatos de imágenes y los entornos de ejecución de contenedores. Dada una imagen OCI, cualquier entorno de ejecución de contenedores que implemente laOCI Runtime Specification puede extraer la imagen y ejecutarla en un entorno aislado.

Es muy probable que hayas oído hablar de la empresa Docker y quizá te preguntes cuál es la diferencia entre las imágenes OCI y las imágenes de Docker. Hoy en día, la respuesta es «no mucha». Todavía existen algunas imágenes antiguas de Docker que preceden a las especificaciones OCI. Formalmente, se conocen como formatos de especificación Docker v1 y no son compatibles con el esquema Docker v2, que se donó a OCI y sentó las bases de las especificaciones OCI. Sin embargo, esas imágenes v1 datan de 2017. Hoy en día, casi todos los registros de contenedores, las plataformas Kubernetes y los entornos de ejecución de contenedores se basan en las especificaciones OCI. Esto incluye el motor Docker, Docker Hub y otras herramientas y productos de Docker.

Quizá te preguntes por qué importa todo esto. Porque las especificaciones abiertas han permitido que otros grupos encuentren formas innovadoras de crear contenedores. Y como todos terminan creando imágenes compatibles con OCI, puedes ejecutar esas imágenes en cualquier lugar y usar herramientas de seguridad como Snyk Container para protegerlas. En definitiva, seguramente quieres que los equipos de desarrollo se enfoquen en el código central de la aplicación, no en cómo debe ser el Dockerfile, ni que pasen horas verificando qué bibliotecas de código abierto deberían usar, o revisando las miles de etiquetas de imágenes en Docker Hub para decidir qué imagen base elegir. Veamos un método para crear contenedores directamente a partir del código fuente: Cloud Native Buildpacks.

Cloud Native Buildpacks: del código fuente a los contenedores en un solo paso

Cloud Native Buildpacks (CNB) transforma el código fuente de tu aplicación en imágenes OCI totalmente compatibles que pueden ejecutarse en cualquier nube. Además, admite todos los lenguajes de programación populares. ¡Problema de los contenedores resuelto, con control, cumplimiento y facilidad de mantenimiento!

Si alguna vez usaste Heroku, Pivotal PaaS (ahora llamado VMware Tanzu Application Service) o Cloud Foundry, el proyecto de código abierto relacionado, ya viste algo similar a buildpacks. Solo tienes que enviar tu código a esos servicios y ellos se encargan de empaquetarlo en un objeto de entorno de ejecución adecuado. CNB ofrece esa misma experiencia para las imágenes OCI. Un desarrollador escribe el código y CNB compila todas las dependencias de la aplicación y luego empaqueta en una imagen de contenedor todo lo que necesita.

Diagrama que muestra una plataforma que convierte el código fuente de una aplicación y los buildpacks en imágenes de compilación y ejecución, dependencias y una imagen de la aplicación.

Cómo funciona Cloud Native Buildpacks (de vmware Tanzu Developer Center)

Ejemplo

$ pack build pasapples/pbs-demo-image:latest --builder paketobuildpacks/builder:base --publish --path ./target/springbootemployee-0.0.1-SNAPSHOT.jar

Entonces, ¿qué construye exactamente Cloud Native Buildpacks?

Al igual que cualquier herramienta para crear imágenes, Cloud Native Buildpacks crea un conjunto de capas del sistema de archivos que contienen el entorno de ejecución, tu aplicación y todas sus dependencias, además de los metadatos que el motor de contenedores usa para saber cómo iniciar la aplicación. Aquí está la información de las capas del ejemplo anterior, obtenida con el comando docker image history:

$ docker image history pasapples/pbs-demo-image:latest
IMAGE      CREATED    CREATED BY   SIZE  COMMENT
5d29940d2e52   41 years ago            68kB
<missing>  41 years ago            46.3MB
<missing>  41 years ago            10B
<missing>  41 years ago            7.05MB
<missing>  41 years ago            451kB
<missing>  41 years ago            2.09MB
<missing>  41 years ago            7.23MB
<missing>  41 years ago            3.04MB
<missing>  41 years ago            140MB
<missing>  41 years ago            214B
<missing>  41 years ago            6.69MB
<missing>  41 years ago            2.27MB
<missing>  41 years ago            398kB
<missing>  41 years ago            6.51MB
<missing>  41 years ago            7B
<missing>  41 years ago            745B
<missing>  41 years ago            987kB
<missing>  41 years ago            63.2MB

Si te confunde la marca de tiempo de hace 41 años, se debe a que se permiten compilaciones reproducibles. Aquí puedes encontrar más información sobre los detalles: Time Travel with Pack

Con una herramienta llamada dive, podemos explorar con más detalle el contenido de las capas. En la ventana superior izquierda de la captura de pantalla de abajo, seleccionamos la penúltima capa de la imagen (en dive, las capas aparecen de abajo hacia arriba, mientras que en la salida de la compilación anterior aparecen en orden inverso). A la derecha, inspeccionamos el contenido de esa capa, que consta de archivos JAR de una aplicación Springboot dentro de nuestra imagen OCI. CNB se encargó de armar todo esto a partir del código fuente.

Pantalla de terminal que muestra capas de imágenes de Docker, clases de una aplicación Spring Boot, dependencias y detalles de almacenamiento de imágenes.

Seguridad de imágenes de contenedor OCI con Snyk Container

Snyk Container detecta vulnerabilidades en contenedores y cargas de trabajo de Kubernetes durante todo el ciclo de vida del desarrollo de software (SDLC), al analizar cualquier imagen compatible con OCI, incluidas las creadas con Cloud Native Buildpacks u otras herramientas de compilación que crean imágenes OCI. Pero Snyk hace más que enumerar todas las vulnerabilidades presentes en tu contenedor: Snyk Container ofrece recomendaciones para ayudarte a crear rápidamente contenedores mejores y menos vulnerables. Además, con nuestras capacidades nuevas y mejoradas para detectar imágenes base, ofrecemos el mismo nivel de recomendaciones que antes solo estaba disponible para quienes incluían un Dockerfile.

Corrección automatizada de imágenes base con Snyk Container

Amplía tus capacidades de seguridad y permite que los desarrolladores eliminen rápidamente numerosas vulnerabilidades al actualizar a una imagen base más segura o volver a compilar cuando la imagen base esté desactualizada.

Al analizar estas imágenes OCI, Snyk puede detectar en qué imagen base se basan tus imágenes y sugerir otras que tengan pocas vulnerabilidades, como se muestra a continuación.

Panel de Snyk que muestra un resumen de una imagen de contenedor, con detalles de la imagen base y recomendaciones para actualizaciones menores y mayores.

¿Qué imagen base podríamos usar para nuestro contenedor OCI o cuál hemos actualizado recientemente?

Estas recomendaciones de imágenes base están disponibles sin importar cómo o dónde analices tus imágenes durante su ciclo de vida. El ejemplo anterior muestra una imagen almacenada en Docker Hub. A continuación, analizamos una imagen con la CLI de Snyk, un método que también se puede usar para analizar imágenes en tus pipelines de CI. Snyk puede sugerir imágenes base con pocas vulnerabilidades, como se muestra abajo:

$ snyk container test pasapples/pbs-demo-image

Testing pasapples/pbs-demo-image...

✗ High severity vulnerability found in openssl
  Description: NULL Pointer Dereference
  Info: https://snyk.io/vuln/SNYK-UBUNTU1804-OPENSSL-1089073
  Introduced through: openssl@1.1.1-1ubuntu2.1~18.04.5, ca-certificates@20180409, openssl/libssl1.1@1.1.1-1ubuntu2.1~18.04.5
  From: openssl@1.1.1-1ubuntu2.1~18.04.5
  From: ca-certificates@20180409 > openssl@1.1.1-1ubuntu2.1~18.04.5
  From: openssl/libssl1.1@1.1.1-1ubuntu2.1~18.04.5
  and 1 more...
  Fixed in: 1.1.1-1ubuntu2.1~18.04.9

...

Organization:  pas.apicella-41p
Package manager:   deb
Project name:  docker-image|pasapples/pbs-demo-image
Docker image:  pasapples/pbs-demo-image
Platform:      linux/amd64
Base image:    ubuntu:bionic-20200403
Licenses:      enabled

Tested 93 dependencies for known issues, found 57 issues.

Base Image          Vulnerabilities  Severity
ubuntu:bionic-20200403  49           0 critical, 0 high, 16 medium, 33 low

Recommendations for base image upgrade:

Minor upgrades
Base Image Vulnerabilities  Severity
ubuntu:bionic  25           0 critical, 0 high, 3 medium, 22 low

Major upgrades
Base Image  Vulnerabilities  Severity
ubuntu:rolling  17           0 critical, 0 high, 2 medium, 15 low

Vulnerabilidades de aplicaciones y contenedores en conjunto

Puede que no siempre tengas acceso al código fuente original que se ejecuta en tus contenedores, pero las vulnerabilidades en las dependencias de tu código siguen siendo importantes. Snyk puede detectar y monitorear dependencias de código abierto para los lenguajes populares como parte del análisis de contenedores.

Vista de una imagen OCI de CNB que muestra la capa base y la capa de dependencias de código abierto, con el número de vulnerabilidades por nivel de gravedad.
La capa base frente a las dependencias de código abierto se muestran claramente para una imagen OCI de CNB.

Ayuda a los desarrolladores a enfocarse en las vulnerabilidades de mayor riesgo

Snyk te ayuda a enfocarte fácilmente en los problemas de mayor prioridad, en lugar de clasificar cientos de problemas uno por uno. Ignora o excluye las vulnerabilidades de las imágenes base y usa señales de riesgo, como la madurez de los exploits y la configuración insegura de las cargas de trabajo, para ayudar a los equipos a filtrar el ruido habitual de los informes de vulnerabilidades de contenedores.

Snyk Container es solo una parte de la plataforma Snyk Cloud Native Application Security, diseñada para ayudar a los desarrolladores a encontrar y corregir vulnerabilidades en aplicaciones nativas de la nube. Pruébala hoy.

Seguridad de contenedores centrada en los desarrolladores

Snyk encuentra y corrige automáticamente vulnerabilidades en imágenes de contenedores y cargas de trabajo de Kubernetes.

Leer más

Blog

Los modelos de frontera encontraron las vulnerabilidades. Solo el atacante encontró las cadenas.

El análisis estático encontró las fallas, pero solo las pruebas de ataque en vivo demostraron cómo podían encadenarse para provocar brechas. Una comparación de Evo COS, Claude Security y Claude Code Security.

feature insights context
Blog

Los ataques autónomos ya están aquí. La defensa debe estar a su altura.

Los atacantes autónomos están reduciendo el tiempo disponible para defenderse. Descubre cómo el descubrimiento, la corrección, la validación y la prevención continuos pueden ayudar a los equipos de seguridad a seguirles el ritmo.

Blog

Por qué los agentes de programación con IA siguen generando fallas de control de acceso

Los agentes de programación con IA pueden generar lógica de autorización que compila y supera la revisión, pero expone los datos de un inquilino a otro. Descubre por qué es difícil detectar el control de acceso roto y cómo prevenirlo.