更新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-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