Ce référentiel abrite divers outils de ligne de commande et des bibliothèques Python qui visent à aider à résoudre les défis de la chaîne d'approvisionnement des logiciels:
sbomnix est un utilitaire qui génère SBOMS compte tenu de la dérivation NIX ou du chemin OUT.nixgraph aide à interroger et à visualiser les graphiques de dépendance pour la dérivation NIX ou le chemin OUT.nixmeta résume les méta-attributes Nixpkgs de la version NIXPKGS donnée.vulnxscan est un scanner de vulnérabilité démontrant l'utilisation de SBOMS dans les analyses de vulnérabilité en cours.repology_cli et repology_cve sont des clients de ligne de commandement à Repology.org.nix_outdated est un utilitaire qui trouve des dépendances NIX obsolètes pour le chemin donné, répertoriant les packages obsolètes dans l'ordre de priorité en fonction du nombre d'autres packages dépendent du package obsolète donné.provenance est un outil de ligne de commande pour générer des fichiers d'attestation de provenance conformes SLSA v1.0 au format JSON pour tout flocon ou dérivation NIX.Pour un exemple de la façon d'utiliser l'outillage fourni dans ce référentiel pour automatiser les analyses de vulnérabilité quotidiennes pour un projet Flake Nix, voir: GHAFSCAN.
Les SBOM CyclonEdx et SPDX pour chaque version d'outils SBOMNIX sont disponibles dans les actifs de version.
Tous les outils de ce référentiel proviennent du cadre GHAF.
sbomnix nécessite des outils NIX communs comme nix et nix-store . Ces outils devraient être dans $PATH .
sbomnix peut être exécuté comme un flocon Nix du référentiel tiiuae/sbomnix :
# '--' signifies the end of argument list for `nix`.
# '--help' is the first argument to `sbomnix`
$ nix run github:tiiuae/sbomnix#sbomnix -- --helpou à partir d'un référentiel local:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix run . # sbomnix -- --help Voir la liste complète des cibles de flocons prises en charge en exécutant nix flake show .
Si vous avez des flocons Nix activés, démarrez un shell de développement:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix develop Vous pouvez également utiliser nix-shell pour entrer dans le shell de développement:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix-shell Gardez à l'esprit que cela n'ajoute pas directement les différents binaires de point d'entrée à votre PATH . Ils sont produits lors de la construction Setuptools.
Pendant que vous êtes dans le DevShell, vous pouvez exécuter divers outils de ligne de commande via les fichiers de point d'entrée:
# 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 --helpLa fermeture d'un chemin de magasin NIX est une liste de tous les chemins de magasin dépendants, récursivement, référencés par le chemin du magasin cible. Pour un package, la fermeture de sa dérivation répertorie toutes les dépendances de buildtime. Par exemple, pour un programme C simple, les dépendances Buildtime incluent des packages pour bootstrap gcc, stdenv, glibc, bash, etc. sur l'architecture cible. Même un simple programme Hello-World C comprend généralement plus de 150 packages dans sa liste de dépendances Buildtime. Il est important de noter que la génération de dépendances de construction dans NIX ne nécessite pas de construire la cible.
Pour référence, ce qui suit est un lien vers le graphique à partir d'un exemple de programme Hello-World C qui inclut les deux premières couches de dépendances de construction: dépendances directes et premier niveau de dépendances transitives: C Hello-World Buildtime, Depth = 2.
Les dépendances d'exécution sont un sous-ensemble de dépendances de buildtime. NIX détermine automatiquement les dépendances d'exécution en scannant les chemins de sortie générés (IE Build Sortie) pour les chemins de magasin des dépendances de Buildtime. Cela signifie que Nix doit d'abord construire la sortie cible, avant que les dépendances d'exécution puissent être déterminées. Pour référence, ci-dessous est un graphique de dépendance d'exécution complet d'un exemple de programme Hello-World C:
Par défaut, le cas échéant, les outils de ce référentiel supposent des dépendances d'exécution. Cela signifie, par exemple, que, sauf indication contraire, sbomnix publiera un SBOM, y compris les dépendances d'exécution uniquement, nixgraph sort le graphique de dépendance d'exécution et les dépendances d'exécution de Scan vulnxscan et nix_outdated . Étant donné que Nix doit créer la sortie cible pour déterminer les dépendances d'exécution, tous les outils de ce référentiel créeront également (réaliseront la force) la sortie cible dans le cadre de l'invocation de chaque outil lors de la détermination des dépendances d'exécution. Tous les outils mentionnés de ce référentiel prennent également en charge le travail avec les dépendances Buildtime au lieu de dépendances d'exécution à l'aide de l'argument de la ligne de commande --buildtime . Comme mentionné précédemment, la génération de dépendances de construction dans NIX ne nécessite pas de construire la cible. De même, lorsque --buildtime est spécifié, les outils de ce référentiel n'ont pas besoin d'être construits la cible donnée.
Les exemples d'utilisation fonctionnent à la fois pour le package construit, ainsi que à l'intérieur du Devshell.
Gardez à l'esprit à l'intérieur du Devshell, les appels à sbomnix doivent être remplacés par src/sbomnix/main.py (et similaire pour les autres points d'entrée).
Dans les exemples ci-dessous, nous utilisons le package NIX wget comme exemple cible. Pour imprimer wget Out Path sur votre système local, essayez:
$ nix eval -f ' <nixpkgs> ' ' wget.outPath '
" /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 " Par défaut, sbomnix scanne la cible donnée et génère un SBOM comprenant les dépendances d'exécution. AVIS: La détermination des dépendances d'exécution cible dans NIX nécessite la construction de la cible.
# 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.csvLes sorties principales sont les fichiers sbom json sbom.cdx.json et sbom.spdx.json dans les formats cyclonedx et spdx.
Par défaut, sbomnix scanne la cible donnée pour les dépendances d'exécution. Vous pouvez dire à SBOMNIX de déterminer les dépendances Buildtime à l'aide de l'argument --buildtime . L'exemple ci-dessous génère SBOM, y compris les dépendances de buildtime. AVIS: Par opposition aux dépendances d'exécution, la détermination des dépendances de Buildtime ne nécessite pas de construire l'objectif.
$ sbomnix /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --buildtime sbomnix peut également être utilisé avec des chemins de sortie (par exemple tout ce qui produit un lien symbolique de résultat):
$ sbomnix /path/to/result sbomnix prend également en charge les références de flocon de balayage:
$ sbomnix github:NixOS/nixpkgs ? ref=nixos-unstable#wget --buildtime sbomnix trouve les dépendances du package à l'aide de nixgraph . De plus, nixgraph peut également être utilisé comme un outil autonome pour visualiser les dépendances des packages. Ci-dessous, nous montrons un exemple de visualisation wget dépendances d'exécution du package:
$ nixgraph /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --depth=2Qui publie le graphique de dépendance en tant qu'image (avec MaxDepth 2):
Pour plus d'exemples sur l'interrogation et la visualisation des dépendances du package, voir: Nixgraph.
Toutes les demandes de traction, questions et rapports d'erreur sont les bienvenues. Pour démarrer le développement, nous vous recommandons d'utiliser Nix Flakes 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 Exécutez make help pour voir la liste des cibles prises en charge. Avant d'envoyer des demandes de traction, assurez-vous au moins les exécutions make pre-push sans échecs.
Pour désactiver le Nix Devshell, exécutez exit dans votre shell. Pour voir d'autres cibles Flake Nix, exécutez nix flake show .
Ce projet est concédé sous licence Apache-2.0 - voir le fichier apache-2.0.txt pour plus de détails.
sbomnix utilise le scanner de dérivation du magasin NIX (Nix.py et Derivation.py) originaire de Vulnix.