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

Syft: генерирование SBOM для контейнерных образов

• 6 min read • DevOps • Обновлено 23 Nov 2025
Syft: SBOM для контейнерных образов
Syft: SBOM для контейнерных образов

Иллюстрация маскота проекта Syft

Кратко

Syft — это утилита командной строки для извлечения списка пакетов и генерации SBOM (Software Bill of Materials) для Docker и OCI образов. Она помогает понять состав файловой системы образа, интегрируется в CI и упрощает дальнейшую проверку уязвимостей.

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

  • Установка Syft
  • Сканирование образа
  • Поддерживаемые типы пакетов
  • Изменение формата вывода
  • Использование других источников образов
  • Лучшие практики и интеграция
  • Заключение

Что такое SBOM в одно предложение

SBOM — это каталог зависимостей и компонентов, которые формируют файловую систему образа; полезен для аудита и управления безопасностью поставок ПО.

Установка Syft

Скрипт установки скачивает последний бинарник Syft и добавляет его в PATH:

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

Пользователи macOS могут установить Syft через Homebrew, добавив репозиторий anchore/syft и установив пакет syft.

Скриншот интерфейса Syft при генерации отчёта SBOM

После установки выполните syft в терминале, чтобы увидеть доступные команды. Для генерации автодополнения оболочки выполните syft completion.

Проверьте установленную версию командой syft version. Регулярно просматривайте страницу тегов на GitHub для выхода новых релизов и запускайте скрипт установки повторно для обновления.

Сканирование образа

Основная команда для получения SBOM — это syft packages. Передайте тег образа:

syft packages alpine:latest

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

Скриншот списка пакетов, полученных Syft

Для минимальных базовых образов (например, Alpine) список пакетов будет коротким. Для больших образов он может содержать сотни или тысячи строк. Удобно комбинировать вывод Syft с утилитами Unix (grep, awk) для фильтрации:

syft packages example-image:latest | grep example-package-to-find

Практические советы по сканированию

  • Если образ приватный, убедитесь, что ваши Docker-креденшалы настроены в ~/.docker/config.json.
  • При частых сканированиях в CI храните результаты SBOM в артефактах билда для аудита.
  • Используйте флаг -o для вывода в машиночитаемые форматы и последующей автоматической обработки.

Поддерживаемые типы пакетов

Syft распознаёт популярные форматы пакетов и языков, в том числе:

  • OS-пакеты: APK (Alpine), DEB (Debian/Ubuntu), RPM (Fedora/RHEL/CentOS)
  • Определение дистрибутивов Linux (Alpine, CentOS, Debian, RHEL и др.)
  • Go модули
  • Java: JAR, EAR, WAR
  • NPM и Yarn
  • Python Wheels и Eggs
  • Ruby Gems и Bundler

Даже если язык приложения не покрыт, вы всё равно получите OS-уровневый список пакетов, который часто покрывает большинство векторов риска.

Изменение формата вывода

По умолчанию Syft выводит таблицу (table). Есть несколько удобных альтернатив:

  • text — человекочитаемый список с полями Version и Type.
  • json — структурированный JSON для автоматизации.
  • cyclonedx — CycloneDX в XML для стандартных процессов поставки.
  • spdx и spdx-json — форматы SPDX в тег-значение и JSON.

Скриншот выбора формата вывода в Syft

Пример сохранения в JSON:

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

Стандартизованные форматы (CycloneDX, SPDX) упрощают интеграцию с инструментами экосистемы и CI/CD.

Syft легко интегрируется с Grype — инструментом для поиска уязвимостей по файловой системе образа. Экспортируйте SBOM в JSON и передайте его в Grype:

syft packages example-image:latest -o json > sbom.json  
grype sbom:./sbom.json

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

Использование других источников образов

Syft поддерживает не только публичные реестры Docker. Можно сканировать любое OCI-совместимое изображение, тег в реестре или сохранённый tar-архив:

docker image save my-image:latest > my-image.tar  
syft packages ./my-image.tar

Syft использует креденшалы из ~/.docker/config.json для доступа в приватные реестры. Пример структуры файла (шаблон):

{
  "auths": {
    "registry.example.com": {
      "username": "",
      "password": ""
    }
  }
}

Кроме образов, Syft может создать SBOM для произвольного пути в файловой системе. Пример индексирования каталога /usr/bin:

