Совсем недавно разработчики, применяющие сканер образов Trivy, столкнулись с ошибкой TOOMANYREQUESTS. Она произошла из-за достижения максимального количества пользователей инструмента и предельной скорости по загрузкам из Container Registry (CR) ghcr.io.

Меня зовут Алиса Кириченко, я занимаюсь разработкой контейнерной платформы «Штурвал». Мы вовсю используем Trivy, но совсем не хотим зависеть от доступности сторонних сервисов. Иначе заказчики не поймут. Поэтому базы у нас свои, и обновляются они каждую ночь.

Если лень дальше читать, то вот, берите:

Trivy DB:

public.shturval.tech/trivy-db

Trivy Java DB:

public.shturval.tech/trivy-java-db

Детали — под катом.

Теперь несколько вводных

Сканер Trivy не содержит БДУ внутри исполняемого файла, при запуске сканирования она скачивается из CR. Если CR не указан, то применяется ghcr.io, на котором действуют ограничения, влияющие на пользователей.

В качестве work-around предлагается:

  • использовать сторонние CR, что может не подойти компаниям, которые чрезмерно обеспокоены вопросами безопасности своих ИТ-продуктов;

  • создавать «зеркала» репозиториев, что в свою очередь несет угрозу нарушения правил сервиса, предоставляемого GitHub, а также требует постоянного контроля за их корректным функционированием.

Что делаем мы

При разработке функционала сканирования образов контейнеров в нашей платформе мы хотели, чтобы БДУ была актуальной, обеспечивала возможность формирования из множества источников и предоставлялась как из нашего публичного registry, так и из локальных «зеркал» наших заказчиков.

База уязвимостей представляет собой набор записей, который содержит:

  • идентификатор уязвимости (CVE ID);

  • описание уязвимости;

  • компоненты, подверженные уязвимости;

  • уровень критичности;

  • дату обнаружения;

  • дату публикации патча;

  • эксплойты и методы атаки;

  • рекомендации по устранению;

  • ссылки и ресурсы.

База собирается в первую очередь из БДУ ФСТЭК (да, у нас большая часть CVE имеет описания на русском) и NIST, а дальше обогащается информацией из фидов производителей. Все это происходит автоматически в нашем CI, после чего публикуется в public.shturval.tech. Также доступна поддержка образов на основе отечественных операционных систем, но это тема для отдельного поста.

Как обойти проблему?

Вот как получить базу в Trivy локально или в пайплайне:

trivy image --download-db-only --db-repository  
public.shturval.tech/trivy-db

Для использования в Trivy Operator необходимо добавить параметры в Helm-чарт:

trivy:
  dbRegistry: public.shturval.tech
  dbRepository: trivy-db
  javaDbRegistry: "public.shturval.tech"
  javaDbRepository: "trivy-java-db"

Это бесплатно и безвозмездно, но если у вас есть идеи, что можно улучшить, будем рады обратной связи! Для этого создали чат в Telegram.

Комментарии (4)


  1. tataranovich
    01.11.2024 07:59

    Без технических деталей как вы создаёте trivy-db и trivy-java-db эта статья из разряда "как указать альтернативный реджистри для триви".


    1. ChislitelLab Автор
      01.11.2024 07:59

      Добрый день. Вы правы, в этой статье мы действительно делимся своими базами Trivy. Если интересно, как устроена Trivy, — мы можем рассказать дополнительно) Для оперативного общения поделились ссылкой на чат комьюнити.


      1. tataranovich
        01.11.2024 07:59

        Вы лучше ссылки прикрепите на ваши репозитории trivy-db и trivy-java-db из которых собираете базы.

        Как это делают Aqua Security:


        1. ChislitelLab Автор
          01.11.2024 07:59

          Ссылки дать не можем, к сожалению. Они в закрытом контуре, как и весь CI. Переносить сборку на GitHub сейчас не видим смысла, так как точно так же нас могут заблокировать в любой день.