Uso de la herramienta de escaneo de vulnerabilidades Kubescape

Introducción

Kubescape es una herramienta de código abierto para Kubernetes desarrollada por Armosec utilizada para análisis de riesgos, cumplimiento de seguridad, visualización de RBAC y escaneo de vulnerabilidades de imágenes. Además, Kubescape puede escanear manifiestos de Kubernetes para detectar posibles problemas de configuración que expongan sus implementaciones al riesgo de ataques. También puede escanear gráficos de Helm, detectar violaciones de RBAC (control de acceso basado en roles), realizar cálculos de puntuación de riesgos y mostrar tendencias de riesgos a lo largo del tiempo.

Características clave de Kubescape:

  • Detecta errores de configuración de Kubernetes y proporciona asistencia para la remediación a través del Portal en la Nube de Armosec.
  • Análisis de riesgos y tendencias a lo largo del tiempo a través del Portal en la Nube de Armosec.
  • Incluye varios marcos de cumplimiento de seguridad, como ArmoBest, NSA, MITRE y Mejores Prácticas de Devops.
  • Soporte para gestión de excepciones, permitiendo a los administradores de Kubernetes marcar niveles de riesgo aceptables.
  • Se integra con varias herramientas como Jenkins, flujos de trabajo de Github, Prometheus, etc.
  • Escaneo de imágenes: escanea imágenes en busca de vulnerabilidades y ve, ordena y filtra fácilmente (cuál vulnerabilidad parchar primero).
  • Simplifica la complejidad de RBAC proporcionando un gráfico visual fácil de entender que muestra la configuración de RBAC en su clúster.

Kubescape se puede ejecutar de diferentes maneras:

Kubescape utiliza diferentes frameworks para detectar configuraciones incorrectas, tales como:

¿Es Kubescape gratuito?

Sí, la herramienta y la edición comunitaria son gratuitas para siempre, excepto la implementación del backend del portal en la nube y quizás algunas otras funciones avanzadas. También hay una limitación en el número máximo de nodos de trabajo que puede escanear por clúster (hasta 10). La retención de datos de sus informes de escaneo está limitada a un mes en el portal en la nube de Armo.

Vea los planes de precios para obtener más información.

¿Es Kubescape de código abierto?

Sí, la herramienta lo es. Puede visitar la página de inicio de GitHub de Armo para encontrar más detalles sobre la implementación de cada componente. La implementación del backend del portal en la nube no es de código abierto.

En esta guía, utilizará Kubescape para realizar un análisis de riesgos para la cadena de suministro de sus aplicaciones de Kubernetes (imágenes de contenedores, manifiestos YAML de Kubernetes). Luego, aprenderá cómo tomar la acción apropiada para remediar la situación. Finalmente, aprenderá cómo integrar Kubescape en un pipeline de CI/CD para escanear vulnerabilidades en las etapas tempranas de desarrollo.

Tabla de contenido

Prerrequisitos

Para completar todos los pasos de esta guía, necesitarás:

  1. A working DOKS cluster running Kubernetes version >=1.21 that you have access to. For additional instructions on configuring a DigitalOcean Kubernetes cluster, see: How to Set Up a DigitalOcean Managed Kubernetes Cluster (DOKS).
  2. A DigitalOcean Docker Registry. A free plan is enough to complete this tutorial. Also, make sure it is integrated with your DOKS cluster as explained here.
  3. Kubectl CLI para la interacción con Kubernetes. Sigue estas instrucciones para conectarte a tu clúster con kubectl y doctl.
  4. Helm, para instalar Kubescape en el clúster de Kubernetes.
  5. Kubescape CLI para interactuar con el escáner de vulnerabilidades Kubescape.
  6. A free Armosec Cloud Portal account used to periodically publish scan results for your Kubernetes cluster to a nice dashboard. Also, the Armosec portal web interface helps you with investigations and risk analysis.
  7. A Slack workspace you own, and a dedicated Slack app to get notified of vulnerability scan issues reported by Kubescape.

Paso 1 – Conociendo el CLI de Kubescape

Puedes escanear manualmente vulnerabilidades a través de la interfaz de línea de comandos kubescape. La CLI de kubescape está diseñada para ser utilizada en varios scripts y automatizaciones. Un ejemplo práctico es en un pipeline CI/CD implementado usando diversas herramientas como Tekton, Jenkins, GitHub Workflows, etc.

