CVEデータベースの更新

SUSE® Security CVE脆弱性データベースの更新

スキャナーのイメージ/ポッドは、内部CVEデータベースを使用してスキャンを実行します。スキャナーのイメージは、SUSE® Security Docker Hubレジストリ上で、最新のCVEデータベースとともに頻繁に更新されます。更新がある場合は、毎日更新されることもあります。スキャンに使用するCVEデータベースを更新するには、最新のスキャナーイメージをプルしてデプロイするだけです。最新のデータベースバージョン番号は、 こちらにリストされています。

NeuVector Updaterと呼ばれるコンテナが、最新のイメージをプルするためにスキャナーポッドを再起動するタスクを実行します。これによりCVEデータベースが更新されます。自動的に更新を確認し、スキャナーを更新するには、NeuVector Updaterのcronジョブを作成できます。

デフォルトでは、以下に示すNeuVector Updaterのcronジョブは、KubernetesおよびOpenShiftのサンプルデプロイメントyamlファイルから自動的に開始されます。これにより、SUSE® Security Docker Hubレジストリに公開された新しいスキャナーのバージョンを通じて、新しいCVEデータベースの更新が自動的に確認されます。Dockerネイティブデプロイメントの手動更新は以下に示されています。OpenShiftデプロイメントや、SUSE® Securityから手動でイメージをプルする必要がある他のデプロイメントの場合、CVEデータベースを更新するために、'latest’タグの付いたスキャナーをSUSE® Securityからプルする必要があります。

レジストリスキャンの場合、'CVE DB更新後に再スキャン’のボックスが有効になっていると、CVEデータベースの更新後にそのレジストリ内のすべてのイメージが再スキャンされます。 ランタイムスキャンの場合、Auto-Scan機能が有効になっていると、CVEデータベースの更新後にすべての実行中のアセットが再スキャンされます。

NeuVector Updaterのcronジョブ

このcronジョブは、サンプルデプロイメントの一部としてSUSE® Securityによって自動的にデプロイされるため、手動で開始する必要は通常ありません。

NeuVector Updaterは、実行されるとスキャナーのデプロイメントを再起動し、最新のスキャナーイメージをプルすることを強制するコンテナイメージです。NeuVector Updaterは、デプロイメントをゼロにしてから再スケーリングすることによって、すべてのスキャナーポッドを再デプロイします。

以下のKubernetes 1.8以降のcronジョブサンプルneuvector-updater.yamlは、毎日真夜中にNeuVector Updaterを実行します。スケジュールは必要に応じて調整できます。

サンプルNeuVector 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ネイティブ更新

最新のCVEデータベースがデプロイされるように、スキャナーイメージをプルおよび実行する際は、常に:latestタグを使用してください。

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

およびサンプル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データベースバージョンは、脆弱性タブのコンソールで確認できます。スキャナーコンテナのログやNeuVector Updaterイメージを確認することもできます。

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データベースを手動で更新するための例です。

以下のUpdaterファイルを実行してください

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