syft packages dir:/usr/bin

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

Лучшие практики и интеграция

  • Автоматизируйте генерацию SBOM как шаг в CI после сборки образа. Сохраняйте артефакт для аудитов.
  • Храните SBOM рядом с образом в реестре (если реестр поддерживает артефакты) или в системе хранения артефактов.
  • Используйте машиночитаемые форматы (json, cyclonedx, spdx) для последующей автоматической проверки уязвимостей.
  • Периодически пересматривайте базовые образы и минимизируйте набор пакетов. Меньшая поверхность — меньший риск.

Интеграция в CI простая методика

  1. Собрать образ и промаркировать его уникальным тегом.
  2. Запустить syft packages -o cyclonedx > sbom.xml.
  3. Загрузить SBOM в хранилище артефактов или приложить к билду.
  4. Прогнать grype sbom:./sbom.json для проверки уязвимостей.
  5. На основании результатов вручную или автоматически принимать решение: откат, обновление пакета, изменение образа.

Когда Syft не подойдёт

  • Если вам нужна детальная динамическая трассировка исполнения (runtime tracing), Syft не предоставляет эту телеметрию — он анализирует файловую систему образа статически.
  • Для обнаружения встраиваемых эксплойтов на этапе выполнения понадобятся runtime‑решения (например, EDR или специализированные runtime-сканеры).
  • Если приложение использует нестандартные упаковочные решения или скомпилированные единицы без метаданных, Syft может не распознать составные зависимости.

Альтернативы и сопутствующие инструменты

  • Grype — для поиска уязвимостей по SBOM/файловой системе.
  • Trivy — другой популярный сканер уязвимостей и SBOM-инструмент.
  • Anchore Engine — более крупная платформа для сканирования и политики безопасности.

Выбор зависит от потребностей: только SBOM — Syft; SBOM + сканирование уязвимостей — Syft + Grype или Trivy; политика и оркестрация — Anchore Engine.

Контрольные списки по ролям

DevOps

  • Автоматизировать генерацию SBOM в CI.
  • Хранить SBOM как артефакт билда.
  • Периодически обновлять базовые образы.

Разработчик

  • Минимизировать зависимости.
  • Указывать версии и фиксировать lock-файлы (например, package-lock.json).
  • Проводить локальный анализ SBOM при значительных изменениях.

Инженер по безопасности

  • Интегрировать SBOM в процессы оценки уязвимостей.
  • Проводить регулярные ревью SBOM и составлять матрицы риска.
  • Определять политику допустимых/запрещённых пакетов.

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

  • CI генерирует SBOM при каждом билде образа.
  • SBOM сохраняется в артефактах и прикрепляется к релизу.
  • Для критичных образов выполнено сканирование уязвимостей и отмечены действия по исправлению.
  • Количество пакетов уменьшено до необходимого минимума или обосновано документом.

Шпаргалка команд

  • Быстрый список пакетов:
syft packages 
  • JSON вывод:
syft packages  -o json > sbom.json
  • CycloneDX:
syft packages  -o cyclonedx > sbom.xml
  • Статическая директория:
syft packages dir:/path/to/dir

Факты и ограничения

  • Syft — это один бинарник, не требует агента во время сканирования.
  • Он статически анализирует файловую систему образа — это даёт быстрый и предсказуемый список компонентов.
  • Syft не выполняет анализ исходного кода или динамическое исполнение.

Конфиденциальность и заметки по GDPR

SBOM содержит информацию о компонентах и версиях пакетов — это технические метаданные, обычно не содержащие персональных данных. Тем не менее, при публикации SBOM следите за тем, чтобы в нем не попали чувствительные данные (секреты, приватные ключи, внутренние адреса), которые могли бы оказаться в файловой системе образа по ошибке.

Итог

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

Важно: SBOM — это стартовая точка. После получения SBOM следует анализировать результаты, устранять лишние зависимости и периодически повторять сканирование.


Краткий план внедрения

  1. Установить Syft на CI-агентах или Runner’ах.
  2. Добавить шаг генерации SBOM после сборки образа.
  3. Сохранять SBOM как артефакт и запускать Grype для проверки уязвимостей.
  4. Включить регулярные ревью и плейбук действий при обнаружении критичных уязвимостей.
Поделиться: 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 быстро