Kubescape está diseñado para escanear un clúster de Kubernetes completo desde cero (cargas de trabajo, contenedores, etc). Si lo deseas, también puedes limitar los escaneos a un espacio de nombres específico. Otras características incluyen el escaneo de hosts (nodos de trabajo), escaneo de repositorios locales o remotos (por ejemplo, GitHub), detectar desconfiguraciones en manifiestos YAML de Kubernetes o gráficos Helm. Se pueden seleccionar varios marcos a través del comando framework, como ArmoBest, NSA, MITRE, etc.

Cuando se invoca la CLI de kubescape, descargará (o actualizará) la base de datos de vulnerabilidades conocidas en tu máquina local. Luego, iniciará el proceso de escaneo e informará problemas en un formato específico. De forma predeterminada, imprimirá una tabla resumen utilizando la salida estándar o la consola. Kubescape también puede generar informes en otros formatos, como JSON, HTML, SARIF, etc.

Puedes optar por enviar los resultados al Portal en la Nube de Armosec a través de la bandera --submit para almacenar y visualizar los resultados del escaneo más tarde.

Nota: No es obligatorio enviar los resultados del escaneo al portal en la nube de Armosec. La gran ventaja de usar el portal es la visibilidad, ya que te proporciona acceso a un panel de control donde puedes verificar todos los informes de escaneo y la puntuación de riesgo general. También te ayuda a largo plazo con investigaciones e indicaciones de remedios.

Algunos ejemplos para probar con la CLI de Kubescape:

  • Escanee todo un clúster de Kubernetes y genere un informe resumido en la consola (salida estándar):

    kubescape scan
    
  • Utilice un espacio de nombres específico solo para el escaneo:

    kubescape scan --include-namespaces microservices
    
  • Excluir espacios de nombres específicos del escaneo:

    kubescape scan --exclude-namespaces kube-system,kube-public
    
  • Escanee un espacio de nombres específico y envíe los resultados al portal en la nube de Armosec:

    kubescape scan --include-namespaces default --submit
    
  • Realizar escaneo de clúster usando un marco específico (por ejemplo, NSA):

    kubescape scan framework nsa --exclude-namespaces kube-system,kube-public
    

Kubescape es capaz de escanear los hosts de su clúster de Kubernetes (o nodos trabajadores) en busca de vulnerabilidades del sistema operativo también. Para habilitar esta función, debe pasar la bandera --enable-host-scan al CLI de kubescape. Cuando esta bandera está habilitada, kubescape despliega sensores en su clúster. Los sensores se crean utilizando DaemonSets de Kubernetes que despliegan Pods en cada nodo de su clúster para escanear vulnerabilidades conocidas. Después de que se completa el proceso de escaneo, los sensores se eliminan de su clúster (junto con los recursos de Kubernetes asociados).

El CLI de Kubescape proporciona páginas de ayuda para todas las opciones disponibles. El siguiente comando se puede utilizar para imprimir la página de ayuda principal:

kubescape --help

La salida se parece a:

Output
Kubescape is a tool for testing Kubernetes security posture. Docs: https://hub.armo.cloud/docs Usage: kubescape [command] Available Commands: completion Generate autocompletion script config Handle cached configurations delete Delete configurations in Kubescape SaaS version download Download controls-inputs,exceptions,control,framework,artifacts help Help about any command list List frameworks/controls will list the supported frameworks and controls scan Scan the current running cluster or yaml files submit Submit an object to the Kubescape SaaS version version Get current version ...

Cada comando (o subcomando) del CLI de kubescape tiene una página de ayuda asociada que también se puede acceder a través de kubescape [comando] --help.

Por favor, visite la página oficial de documentación del CLI de kubescape para más ejemplos.

Paso 2 – Conociendo el Portal en la Nube de Armosec

Armosec proporciona un buen portal basado en la nube donde puedes cargar los resultados del escaneo de Kubescape y realizar análisis de riesgos. Esto es bastante útil porque querrás visualizar e inspeccionar cada informe de escaneo, tomar la acción apropiada para remediar la situación y luego ejecutar el escaneo nuevamente para verificar los resultados. Contar con una buena representación visual para cada informe y el puntaje de riesgo asociado te ayuda a largo plazo con las investigaciones y las iteraciones necesarias para solucionar los problemas de seguridad informados.

Puedes crear una cuenta de forma gratuita limitada a 10 nodos de trabajo y 1 mes de retención de datos, lo cual debería ser suficiente en la mayoría de los casos (por ejemplo, para necesidades de prueba o desarrollo). Puedes leer más sobre cómo crear la cuenta en la nube de kubescape en la página de documentación oficial.

