Actualizando la base de datos CVE

Actualizando la SUSE® Security base de datos de vulnerabilidad CVE

La imagen/pod del escáner realiza los escaneos con su base de datos CVE interna. La imagen del escáner se actualiza en el SUSE® Security registro de Docker Hub con la última base de datos CVE con frecuencia, tan a menudo como a diario si hay actualizaciones. Para actualizar la base de datos CVE utilizada en el escaneo, simplemente descarga y despliega la última imagen del escáner. El número de versión de la última base de datos se puede encontrar listado aquí.

Un contenedor llamado el Actualizador realiza la tarea de reiniciar los pods del escáner para forzar la descarga de la última imagen, lo que actualizará la base de datos CVE. Para comprobar automáticamente si hay actualizaciones y actualizar el escáner, se puede crear un trabajo cron de actualización.

Por defecto, el trabajo cron de actualización que se muestra a continuación se inicia automáticamente a partir de los archivos yaml de despliegue de muestra para Kubernetes y OpenShift. Esto comprobará automáticamente si hay nuevas actualizaciones de la base de datos CVE a través de nuevas versiones del escáner publicadas en el SUSE® Security registro de Docker Hub. Las actualizaciones manuales en despliegues nativos de Docker se muestran a continuación. Para despliegues de OpenShift u otros donde las imágenes deben ser descargadas manualmente de SUSE® Security, se debe descargar el escáner con la etiqueta 'latest' de SUSE® Security para la actualización de la base de datos CVE.

Para el escaneo de registros, si la casilla 'Reescanear después de la actualización de la base de datos CVE' está habilitada, todas las imágenes en ese registro serán reescaneadas después de una actualización de la base de datos CVE. Para el escaneo en tiempo de ejecución, todos los activos en ejecución serán reescaneados después de una actualización de la base de datos CVE si la función de Auto-escaneo está habilitada.

Trabajo Cron de Actualización

Este trabajo cron es desplegado automáticamente por SUSE® Security como parte del despliegue de muestra, por lo que típicamente no es necesario iniciarlo manualmente.

El Actualizador es una imagen de contenedor que, al ejecutarse, reinicia el despliegue del escáner, forzando la descarga de la última imagen del escáner. El Actualizador vuelve a desplegar todos los pods del escáner llevando el despliegue a cero y escalándolo de nuevo.

El ejemplo de trabajo cron neuvector-updater.yaml a continuación para Kubernetes 1.8 y versiones posteriores ejecuta el Actualizador todos los días a medianoche. El horario se puede ajustar según se desee.

Ejemplo de yaml del actualizador:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: neuvector-updater-pod
  namespace: neuvector
spec:
  schedule: "0 0 * * *"
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            app: neuvector-updater-pod
        spec:
          containers:
          - name: neuvector-updater-pod
            image: neuvector/updater
            imagePullPolicy: Always
            command:
            - /bin/sh
            - -c
            - TOKEN=`cat /var/run/secrets/kubernetes.io/serviceaccount/token`; /usr/bin/curl -kv -X PATCH -H "Authorization:Bearer $TOKEN" -H "Content-Type:application/strategic-merge-patch+json" -d '{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt":"'`date +%Y-%m-%dT%H:%M:%S%z`'"}}}}}' 'https://kubernetes.default/apis/apps/v1/namespaces/neuvector/deployments/neuvector-scanner-pod'
          restartPolicy: Never

Si se desplegó el contenedor allinone en lugar del controlador, reemplaza neuvector-svc-controller.neuvector por neuvector-svc-allinone.neuvector

Para ejecutar el trabajo cron

kubectl create -f neuvector-updater.yaml

Actualizaciones nativas de Docker

Siempre utiliza la etiqueta :latest al descargar y ejecutar la imagen del escáner para asegurar que se despliegue la base de datos CVE más reciente.

Para docker nativo:

docker stop scanner
docker rm <scanner id>
docker pull neuvector/scanner:latest
<docker run command from below>

docker rm -f <scanner id> también se puede utilizar para forzar la terminación y eliminación del escáner en ejecución.

