
Сканирует Software Bill of Materials (SBOM) на наличие уязвимостей безопасности.

bomber — это приложение, которое сканирует SBOM на наличие уязвимостей безопасности.
Итак, вы запросили у поставщика Спецификацию программного обеспечения (SBOM) для одного из их продуктов с закрытым исходным кодом, и они предоставили её в JSON-файле... что дальше?
Первое, что вы захотите сделать, — это проверить, нет ли у какого-либо из компонентов, перечисленных в SBOM, уязвимостей безопасности и какие лицензии у этих компонентов. Это поможет вам понять, какой риск вы берёте на себя, используя продукт.
Поиск уязвимостей безопасности и информации о лицензиях для компонентов, указанных в SBOM, — это именно то, для чего предназначен bomber. bomber может читать любой формат CycloneDX на основе JSON или XML, а также SBOM в формате JSON SPDX или Syft и быстро сообщить вам о наличии уязвимостей.
Программное обеспечение может быть как с открытым, так и с закрытым исходным кодом. Вы можете рассматривать сторонние компоненты, которые найдёте на Github или в любом публичном репозитории, как открытый исходный код. Технически, программное обеспечение, которое вы создаёте внутри своей компании, тоже является открытым — оно не публичное, но ваши внутренние команды могут его видеть. Закрытый исходный код также может быть внутренним, но обычно это программное обеспечение, которое вы покупаете у внешних поставщиков.
Компании могут использовать инструменты SCA от таких поставщиков, как Github, Sonatype, Snyk и т.д., для сканирования любого открытого исходного кода и предоставления данных об уязвимостях — и даже для генерации SBOM в некоторых случаях. Однако они не могут (пока...) сканировать закрытое программное обеспечение, к которому у вас нет доступа. Здесь на помощь приходят SBOM и bomber. SBOM предоставляют состав программного обеспечения, к которому вы не имеете доступа, а bomber определяет, есть ли у какого-либо компонента в SBOM уязвимости.
Мы создали bomber для сканирования закрытых SBOM, которые вы получаете от поставщиков. Он также может сканировать открытые SBOM, и технически вы можете использовать bomber как инструмент SCA с открытым исходным кодом, если захотите.
На сегодняшний день существует множество форматов SBOM. bomber поддерживает следующие:

bomber поддерживает несколько источников информации об уязвимостях. Мы называем их провайдерами. В настоящее время bomber использует OSV в качестве провайдера по умолчанию, но вы также можете использовать Базу данных уязвимостей Github, Sonatype OSS Index или Snyk.
Обратите внимание, что на данный момент OSV бесплатен и не требует учётных данных, Sonatype OSS Index бесплатен, но требует регистрации и получения токена, а поддержка Snyk требует лицензии Snyk.
В дополнение к данным, которые bomber собирает от провайдеров, он также обогащает данные об уязвимостях дополнительной информацией, такой как вероятности эксплуатации.
Имейте в виду, что каждый провайдер поддерживает разные экосистемы, поэтому, если вы не видите уязвимостей у одного, попробуйте другой. Экосистема — это просто менеджер пакетов или тип пакета. Примеры: rpm, npm, gems и т.д. Важно понимать, что разные провайдеры могут сообщать о разных уязвимостях. Если сомневаетесь, посмотрите на несколько из них.
Если bomber не находит уязвимостей, это не значит, что их нет. Это означает только то, что используемый провайдер не обнаружил их или не поддерживает данную экосистему. Некоторые провайдеры возвращают уязвимости без информации о серьёзности. В этом случае уровень серьёзности будет указан как "UNDEFINED".
Документация провайдеров для bomber доступна:
Вы можете использовать Homebrew для установки bomber с помощью следующей команды:
brew tap devops-kung-fu/homebrew-tap
brew install devops-kung-fu/homebrew-tap/bomber
Если у вас нет Homebrew, вы всё равно можете скачать последний релиз (например, bomber_0.4.1_darwin_all.tar.gz), извлечь файлы из архива и использовать бинарный файл bomber.
При желании вы можете переместить бинарный файл bomber в каталог /usr/local/bin или в любое место в вашем PATH.
Чтобы установить bomber, скачайте последний релиз для вашей платформы и установите локально. Например, установка bomber на Ubuntu:
dpkg -i bomber_0.5.0_linux_arm64.deb
Вы можете сканировать как целую папку с SBOM, так и отдельный SBOM с помощью bomber. bomber не важно, если в одной папке находятся несколько форматов. Он всё рассортирует.
Обратите внимание, что вывод по умолчанию для bomber — это STDOUT. Возможность вывода в HTML или JSON описана далее в этом документе.
# Использование OSV (провайдер по умолчанию), который не требует учётных данных
bomber scan cyclonedx.sbom.json
# Использование провайдера, требующего учётных данных (ossindex)
bomber scan --provider=xxx --username=xxx --token=xxx [sbom.json]
Если провайдер находит уязвимости, вы увидите вывод, похожий на следующий:

Если провайдер не возвращает уязвимостей, вы увидите сообщение о том, что уязвимости не найдены.
ПРИМЕЧАНИЕ: То, что провайдер не нашёл уязвимостей, не означает, что их нет. Пожалуйста, попробуйте других провайдеров, которых поддерживает bomber.
Это полезно, когда вы получаете несколько SBOM от поставщика для одного и того же продукта. Или, возможно, вы хотите узнать, какие уязвимости есть во всей вашей организации. Сканирование папки найдёт все компоненты, удалит дубликаты и затем просканирует их на уязвимости.
# сканирование папки с SBOM (следующая команда просканирует папку с именем "sboms" в текущей папке)
bomber scan --provider=xxx --username=xxx --token=xxx ./sboms
Результат будет похож на результат сканирования одного SBOM.
bomber выводит данные в трёх полезных форматах. По умолчанию вывод отображается в командной строке. Для расширенного отчёта вы можете вывести данные в HTML, используя флаг --output=html. Для вывода в JSON используйте флаг --output=json. Для вывода в нескольких форматах используйте спецификацию вывода через запятую: --output=html,stdout,json.
Если вы хотите получить читаемый отчёт с подробной информацией об уязвимостях, вы можете использовать флаг --output, чтобы сохранить отчёт в HTML-файл.
Пример команды:
bomber scan bad-bom.json --output=html
Это сохранит файл в вашей текущей папке в формате "YYYY-MM-DD-HH-MM-SS-bomber-results.html". Если открыть этот файл в веб-браузере, вы увидите что-то вроде следующего:

bomber может выводить данные об уязвимостях в формате JSON с помощью флага --output. Вывод по умолчанию — в STDOUT. В JSON-выводе содержится гораздо больше информации, чем отображается в терминале. Вы сможете увидеть описание пакета и его назначение, имя уязвимости, краткое описание уязвимости и многое другое.