Una vez que hayas creado la cuenta, se genera un ID de usuario único que puedes utilizar para cargar los resultados del escaneo para esa cuenta específica. Por ejemplo, es posible que tengas una automatización específica como un pipeline de CI/CD donde necesites cargar los resultados del escaneo, por lo tanto, se requiere el ID de usuario asociado para distinguir entre varios inquilinos.

Por cada informe de escaneo cargado en tu cuenta en la nube de Armosec, se añade un nuevo registro de historial que contiene la lista de problemas encontrados y el puntaje de riesgo asociado. De esta manera, puedes obtener tendencias y los gráficos asociados que muestran la evolución del puntaje de riesgo con el tiempo. Además, también se genera una lista con los problemas de seguridad más importantes en el panel principal.

La siguiente imagen ilustra estas características:

Entendiendo el Valor del Puntaje de Riesgo de Kubescape

En cada escaneo, Kubescape verifica tus recursos en busca de posibles riesgos de seguridad utilizando controles internos. Un Control de Kubescape es un concepto utilizado por la herramienta kubescape para denotar las pruebas utilizadas bajo la superficie para verificar un aspecto particular de tu clúster (o recursos que están siendo escaneados). Yendo más allá, un marco de trabajo es una colección de controles o pruebas utilizadas internamente para escanear tu recurso(s) particular(es) en busca de problemas. Entonces, dependiendo del marco de trabajo que utilices, se realiza una suite de verificaciones diferente (aunque algunas pruebas comparten algunas cosas en común). Finalmente, según el factor de riesgo asociado con cada prueba, se calcula el puntaje final.

La puntuación final es un número positivo que oscila entre 0 y 100%. Un valor más bajo indica la mejor puntuación, mientras que un valor más alto indica lo contrario. Por lo tanto, si deseas estar seguro, debes apuntar al valor más bajo posible. En la práctica, una puntuación de riesgo igual o inferior al 30% debería ser un buen punto de partida.

Remediación Asistida para Problemas de Seguridad Reportados

Otra característica útil proporcionada por el portal en la nube de Armosec es la asistencia para la remediación de problemas de seguridad. Esto significa que recibes una recomendación sobre cómo solucionar cada problema de seguridad encontrado por el escáner kubescape. Esto es muy importante porque simplifica el proceso y cierra el ciclo para cada iteración que necesitas realizar para solucionar cada problema de seguridad reportado.

La siguiente imagen ilustra mejor este proceso:

Para cada problema de seguridad reportado, se muestra un icono de herramienta de llave inglesa, en el que puedes hacer clic para obtener asistencia para la remediación:

A continuación, se abre una nueva ventana que te brinda detalles sobre cada objeto de Kubernetes afectado, resaltado en color verde:

Puedes hacer clic en cada control, como C-0018, C-0030, C-0086, etc. e investigar los problemas resaltados. Se te presentarán sugerencias sobre cómo solucionar cada problema de seguridad. Lo que queda es seguir las indicaciones y solucionar cada problema de seguridad.

Activación de Escaneos de Clúster desde la Interfaz Web

El portal de la nube de Armo ofrece la posibilidad de activar escaneos de clúster desde la interfaz web también si el gráfico Helm de los componentes de la nube de Armo está desplegado en su clúster DOKS (discutido en el siguiente paso). Tanto la configuración como el escaneo de imágenes se pueden activar con un solo clic en el portal. Para que esta función funcione, es necesario esperar a que los componentes de la nube de Armo terminen de escanear su clúster en segundo plano y carguen los resultados.

La activación de un escaneo de configuración se realiza navegando a la página de escaneo de configuración y haciendo clic en el botón Escanear. La imagen a continuación muestra cómo realizar esta tarea:

También puede establecer o modificar el horario actual para el escaneo automático si lo desea haciendo clic en el botón Programar en la ventana emergente que aparece después de hacer clic en el botón Escanear. Utilizando la misma ventana, puede seleccionar qué marcos de control utilizar para el escaneo. La imagen a continuación muestra cómo realizar las tareas:

Paso 3 – Configuración de Escaneos Automáticos de Kubescape para DOKS

