Поиск по сайту:

Как найти уязвимости в контейнерах и файлах с помощью Grype


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

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

Установка Грайпа

Grype распространяется в виде предварительно скомпилированного бинарного файла в форматах deb, rpm, исходного кода для Linux и Mac. Вы можете получить последнюю версию с GitHub и установить ее с помощью диспетчера пакетов вашей системы или скопировав двоичный файл в папку на вашем пути. В качестве альтернативы используйте скрипт установки для автоматизации процесса:

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

Результаты отображаются в таблице в вашем терминале. Каждая уязвимость включает свой идентификатор 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 будет искать совместимые файлы, вложенные в указанный корень каталога. Каждый найденный файл будет проиндексирован и проверен на наличие уязвимостей.

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

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

Поддерживаются два флага фильтрации, чтобы ограничить отчет только интересующими вас уязвимостями или вариантами решения:

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

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

Уязвимости можно игнорировать, чтобы скрыть ложные срабатывания или проблемы, которые вы решили не решать, возможно, потому, что они не имеют отношения к использованию вами пакета.

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

ignore:
  - vulnerability: CVE-2021-12345

Поддерживаются и другие поля, например этот вариант для игнорирования всех проблем, связанных с пакетами NPM:

ignore:
  - package:
      type: npm

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

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

Использование SBOM

Grype может работать с SBOM, созданными Syft, еще одним проектом Anchore. Syft индексирует ваши образы контейнеров, чтобы создать список содержащихся в них зависимостей.

Используйте Syft для создания SBOM для вашего изображения в формате JSON:

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

Затем запустите сканирование Grype с помощью SBOM:

grype sbom:/alpine-sbom.json

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

Настройка вывода жалоб

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

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

Средство форматирования template принимает шаблон Go, который будет использоваться для отображения выходных данных отчета. Чтобы использовать этот форматтер, не указывайте его по имени — вместо этого передайте путь к файлу, содержащему ваш шаблон Go:

grype alpine:latest -o output-template.tmpl

Шаблон должен использовать синтаксис шаблонов Go для ссылки на переменные, предоставляемые Grype. Вы можете создать любой формат файла, который вам нужен, например HTML-страницу, файл Markdown или пользовательскую структуру JSON. В документации Grype есть пример создания CSV-файла из доступных переменных.

База данных уязвимостей

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

В некоторых ситуациях может потребоваться принудительная загрузка базы данных. Это может быть связано с тем, что вы настраиваете изолированный сервер перед запуском сканирования. Используйте команды grype db check и grype db update, чтобы проверить и загрузить более новую версию базы данных.

Как только база данных будет доступна, сканирование будет работать, пока ваша система находится в автономном режиме. Вы можете отключить автоматические проверки обновлений базы данных Grype, установив для переменной среды GRYPE_DB_AUTO_UPDATE значение false в вашей оболочке.

Краткое содержание

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

Если вам интересно, что выбрать, ценность Anchore заключается в его расширяемости и расширенных параметрах конфигурации. С Anchore Engine вы можете определить свои собственные наборы политик на основе шлюзов, триггеров и действий. Это позволяет точно адаптировать сканирование к конкретной среде. Grype обеспечивает более удобную работу, когда вам просто нужен список известных уязвимостей в вашем образе.

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




Все права защищены. © Linux-Console.net • 2019-2024