Гид по технологиям

Grype — быстрый сканер уязвимостей для контейнеров и файловых систем

• 8 min read • Безопасность • Обновлено 23 Nov 2025
Grype — сканер уязвимостей для образов и FS
Grype — сканер уязвимостей для образов и FS

Логотип Grype — сканер уязвимостей

Grype — легковесный CLI-инструмент для поиска уязвимостей в образах контейнеров и на файловых системах. Он использует локальную базу уязвимостей, поддерживает SBOM от Syft и подходит для интеграции в CI. Используйте Grype для быстрого обнаружения известных CVE и автоматизации проверки зависимостей.

Быстрые ссылки

  • Установка Grype
  • Базовое сканирование
  • Сканирование файловых систем
  • Фильтрация уязвимостей
  • Игнорирование уязвимостей
  • Работа с SBOM
  • Настройка форматов вывода
  • База уязвимостей
  • Дополнительно: стратегии и чек-листы
  • Краткое резюме

Введение

Grype — это проект с открытым исходным кодом для сканирования уязвимостей в образах контейнеров и директориях файловой системы. Разработан Anchore и поставляется в виде автономного бинарного файла. Его удобно использовать для быстрой оценки рисков в артефактах перед деплоем.

Причины появления уязвимостей в вашем софте обычно следующие: устаревшие пакеты ОС, уязвимые зависимости языков программирования и небезопасные базовые образы. Регулярное сканирование позволяет выявлять проблемы раньше, чем ими воспользуются злоумышленники.

Установка Grype

Grype распространяется как предварительно скомпилированный бинарный файл в форматах deb, rpm, исходники для Linux и для macOS. Последнюю версию можно скачать с GitHub и установить через менеджер пакетов или просто скопировать бинарник в каталог из PATH.

Для автоматической установки доступен инсталляционный скрипт:

curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin

Проверьте установку, запустив команду grype. Вы увидите доступную справку по командам и опциям.

Важно: первая загрузка базы уязвимостей произойдет при первом запуске и может занять время и трафик.

Базовое сканирование

В простейшем виде Grype принимает один аргумент — образ контейнера или путь к файловой системе, который нужно просканировать. Для сканирования образа укажите его тег в реестре. Grype использует доступные Docker-учётные данные для загрузки образов из Docker Hub и приватных реестров.

Примеры:

grype alpine:latest

Для сканирования экспортированного архива образа Docker:

grype saved-image.tar

При первом запуске Grype скачает локальную базу уязвимостей. В настоящее время её размер составляет примерно 90 МБ. После загрузки базы Grype скачает образ, проиндексирует программное обеспечение внутри него и сопоставит найденные пакеты с известными CVE.

Скриншот результата сканирования контейнера в Grype

Результат отображается в табличном виде в терминале. Каждая запись включает идентификатор CVE, имя уязвимого пакета и уровень серьёзности. Если проблема исправлена в более поздней версии, в колонке FIXED-IN будет указана версия патча. Это помогает понять, можно ли устранить проблему простым обновлением через пакетный менеджер.

Grype поддерживает пакеты основных дистрибутивов Linux, а также экосистемы зависимостей: Ruby Gems, npm и yarn, Python Eggs, Wheels и Poetry, Java-модули в форматах JAR, WAR, EAR, JPI и HPI.

Сканирование файловых систем

Grype умеет сканировать локальные пути на файловой системе. Это удобно для обнаружения уязвимостей в репозиториях исходного кода до сборки образа. Для этого укажите схему dir:

grype dir:/example-dir

Grype рекурсивно просканирует совместимые файлы из указанной директории, индексирует их и сверит зависимости с базой уязвимостей.

Скриншот сканирования файловой системы в Grype

Сканирование файловой системы возвращает те же типы уязвимостей, что и сканирование образов. При большом дереве директорий процесс может занять несколько минут.

Фильтрация уязвимостей

Grype поддерживает параметры фильтрации для сужения отчёта до релевантных записей:

  • --only-fixed — показывать только уязвимости, которые уже исправлены в более поздних релизах пакета.
  • --fail-on high — завершать выполнение с кодом ошибки, если найдена уязвимость уровня high. Вместо high можно использовать critical, high, medium или low.

Эти параметры полезны для CI: например, задать порог, при котором сборка будет провалена.

