該存儲庫是各種命令行工具和Python庫的所在地,旨在幫助軟件供應鏈挑戰:
sbomnix是一個實用程序,可生成SBOM,給定NIX推導或外路。nixgraph有助於查詢和可視化依賴圖圖或nix派生路徑。nixmeta總結了給定的Nixpkgs版本的Nixpkgs元屬性。vulnxscan是一種漏洞掃描儀,證明了SBOM在運行脆弱性掃描中的用法。repology_cli和repology_cve是命令行客戶copology.org。nix_outdated是一個實用程序,可以找到給定路徑的過時的NIX依賴項,根據優先順序列出了過時的軟件包,該軟件包基於多少其他軟件包取決於給定過時的軟件包。provenance是一種命令行工具,用於以JSON格式生成SLSA v1.0符合符合的出處證明文件。有關如何使用此存儲庫中提供的工具來自動化Nix Flake項目的每日脆弱性掃描的示例,請參見:GHAFSCAN。
釋放資產中都可以使用用於SBOMNIX工具的每個發行版的Cyclonedx和SPDX SBOM。
此存儲庫中的所有工具均來自GHAF框架。
sbomnix需要常見的NIX工具,例如nix和nix-store 。預計這些工具將處於$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構建過程中生產的。
當您進入Devshell時,您可以直接通過入口文件運行各種命令行工具:
# 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 Store路徑的閉合是目標存儲路徑所引用的所有相關商店路徑的列表。對於軟件包,其推導的關閉列出了所有構建時間依賴性。例如,對於簡單的C程序,構建時間依賴項包括針對目標體系結構上的bootstrap GCC,STDENV,GLIBC,BASH等的軟件包。即使是一個簡單的Hello-World C程序,也通常在其構建時間依賴性列表中包含150多個軟件包。重要的是要注意,在NIX中生成構建時間依賴性不需要構建目標。
作為參考,以下是示例中的圖形鏈接Hello-World C程序,其中包括前兩層構建時間依賴性:直接依賴關係和第一個及物依賴性的級別:C Hello-World buildtime,depth = 2。
運行時依賴關係是構建時間依賴性的子集。 NIX通過為構建時間依賴關係的存儲路徑掃描生成的輸出路徑(即構建輸出)來自動確定運行時依賴關係。這意味著在確定運行時依賴性之前,NIX需要先構建目標輸出。作為參考,下面是示例Hello-World C程序的完整運行時依賴關係圖:
默認情況下,在適用的情況下,此存儲庫中的工具假定運行時依賴關係。例如,這意味著,除非另有指定,否則sbomnix將輸出一個SBOM,包括僅運行時依賴項, nixgraph輸出運行時依賴關係圖以及vulnxscan和nix_outdated掃描運行時依賴關係。由於NIX需要構建目標輸出以確定運行時依賴關係,因此在確定運行時依賴性時,該存儲庫中的所有工具也將作為每個工具調用的一部分構建(力量實現)目標輸出。此存儲庫中的所有提到的工具還支持在--buildtime命令行參數的幫助下而不是運行時依賴關係而不是運行時依賴關係。如前所述,NIX中的生成構建時間依賴性不需要構建目標。同樣,當指定--buildtime時,本存儲庫中的工具無需構建給定的目標。
用法示例適用於已建造的軟件包以及Devshell內部。
請記住在Devshell內部,需要用src/sbomnix/main.py替換對sbomnix的呼叫(對於其他入口點類似)。
在下面的示例中,我們將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中的Cyclonedx和SPDX格式。
默認情況下, sbomnix掃描了運行時依賴性的給定目標。您可以告訴SBOMNIX使用--buildtime參數確定構建時間依賴關係。下面的示例生成SBOM,包括構建時間依賴關係。注意:與運行時依賴關係相反,確定構建時間依賴性不需要構建目標。
$ sbomnix /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --buildtime sbomnix也可以與輸出路徑一起使用(例如,產生結果符號鏈接的任何內容):
$ 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 Flakes開發外殼:
$ 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使用NIX Store衍生掃描儀(Nix.py和derivation.py)最初來自Vulnix。