Совсем недавно разработчики, применяющие сканер образов 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.