Игнорирование уязвимостей

Если вы хотите скрыть ложные срабатывания или известные, но принятые риски, создайте конфигурационный файл Grype в формате YAML и добавьте правила игнорирования.

Пример простого файла .grype.yaml в рабочем каталоге, игнорирующего конкретный CVE:

ignore:
  - vulnerability: CVE-2021-12345

Пример файла, игнорирующего все проблемы для пакетов типа npm:

ignore:
  - package:
      type: npm

Файлы конфигурации поддерживаются по пути в рабочем каталоге .grype.yaml или .grype/config.yaml. Также поддерживается глобальный файл ~/.grype.yaml. При запуске Grype объединит локальную конфигурацию с глобальной.

Если уязвимость проигнорирована, она не влияет на код возврата Grype. В JSON-отчёте такие совпадения будут перемещены в поле ignoredMatches, а табличный вывод в терминале полностью исключит их. Рекомендуется документировать причины игнорирования, чтобы команда понимала оправдания принятого риска.

Важно: игнорирование должно сопровождаться оценкой риска и сроками переоценки.

Работа с SBOM

Grype совместим с SBOM (bill of materials), сгенерированными Syft, другим проектом Anchore. Syft индексирует образ и создаёт список зависимостей, который затем можно использовать для более детального анализа.

Создание SBOM в формате JSON с помощью Syft:

syft alpine:latest -o json > alpine-sbom.json

Запуск Grype по SBOM:

grype sbom:/alpine-sbom.json

При таком подходе вы анализируете именно те компоненты, которые были зафиксированы в SBOM. Это удобно, если вы уже проводили аудит зависимостей и хотите отслеживать появление новых проблем без повторного индексирования образа.

Настройка форматов вывода

Grype предоставляет четыре основных формата вывода, которые можно выбрать через флаг -o:

  • table — человекочитаемая табличная форма по умолчанию.
  • json — подробный JSON-отчёт, подходящий для хранения, сравнения и CI-артефактов.
  • cyclonedx — совместимый с CycloneDX XML-формат для интеграции с инструментами SBOM.
  • template — гибкий формат на основе Go-шаблона, позволяющий формировать произвольные отчёты.

Пример использования шаблона из файла:

grype alpine:latest -o output-template.tmpl

Файл шаблона должен использовать синтаксис Go templates и переменные, которые предоставляет Grype. На их основе можно строить HTML-страницы, Markdown-отчёты, CSV или нестандартные JSON-структуры.

База уязвимостей

База уязвимостей Grype хранит сведения обо всех известных уязвимостях, которые использует сканнер. После загрузки кэш будет переиспользован до тех пор, пока не появится обновление.

Иногда потребуется принудительно скачать базу, например для подготовки air-gapped сервера. Для этого используйте команды:

grype db check

grype db update

Если вы хотите отключить автоматические проверки обновлений базы, установите переменную окружения в вашей оболочке:

export GRYPE_DB_AUTO_UPDATE=false

После загрузки базы сканирование работает офлайн.

Когда Grype не подходит

  • Вам нужна централизованная политика с расширяемыми плагинами и сложными правилами приёма — для этого больше подходит Anchore Engine.
  • Нужна глубокая динамическая проверка приложения на runtime или SCA в коде — Grype ориентирован на статический поиск известных уязвимостей по базе, а не на динамическое тестирование.
  • Требуется сканирование бинарных артефактов нестандартных форматов, которые не поддерживаются Grype.

Альтернативы и где их применять

  • Anchore Engine — для централизованной политики безопасности и интеграции в корпоративные деплои.
  • Trivy — тоже легковесный сканер, часто выбирают за простоту и скорость. Подходит, если важна минимальная конфигурация.
  • Snyk, Dependabot, WhiteSource — коммерческие решения с фокусом на разработку и автоматическое исправление зависимостей.

Выбор зависит от требований: скорость, точность, интеграция в CI, централизованное управление политиками и поддерживаемые форматы.

Ментальные модели и эвристики

  • «Патч или компенсирующий контроль» — если уязвимость можно закрыть обновлением, делайте это; иначе применяйте компенсирующие меры (ограничение доступа, WAF, изоляция).
  • «SBOM как контракт» — используйте SBOM для фиксации состава артефакта и отслеживайте изменения между релизами с помощью Grype.
  • «Fail fast in CI» — конфигурируйте пороги уровня серьёзности для автоматического фейла, чтобы не деплоить критические уязвимости.