Kubescape se puede configurar para escanear automáticamente todo su clúster de Kubernetes en un intervalo de tiempo específico, o cada vez que se implementa una nueva imagen de aplicación. Necesita implementar Componentes del Clúster de Armo en su clúster de Kubernetes usando Helm para lograr esta funcionalidad. También se necesita una cuenta en el Portal en la Nube de Armosec para cargar e inspeccionar los resultados.

El gráfico Helm de Armo instala trabajos cron que desencadenan un escaneo de vulnerabilidades tanto para todo el clúster de Kubernetes como para las imágenes de contenedor. Cada intervalo de trabajo cron se puede configurar en el archivo de valores de Helm.

Provisión de Componentes del Clúster de Armo para DOKS

Pasos para implementar kubescape en su clúster de Kubernetes usando Helm:

  1. Agregue el repositorio Helm y liste los gráficos disponibles:
helm repo add armo https://armosec.github.io/armo-helm/
helm repo update armo
helm search repo armo

La salida se ve similar a lo siguiente:

Output
NAME CHART VERSION APP VERSION DESCRIPTION armo/armo-cluster-components 1.7.15 v1.7.15 ARMO Vulnerability Scanning

Nota: El gráfico de interés es armo/armo-cluster-components, que instalará componentes de Armo en su clúster de Kubernetes. Por favor, visite la página del repositorio de helm de armo para obtener más detalles sobre este gráfico.

  1. Obtenga su ID de usuario de la cuenta Armo utilizando la CLI de kubescape (necesario en el siguiente paso):
kubescape config view

La salida se ve similar a:

{
"accountID": "c952b81f-77d5-4afb-80cc-59b59ec2sdfr"
}

Nota:
Si nunca ha utilizado la CLI de kubescape para enviar resultados de escaneo al portal en la nube de Armosec, el comando anterior no funcionará. En este caso, debe iniciar sesión en el portal y obtener el ID de la cuenta desde allí, como se explica aquí.

  1. Instale los componentes del clúster de Armo Kubescape utilizando Helm – también se creará un espacio de nombres armo-system dedicado (asegúrese de reemplazar los marcadores <> según corresponda):
ARMO_KUBESCAPE_CHART_VERSION="1.7.15"
helm install armo armo/armo-cluster-components \
--version "$ARMO_KUBESCAPE_CHART_VERSION" \
--namespace armo-system \
--create-namespace \
--set clusterName="$(kubectl config current-context)" \
--set accountGuid=<YOUR_ARMO_ACCOUNT_ID>

–create-namespace \

Nota:
Se utiliza una versión específica para el gráfico Helm armo-cluster-components. En este caso, se eligió 1.7.15, que corresponde a la versión 1.7.15 de los componentes del clúster de Armo (consulte la salida del Paso 1.). Es una buena práctica, en general, fijar una versión específica. Esto ayuda a tener resultados predecibles y permite el control de versiones a través de Git.

kubectl get deployments -n armo-system

Ahora verifique si todos los despliegues de los componentes del clúster de Armo están activos y en funcionamiento:

Output
NAME READY UP-TO-DATE AVAILABLE AGE armo-collector 1/1 1 1 5d6h armo-kubescape 1/1 1 1 5d6h armo-notification-service 1/1 1 1 5d6h armo-vuln-scan 1/1 1 1 5d6h armo-web-socket 1/1 1 1 5d6h

La salida se ve similar a:

Todos los despliegues de los componentes del clúster de Armo deberían estar activos y en funcionamiento.

  • Finalmente, después de unos minutos, debería poder ver los informes de escaneo de su clúster disponibles en el portal en la nube, como:
  • Resultados del escaneo de configuración:
  • Resultados del escaneo de imágenes:

Resultados del visualizador de RBAC:

Para obtener más información, visite la página de escaneo de vulnerabilidades del clúster en la documentación oficial.

Ajuste de valores de Helm para el gráfico de componentes del clúster de Armo

Puede cambiar el comportamiento del gráfico de componentes del clúster de Armo editando el archivo de valores de Helm proporcionado en esta guía.

  • Se pueden cambiar los siguientes ajustes:
  • Intervalos de escaneo a través de los valores armoScanScheduler y armoKubescapeScanScheduler.

Desencadenador de nuevo escaneo de imágenes a través del valor triggerNewImageScan.

La lista completa de valores que se pueden personalizar según sus necesidades está disponible en el archivo de valores del gráfico Helm oficial.

