更新CVE数据库

更新SUSE® Security CVE漏洞数据库

扫描器镜像/pod 使用其内部CVE数据库进行扫描。扫描器镜像会在SUSE® Security Docker Hub注册表上频繁更新最新的CVE数据库,通常每天更新一次,如果有更新的话。要更新用于扫描的CVE数据库,只需拉取并部署最新的扫描器镜像。最新的数据库版本号可以在 这里找到。

一个名为 Updater 的容器执行重启扫描器 pod 的任务,以强制拉取最新镜像,从而更新CVE数据库。要自动检查更新并更新扫描器,可以创建一个 Updater cron 作业。

默认情况下,下面显示的 Updater cron 作业会从 Kubernetes 和 OpenShift 的示例部署 yaml 文件中自动启动。这将通过在SUSE® Security Docker Hub注册表上发布的新扫描器版本自动检查新的CVE数据库更新。Docker原生部署的手动更新如下所示。对于 OpenShift 部署或其他需要从 SUSE® Security 手动拉取镜像的情况,应从 SUSE® Security 拉取带有 'latest' 标签的扫描器,以更新CVE数据库。

对于注册表扫描,如果启用了“CVE数据库更新后重新扫描”选项,则在CVE数据库更新后,该注册表中的所有镜像将被重新扫描。 对于运行时扫描,如果启用了自动扫描功能,则在CVE数据库更新后,所有正在运行的资产将被重新扫描。

Updater cron 作业

此 cron 作业由 SUSE® Security 自动部署,作为示例部署的一部分,因此通常不需要手动启动。

Updater 是一个容器镜像,当运行时,会重启扫描器部署,强制拉取最新的扫描器镜像。Updater 通过将部署缩减为零并重新扩展来重新部署所有扫描器 pod。

下面的 Kubernetes 1.8 及更高版本的定时任务示例 neuvector-updater.yaml 每天午夜运行 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

如果部署的是 allinone 容器而不是控制器,请将 neuvector-svc-controller.neuvector 替换为 neuvector-svc-allinone.neuvector

运行 cron 作业

kubectl create -f neuvector-updater.yaml

Docker 原生更新

拉取和运行扫描器镜像时,请始终使用 :latest 标签,以确保部署最新的 CVE 数据库。

对于 Docker 原生:

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

docker rm -f <scanner id> 也可以用于强制停止和移除正在运行的扫描器。

对于 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

示例 docker 运行

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

以及示例 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 数据库版本

CVE 数据库版本可以在控制台的漏洞选项卡中查看。您还可以检查扫描器容器日志或更新器镜像。

要使用 REST API 查询版本:

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

输出:

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

使用 kubectl:

kubectl logs neuvector-scanner-pod-5687dcb6fd-2h4sj -n neuvector | 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

或者对于 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

Kubernetes 上的手动更新

以下是手动更新 Kubernetes 或 OpenShift 上 CVE 数据库的示例。

运行下面的更新文件

kubectl create -f neuvector-manual-updater.yaml

示例文件

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