Факт-бокс

  • Форматы пакетов: apt/rpm, npm, yarn, RubyGems, Python Wheels/Poetry, Java (JAR/WAR/EAR/JPI/HPI)
  • Примерный размер базы при первом скачивании: ~90 МБ
  • Основные форматы вывода: table, json, cyclonedx, template
  • Поддержка SBOM: Syft JSON

Роли и чек-листы

DevOps

  • Интегрировать Grype в pipeline сборки и релиза.
  • Настроить --fail-on по порогу, согласованному с политикой безопасности.
  • Обеспечить кэширование базы в CI-артефакт для ускорения.

Разработчик

  • Запускать локальные сканирования перед PR.
  • Документировать и обсуждать игнорируемые CVE в PR.
  • Обновлять зависимости и проверять, решается ли CVE простым апдейтом.

Команда безопасности

  • Определять пороги severity для CI.
  • Проводить регулярные ревью игнорируемых уязвимостей.
  • Следить за изменениями в базе уязвимостей и за политиками коррекции.

Пошаговый SOP для CI

  1. На этапе сборки образа запускать syft для генерации SBOM в JSON.
  2. Запускать Grype по SBOM: grype sbom:/path/to/sbom.json -o json > grype-report.json.
  3. Разбирать grype-report.json и применять правила: если есть critical или high и политика требует фейла, завершать сборку с ошибкой.
  4. Сохранять JSON-отчёт как артефакт сборки для последующего анализа.
  5. Внести автоматическое уведомление в канал оповещений в случае критических находок.

Пример простого шага в CI для fail-on:

grype image:tag --fail-on high -o json > report.json || exit 1

Критерии приёмки

  • Все критические уязвимости устранены или имеют документированное и одобренное отклонение.
  • Для high-уязвимостей определён план исправления в течение оговорённых SLA.
  • SBOM генерируется автоматически при сборке и используется для проверки.
  • Отчёты Grype сохраняются как артефакты сборки минимум за 30 дней.

Тестовые случаи и приёмка

  • Сканирование образа с известной уязвимостью возвращает CVE в отчёте.
  • Параметр --only-fixed фильтрует только фиксы.
  • Конфигурация игнорирования в .grype.yaml исключает CVE из табличного вывода.
  • Использование SBOM и прямое сканирование образа даёт согласованные результаты по ключевым пакетам.

Шаблоны команд и быстрый перечень

  • Сканирование образа: grype alpine:latest
  • Сканирование архива: grype saved-image.tar
  • Сканирование директории: grype dir:/path/to/project
  • SBOM-скан: grype sbom:/path/to/sbom.json
  • Обновление базы: grype db update
  • Использование шаблона вывода: grype image:tag -o report.tmpl

План реагирования и отката

  1. Идентифицировать CVE и оценить воздействие на сервисы.
  2. Если доступен патч, подготовить релиз с обновлением зависимости.
  3. Если патч отсутствует или риск принят, задокументировать исключение с датой пересмотра.
  4. Развернуть исправление в canary, мониторить метрики и логи.
  5. При проблемах с исправлением — откатить релиз и применить временные меры (firewall, ограничение соединений).

Когда доверять результатам и когда дополнительно проверять

Grype надёжно сопоставляет зависимости с известными CVE, но бывают ложные срабатывания и несовпадения версий из-за упаковки. Всегда проверяйте контекст: реально ли скомпилированный артефакт использует уязвимый код, или пакет тестовый/подменённый. Для критичных находок полезно провести ручной аудит или динамическое тестирование.

Краткое резюме

Grype — удобный инструмент для быстрой автоматической проверки образов контейнеров и файловых систем на известные уязвимости. Он прост в установке, поддерживает SBOM от Syft и хорошо подходит для интеграции в CI/CD. Для централизованных политик и расширяемой автоматизации рассмотрите Anchore Engine, а для очень быстрых проверок — Trivy.

Важно: внедряйте сканирование как часть CI и имейте процесс обработки найденных проблем, включая документирование игнорируемых уязвимостей и план их переоценки.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

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