In diesem Repository sind verschiedene Befehlszeilen -Tools und Python -Bibliotheken beheimatet, die bei den Herausforderungen der Software -Lieferkette helfen sollen:
sbomnix ist ein Dienstprogramm, das SBOMs mit NIX -Ableitung oder Out -Pfad erzeugt.nixgraph hilft bei der Abfrage und visualisiert Abhängigkeitsdiagramme für die NIX -Ableitung oder den Out -Pfad.nixmeta fasst Nixpkgs Meta-Attributes aus der angegebenen Nixpkgs-Version zusammen.vulnxscan ist ein Schwachstellenscanner, der die Verwendung von SBOMs bei der laufenden Sicherheits -Scans demonstriert.repology_cli und repology_cve sind Befehlszeilen -Clients von Repology.org.nix_outdated ist ein Dienstprogramm, das veraltete NIX -Abhängigkeiten für den ausgelieferten Pfad findet und die veralteten Pakete in Prioritätsreihenfolge auflistet, basierend darauf, wie viele andere Pakete vom angegebenen veralteten Paket abhängen.provenance ist ein Befehlszeilen -Tool, mit dem SLSA V1.0 -konforme Provenienzbescheinigungsdateien im JSON -Format für eine NIX -Flocken oder Ableitung generiert werden.Ein Beispiel für die Verwendung der in diesem Repository bereitgestellten Toolierung zur Automatisierung der täglichen Schwachstellenscans für ein Nix -Flake -Projekt siehe: GHAFSCAN.
Die Cyclonedx- und SPDX -SBOMs für jede Freisetzung von SBOMNIX -Tooling sind im Release -Assets erhältlich.
Alle Tools in diesem Repository stammen aus dem GHAF -Framework.
sbomnix benötigt gemeinsame NIX-Tools wie nix und nix-store . Es wird erwartet, dass diese Tools in $PATH sein.
sbomnix kann als Nix -Flake aus dem tiiuae/sbomnix -Repository ausgeführt werden:
# '--' signifies the end of argument list for `nix`.
# '--help' is the first argument to `sbomnix`
$ nix run github:tiiuae/sbomnix#sbomnix -- --helpoder von einem lokalen Repository:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix run . # sbomnix -- --help Siehe die vollständige Liste der unterstützten Flockenziele, indem Sie nix flake show ausführen.
Wenn Sie Nix Floaks aktivieren lassen, starten Sie eine Entwicklungsschale:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix develop Sie können auch nix-shell verwenden, um die Entwicklungsschale einzugeben:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix-shell Denken Sie daran, dass dies nicht die verschiedenen Einstiegspunktbinärdateien in Ihrem PATH direkt hinzugefügt wird. Sie werden während des Baus setuptools produziert.
Während Sie in der DevShell sind, können Sie verschiedene Befehlszeilen -Tools über die Einstiegspunktdateien direkt ausführen:
# 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 --helpDie Schließung eines Nix -Store -Pfades ist eine Liste aller abhängigen Speicherpfade, die rekursiv auf den Zielspfad verwiesen wird. Für ein Paket listet in der Schließung der Ableitung alle BuildTime -Abhängigkeiten auf. Beispielsweise umfassen die BuildTime -Abhängigkeiten für ein einfaches C -Programm Pakete zum Bootstrap GCC, STDENV, GLIBC, BASH usw. auf der Zielarchitektur. Sogar ein einfaches Hello-World C-Programm enthält in der Regel über 150 Pakete in der Liste der BuildTime-Abhängigkeiten. Es ist wichtig zu beachten, dass die Erzeugung von BuildTime -Abhängigkeiten in NIX nicht erstellt werden muss.
Als Referenz finden Sie einen Link zu Grafik aus einem Beispiel für das Hello-World C-Programm, das die ersten beiden Schichten von BuildTime-Abhängigkeiten enthält: Direkte Abhängigkeiten und die erste Ebene der transitiven Abhängigkeiten: C Hello-World Buildtime, Tiefe = 2.
Laufzeitabhängigkeiten sind eine Untergruppe von BuildTime -Abhängigkeiten. Nix bestimmt automatisch die Laufzeitabhängigkeiten, indem die generierten Ausgangspfade (dh Build Output) für die Speicherpfade der BuildTime -Abhängigkeiten gescannt werden. Dies bedeutet, dass Nix zuerst die Zielausgabe erstellen muss, bevor die Laufzeitabhängigkeiten ermittelt werden können. Im Folgenden finden Sie ein vollständiges Graphen von Laufzeitabhängigkeiten eines Beispiels für das Hello-World C-Programm:
Ungefähr zutreffend gilt die Tools in diesem Repository für Laufzeitabhängigkeiten. Dies bedeutet beispielsweise, dass sbomnix , sofern nicht anders angegeben, ein SBOM einschließlich Abhängigkeiten nur für Laufzeit, nixgraph -Graphen-Graph sowie vulnxscan und nix_outdated Scan Runtime-Abhängigkeiten ausgibt. Da NIX die Zielausgabe erstellen muss, um die Laufzeitabhängigkeiten zu bestimmen, werden alle Tools in diesem Repository auch die Zielausgabe als Teil des Aufrufs jedes Tools bei der Ermittlung der Laufzeitabhängigkeiten erstellt. Alle genannten Tools in diesem Repository unterstützen auch die Arbeit mit BuildTime -Abhängigkeiten anstelle von Laufzeitabhängigkeiten mit Hilfe des Befehlszeilenarguments der --buildtime . Wie bereits erwähnt, erfordert das Erstellen von BuildTime -Abhängigkeiten in NIX nicht das Erstellen des Ziels. In ähnlicher Weise müssen die Tools in diesem Repository, wenn --buildtime angegeben wird, nicht das angegebene Ziel erstellen.
Die Nutzungsbeispiele funktionieren sowohl für das gebaute Paket als auch für innerhalb des Devshell.
Beachten Sie im DevShell müssen Aufrufe bei sbomnix durch src/sbomnix/main.py (und für andere Einstiegspunkte ähnlich) ersetzt werden.
In den folgenden Beispielen verwenden wir das NIX -Paket wget als Beispielziel. Versuchen Sie: Um den Outpad wget auf Ihrem lokalen System zu drucken, versuchen Sie es mit:
$ nix eval -f ' <nixpkgs> ' ' wget.outPath '
" /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 " Standardmäßig scannt sbomnix das angegebene Ziel und generiert ein SBOM, einschließlich der Laufzeitabhängigkeiten. Hinweis: Ermittlung der Ziel -Laufzeitabhängigkeiten in NIX erfordert das Erstellen des Ziels.
# 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.csvHauptausgänge sind die SBOM JSON -Dateien sbom.cdx.json und sbom.spdx.json in Cyclonedx- und SPDX -Formaten.
Standardmäßig scannt sbomnix das angegebene Ziel für Laufzeitabhängigkeiten. Sie können SBOMNIX angeben, die BuildTime -Abhängigkeiten mithilfe des Arguments --buildtime zu bestimmen. Nachfolgend wird SBOM einschließlich BuildTime -Abhängigkeiten generiert. Hinweis: Im Gegensatz zu Laufzeitabhängigkeiten erfordert die Ermittlung der BuildTime -Abhängigkeiten nicht das Erstellen des Ziels.
$ sbomnix /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --buildtime sbomnix kann auch mit Ausgangspfaden verwendet werden (z. B. alles, was ein Ergebnis -Symlink erzeugt):
$ sbomnix /path/to/result sbomnix unterstützt auch Scan -Flockenreferenzen:
$ sbomnix github:NixOS/nixpkgs ? ref=nixos-unstable#wget --buildtime sbomnix findet die Paketabhängigkeiten mit nixgraph . Darüber hinaus kann nixgraph auch als eigenständiges Tool zur Visualisierung von Paketabhängigkeiten verwendet werden. Im Folgenden zeigen wir ein Beispiel für die Visualisierung von Paket wget -Laufzeitabhängigkeiten:
$ nixgraph /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --depth=2Dies gibt das Abhängigkeitsgraphen als Bild aus (mit Maxdepth 2):
Weitere Beispiele zum Abfragen und Visualisieren der Paketabhängigkeiten finden Sie unter: NixGraph.
Alle Pull -Anfragen, Fragen und Fehlerberichte sind willkommen. Um mit der Entwicklung zu beginnen, empfehlen wir die Verwendung von Nix Floaks Development Shell:
$ 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 Run make help , um die Liste der unterstützten Ziele zu sehen. Stellen Sie vor dem Versenden von Pull-Anfragen mindestens die make pre-push -Läufe ohne Fehler ab.
Um den Nix Devshell zu deaktivieren, laufen Sie in Ihrer Schale exit . Um andere Nix -Flake -Ziele zu sehen, führen Sie nix flake show aus.
Dieses Projekt ist unter der Lizenz apache-2.0 lizenziert-finden Sie in der Datei apache-2.0.txt für Details.
sbomnix verwendet den Nix Store Derivationsscanner (nix.py und dersivation.py) ursprünglich aus Vulnix.