ARMO_KUBESCAPE_CHART_VERSION="1.7.15"
helm upgrade armo armo/armo-cluster-components \
  --version "$ARMO_KUBESCAPE_CHART_VERSION" \
  --namespace armo-system \
  --set clusterName="$(kubectl config current-context)" \
  --set accountGuid=<YOUR_ARMO_ACCOUNT_ID> \
  -f <YOUR_CUSTOM_HELM_VALUES_FILE_HERE>

Para aplicar cambios, es necesario actualizar la versión actual del gráfico Helm a través de (asegúrese de reemplazar los marcadores <> adecuadamente):

Paso 4 – Uso de Kubescape para Escanear Vulnerabilidades de Configuración de Kubernetes en un Pipeline de CI/CD

¿Cómo se beneficia de incorporar una herramienta de escaneo de cumplimiento de seguridad en su pipeline de CI/CD y evitar situaciones desagradables en un entorno de producción?

Todo comienza en el nivel de la base, donde comienza el desarrollo de software. En general, querrás utilizar un entorno dedicado para cada etapa. Entonces, en las primeras etapas de desarrollo, cuando el código de la aplicación cambia muy a menudo, debes utilizar un entorno de desarrollo dedicado (normalmente llamado entorno inferior). Luego, la aplicación se va refinando cada vez más en el entorno de control de calidad, donde los equipos de control de calidad realizan pruebas manuales y/o automatizadas. A continuación, si la aplicación recibe la aprobación del equipo de control de calidad, se promociona a los entornos superiores, como la puesta en escena y finalmente a producción. En este proceso, donde la aplicación se promueve de un entorno a otro, se ejecuta un flujo de trabajo dedicado, que escanea continuamente los artefactos de la aplicación y calcula el puntaje de riesgo de seguridad. Si el puntaje no cumple con un umbral específico, el flujo de trabajo falla de inmediato y se detiene la promoción de los artefactos de la aplicación a producción en las etapas iniciales.

Por lo tanto, la herramienta de escaneo de seguridad (por ejemplo, kubescape) actúa como un guardián, deteniendo los artefactos no deseados en tu entorno de producción desde las primeras etapas de desarrollo. De la misma manera, los flujos de trabajo de los entornos superiores utilizan kubescape para permitir o prohibir que los artefactos de la aplicación ingresen a la etapa final de producción.

Implementación de flujo de trabajo CI/CD de GitHub Actions

En este paso, aprenderás cómo crear y probar un pipeline de CI/CD de muestra con escaneo de vulnerabilidades integrado a través de los flujos de trabajo de GitHub. Para aprender los fundamentos de cómo usar las Acciones de Github con Kubernetes de DigitalOcean, consulta este tutorial.

El pipeline proporcionado en la siguiente sección construye e implementa la aplicación game-2048-example del repositorio kubernetes-sample-apps de DigitalOcean.

  1. En una visión general de alto nivel, el flujo de trabajo de CI/CD de ejemplo proporcionado en el repositorio Kubernetes-sample-apps está compuesto por las siguientes etapas:
  2. Etapa de construcción y prueba de la aplicación: construye los artefactos principales de la aplicación y ejecuta pruebas automatizadas.
  3. Etapa de escaneo Kubescape: escanea vulnerabilidades conocidas en los manifiestos YAML de Kubernetes asociados con la aplicación. Actúa como una puerta, y el estado final del pipeline (éxito/fallo) depende de este paso. En caso de fallo, también se envía una notificación a Slack.
  4. Etapa de construcción y empuje de la imagen de la aplicación: construye y etiqueta la imagen de la aplicación usando el último commit SHA de git. Luego, la imagen se empuja a DOCR.

Etapa de implementación de la aplicación: implementa la aplicación en Kubernetes (DOKS).

El siguiente diagrama ilustra cada trabajo del pipeline y los pasos asociados con las acciones (solo se muestra la configuración relevante):

  • Nota:
  • En el caso de proyectos basados en kustomize, es mejor renderizar el manifiesto final a través del comando kubectl kustomize </ruta/al/archivo/kustomization> para capturar y escanear todo (incluidos los recursos remotos). Por otro lado, puede ser difícil identificar qué recurso de Kubernetes necesita ser parchado. Esto se debe al hecho de que el archivo de manifiesto resultante está compuesto por todos los recursos que se aplicarán. Así es como funciona Kustomize: recopila todos los fragmentos de configuración de cada superposición y los aplica sobre una base para construir el compuesto final.

