Validación de imágenes con Gitlab CI / CD

Hola a todos, en la víspera del inicio del curso "CI / CD en AWS, Azure y Gitlab" preparamos una traducción de material interesante.




En este artículo, hablaremos sobre cómo verificar las imágenes del contenedor en la plataforma Gitlab CI / CD usando Sysdig Secure .

Las imágenes de contenedores que no cumplan con las políticas de seguridad definidas en Sysdig Secure no se publicarán en el registro de contenedores y detendrán la canalización.



Buscador de vulnerabilidades con Gitlab CI / CD


Gitlab CI / CD es un servidor de entrega y integración continua de código abierto integrado en la plataforma de colaboración y desarrollo de software de Gitlab.

Después de configurar Gitlab CI / CD para su repositorio, cada vez que los desarrolladores se comprometan con las ramas rastreadas del repositorio, los scripts de canalización se ejecutarán automáticamente.

Tales tuberías se pueden usar para automatizar muchos procesos. Por ejemplo, para pruebas de control de calidad, creación de artefactos de distribución de software (como imágenes de Docker o paquetes de Linux) o, de lo que hablaremos en este artículo, para verificar la configuración, buscar vulnerabilidades y verificar el cumplimiento.

Verificación de imágenes en la canalización de Gitlab CI / CD: seguridad de desplazamiento a la izquierda


Como en otras partes de TI, cuanto antes encuentre una vulnerabilidad en un contenedor, más rápido y más fácil podrá solucionarlo sin consecuencias.

Incrustar verificaciones de vulnerabilidad en el ensamblaje de su canalización es una buena práctica por varias razones:

  • Las vulnerabilidades existentes nunca irán a producción;
  • «secure-by-default», , , .
  • , . , - .

Sysdig Secure ofrece un conjunto completo de herramientas para verificar los contenedores de imágenes junto con muchas otras funciones de inspección de seguridad de contenedores, como el perfil de rendimiento de amenazas de tiempo de detección basado en aprendizaje automático y plantillas extensibles de detección de amenazas listas para usar , PSP Kubernetes forzados , respondiendo a incidentes y experiencia en cumplimiento . Echemos un vistazo a cómo funciona el servicio Sysdig Secure Image Validation con Gitlab.

Requisitos de verificación de seguridad en Gitlab


Para completar los siguientes pasos, necesitará:


Configuración de la canalización de Gitlab CI / CD para la inspección de imágenes con Sysdig Secure


Veremos en la práctica cómo se pueden integrar estas dos plataformas. Con esta guía, aprenderá a trabajar con el escaneo de Sysdig Secure Image en minutos.

Configurar credenciales de acceso


La canalización de Gitlab CI / CD necesitará credenciales de acceso para comunicarse con el backend Sysdig Secure. Para hacer todo bien, copie el token de acceso de Sysdig UI Settings> User profile .

Luego configure una nueva variable global para su proyecto Gitlab:

  1. En su proyecto, vaya a Configuración> CI / CD y seleccione Variables .
  2. Cree una nueva variable SYSDIG_SECURE_TOKENy agregue la clave Sysdig Secure API en el campo de valor .
  3. Haga clic en el botón Enmascarado para que su token API no se imprima en los registros de canalización.

Definición de tubería de Gitlab


Primero, necesitamos un archivo Docker que defina la imagen que recopilará. Puede cargar cualquier archivo Docker que desee en su proyecto, o simplemente usar el siguiente ejemplo:

FROM debian:stretch
RUN apt update && apt install python-pip python-numpy openssh-server -y && rm -rf /var/lib/apt
RUN pip install flask
COPY app.py /app.py
EXPOSE 5000 22
ENTRYPOINT ["python", "./app.py"]

Luego debe crear un nuevo archivo .gitlab-ci.ymlen la raíz del proyecto. Este archivo describirá todos los pasos necesarios (etapas) del ensamblaje de nuestro entorno. Él determinará todas las etapas necesarias.

