Atualizando o Banco de Dados CVE

Atualizando o SUSE® Security Banco de Dados de Vulnerabilidade CVE

A imagem/pod do Scanner executa as varreduras com seu banco de dados CVE interno. A imagem do scanner é atualizada no SUSE® Security registro do Docker Hub com o banco de dados CVE mais recente com frequência, inclusive diariamente se houver atualizações. Para atualizar o banco de dados CVE utilizado na varredura, basta puxar e implantar a imagem mais recente do Scanner. O número da versão mais recente do banco de dados pode ser encontrado listado aqui.

Um contêiner chamado Updater realiza a tarefa de reiniciar os pods do scanner para forçar a obtenção da imagem mais recente, que atualizará o banco de dados CVE. Para verificar automaticamente se há atualizações e atualizar o scanner, um trabalho cron de atualização pode ser criado.

Por padrão, o trabalho cron de atualização mostrado abaixo é iniciado automaticamente a partir dos arquivos yaml de implantação de exemplo para Kubernetes e OpenShift. Isso verificará automaticamente novas atualizações do banco de dados CVE através de novas versões do scanner publicadas no SUSE® Security registro do Docker Hub. Atualizações manuais em implantações nativas do Docker são mostradas abaixo. Para implantações do OpenShift ou outras onde as imagens precisam ser puxadas manualmente de SUSE® Security, o scanner com a tag 'latest' deve ser puxado de SUSE® Security para atualizar o banco de dados CVE.

Para digitalização de registro, se a caixa 'Reanalisar após atualização do DB CVE' estiver habilitada, todas as imagens nesse registro serão reanalisadas após uma atualização do banco de dados CVE. Para digitalização em tempo de execução, todos os ativos em execução serão reanalisados após uma atualização do banco de dados CVE se o recurso Auto-Scan estiver habilitado.

Trabalho Cron de Atualização

Este trabalho cron é implantado automaticamente por SUSE® Security como parte da implantação de exemplo, portanto, normalmente não é necessário iniciar manualmente.

O Updater é uma imagem de contêiner que, quando executada, reinicia a implantação do scanner, forçando a obtenção da imagem mais recente do Scanner. O atualizador reimplanta todos os pods do scanner levando a implantação a zero e escalonando-a novamente.

O exemplo de cron job neuvector-updater.yaml abaixo para Kubernetes 1.8 e posterior executa o atualizador todos os dias à meia-noite. A programação pode ser ajustada conforme desejado.

Exemplo de yaml do atualizador:

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

Se o contêiner allinone foi implantado em vez do controlador, substitua neuvector-svc-controller.neuvector por neuvector-svc-allinone.neuvector

Para executar o cron job

kubectl create -f neuvector-updater.yaml

Atualizações Nativas do Docker

Sempre use a tag :latest ao puxar e executar a imagem do scanner para garantir que o banco de dados CVE mais recente seja implantado.

Para docker nativo:

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

docker rm -f <scanner id> também pode ser usado para forçar a parada e remoção do scanner em execução.

Para 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

Exemplo 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

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

Versão do Banco de Dados CVE

A versão do banco de dados CVE pode ser vista no Console na aba de Vulnerabilidades. Você também pode inspecionar os logs do contêiner do scanner ou da imagem do atualizador.

Para usar a API REST para consultar a versão:

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

Saída:

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

Usando kubectl:

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

Saída de exemplo:

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

Atualizações Manuais no Kubernetes

Abaixo está um exemplo de como atualizar manualmente o banco de dados CVE no Kubernetes ou OpenShift.

Execute o arquivo do atualizador abaixo

kubectl create -f neuvector-manual-updater.yaml

Arquivo de exemplo

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