También puedes indicarle a Kubescape que escanee toda la carpeta donde guardas tus configuraciones de kustomize (la guía actual se basa en este enfoque). De esta manera, es más fácil identificar qué recurso necesita ser corregido en tu repositorio. Los recursos remotos utilizados por kustomize deben corregirse aguas arriba. Además, los secrets y ConfigMaps de Kubernetes generados a través de kustomize no se capturan.

¿Cómo fallar el pipeline si no se cumple cierto nivel de cumplimiento de seguridad?

La CLI de Kubescape proporciona un indicador llamado --fail-threshold para este propósito. Este indicador se correlaciona con el puntaje de riesgo general calculado después de cada escaneo. Puedes hacer fallar o pasar el pipeline en función del valor del umbral y detener la implementación de la aplicación si no se cumplen las condiciones.

La siguiente imagen ilustra el flujo para el ejemplo de pipeline CI/CD utilizado en esta guía:

  1. Por favor, sigue los siguientes pasos para crear y probar el flujo de trabajo de CI/CD de kubescape proporcionado en el repositorio de GitHub kubernetes-sample-apps:
  2. 1. Haz un fork del repositorio de GitHub kubernetes-sample-apps.
  3. SLACK_WEBHOOK_URL – contiene tu URL de webhook entrante de Slack utilizada para las notificaciones de escaneo de kubescape.
  4. Navega a la pestaña Actions de tu repositorio bifurcado y selecciona el flujo de trabajo Ejemplo de CI/CD de Kubescape del Juego 2048:

A new entry should appear in below list after clicking the Run Workflow green button. Select the running workflow to observe pipeline progress:

Haz clic en el botón Ejecutar flujo de trabajo y deja los valores predeterminados:

El pipeline fallará y se detendrá cuando se ejecute el trabajo kubescape-nsa-security-check. Esto es esperado porque el valor de umbral predeterminado de 30 para el puntaje de riesgo general es menor que el valor deseado. También deberías recibir una notificación de Slack con detalles sobre la ejecución del flujo de trabajo.

En el siguiente paso, aprenderás cómo investigar el informe de escaneo de kubescape para solucionar los problemas, reducir el puntaje de riesgo y pasar el pipeline.

Paso 5 – Investigación de los Resultados del Escaneo de Kubescape y Solución de Problemas Reportados

Cuando el umbral del valor del puntaje de riesgo no se alcanza, el flujo de trabajo de GitHub game-2048 fallará y se enviará una notificación a Slack con detalles adicionales.

El flujo de trabajo game-2048 realiza una verificación de seguridad (el escaneo de imágenes locales no es compatible) – verificaciones de configuración incorrecta de los manifiestos de Kubernetes. Se utiliza el trabajo kubescape-nsa-security-check para este propósito. El comando equivalente de kubescape que se está utilizando es – kubescape scan framework nsa /ruta/al/proyecto/kubernetes/manifests.

- name: Scan Kubernetes YAML files
  run: |
    kubescape scan framework nsa kustomize/ \
      -t ${{ github.event.inputs.kubescape_fail_threshold || env.KUBESCAPE_FAIL_THRESHOLD }} \
      --submit --account=${{ secrets.ARMOSEC_PORTAL_ACCOUNT_ID }}
  working-directory: ${{ env.PROJECT_DIR }}

A continuación, se muestra el fragmento principal de la lógica del trabajo kubescape-nsa-security-check:

–submit –account=${{ secrets.ARMOSEC_PORTAL_ACCOUNT_ID }}

La configuración anterior indica al CLI de kubescape que inicie un nuevo escaneo de todos los manifiestos de Kubernetes presentes en el directorio kustomize/ utilizando el marco NSA. También especifica qué nivel de umbral utilizar mediante la bandera -t, y para enviar los resultados finales al portal de la nube de Armo (la bandera –submit en conjunto con –account).

Por lo tanto, reducir el valor del puntaje de riesgo y pasar el flujo de trabajo consiste en investigar y solucionar los problemas reportados por el trabajo kubescape-nsa-security-check. A continuación, aprenderás cómo abordar los problemas de seguridad reportados por este trabajo.

A new browser window opens showing in detail each control and description. You will also be presented with required actions to remediate the issue (highlighted in green color):

