Este repositorio es el hogar de varias herramientas de línea de comandos y bibliotecas de Python que tienen como objetivo ayudar con los desafíos de la cadena de suministro de software:
sbomnix es una utilidad que genera SBOM dada la derivación de nix o la ruta fuera.nixgraph ayuda a consultar y visualizar gráficos de dependencia para la derivación de Nix o la ruta de salida.nixmeta resume los metacributos de NIXPKGS de la versión NIXPKGS dada.vulnxscan es un escáner de vulnerabilidad que demuestra el uso de SBOMS en la ejecución de escaneos de vulnerabilidad.repology_cli y repology_cve son clientes de línea de comandos a Repology.org.nix_outdated es una utilidad que encuentra dependencias NIX obsoletas para la ruta dada, enumerando los paquetes obsoletos en orden prioritario en función de cuántos otros paquetes dependen del paquete obsoleto dado.provenance es una herramienta de línea de comandos para generar archivos de certificación de procedencia compatibles con SLSA V1.0 en formato JSON para cualquier escama ni derivación nix.Para obtener un ejemplo de cómo usar las herramientas proporcionadas en este repositorio para automatizar escaneos de vulnerabilidad diarios para un proyecto Nix Flake, ver: GhafScan.
Los SBOMS Cyclonedx y SPDX para cada lanzamiento de SBOMNIX Tooling están disponibles en los activos de lanzamiento.
Todas las herramientas en este repositorio se originan en GHAF Framework.
sbomnix requiere herramientas NIX comunes como nix y nix-store . Se espera que estas herramientas estén en $PATH
sbomnix se puede ejecutar como una escama Nix del repositorio tiiuae/sbomnix :
# '--' signifies the end of argument list for `nix`.
# '--help' is the first argument to `sbomnix`
$ nix run github:tiiuae/sbomnix#sbomnix -- --helpo de un repositorio local:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix run . # sbomnix -- --help Vea la lista completa de objetivos de escamas compatibles ejecutando nix flake show .
Si tiene habilitados Nix Flakes, inicie un shell de desarrollo:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix develop También puede usar nix-shell para ingresar al Shell de desarrollo:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix-shell Tenga en cuenta que esto no agrega los diversos binarios de Entrypoint a su PATH directamente. Se producen durante la construcción de SetupTools.
Mientras está en el Devshell, puede ejecutar varias herramientas de línea de comandos a través de los archivos EntryPoint directamente:
# 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 --helpEl cierre de una ruta de la tienda Nix es una lista de todas las rutas de la tienda dependientes, recursivamente, a la que se hace referencia la ruta de la tienda objetivo. Para un paquete, el cierre de su derivación enumera todas las dependencias de la hora de creación. Como ejemplo, para un programa C simple, las dependencias de la hora de creación incluyen paquetes para Bootstrap GCC, Stdenv, GLIBC, Bash, etc. en la arquitectura de destino. Incluso un programa simple de Hello-World C generalmente incluye más de 150 paquetes en su lista de dependencias de Tricktime. Es importante tener en cuenta que la generación de dependencias de TIPLETIME en NIX no requiere construir el objetivo.
Como referencia, el siguiente es un enlace al gráfico de un programa de ejemplo de Hello-World C que incluye las dos primeras capas de dependencias de TIPLETIME: dependencias directas y el primer nivel de dependencias transitivas: C Hello-World Pleddtime, profundidad = 2.
Las dependencias de tiempo de ejecución son un subconjunto de dependencias de trituración. NIX determina automáticamente las dependencias de tiempo de ejecución escaneando las rutas de salida generadas (es decir, la salida de compilación) para las rutas de almacenamiento de las dependencias de creación de TIPLETIME. Esto significa que NIX necesita construir primero la salida de destino, antes de que se puedan determinar las dependencias de tiempo de ejecución. Para referencia, a continuación se muestra un gráfico de dependencia de tiempo de ejecución completo de un ejemplo de programa Hello-World C:
Por defecto, cuando corresponda, las herramientas en este repositorio asumen dependencias de tiempo de ejecución. Esto significa, por ejemplo, que, a menos que se especifique lo contrario, sbomnix generará un SBOM que incluye dependencias de solo tiempo de ejecución, el gráfico de dependencia de tiempo de ejecución nixgraph y las dependencias de tiempo de ejecución vulnxscan y nix_outdated . Dado que NIX necesita construir la salida de destino para determinar las dependencias de tiempo de ejecución, todas las herramientas en este repositorio también construirán (reanican la fuerza) la salida de destino como parte de la invocación de cada herramienta al determinar las dependencias de tiempo de ejecución. Todas las herramientas mencionadas en este repositorio también admiten trabajar con las dependencias de plato de creación en lugar de dependencias de tiempo de ejecución con la ayuda del argumento de la línea de comandos --buildtime . Como se mencionó anteriormente, la generación de dependencias de TIEPTIME en NIX no requiere construir el objetivo. Del mismo modo, cuando se especifica --buildtime , las herramientas en este repositorio no necesitan construir el objetivo dado.
Los ejemplos de uso funcionan tanto para el paquete construido como para el interior de Devshell.
Tenga en cuenta dentro de la Devshell, las llamadas a sbomnix deben reemplazarse con src/sbomnix/main.py (y similar para otros puntos de entrada).
En los siguientes ejemplos, utilizamos el paquete NIX wget como un objetivo de ejemplo. Para imprimir en wget camino fuera de su sistema local, intente:
$ nix eval -f ' <nixpkgs> ' ' wget.outPath '
" /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 " Por defecto, sbomnix escanea el objetivo dado y genera un SBOM, incluidas las dependencias de tiempo de ejecución. Aviso: Determinar las dependencias de tiempo de ejecución de objetivos en NIX requiere construir el objetivo.
# 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.csvLas salidas principales son los archivos sbom json sbom.cdx.json y sbom.spdx.json en formatos Cyclonedx y SPDX.
Por defecto, sbomnix escanea el objetivo dado para las dependencias de tiempo de ejecución. Puede decirle a SBOMNIX que determine las dependencias de la hora de creación utilizando el argumento --buildtime . El ejemplo a continuación genera SBOM, incluidas las dependencias de la hora de compilación. AVISO: A diferencia de las dependencias de tiempo de ejecución, determinar las dependencias de la hora de compilación no requiere construir el objetivo.
$ sbomnix /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --buildtime sbomnix se puede usar con rutas de salida también (por ejemplo, cualquier cosa que produce un resumen de enlace simbólico):
$ sbomnix /path/to/result sbomnix también es compatible con las referencias de escamas de escaneo:
$ sbomnix github:NixOS/nixpkgs ? ref=nixos-unstable#wget --buildtime sbomnix encuentra las dependencias del paquete utilizando nixgraph . Además, nixgraph también se puede utilizar como una herramienta independiente para visualizar las dependencias de los paquetes. A continuación, mostramos un ejemplo de visualización de dependencias wget tiempo de ejecución del paquete:
$ nixgraph /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --depth=2Que genera el gráfico de dependencia como una imagen (con Maxdepth 2):
Para obtener más ejemplos sobre la consulta y la visualización de las dependencias del paquete, consulte: Nixgraph.
Cualquier solicitud de extracción, preguntas e informes de error es bienvenido. Para comenzar el desarrollo, recomendamos usar 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 Ejecutar make help para ver la lista de objetivos compatibles. Antes de enviar cualquier solicitud de extracción, asegúrese de que al menos la make pre-push sin fallas.
Para desactivar el Nix Devshell, ejecute exit en su caparazón. Para ver otros objetivos de Nix Flake, ejecute nix flake show .
Este proyecto tiene licencia bajo la licencia Apache-2.0; consulte el archivo Apache-2.0.txt para más detalles.
sbomnix utiliza el escáner de derivación de la tienda NIX (nix.py y derivation.py) originalmente de Vulnix.