Tutoriales

Escáner flexible de tiempo de ejecución de Kubernetes

Claridad de Kube es una herramienta para detectar y administrar la lista de materiales de software (SBOM), así como las vulnerabilidades del sistema de archivo y la imagen del contenedor

KubeClarity es una herramienta para detectar y administrar la lista de materiales de software (SBOM), así como las vulnerabilidades del sistema de archivo y la imagen del contenedor. Escanea clústeres de K8 en tiempo de ejecución y canalizaciones de CI/CD para mejorar la seguridad de la cadena de suministro de software.

Desafíos de detección de vulnerabilidades y SBOM

  • El escaneo de vulnerabilidades efectivo requiere una detección precisa de la lista de materiales de software (SBOM) de:
    • Varios lenguajes de programación y gestores de paquetes.
    • Varias distribuciones de SO
    • La información de dependencia del paquete generalmente se elimina en el momento de la compilación
  • ¿Cuál es el mejor analizador de escáner/SBOM?
  • ¿Qué debemos escanear: repositorios Git, compilaciones, imágenes de contenedores o tiempos de ejecución?
  • Cada escáner/analizador tiene su propio formato: ¿cómo comparar los resultados?
  • ¿Cómo se gestionan los SBOM descubiertos y las vulnerabilidades?
  • ¿Cómo se ve afectada mi aplicación por la vulnerabilidad recién descubierta?

solución

  • Divida el análisis de vulnerabilidades en dos fases:
    • Análisis de contenido para generar SBOM
    • Escanee el SBOM en busca de vulnerabilidades
  • Cree una infraestructura conectable para:
    • Ejecute múltiples analizadores de contenido en paralelo
    • Ejecute múltiples escáneres de vulnerabilidades en paralelo
  • Escanee y combine resultados entre diferentes etapas de CI usando KubeClarity CLI
  • Escaneo de Runtime K8s para detectar vulnerabilidades encontradas después de la implementación
  • Agrupe los recursos escaneados (imágenes/directorios) en aplicaciones definidas para navegar por las dependencias del árbol de objetos (aplicaciones, recursos, paquetes, vulnerabilidades)

característica

Generador de SBOM integrado y escáner de vulnerabilidades

KubeClarity Content Analyzer se integra con los siguientes generadores SBOM:

KubeClarity Vulnerability Scanner está integrado con los siguientes escáneres:

arquitectura

empezando

Back-end de KubeClarity

Instalar usando Helm:

  1. agregar repositorio de helm repositorio de helm agregar kubeclarity
  2. guarde el valor de gráfico predeterminado de KubeClarity helm display value kubeclarity/kubeclarity > value.yaml
  3. comprobar la configuración values.yaml Y actualice el valor deseado según sea necesario. Para habilitar y configurar generadores de SBOM compatibles y escáneres de vulnerabilidades, verifique las configuraciones de «Analizadores» y «Escáneres» en la sección «Escáneres de vulnerabilidades» en los valores de Helm.
  4. Implemente KubeClarity con Helm helm install –values ​​value.yaml –create-namespace kubeclarity kubeclarity/kubeclarity -n kubeclarity o para instalaciones compatibles con OpenShift SCC restringido: helm install –values ​​value.yaml –create-namespace kubeclarity kubeclarity/kubeclarity -n kubeclarity –set global.openShiftRestricted=true \ –set kubeclarity-postgresql.securityContext.enabled=false –set kubeclarity-postgresql.containerSecurityContext.enabled=false \ –set kubeclarity-postgresql.volumePermissions.enabled=true – establezca los permisos de kubeclarity-postgresql.volume.securityContext. runAsUser=»auto» \ –set kubeclarity-postgresql.shmVolume.chmod.enabled=false
  5. Reenvío de puertos a la interfaz de usuario de KubeClarity: kubectl port-forward -n kubeclarity svc/kubeclarity-kubeclarity 9999:8080
  6. Abra la interfaz de usuario de KubeClarity en su navegador:
NOTE
KubeClarity requires these K8s permissions:
permitir razón
Leer secretos en CREDS_SECRET_NAMESPACE (predeterminado: kubeclarity) Esto le permite configurar un secreto de extracción de imágenes para escanear repositorios de imágenes privadas.
Leer mapas de configuración en el espacio de nombres de implementación de KubeClarity. Esto es necesario para obtener plantillas de configuración para trabajos de escáner.
Enumere los pods en todo el clúster. Esto es necesario para calcular los Pods de destino que deben escanearse.
Listar espacios de nombres. Esto es necesario para obtener el espacio de nombres de destino para escanear en la interfaz de usuario de escaneo en tiempo de ejecución de K8s.
Cree y elimine trabajos en todo el clúster. Esto es necesario para administrar trabajos que escanearán pods de destino en el espacio de nombres.

