
CycloneDX、SPDX、syftのSBOMを取り込み、CVEスキャナのアンサンブルを実行し、検出結果をEPSS、CISA-KEV、nucleiで強化し、SARIF、CSAF、PDFをエクスポートするオフラインのシングルバイナリWebアプリ。
SBOM (Software Bill of Materials) ファイルを調査するための、単一バイナリ・オフラインの Web アプリケーションです。SBOM をアップロードするか、それらを含むフォルダーをインポートし、独立したツール群のアンサンブルでそれぞれを分析し、正規化された検出結果を 1 つのローカル UI で確認し、結果を 8 つの形式でエクスポートできます。インストール不要、ネットワークアクセス不要、テレメトリなし。
NOASSERTION と、単に欠落しているフィールドを区別します。ホームページ (/) は保存されているすべての SBOM を一覧表示し、コーパスが増えても使い続けられます:
log4j や openssl といったクエリで、そのコンポーネントを含むすべての SBOM を見つけられます。クエリは長さが制限され、寛容に解析されます。各ツールは実行時にオプションであり、PATH 上で検出されます (バイナリは SBA_TOOL_<NAME>_BIN で上書き可能)。検出結果が単一のツールに依存することはありません。
最初の 8 つのツールは CVE 形式の脆弱性検出結果を提供します。provenant は異なり、ライセンス、著作権、権利者、著作者の来歴を報告します。監査ツールはこれを独自の検出結果の形として保存・表示し (実行ごとの「Licence & provenance」セクション、Markdown エクスポートにも含まれる)、破棄しません。
スキャナーはすべての形式を直接読めるわけではありません。bomber は CycloneDX ≤ 1.6 のみを消費し、どのスキャナーも SPDX 3.0 JSON-LD を読みません。どちらの場合も、監査ツールはまず syft convert を介して入力を CycloneDX に正規化し、syft が利用できない場合は、ツールにゼロパッケージを報告させるのではなく、文書化された理由とともにスキップします。grype の脆弱性データベースは実行ごとに 1 回 (帯域外で) 更新されるため、日常的な古さは失敗したスキャンではなく、新鮮なスキャンとなります。
分析後、各 CVE 形式の検出結果は、vulnlookup サービス (デフォルト https://vulnlookup.ndaal.eu) から取得した 3 つの実際のシグナルでエンリッチされます:
各検出結果は 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 で設定します: オン/オフのトグル (デフォルトで有効) と、最大 3 つの vulnlookup ソース。それぞれにベース URL、TCP ポート、QUIC ポートがあります (空のポートは 443 として扱われます)。ソース 1 と 2 はデフォルトで公開の https://vulnlookup.ndaal.eu のポート 443、ソース 3 はデフォルトでループバック https://127.0.0.1 のこのホスト自身の 8680 (TCP) / 8681 (QUIC) ポートです。そのため、同一場所に配置された vulnlookup はそのまま動作するフォールバックとなります。ソースは順に試行されます — 最初がプライマリで、他はフォールバックです。
#![forbid(unsafe_code)] を適用。lint ポリシーは本番コードでのパニックを起こすショートカット、未チェックの算術、未チェックのインデックス参照を拒否します。--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
または、このチェックアウトを直接ビルドします (最近の安定版 Rust ツールチェーンが必要です):
cargo build --release
./target/release/sbom-auditor
その後、https://127.0.0.1:8680 を開きます (ブラウザーは自己署名証明書について一度警告します)。上部ナビゲーションは Home、Upload、Import、Export、Components、Tools、Settings の順に並び、右側にダーク/ライトテーマの切り替え、言語メニュー、情報メニューが続きます。インターフェースは 49 言語で提供されます — 英語、Deutsch、Français に加え、すべてのヨーロッパの公用語、ノルウェー語ニーノシュク、ノルウェーで公用の 3 つのサーミ語 (北サーミ語、ルレサーミ語、南サーミ語)、そして 3 つのアジア言語 — 中国語 (中文)、ヒンディー語 (हिन्दी)、ウルドゥー語 (اردو、右から左) — が言語メニューから選択できます (ブラウザーごとに記憶されます)。以下の「対応 GUI 言語」セクションに完全な内訳があります。
--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 は TLS 1.3 (HTTP/1.1 + HTTP/2) 経由で API と Web UI を提供します。8681 は将来の QUIC / HTTP-3 リスナー用に予約されています (まだ実装されていません)。
Web UI は 49 言語で提供されます。英語、Deutsch、Français は保守され人間が執筆したセットであり、言語切り替えの先頭に固定されています。その他のすべての言語は、その英語名のアルファベット順に続きます。
今回のサイクルで 3 つのアジア言語が加わりました: 中国語 / 中文 (標準中国語、簡体字)、ヒンディー語 / हिन्दी、ウルドゥー語 / اردو。ウルドゥー語は右から左であり、選択されている間はアプリケーションが <html dir="rtl"> をレンダリングします。
固定された 3 言語以外のすべての言語は機械翻訳であり、ネイティブによるレビュー待ちです。翻訳に欠けている文字列は自動的に英語にフォールバックします。ページ内の切り替えは各言語をそのネイティブ名の内名で一覧表示し、これが権威あるリストです — ここでの列挙ではなく、それを参照してください。
これは Web UI にのみ適用されます。生成されるレポート (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/ (同梱の example/ SBOM コーパスに対する API + GUI のアップロード→分析→エクスポート)、loadtest/ (Goose 負荷シナリオ)。tests/scripts/test_examples_upload_via_api.sh (姉妹の .bats 付き) は、実行中のインスタンスに対してすべての example/ SBOM をアップロードし、それぞれがストリーミングされた POST /export/download ZIP を介して SARIF、CSAF、PDF を生成することを検証します。TLS は非ループバックホストでは検証され、localhost の自己署名証明書ではスキップされ、--base-url は任意のインスタンス (たとえば https://sbom.ndaal.eu/) を対象にできます。test/magnitude/ スイート (Magnitude、*.mag.ts) は、ナビバーの順序とエクスポートのデフォルトおよび Start download の AI 駆動の視覚チェックを追加します。これは決定論的テストを補完するもので、実行には LLM が必要で、ブロッキング CI ゲートの一部ではありません。 ディレクトリには 651 の公開テスト SBOM が含まれています (Git LFS)。 を参照してください。モジュールマップとリクエストフローについては を参照してください。
コードは Apache-2.0 でライセンスされています。同梱の UI アセットはそれぞれ独自のライセンスを持ちます (Bootstrap MIT、htmx 0BSD、Roboto OFL-1.1)。src/static/ 配下のファイルごとの .license サイドカーを参照してください。
| ツール | 役割 |
|---|
| syft | SBOM 正規化 / CycloneDX 1.6 コンバーター |
| grype | CVE マッチャー |
| trivy | 脆弱性スキャナー |
| osv-scanner | OSV データベース検索 |
| bomber | 独立したアンサンブルマッチャー |
| bomdrift | サプライチェーンドリフト / タイポスクワット (SARIF) |
| inspektr | SBOM 脆弱性スキャナー (JSON) |
| shieldbom | オフライン組み込み/IoT CVE スキャナー (SARIF) |
| provenant | ライセンス / 著作権 / 来歴 (ScanCode) |
example/