Mise à jour de la base de données CVE

Mise à jour de la SUSE® Security base de données des vulnérabilités CVE

L’image/pod du scanner effectue les analyses avec sa base de données CVE interne. L’image du scanner est mise à jour sur le SUSE® Security registre Docker Hub avec la dernière base de données CVE, fréquemment, voire quotidiennement en cas de mises à jour. Pour mettre à jour la base de données CVE utilisée dans l’analyse, il suffit de tirer et de déployer la dernière image du scanner. Le dernier numéro de version de la base de données peut être trouvé listé ici.

Un conteneur appelé l’Updater effectue la tâche de redémarrer les pods du scanner afin de forcer le tirage de la dernière image, ce qui mettra à jour la base de données CVE. Pour vérifier automatiquement les mises à jour et mettre à jour le scanner, un travail cron de mise à jour peut être créé.

Par défaut, le travail cron de mise à jour montré ci-dessous est automatiquement démarré à partir des fichiers yaml de déploiement d’exemple pour Kubernetes et OpenShift. Cela vérifiera automatiquement les nouvelles mises à jour de la base de données CVE à travers de nouvelles versions du scanner publiées sur le SUSE® Security registre Docker Hub. Les mises à jour manuelles sur les déploiements natifs Docker sont montrées ci-dessous. Pour les déploiements OpenShift ou d’autres où les images doivent être tirées manuellement depuis SUSE® Security, le scanner avec le tag 'latest' doit être tiré depuis SUSE® Security pour mettre à jour la base de données CVE.

Pour le scan de registre, si la case 'Rescanner après mise à jour de la base de données CVE' est activée, toutes les images dans ce registre seront rescannées après une mise à jour de la base de données CVE. Pour le scan en temps réel, tous les actifs en cours d’exécution seront rescannés après une mise à jour de la base de données CVE si la fonction Auto-Scan est activée.

Travail Cron de mise à jour

Ce travail cron est déployé par SUSE® Security automatiquement dans le cadre du déploiement d’exemple, il n’est donc généralement pas nécessaire de le démarrer manuellement.

L’Updater est une image de conteneur qui, lorsqu’elle est exécutée, redémarre le déploiement du scanner, forçant le tirage de la dernière image du scanner. L’updater redéploie tous les pods du scanner en ramenant le déploiement à zéro, puis en le rééchelonnant.

L’exemple de tâche cron neuvector-updater.yaml ci-dessous pour Kubernetes 1.8 et ultérieur exécute la mise à jour chaque jour à minuit. Le calendrier peut être ajusté selon les besoins.

Exemple de mise à jour yaml :

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 le conteneur allinone a été déployé au lieu du contrôleur, remplacez neuvector-svc-controller.neuvector par neuvector-svc-allinone.neuvector

Pour exécuter la tâche cron

kubectl create -f neuvector-updater.yaml

Mises à jour Docker Native

Utilisez toujours le tag :latest lors du tirage et de l’exécution de l’image du scanner pour garantir que la dernière base de données CVE est déployée.

Pour docker natif :

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

docker rm -f <scanner id> peut également être utilisé pour forcer l’interruption et la suppression du scanner en cours d’exécution.

Pour 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

Exemple 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

Et exemple 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

Version de la base de données CVE

La version de la base de données CVE peut être consultée dans la Console dans l’onglet Vulnérabilités. Vous pouvez également inspecter les journaux du conteneur du scanner ou de l’image de l’Updater.

Pour utiliser l’API REST pour interroger la version :

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

Sortie :

{
    "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"
        }
    ]
}

Utiliser kubectl :

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

Exemple de sortie :

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

Ou pour 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

Mises à jour manuelles sur Kubernetes

Voici un exemple pour mettre à jour manuellement la base de données CVE sur Kubernetes ou OpenShift.

Exécutez le fichier de l’Updater ci-dessous

kubectl create -f neuvector-manual-updater.yaml

Fichier d’exemple

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