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

Кратко
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 в терминале, чтобы увидеть доступные команды. Для генерации автодополнения оболочки выполните syft completion.
Проверьте установленную версию командой syft version. Регулярно просматривайте страницу тегов на GitHub для выхода новых релизов и запускайте скрипт установки повторно для обновления.
Сканирование образа
Основная команда для получения SBOM — это syft packages. Передайте тег образа:
syft packages alpine:latestSyft скачает образ (если нужно), просканирует содержимое и выведет каталог обнаруженных пакетов. В терминале результат по умолчанию отображается в виде таблицы: имя пакета, версия и тип.

Для минимальных базовых образов (например, 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.

Пример сохранения в 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.jsonGrype сравнит список пакетов с собственной базой уязвимостей и подсветит проблемные компоненты.
Использование других источников образов
Syft поддерживает не только публичные реестры Docker. Можно сканировать любое OCI-совместимое изображение, тег в реестре или сохранённый tar-архив:
docker image save my-image:latest > my-image.tar
syft packages ./my-image.tarSyft использует креденшалы из ~/.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 простая методика
- Собрать образ и промаркировать его уникальным тегом.
- Запустить
syft packages.-o cyclonedx > sbom.xml - Загрузить SBOM в хранилище артефактов или приложить к билду.
- Прогнать
grype sbom:./sbom.jsonдля проверки уязвимостей. - На основании результатов вручную или автоматически принимать решение: откат, обновление пакета, изменение образа.
Когда 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 следует анализировать результаты, устранять лишние зависимости и периодически повторять сканирование.
Краткий план внедрения
- Установить Syft на CI-агентах или Runner’ах.
- Добавить шаг генерации SBOM после сборки образа.
- Сохранять SBOM как артефакт и запускать Grype для проверки уязвимостей.
- Включить регулярные ревью и плейбук действий при обнаружении критичных уязвимостей.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента