Aktualisierung der CVE-Datenbank

Aktualisierung der SUSE® Security CVE-Schwachstellendatenbank

Das Scanner-Image/pod führt die Scans mit seiner internen CVE-Datenbank durch. Das Scanner-Image wird häufig, so oft wie täglich, mit der neuesten CVE-Datenbank im SUSE® Security Docker Hub-Registry aktualisiert, wenn es Updates gibt. Um die in der Analyse verwendete CVE-Datenbank zu aktualisieren, ziehen Sie einfach das neueste Scanner-Image und stellen Sie es bereit. Die neueste Versionsnummer der Datenbank ist hier aufgeführt.

Ein Container namens Updater führt die Aufgabe aus, die Scanner-Pods neu zu starten, um einen Pull des neuesten Images zu erzwingen, was die CVE-Datenbank aktualisiert. Um automatisch nach Updates zu suchen und den Scanner zu aktualisieren, kann ein Updater-Cron-Job erstellt werden.

Standardmäßig wird der unten gezeigte Updater-Cron-Job automatisch aus den Beispiel-Implementierungs-YAML-Dateien für Kubernetes und OpenShift gestartet. Dies überprüft automatisch die Verfügbarkeit neuer CVE-Datenbank-Updates anhand der neuen Scanner-Versionen, die im SUSE® Security Docker Hub-Registry veröffentlicht werden. Manuelle Updates bei Docker-nativen Implementierungen sind unten aufgeführt. Für OpenShift-Implementierungen oder andere, bei denen Images manuell von SUSE® Security gezogen werden müssen, sollte der Scanner mit dem 'latest'-Tag von SUSE® Security gezogen werden, um die CVE-Datenbank zu aktualisieren.

Für das Scannen von Registries, wenn das Kästchen 'Nach CVE-DB-Update erneut scannen' aktiviert ist, werden alle Images in dieser Registry nach einem Update der CVE-Datenbank erneut gescannt. Für das Scannen zur Laufzeit werden alle laufenden Assets nach einem Update der CVE-Datenbank erneut gescannt, wenn die Auto-Scan-Funktion aktiviert ist.

Updater-Cron-Job

Dieser Cron-Job wird automatisch von SUSE® Security als Teil der Beispiel-Implementierung bereitgestellt, sodass er normalerweise nicht manuell gestartet werden muss.

Der Updater ist ein Container-Image, das, wenn es ausgeführt wird, die Scanner-Implementierung neu startet und den Pull des neuesten Scanner-Images erzwingt. Der Updater setzt alle Scanner-Pods neu ein, indem er die Implementierung auf null setzt und sie wieder hochskaliert.

Die Cron-Job-Vorlage neuvector-updater.yaml unten für Kubernetes 1.8 und höher führt den Updater jeden Tag um Mitternacht aus. Der Zeitplan kann nach Belieben angepasst werden.

Beispiel für Updater-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

Wenn der All-in-One-Container anstelle des Controllers bereitgestellt wurde, ersetzen Sie neuvector-svc-controller.neuvector durch neuvector-svc-allinone.neuvector

Um den Cron-Job auszuführen

kubectl create -f neuvector-updater.yaml

Docker Native Updates

Verwenden Sie immer das Tag :latest, wenn Sie das Scanner-Image ziehen und ausführen, um sicherzustellen, dass die neueste CVE-Datenbank bereitgestellt wird.

Für Docker Native:

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

docker rm -f <scanner id> kann auch verwendet werden, um den laufenden Scanner zwangsweise zu beenden und zu entfernen.

Für 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

Beispiel für 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

Und Beispiel für 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

CVE-Datenbankversion

Die CVE-Datenbankversion kann in der Konsole im Tab "Schwachstellen" eingesehen werden. Sie können auch die Protokolle des Scanner-Containers oder das Aktualisierungs-Image überprüfen.

Um die REST-API zu verwenden, um die Version abzufragen:

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

Ausgabe:

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

Verwendung von kubectl:

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

Beispielausgabe:

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

Oder für 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

Manuelle Aktualisierungen auf Kubernetes

Im Folgenden finden Sie ein Beispiel für das manuelle Aktualisieren der CVE-Datenbank auf Kubernetes oder OpenShift.

Führen Sie die untenstehende Aktualisierungsdatei aus

kubectl create -f neuvector-manual-updater.yaml

Beispiel-Datei

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