该存储库是各种命令行工具和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。