Desinstalar usando Helm:

  1. Helm desinstalar helm desinstalar kubeclarity -n kubeclarity
  2. Limpieza de recursos De forma predeterminada, Helm no elimina los PVC y PV de StatefulSet. Elimínelos todos ejecutando: kubectl delete pvc -l app.kubernetes.io/instance=kubeclarity -n kubeclarity

Cree y ejecute localmente con datos de demostración

  1. Cree la interfaz de usuario y el backend e inicie el backend localmente (2 opciones):
    1. Usando la ventana acoplable:
      1. Cree la interfaz de usuario y el backend (establezca la etiqueta de la imagen con VERSION): VERSION=test make docker-backend
      2. Ejecute el backend con datos de demostración: docker run -p 8080:8080 -e FAKE_RUNTIME_SCANNER=true -e FAKE_DATA=true -e ENABLE_DB_INFO_LOGS=true -e DATABASE_DRIVER=LOCAL ghcr.io/openclarity/kubeclarity:test run
    2. Construir localmente:
      1. Crear interfaz de usuario y backend hacer ui && hacer backend
      2. Copie el sitio creado: cp -r ./ui/build ./site
      3. Ejecute el backend localmente con datos de demostración: FAKE_RUNTIME_SCANNER=true DATABASE_DRIVER=LOCAL FAKE_DATA=true ENABLE_DB_INFO_LOGS=true ./backend/bin/backend run
  2. Abra la interfaz de usuario de KubeClarity en su navegador:

interfaz de línea de comandos

KubeClarity incluye una CLI que se puede ejecutar localmente, especialmente útil para canalizaciones de CI/CD. Permite analizar imágenes y directorios para generar SBOM y escanearlo en busca de vulnerabilidades. Los resultados se pueden exportar al backend de KubeClarity.

Instalar

Compilación local de imágenes de Docker de distribución binaria

generación de SBOM

uso:

kubeclarity-cli analyze  --input-type  -o 

ejemplo:

kubeclarity-cli analyze --input-type image nginx:latest -o nginx.sbom

(Opcional) La lista de analizadores de contenido a utilizar se puede configurar con ANALYZER_LIST Las variables env están separadas por espacios (p. ej. ANALYZER_LIST=" ")

ejemplo:

ANALYZER_LIST="syft gomod" kubeclarity-cli analyze --input-type image nginx:latest -o nginx.sbom

análisis de vulnerabilidades

uso:

kubeclarity-cli scan  --input-type  -f 

ejemplo:

kubeclarity-cli scan nginx.sbom --input-type sbom

(Opcional) La lista de escáneres de vulnerabilidades a utilizar se puede configurar con el comando SCANNERS_LIST Las variables env están separadas por espacios (p. ej. SCANNERS_LIST=" ")

ejemplo:

SCANNERS_LIST="grype trivy" kubeclarity-cli scan nginx.sbom --input-type sbom

Exportar resultados al backend de KubeClarity

Para exportar los resultados de la CLI al backend de KubeClarity, se requiere el ID de aplicación definido por el backend de KubeClarity. El ID de la aplicación se puede encontrar en la pantalla «Aplicaciones» de la interfaz de usuario o mediante la API de KubeClarity.

Exportar SBOM

# The SBOM can be exported to KubeClarity backend by setting the BACKEND_HOST env variable and the -e flag.
# Note: Until TLS is supported, BACKEND_DISABLE_TLS=true should be set.
BACKEND_HOST= BACKEND_DISABLE_TLS=true kubeclarity-cli analyze  --application-id  -e -o 

# For example:
BACKEND_HOST=localhost:9999 BACKEND_DISABLE_TLS=true kubeclarity-cli analyze nginx:latest --application-id 23452f9c-6e31-5845-bf53-6566b81a2906 -e -o nginx.sbom

Exportar resultados de análisis de vulnerabilidades

# The vulnerability scan result can be exported to KubeClarity backend by setting the BACKEND_HOST env variable and the -e flag.
# Note: Until TLS is supported, BACKEND_DISABLE_TLS=true should be set.