Para verificar el informe de estado, puedes hacer clic en el enlace de resultados del escaneo de kubescape desde la notificación recibida en Slack. Luego, haz clic en el botón de escaneo REPOSITORIES SCAN del menú izquierdo en el portal de la nube de Armo. Ahora, haz clic en la entrada kubernetes-sample-apps de la lista:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: game-2048
spec:
  replicas: 1
  selector:
    matchLabels:
      app: game-2048
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: game-2048
    spec:
      containers:
        - name: backend
           A continuación, haz clic en la entrada deployment.yaml, y luego selecciona la herramienta de llave inglesa en la parte superior derecha: 
          image: registry.digitalocean.com/sample-apps/2048-game:latest
          ports:
            - name: http
              containerPort: 8080
          resources:
            requests:
              cpu: 100m
              memory: 50Mi
            limits:
              cpu: 200m
              memory: 100Mi
          securityContext:
            readOnlyRootFilesystem: true
            runAsNonRoot: true
            allowPrivilegeEscalation: false
            capabilities:
              drop:
                - all

Después de recopilar toda la información del informe de escaneo, puedes proceder a editar el archivo deployment.yaml de tu repositorio (ubicado en la subcarpeta game-2048-example/kustomize/resources). Las correcciones ya están en su lugar, solo necesitas descomentar las últimas líneas del archivo. El archivo deployment.yaml final debería verse como se muestra a continuación:

# Reemplaza los marcadores `<>` con la información de tu registro de Docker

  • Nota:
    Las sugerencias C-0055 fueron omitidas en este ejemplo por simplicidad. Puedes leer más sobre el modo de computación segura en Kubernetes aquí.
  • ¿Qué cambió? Se aplicaron las siguientes correcciones de seguridad:
  • readOnlyRootFilesystem – ejecuta la imagen del contenedor en solo lectura (no se pueden alterar archivos con kubectl exec en el contenedor).
  • runAsNonRoot – se ejecuta como el usuario no root definido por la directiva USER del Dockerfile del proyecto game-2048 Dockerfile.

allowPrivilegeEscalation – configurar allowPrivilegeEscalation en false asegura que ningún proceso secundario de un contenedor pueda obtener más privilegios que su padre.

capabilities.drop – Para hacer los contenedores más seguros, debes proporcionarles la menor cantidad de privilegios que necesiten para ejecutarse. En la práctica, eliminamos todo por defecto y luego agregamos capacidades requeridas paso a paso. Puedes leer más sobre la seguridad de los contenedores en este artículo escrito por Armosec.

A few final checks can be performed as well on the Kubernetes side to verify if the reported issues were fixed:

  1. Finalmente, guarda los cambios para el archivo deployment.yaml y haz push a la rama principal. Después de activar manualmente el flujo de trabajo, esta vez debería completarse correctamente:
  2. Verifica si el despliegue de game-2048 tiene un sistema de archivos de solo lectura (inmutable) escribiendo el archivo de aplicación index.html:

Compruebe si el contenedor se ejecuta como un usuario no root (debería imprimir un número entero diferente de cero, por ejemplo, 1000):

kubectl exec -it deployment/game-2048 -n game-2048 -- id -u

Compruebe si el contenedor se ejecuta como un usuario no root (debería imprimir un número entero diferente de cero, por ejemplo, 1000):

Si todas las comprobaciones son correctas, entonces aplicó con éxito las recomendaciones de seguridad requeridas.

Tratamiento de Excepciones

Existen situaciones en las que no desea que el puntaje de riesgo final se vea afectado por algunos problemas informados que su equipo considere seguro ignorar. Kubescape ofrece una función incorporada para administrar excepciones y superar esta situación.

A more efficient approach is where you integrate vulnerability scan tools directly in your favorite IDE (or Integrated Development Environment). This way, you can detect and fix security issues ahead of time in the software development cycle.

Puede obtener más información sobre esta función aquí.

  1. Kubescape para IDEs
  2. Kubescape ofrece soporte para la integración de IDE a través de las siguientes extensiones:

extensión de Visual Studio Code.

extensión de Kubernetes Lens.

Los complementos anteriores te ayudarán a detectar y solucionar problemas en las primeras etapas de desarrollo, eliminando así la frustración, los costos y las fallas de seguridad en los sistemas de producción. Además, te ayuda a reducir las iteraciones y el esfuerzo humano a largo plazo. Como ejemplo, por cada problema de seguridad reportado por tu automatización de CI/CD, necesitas volver y solucionar el problema en tu código, hacer cambios de confirmación, esperar nuevamente la automatización de CI/CD, y luego repetir en caso de falla.

Puedes obtener más información sobre estas características navegando a la página de documentación de Kubescape, luego busca en la sección de INTEGRACIONES.

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