Para docker-compose

docker-compose -f file.yaml down
docker-compose -f file.yaml pull        // pre-pull the image before starting the scanner
docker-compose -f file.yaml up -d

Ejemplo de docker run

docker run -td --name scanner -e CLUSTER_JOIN_ADDR=controller_node_ip -e CLUSTER_ADVERTISED_ADDR=node_ip -e SCANNER_DOCKER_URL=tcp://192.168.1.10:2376 -p 18402:18402 -v /var/run/docker.sock:/var/run/docker.sock:ro neuvector/scanner:latest

Y ejemplo de docker-compose

Scanner:
   image: neuvector/scanner:latest
   container_name: scanner
   environment:
     - SCANNER_DOCKER_URL=tcp://192.168.1.10:2376
     - CLUSTER_JOIN_ADDR=controller_node_ip
     - CLUSTER_ADVERTISED_ADDR=node_ip
   ports:
     - 18402:18402
   volumes:
     - /var/run/docker.sock:/var/run/docker.sock:ro

Versión de la base de datos CVE

La versión de la base de datos CVE se puede ver en la Consola en la pestaña de Vulnerabilidades. También puedes inspeccionar los registros del contenedor del escáner o de la imagen del Actualizador.

Para utilizar la API REST para consultar la versión:

curl -k -H "Content-Type: application/json" -H "X-Auth-Token: $_TOKEN_" "https://127.0.0.1:10443/v1/scan/scanner"

Salida:

{
    "scanners": [
        {
            "cvedb_create_time": "2020-07-07T10:34:04Z",
            "cvedb_version": "1.950",
            "id": "0f043705948557828ac1831ee596588a0d050950113117ddd19ecd604982f4d9",
            "port": 18402,
            "server": "127.0.0.1"
        },
        {
            "cvedb_create_time": "2020-07-07T10:34:04Z",
            "cvedb_version": "1.950",
            "id": "9fa02c644d603f59331c95735158d137002d32a75ed1014326f5039f38d4d717",
            "port": 18402,
            "server": "192.168.9.95"
        }
    ]
}

Usando kubectl:

kubectl logs neuvector-scanner-pod-5687dcb6fd-2h4sj -n neuvector | grep version

Resultado de ejemplo:

2020-09-15T00:00:57.909|DEBU|SCN|memdb.ReadCveDb: New DB found - update=2020-09-14T10:37:56Z version=2.04
2020-09-15T00:01:10.06 |DEBU|SCN|main.scannerRegister: - entries=47016 join=neuvector-svc-controller.neuvector:18400 version=2.040

O para docker:

docker logs <scanner container id or name> | grep version
2020-09-15T00:00:57.909|DEBU|SCN|memdb.ReadCveDb: New DB found - update=2020-09-14T10:37:56Z version=2.04
2020-09-15T00:01:10.06 |DEBU|SCN|main.scannerRegister: - entries=47016 join=neuvector-svc-controller.neuvector:18400 version=2.040

Actualizaciones manuales en Kubernetes

A continuación se muestra un ejemplo para actualizar manualmente la base de datos CVE en Kubernetes u OpenShift.

Ejecuta el archivo del Actualizador que se muestra a continuación.

kubectl create -f neuvector-manual-updater.yaml

Archivo de ejemplo

apiVersion: v1
kind: Pod
metadata:
  name: neuvector-updater-pod
  namespace: neuvector
spec:
  containers:
  - name: neuvector-updater-pod
    image: neuvector/updater
    imagePullPolicy: Always
    command:
    - /bin/sh
    - -c
    - TOKEN=`cat /var/run/secrets/kubernetes.io/serviceaccount/token`; /usr/bin/curl -kv -X PATCH -H "Authorization:Bearer $TOKEN" -H "Content-Type:application/strategic-merge-patch+json" -d '{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt":"'`date +%Y-%m-%dT%H:%M:%S%z`'"}}}}}' 'https://kubernetes.default/apis/apps/v1/namespaces/neuvector/deployments/neuvector-scanner-pod'
  restartPolicy: Never