Как обновить базу уязвимостей в закрытом контуре

Обновление БД CVE без доступа в интернет.

В закрытом контуре кластер не имеет доступа к общедоступным реестрам и базам уязвимостей. Для актуального сканирования образов необходимо периодически обновлять базу уязвимостей через зеркало.

Обновление можно выполнить скриптом update.sh или с помощью патча.

Обновление скриптом update.sh

  • В скрипте update.sh необходимо заполнить переменные MIRROR_FQDN, MIRROR_USERNAME, MIRROR_PASSWORD. Значения переменных можно посмотреть на зеркале, в файле config/config.yaml.
  • Скрипт необходимо запускать без параметров. Он может быть запущен нативно или в контейнере.

Требования к серверу

  • Есть доступ до public.shturval.tech.
  • Есть доступ до локального зеркала.
  • Установлен curl, добавлен в $PATH (в случае нативного запуска).

Чтобы установить oras, выполните:

curl -L -o /tmp/oras.tgz https://github.com/oras-project/oras/releases/download/v1.3.2/oras_1.3.2_linux_amd64.tar.gz && tar -zxvf /tmp/oras.tgz -C /bin/

Подготовка образа

  1. Подготовьте скрипт update.sh и Dockerfile и загрузите их в зеркало.

Скрипт update.sh:

#!/bin/sh

MIRROR_FQDN=
MIRROR_USERNAME=
MIRROR_PASSWORD=
SHTURVAL_PUBLIC_REPO=public.shturval.tech

oras pull ${SHTURVAL_PUBLIC_REPO}/trivy-db:2
oras push ${MIRROR_FQDN}/trivy-db:2 ./db.tar.gz -u ${MIRROR_USERNAME}:${MIRROR_PASSWORD} --insecure
curl -k -u ${MIRROR_USERNAME}:${MIRROR_PASSWORD} -X POST "https://${MIRROR_FQDN}/service/rest/v1/components?repository=shturval_bin_public" -F "raw.directory=/vulndb/" -F "raw.asset0=@./db.tar.gz" -F "raw.asset0.filename=db.tar.gz"
rm -f db.tar.gz 

oras pull ${SHTURVAL_PUBLIC_REPO}/trivy-java-db:1
oras push ${MIRROR_FQDN}/trivy-java-db:1 ./javadb.tar.gz -u ${MIRROR_USERNAME}:${MIRROR_PASSWORD} --insecure
curl -k -u ${MIRROR_USERNAME}:${MIRROR_PASSWORD} -X POST "https://${MIRROR_FQDN}/service/rest/v1/components?repository=shturval_bin_public" -F "raw.directory=/vulndb/" -F "raw.asset0=@./javadb.tar.gz" -F "raw.asset0.filename=javadb.tar.gz"
rm -f javadb.tar.gz

oras pull ${SHTURVAL_PUBLIC_REPO}/trivy-checks:0
oras push ${MIRROR_FQDN}/trivy-checks:0 ./bundle.tar.gz -u ${MIRROR_USERNAME}:${MIRROR_PASSWORD} --insecure
rm -f bundle.tar.gz
oras pull ${SHTURVAL_PUBLIC_REPO}/trivy-checks:1
oras push ${MIRROR_FQDN}/trivy-checks:1 ./bundle.tar.gz -u ${MIRROR_USERNAME}:${MIRROR_PASSWORD} --insecure
rm -f bundle.tar.gz

Пример Dockerfile:

FROM alpine:3
RUN apk add --update --no-cache curl tar gzip
RUN curl -L -o /tmp/oras.tgz https://github.com/oras-project/oras/releases/download/v1.3.2/oras_1.3.2_linux_amd64.tar.gz && tar -zxvf /tmp/oras.tgz -C /bin/
  1. На ВМ, где размещено зеркало, запустите сборку образа из Dockerfile в каталоге со скриптом update.sh и Dockerfile, выполнив команду:
docker build -t trivy-updater:latest .
  1. Запустите скрипт в контейнере, выполнив команду:
docker run -v $(pwd)/update.sh:/bin/update.sh trivy-updater:latest /bin/sh /bin/update.sh

Обновление с патчем

С помощью патча можно добавить в зеркало пакеты или образы без необходимости пересборки бандла или обновления зеркала.

Запросите подготовку патча у менеджера от Штурвала. При обновлении базы Trivy команда Штурвала готовит и передает патч с обновленной БДУ.

  1. В каталоге с инициализированным зеркалом создайте директорию shturval-patch, поместите в неё архив с патчем и выполните команду для применения патча:
stm patch apply