Paso 6 – Activar automáticamente el flujo de trabajo de CI/CD de Kubescape

Puedes configurar el flujo de trabajo para que se active automáticamente en cada confirmación o PR contra la rama principal descomentando las siguientes líneas en la parte superior del archivo game-2048-kubescape.yaml:

Después de editar el archivo, haz commit a los cambios en tu rama principal y deberías estar listo para continuar.

Paso 7 – Habilitar Notificaciones de Slack para Monitoreo Continuo

La automatización del escaneo de vulnerabilidades que has implementado hasta ahora es un buen punto de partida pero no es perfecta. ¿Por qué?

Un problema con el enfoque actual es que nunca sabes cuándo se informan nuevos problemas para los activos que ya desplegaste en tus entornos. En otras palabras, evaluaste los riesgos de seguridad y tomaste las medidas para solucionar los problemas en un momento específico en el tiempo, cuando se ejecutó tu automatización de CI/CD.

Pero ¿qué pasa si se informan nuevos problemas mientras tanto y tu aplicación vuelve a ser vulnerable?

La función de monitoreo de Kubescape te ayuda a abordar nuevas vulnerabilidades, que se divulgan constantemente. Cuando se combina con la integración de Slack, puedes tomar acciones inmediatas para solucionar problemas recién informados que puedan afectar tu aplicación en un entorno de producción.

  1. El portal en la nube de Armo admite la integración de Slack para enviar alertas en tiempo real después de cada escaneo de clúster. Esta función requiere que se instale el gráfico Helm de los componentes en la nube de Armo en tu clúster DOKS, como se explica en Paso 3 – Configurar Escaneos Automáticos de Kubescape para DOKS.
  2. Al habilitar las alertas de Slack, recibirás notificaciones importantes sobre vulnerabilidades detectadas en tu clúster DOKS, tales como:
  3. Vulnerabilidades en nodos de trabajo (nivel del sistema operativo).

Vulnerabilidades en imágenes de contenedores.

  • Errores de configuración de Kubernetes para varios recursos como despliegues, pods, etc.
  • Primero, necesitas crear una Aplicación de Slack. Luego, debes otorgar los siguientes permisos a tu Bot de Slack en la página de OAuth y Permisos:
  • channels:join – Unirse a canales públicos en un espacio de trabajo.
  • channels:read – Ver información básica sobre canales públicos en un espacio de trabajo.
  • groups:read – Ver información básica sobre canales privados a los que se ha añadido tu Aplicación de Slack.
  • chat:write – Enviar mensajes como @< Nombre de tu Aplicación de Slack >.

im:read – Ver información básica sobre mensajes directos a los que se ha añadido tu Aplicación de Slack.

mpim:read – Ver información básica sobre mensajes directos de grupo a los que se ha añadido tu Aplicación de Slack.

A continuación, ve a la página de configuración de tu cuenta en el portal de la nube de Armo (icono de engranaje en la esquina superior derecha). Desde allí, selecciona la página de Integraciones, luego Slack.

Ahora, pegue su token de OAuth del bot de Slack (que se puede encontrar en la página OAuth & Permisos de la página de su aplicación de Slack) en el campo de entrada Insertar Token. Finalmente, seleccione cómo desea ser notificado y el canal de Slack donde se deben enviar las alertas. Haga clic en el botón Establecer Notificaciones y listo. La siguiente imagen ilustra los detalles:

Después de configurar la integración de Slack, debería recibir notificaciones periódicas después de cada escaneo de clúster en el canal designado:

Si recibe notificaciones similares a las anteriores, entonces configuró la integración de Slack de Armosec Kubescape correctamente.

Conclusión

En esta guía, aprendió cómo usar una de las herramientas de escaneo de vulnerabilidades de Kubernetes más populares: Kubescape. También aprendió cómo realizar escaneos de clúster y de repositorio (manifiestos YAML) utilizando la CLI de Kubescape. Luego, aprendió cómo integrar la herramienta de escaneo de vulnerabilidades en un pipeline de CI/CD tradicional implementado utilizando flujos de trabajo de GitHub.

Finalmente, aprendió cómo investigar informes de escaneo de vulnerabilidades, aplicar correcciones para remediar la situación y reducir el puntaje de riesgo a un mínimo mediante un ejemplo práctico: la aplicación game-2048 del repositorio kubernetes-sample-apps.

Source:
https://www.digitalocean.com/community/developer-center/using-the-kubescape-vulnerability-scan-tool