Hay 3 etapas en nuestra tubería:

  • Montaje de la imagen del contenedor;
  • Escanear una imagen en busca de vulnerabilidades o violaciones de políticas;
  • Mover la imagen al repositorio de destino.

variables:
  CI_REGISTRY_IMAGE: "sysdiglabs/dummy-vuln-app"
  SCAN_IMAGE_NAME: "sysdiglabs/secure_inline_scan:latest"
  SYSDIG_SECURE_ENDPOINT: "https://secure.sysdig.com"

docker-build-master:
  image: docker:latest
  stage: build
  services:
    - docker:dind
  before_script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
  script:
    - docker build --pull -t "$CI_REGISTRY_IMAGE" .
    - docker run --rm -v /var/run/docker.sock:/var/run/docker.sock "$SCAN_IMAGE_NAME" /bin/inline_scan analyze -s "$SYSDIG_SECURE_ENDPOINT" -k "$SYSDIG_SECURE_TOKEN" "$CI_REGISTRY_IMAGE"
    - docker push "$CI_REGISTRY_IMAGE"
  only:
    - master

Construir una imagen de contenedor


El ensamblaje de la imagen ocurre con docker build --pull -t "$CI_REGISTRY_NAME". Toma instrucciones de su archivo Docker y genera una nueva imagen local, que se verificará en el siguiente paso.

Escaneo de vulnerabilidades


La siguiente etapa es verificar los contenedores. Aquí verificaremos las vulnerabilidades de la imagen y la configuración, almacenando los resultados en el backend de Sysdig.

Una de las ventajas del escaneo local de Sysdig es que no pierde el control sobre sus imágenes, ya que no es necesario mover la imagen a otro registro o exponerla desde el exterior para realizar el escaneo. Se lleva a cabo dentro del corredor, y solo los resultados se envían a Sysdig Secure.

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock "$SCAN_IMAGE_NAME" /bin/inline_scan analyze -s "$SYSDIG_SECURE_ENDPOINT" -k "$SYSDIG_SECURE_TOKEN" "$CI_REGISTRY_IMAGE"

En este punto, Sysdig Secure devolverá un código de error si la imagen cumple con cualquiera de las condiciones de detención especificadas en su política (por ejemplo, vulnerabilidad crítica). Detener la tubería evitará la transferencia de imágenes vulnerables al registro del contenedor.





En Sysdig Secure, podemos ver información adicional y comprender por qué no se pudo completar la comprobación de seguridad:



como puede ver en la captura de pantalla, el contenedor deja abierto el puerto 22, que está en la lista de puertos prohibidos, y también contiene algunas vulnerabilidades graves en la biblioteca de Python.

Mover imagen al repositorio de destino


Después de verificar con éxito las vulnerabilidades, la canalización empujará la ventana acoplable y la imagen se publicará en el registro del contenedor. Si no especifica ninguna credencial o almacenamiento remoto, Gitlab usa el valor predeterminado .

Conclusión


Con el escaneo de imagen seguro de Sysdig, puede verificar las imágenes en la tubería Gitlab CI / CD sin enviarlas desde la infraestructura al registro público o intermedio, verificar la configuración y evitar fugas de vulnerabilidades a la producción.

Encuentre vulnerabilidades conocidas y verifique la configuración para cumplir con las recomendaciones de seguridad, incluidas las instrucciones de Dockerfile, las listas blancas y negras de paquetes o las bibliotecas de terceros instaladas en la imagen base, como archivos JAR / WAR en Java o administradores de paquetes de idiomas como npm para Javascript, pepita para Python y gema para Ruby.

En caso de falla, puede informarlo rápidamente al autor del contenedor para resolver rápidamente el problema y crear una política de seguridad de contenedor segura por defecto. Para probar Sysdig Secure, puede solicitardemo hoy!

Eso es todo. Obtenga más información sobre el curso aquí .

All Articles