
Автономное однобинарное веб-приложение, которое принимает SBOM в форматах CycloneDX, SPDX и syft, запускает ансамбль сканеров CVE, обогащает результаты данными EPSS, CISA-KEV и nuclei и экспортирует в SARIF, CSAF и PDF.
Однобинарное офлайн-веб-приложение для исследования файлов SBOM (Software Bill of Materials). Загрузите SBOM или импортируйте папку с ними, проанализируйте каждый с помощью ансамбля независимых инструментов, просмотрите нормализованные результаты в одном локальном интерфейсе и экспортируйте результат в восьми форматах. Без установки, без доступа к сети, без телеметрии.
NOASSERTION поставщика и
поля, которое просто отсутствует.Домашняя страница (/) перечисляет все хранимые SBOM и остаётся удобной по мере
роста корпуса:
log4j или
openssl находит каждый SBOM, содержащий этот компонент. Запрос
ограничен по длине и разбирается снисходительно.Каждый инструмент необязателен во время выполнения и обнаруживается в PATH (переопределите бинарник
через SBA_TOOL_<NAME>_BIN). Находки никогда не зависят от какого-либо одного инструмента.
| Инструмент | Роль |
|---|---|
| syft | Нормализатор SBOM / конвертер CycloneDX 1.6 |
| grype | Сопоставление CVE |
| trivy | Сканер уязвимостей |
| osv-scanner | Поиск в базе OSV |
| bomber | Независимый ансамблевый сопоставитель |
| bomdrift | Дрейф цепочки поставок / тайпсквоттинг (SARIF) |
| inspektr | Сканер уязвимостей SBOM (JSON) |
| shieldbom | Офлайн-сканер CVE для встраиваемых/IoT (SARIF) |
| provenant | Лицензии / авторские права / происхождение (ScanCode) |
Первые восемь инструментов дают находки об уязвимостях в форме CVE;
provenant отличается — он сообщает о происхождении лицензий, авторских прав, правообладателей и авторов,
которые аудитор сохраняет и отображает как собственную форму находки (раздел
"Licence & provenance" для каждого запуска, включаемый в экспорт Markdown), а не
отбрасывает их.
Сканеры не могут читать каждый формат напрямую: bomber потребляет только
CycloneDX ≤ 1.6, и ни один из сканеров не читает SPDX 3.0 JSON-LD. В обоих случаях
аудитор сначала нормализует входные данные к CycloneDX через syft convert, и
пропускает с документированной причиной, когда syft недоступен, вместо того чтобы позволить инструменту
сообщить о нуле пакетов. База данных уязвимостей grype обновляется один раз за запуск
(вне основного потока), так что обычная устарелость — это свежее сканирование, а не неудачное.
После анализа каждая находка в форме CVE обогащается тремя реальными сигналами, полученными из сервиса vulnlookup (по умолчанию https://vulnlookup.ndaal.eu):
Каждая находка показывает свои значения KEV, Nuclei, EPSS и Source, где Source ссылается обратно на запись vulnlookup, а находки упорядочены от наиболее срочных: записи с известной эксплуатацией (KEV) идут первыми, затем те, у которых выше процентиль EPSS; находки без обогащения сохраняют порядок, в котором их создал анализатор. Обогащение переносится в каждый формат экспорта — SARIF 2.1 / 2.2, Markdown, ODT, DOCX, PDF и CSAF 2.1 / 2.2, где CSAF несёт EPSS как нативную метрику и записывает CISA-KEV и nuclei как примечания — и форма экспорта теперь по умолчанию отмечает каждый формат.
Настройте это в разделе Settings → Vulnerability enrichment: переключатель вкл/выкл (включён по умолчанию) и до трёх источников vulnlookup, каждый с базовым URL, TCP-портом и QUIC-портом (пустой порт трактуется как 443). Источники 1 и 2 по умолчанию используют публичный https://vulnlookup.ndaal.eu на порту 443; источник 3 по умолчанию использует loopback https://127.0.0.1 на собственных портах этого хоста 8680 (TCP) / 8681 (QUIC), так что совместно размещённый vulnlookup работает как резервный вариант из коробки. Источники пробуются по порядку — первый является основным, остальные — резервными.
#![forbid(unsafe_code)]; политика
линтера запрещает паникующие сокращения, непроверенную арифметику и непроверенную
индексацию в production-коде.--encryption-key-file).--tls-key отклоняет ключ PKCS#1 RSA (политика no-RSA)
и, в Unix, файл ключа, доступный для чтения группе или всем.GET /export/download отдаёт только
имена с распознанным расширением экспорта или хеш-сайдкара, так что неправильно
настроенный каталог экспорта не может выдать системный файл.cargo audit чист.Установите опубликованный релиз из crates.io — cargo install собирает его
из исходников, cargo binstall загружает предсобранный бинарник из релиза
GitLab:
cargo install sbom-auditor # build from source
cargo binstall sbom-auditor # prebuilt GitLab-release binary
Или соберите этот checkout напрямую (требуется недавний стабильный toolchain Rust):
cargo build --release
./target/release/sbom-auditor
Затем откройте https://127.0.0.1:8680 (браузер один раз предупредит о самоподписанном сертификате). Верхняя навигация содержит Home, Upload, Import, Export, Components, Tools, Settings, за которыми следуют переключатель тёмной/светлой темы, меню языков и меню информации справа. Интерфейс поставляется на 49 языках — английском, немецком и французском плюс все официальные европейские языки, норвежский нюношк, три саамских языка, официальных в Норвегии (северносаамский, луле-саамский и южносаамский), и три азиатских дополнения — китайский (中文), хинди (हिन्दी) и урду (اردو, справа налево) — выбираемые из меню языков (и запоминаемые для каждого браузера). Раздел "Supported GUI languages" ниже содержит полную разбивку.
--port <PORT> Listen port (default 8680, env SBA_PORT)
--bind <ADDR> Bind address (default 127.0.0.1, env SBA_BIND)
--data-dir <DIR> Data directory (SQLite store + stored SBOMs)
--db <PATH> Database path (default <data-dir>/auditor.db)
--encryption-key-file <F> Enable storage encryption with this 32-byte key
--tls-cert <F> --tls-key <F> Operator certificate instead of self-signed
--allow-non-loopback Permit binding a non-loopback address
--check-update Check gitlab.com for a newer release, then exit
--self-update Download + verify + install the latest release
--help Full option list
Порты: 8680 обслуживает API и веб-интерфейс по TLS 1.3 (HTTP/1.1 + HTTP/2); 8681 зарезервирован для будущего слушателя QUIC / HTTP-3 (пока не реализован).
Веб-интерфейс поставляется на 49 языках. Английский, немецкий и французский — поддерживаемый, созданный людьми набор, закреплённый в начале переключателя языков; все остальные языки следуют в алфавитном порядке по своему английскому названию.
Три азиатских языка присоединились в этом цикле: китайский / 中文 (мандаринский,
упрощённый), хинди / हिन्दी и урду / اردو. Урду — справа налево — приложение
отображает <html dir="rtl">, пока он выбран.
Каждый язык помимо закреплённых трёх машинно-переведён и ожидает проверки носителем; любая строка, отсутствующая в переводе, автоматически откатывается к английскому. Встроенный переключатель на странице перечисляет каждый язык по его собственному эндониму и является авторитетным списком — обращайтесь к нему, а не к перечислению здесь.
Это относится только к веб-интерфейсу. Генерируемые отчёты (SARIF, CSAF и экспорт PDF) и HTTP API остаются только на английском.
cargo nextest run # unit + integration suite
cargo test --doc # doctests
Дополнительные стенды: loom-harness/ (модели перестановок параллелизма),
test/bruno/ (коллекция API), test/playwright/ (браузерный E2E),
test/example-corpus/ (API + GUI загрузка→анализ→экспорт по встроенному
корпусу SBOM example/) и loadtest/ (сценарии нагрузки Goose).
tests/scripts/test_examples_upload_via_api.sh (с родственным .bats)
загружает каждый SBOM из example/ против запущенного экземпляра и проверяет, что каждый
даёт SARIF, CSAF и PDF через потоковый POST /export/download
ZIP; TLS проверяется для не-loopback хостов и пропускается для самоподписанного
сертификата localhost, а --base-url нацелен на любой экземпляр (например,
https://sbom.ndaal.eu/). Набор
test/magnitude/ (Magnitude, *.mag.ts) добавляет управляемые ИИ визуальные проверки
порядка навигационной панели и значений экспорта по умолчанию плюс Start download; он
дополняет детерминированные тесты, требует LLM для запуска и не является частью
блокирующего шлюза CI. Каталог example/
содержит 651 публичный тестовый SBOM (Git LFS); см.
example/PROVENANCE.md. См.
documentation/structure.md для карты модулей
и потока запросов.
Код лицензирован под Apache-2.0. Встроенные ресурсы UI несут собственные лицензии
(Bootstrap MIT, htmx 0BSD, Roboto OFL-1.1); см. пофайловые сайдкары .license
в src/static/.