Пример команды:
bomber scan bad-bom.json --output=json > filename.json
bomber также поддерживает вывод в формате Markdown. Он очень похож на HTML-вывод, но передаёт стилизацию средству рендеринга Markdown, например GitHub. Вывод сохраняется в файл в формате "YYYY-MM-DD-HH-MM-SS-bomber-results.md".
Пример команды:
bomber scan bad-bom.json --output=md
При необходимости вы можете использовать флаг --ignore-file, чтобы загрузить список CVE, которые следует игнорировать в выводе уязвимостей. Этот список должен быть в определённом формате, где каждый игнорируемый CVE указывается на отдельной строке, как показано ниже:
CVE-2022-31163
CVE-2022-23520
Пример файла bomber.ignore находится здесь
Чтобы использовать файл bomber.ignore, используйте следующий синтаксис:
bomber --ignore-file=bomber.ignore scan bom.json
Вы можете установить уровень серьёзности с помощью флага --severity, чтобы возвращать только уязвимости определённой серьёзности. Например, если установить --severity=moderate, будут возвращены только уязвимости с уровнем серьёзности MODERATE и выше.
Например, следующая команда вернёт только уязвимости высокого и критического уровня.
bomber --severity=high scan bom.json
bomber имеет возможность обогащать данные об уязвимостях, полученные от Провайдеров. Первый реализованный нами "обогатитель" — для EPSS
ПРИМЕЧАНИЕ: Оценка EPSS больше не используется по умолчанию в bomber 0.5.0 и выше. Чтобы показывать оценки EPSS, обязательно используйте флаг --enrich=epss.
EPSS (Exploit Prediction Scoring System) — это система, которая прогнозирует вероятность эксплуатации уязвимости. EPSS часто используется для выявления уязвимостей с высоким риском, которые нужно устранять в первую очередь.
EPSS использует процент для вероятности. Например, если вы видите 94, это означает, что вероятность эксплуатации данной уязвимости составляет 94%. И логично, что уязвимость с таким высоким показателем, как 94, заслуживает немедленного внимания, в то время как уязвимость с показателем, скажем, 20, должна иметь более низкий приоритет.
При желании вы можете установить две переменные окружения для хранения учётных данных, чтобы не вводить их в командной строке. Ознакомьтесь с информацией о Переменных окружения далее в этом README.
Если вы используете bomber в конвейерах CI/CD, вы можете выполнить всё одной командой с Syft для генерации и сканирования SBOM на уязвимости. Для этого можно сделать что-то вроде следующей команды:
# Убедитесь, что в конце команды стоит символ -. Это заставляет bomber читать из STDIN
syft packages . -o cyclonedx-json | bomber scan --provider ossindex --output json -
Эта команда создаёт SBOM, передаёт его в bomber и генерирует результаты в формате JSON.
Если вы не хотите каждый раз вводить учётные данные, вы можете добавить следующее в ваш .bashrc или .bash_profile
export BOMBER_PROVIDER_USERNAME={{ваше имя пользователя OSS Index}}
export BOMBER_PROVIDER_TOKEN={{ваш API-токен OSS Index}}
Использование флага --exitcode приведёт к возврату кода выхода, соответствующего наивысшей серьёзности найденной уязвимости. Без этого флага ожидаемый код выхода — 0 для успеха или 1 при возникновении ошибки.
При отсутствии ошибок bomber вернёт следующие значения при использовании --exitcode:
| Severity | Return Code |
|---|---|
| UNSPECIFIED (Это статус, когда провайдер предоставляет что-то странное или не даёт информации) | 10 |
| LOW | 11 |
| MODERATE |
bomber теперь содержит экспериментальную функцию, которая обогащает описание уязвимостей в HTML-выводе. Эта функция берёт уязвимость и меняет её описание на более понятное для нетехнического пользователя.
ПРИМЕЧАНИЕ: Эта функция находится на ранней стадии альфа-версии. Она чрезвычайно медленная, и вывод не очень хорошо отформатирован.
Чтобы использовать эту функцию, вам нужно предоставить ключ API OpenAI. Вы можете передать этот ключ в CLI с помощью флага --openai-api-key={{ваш ключ API OpenAI}} или добавить переменную окружения:
export OPENAI_API_KEY={{ваш ключ API OpenAI}}
После установки ключа API OpenAI вы можете использовать флаг вывода следующим образом:
bomber scan --output ai [sbom.json]
Если вы хотите опробовать bomber, в папке test вы найдёте подборку тестовых SBOM.
--license. Если вам нужна информация о лицензии, обязательно запрашивайте её в SBOM.bomber должен отправлять по одному PURL за раз, чтобы получить уязвимости, поэтому для большого SBOM это займёт некоторое время. Мы будем следить за ситуацией.Если вы хотите внести свой вклад в развитие bomber, пожалуйста, обратитесь к файлу CONTRIBUTING.md в этом репозитории. Пожалуйста, прочитайте файл CODE_OF_CONDUCT.md перед тем, как вносить вклад.
bomber использует Syft для генерации Спецификации программного обеспечения каждый раз, когда разработчик фиксирует код в этом репозитории (пока используется Hookz и он инициализирован в рабочем каталоге). Дополнительная информация о CycloneDX доступна здесь.
Текущая SBOM CycloneDX для bomber доступна здесь.
Спасибо спонсорам и сторонникам bomber

Большое спасибо нашим друзьям из ZERO за логотип bomber.
Спасибо Sonatype за предоставление такого замечательного инструмента, как Sonatype OSS Index.
Огромное спасибо нашим друзьям и коллегам-участникам bomber из Snyk за создание провайдера и реализацию обработки SBOM из STDIN. Вы, ребята, супер.
Описание EPSS взято у команды Nucleus. Спасибо!
| 12 |
| HIGH | 13 |
| CRITICAL | 14 |