BACKEND_HOST= BACKEND_DISABLE_TLS=true kubeclarity-cli scan  --application-id  -e

# For example:
SCANNERS_LIST="grype" BACKEND_HOST=localhost:9999 BACKEND_DISABLE_TLS=true kubeclarity-cli scan nginx.sbom --input-type sbom  --application-id 23452f9c-6e31-5845-bf53-6566b81a2906 -e

Configuración avanzada

Generar SBOM usando la imagen de la ventana acoplable local como entrada

# Local docker images can be analyzed using the LOCAL_IMAGE_SCAN env variable

# For example:
LOCAL_IMAGE_SCAN=true kubeclarity-cli analyze nginx:latest -o nginx.sbom

Escaneo de vulnerabilidad usando la imagen de la ventana acoplable local como entrada

# Local docker images can be scanned using the LOCAL_IMAGE_SCAN env variable

# For example:
LOCAL_IMAGE_SCAN=true kubeclarity-cli scan nginx.sbom

Soporte de registro privado para CLI

KubeClarity cli puede leer archivos de configuración que almacenan credenciales de registro privado.

Sección de registro de ejemplo de un archivo de configuración:

registry:
  auths:
    - authority: 
      username: 
      password: 
    - authority: 
      token: 

Ejemplo de configuración de registro sin permisos: (estas credenciales se utilizarán para todos los registros en este caso)

registry:
  auths:
    - username: 
      password: 

Especifique el archivo de configuración para la CLI

# The default config path is $HOME/.kubeclarity or it can be specified by `--config` command line flag.
# kubeclarity   --config 

# For example:
kubeclarity scan registry/nginx:private --config $HOME/own-kubeclarity-config

Soporte de registro privado para escaneo en tiempo de ejecución de K8s

Kubeclarity está en uso cadena k8s google/go-containerregistry se utiliza para autenticarse en el registro. Si k8schain no puede descubrir las credenciales de servicio necesarias, se pueden definir a través del secreto que se describe a continuación.

Además, establezca CREDS_SECRET_NAMESPACE en kubeclarity Deployment si las credenciales del servicio no están en el espacio de nombres «kubeclarity».al usar un casco cuadroCREDS_SECRET_NAMESPACE se establece en el espacio de nombres de versión donde está instalado kubeclarity.

Amazon ECR

Crear Usuario de IAM de AWS y AmazonEC2ContainerRegistryFullAccess autoridad.

Uso de credenciales de usuario (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION) para crear el siguiente secreto:

cat <

notas:

  1. El nombre secreto debe ser ecr-sa
  2. La clave de datos secretos debe establecerse en AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY y AWS_DEFAULT_REGION

Google Gran China

Crear cuenta de servicio de Google y Artifact Registry Reader permiso.

Use el archivo json de la cuenta de servicio para crear la siguiente clave

kubectl -n kubeclarity create secret generic --from-file=sa.json gcr-sa

notas:

  1. El nombre secreto debe ser gcr-sa
  2. sa.json Debe ser el nombre del archivo json de la cuenta de servicio al generar el secreto
  3. KubeClarity está usando Credenciales predeterminadas de la aplicación. Estos solo funcionan cuando se ejecuta KubeClarity desde GCP.

Combinar SBOM y vulnerabilidades en diferentes fases de CI/CD

# Additional SBOM will be merged into the final results when '--merge-sbom' is defined during analysis. The input SBOM can be CycloneDX XML or CyclonDX json format.
# For example:
ANALYZER_LIST="syft" kubeclarity-cli analyze nginx:latest -o nginx.sbom --merge-sbom inputsbom.xml

Salida de diferentes formatos SBOM

El comando de análisis kubeclarity-cli puede formatear el SBOM generado en un formato diferente si se requiere la integración con otro sistema. Los formatos admitidos son:

Formato nombre de configuración
CycloneDX JSON (predeterminado) cyclonedx-json
CycloneDX XML ciclonedx-xml
SPDXJSON spdx-json
valor de la etiqueta SPDX TV SPDX
SyftJSON syft-json

advertir
KubeClarity maneja CycloneDX internamente, otros formatos son compatibles a través de la conversión. Debido a las incompatibilidades entre formatos, el proceso de conversión puede tener pérdidas, por lo que no todos los campos/información están comprometidos a aparecer en la salida resultante.

