このリポジトリには、ソフトウェアのサプライチェーンの課題を支援することを目的とするさまざまなコマンドラインツールとPythonライブラリがあります。
sbomnix 、nix派生またはパスの出力を与えられたSBOMを生成するユーティリティです。nixgraph 、nix派生またはパスの依存グラフを照会および視覚化するのに役立ちます。nixmeta 、指定されたNIXPKGSバージョンのNIXPKGSメタアトリビュートを要約しています。vulnxscanは、脆弱性スキャンを実行する際のSBOMの使用を示す脆弱性スキャナーです。repology_cliとrepology_cve 、repology.orgのコマンドラインクライアントです。nix_outdated 、与えられたパスの時代遅れのNIX依存関係を見つけるユーティリティであり、特定の古いパッケージに依存する他のパッケージの数に基づいて、時代遅れのパッケージを優先順序でリストします。provenance 、nixフレークまたは派生のためにJSON形式でSLSA v1.0準拠の出所証明ファイルを生成するコマンドラインツールです。このリポジトリで提供されるツールを使用して、NIXフレークプロジェクトの毎日の脆弱性スキャンを自動化する方法の例については、GHAFSCANを参照してください。
Sbomnixツールの各リリースのCyclonedXおよびSPDX SBOMSは、リリースアセットで利用できます。
このリポジトリのすべてのツールは、GHAFフレームワークから発生します。
sbomnixは、 nixやnix-storeなどの一般的なNixツールが必要です。これらのツールは$PATHにあると予想されます。
sbomnix tiiuae/sbomnixリポジトリからのnixフレークとして実行できます。
# '--' signifies the end of argument list for `nix`.
# '--help' is the first argument to `sbomnix`
$ nix run github:tiiuae/sbomnix#sbomnix -- --helpまたはローカルリポジトリから:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix run . # sbomnix -- --help nix flake showを実行して、サポートされているフレークターゲットの完全なリストをご覧ください。
nixフレークが有効になっている場合は、開発シェルを開始します。
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix develop nix-shellを使用して、開発シェルを入力することもできます。
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix-shellこれは、さまざまなエントリポイントバイナリをPATHに直接追加しないことに留意してください。それらは、SetUptoolsビルド中に生産されます。
開発中に、エントリポイントファイルを介してさまざまなコマンドラインツールを直接実行できます。
# sbomnix:
$ src/sbomnix/main.py --help
# nixgraph:
$ src/nixgraph/main.py --help
# nixmeta:
$ src/nixmeta/main.py --help
# vulnxscan:
$ src/vulnxscan/vulnxscan_cli.py --help
# repology_cli:
$ src/repology/repology_cli.py --help
# repology_cve:
$ src/repology/repology_cve.py --help
# nix_outdated:
$ src/nixupdate/nix_outdated.py --help
# provenance:
$ src/provenance/main.py --helpnixストアパスの閉鎖は、ターゲットストアパスで参照される、再帰的にすべての従属ストアパスのリストです。パッケージの場合、その派生の閉鎖はすべてのビルドタイム依存関係をリストします。例として、単純なCプログラムの場合、BuildTimeの依存関係には、ターゲットアーキテクチャのBootstrap GCC、STDENV、GLIBC、BASHなどのパッケージが含まれます。単純なHellowld Cプログラムでさえ、通常、BuildTime依存関係のリストに150を超えるパッケージが含まれています。 nixでビルドタイム依存関係を生成するには、ターゲットの構築は必要ないことに注意することが重要です。
参照のために、以下は、ビルドタイム依存関係の最初の2つのレイヤーを含むHelloWorld Cプログラムの例からのグラフへのリンクです:直接依存関係と推移的依存関係の最初のレベル:C Hello-World BuildTime、Depth = 2。
ランタイム依存関係は、ビルドタイム依存関係のサブセットです。 nixは、BuildTime依存関係のストアパスの生成された出力パス(つまりビルド出力)をスキャンすることにより、ランタイム依存関係を自動的に決定します。これは、ランタイム依存関係を決定する前に、NIXが最初にターゲット出力を構築する必要があることを意味します。参照のために、以下は例の完全なランタイム依存性グラフです。
デフォルトでは、該当する場合、このリポジトリのツールはランタイムの依存関係を想定しています。これは、たとえば、特に指定されていない限り、 sbomnixランタイムのみの依存関係、 nixgraphランタイム依存性グラフ、およびvulnxscanおよびnix_outdatedスキャンランタイム依存関係を含むSBOMを出力することを意味します。 NIXは、ランタイム依存関係を決定するためにターゲット出力を構築する必要があるため、このリポジトリのすべてのツールは、ランタイム依存関係を決定する際に各ツールの呼び出しの一部としてターゲット出力を構築(Force Realise)します。このリポジトリのすべての前述のツールは、 --buildtimeコマンドライン引数の助けを借りて、ランタイム依存関係ではなく、ビルドタイム依存関係を扱うこともサポートしています。前述のように、nixでビルドタイム依存関係を生成するには、ターゲットの構築は必要ありません。同様に、 --buildtimeが指定されている場合、このリポジトリのツールを指定されたターゲットを構築する必要はありません。
使用の例は、ビルドパッケージの両方で、およびDevshell内の両方で機能します。
DevShell内では、 sbomnixへの呼び出しをsrc/sbomnix/main.py (および他のエントリポイントについても同様)に置き換える必要があります。
以下の例では、Nixパッケージwgetターゲットの例として使用します。ローカルシステムにwget Out-Pathを印刷するには、次のことを試してください。
$ nix eval -f ' <nixpkgs> ' ' wget.outPath '
" /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 " デフォルトでは、 sbomnix指定されたターゲットをスキャンし、ランタイム依存関係を含むSBOMを生成します。通知:NIXのターゲットランタイム依存関係を決定するには、ターゲットを構築する必要があります。
# Target can be specified with flakeref too, e.g.:
# sbomnix .
# sbomnix github:tiiuae/sbomnix
# sbomnix nixpkgs#wget
# Ref: https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-flake.html#flake-references
$ sbomnix /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3
...
INFO Wrote: sbom.cdx.json
INFO Wrote: sbom.spdx.json
INFO Wrote: sbom.csv主な出力は、SBOM JSONファイルsbom.cdx.jsonおよびsbom.spdx.json in cyclonedxおよびspdx形式です。
デフォルトでは、 sbomnix 、ランタイム依存関係の指定されたターゲットをスキャンします。 Sbomnixに、 --buildtime引数を使用してビルドタイム依存関係を決定するように指示できます。以下の例では、BuildTime依存関係を含むSBOMを生成します。注意:ランタイムの依存関係とは対照的に、ビルドタイムの依存関係を決定するには、ターゲットの構築を必要としません。
$ sbomnix /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --buildtimesbomnix 、出力パスでも使用できます(例:結果symlinkを生成するもの):
$ sbomnix /path/to/result sbomnixスキャンフレーク参照もサポートしています。
$ sbomnix github:NixOS/nixpkgs ? ref=nixos-unstable#wget --buildtimesbomnix 、 nixgraphを使用してパッケージ依存関係を見つけます。さらに、 nixgraph 、パッケージの依存関係を視覚化するためのスタンドアロンツールとしても使用できます。以下に、パッケージwget視覚化する例を示します。
$ nixgraph /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --depth=2依存関係グラフを画像として出力します(MaxDepth 2を使用):
パッケージの依存関係のクエリと視覚化に関するその他の例については、nixgraphを参照してください。
プルリクエスト、質問、エラーレポートは大歓迎です。開発を開始するには、nixフレーク開発シェルを使用することをお勧めします。
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix/
# Optionally, install git hooks to check the git commit message
$ ./githooks/install-git-hooks.sh
$ nix developランメイクmake helpサポートされているメイクターゲットのリストを確認します。プルリクエストを送信する前に、少なくとも障害なしにmake pre-pushプランスが実行されるようにしてください。
nix devshellを無効にするには、シェルのexitを実行します。他のnixフレークターゲットを見るには、 nix flake showを実行します。
このプロジェクトは、Apache-2.0ライセンスに基づいてライセンスされています。詳細については、apache-2.0.txtファイルを参照してください。
sbomnix 、元々VulnixのNixストアDerivationスキャナー(nix.pyおよびderivation.py)を使用します。