Para configurar kubeclarity-cli para usar un formato diferente al predeterminado, la variable de entorno ANALYZER_OUTPUT_FORMAT se puede usar con el nombre de configuración anterior:

ANALYZER_OUTPUT_FORMAT="spdx-json" kubeclarity-cli analyze nginx:latest -o nginx.sbom

Servidor de escáner remoto para CLI

Al ejecutar la CLI de kubeclarity para buscar vulnerabilidades, la CLI debe descargar la base de datos de vulnerabilidades relevante en la ubicación donde se ejecuta la CLI de kubeclarity. La ejecución de la CLI en una canalización de CI/CD dará como resultado una descarga de la base de datos en cada ejecución, lo que desperdiciará tiempo y ancho de banda. Por lo tanto, algunos escáneres admitidos tienen un modo remoto, en el que el servidor es responsable de la administración de la base de datos y, posiblemente, del escaneo de artefactos.

notas: Los ejemplos a continuación funcionan para cada escáner, pero se pueden ejecutar juntos como si estuvieran en modo no remoto.

curiosidades

Trivy Scanner admite el modo remoto utilizando un servidor Trivy. El servidor Trivy se puede implementar como se documenta aquí: Modelo cliente-servidor simple. Las instrucciones para instalar Trivy CLI están disponibles aquí: instalación trivial. El equipo de Aqua proporciona una imagen de contenedor oficial que se puede usar para ejecutar servidores en kubernetes/docker, que usaremos en nuestros ejemplos aquí.

Inicie el servidor:

docker run -p 8080:8080 --rm aquasec/trivy:0.41.0 server --listen 0.0.0.0:8080

Para ejecutar un escaneo usando un servidor:

SCANNERS_LIST="trivy" SCANNER_TRIVY_SERVER_ADDRESS="http://:8080" ./kubeclarity_cli scan --input-type sbom nginx.sbom

El servidor trivy también proporciona autenticación basada en token para evitar el uso no autorizado de la instancia del servidor trivy. Puede habilitarlo ejecutando el servidor con indicadores adicionales:

docker run -p 8080:8080 --rm aquasec/trivy:0.41.0 server --listen 0.0.0.0:8080 --token mytoken

y pasar el token al escáner:

SCANNERS_LIST="trivy" SCANNER_TRIVY_SERVER_ADDRESS="http://:8080" SCANNER_TRIVY_SERVER_TOKEN="mytoken" ./kubeclarity_cli scan --input-type sbom nginx.sbom

Uva

Grype admite el uso del modo remoto servidor-grype Un envoltorio RESTful grype que proporciona una API que toma un SBOM y devuelve los resultados del escaneo grype para ese SBOM. Grype-server se proporciona como una imagen de contenedor, por lo que se puede ejecutar de forma independiente en Kubernetes o a través de Docker.

Inicie el servidor:

docker run -p 9991:9991 --rm gcr.io/eticloud/k8sec/grype-server:v0.1.5

Para ejecutar un escaneo usando un servidor:

SCANNERS_LIST="grype" SCANNER_GRYPE_MODE="remote" SCANNER_REMOTE_GRYPE_SERVER_ADDRESS=":9991" ./kubeclarity_cli scan --input-type sbom nginx.sbom

pista dependiente

Ver configuración de ejemplo aquí

limitación

  1. Compatibilidad con el manifiesto de imagen de Docker V2, esquema 2 (https://docs.docker.com/registry/spec/manifest-v2-2/). No podrá escanear versiones anteriores.

mapa de ruta

  • Integración con Add-On Content Analyzer (Generador SBOM)
  • Integrar con otros escáneres de vulnerabilidad
  • CIS Docker Benchmark en la interfaz de usuario
  • firma de imagen usando firma conjunta
  • Uso de certificación y firma de metadatos de CI/CD firma conjunta y en general (Seguridad de la cadena de suministro)
  • Configuración del sistema y gestión de usuarios

contribuir

Las solicitudes de extracción y los informes de errores son bienvenidos.

Para cambios más grandes, primero cree un problema en GitHub para analizar el cambio propuesto y el posible impacto.

Para obtener más detalles, consulte Pautas de contribución para este proyecto

licencia

Licencia Apache, Versión 2.0

por favor considera atención y apoyo Siempre estamos actualizados

LEER  Cómo ver archivos usando el gato, más o menos comandos en Linux

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba