Este repositório é o lar de várias ferramentas de linha de comando e bibliotecas Python que visam ajudar nos desafios da cadeia de suprimentos de software:
sbomnix é um utilitário que gera SBOMs dada a derivação do NIX ou o caminho de saída.nixgraph ajuda a consultar e visualizar gráficos de dependência para derivação de nix ou caminho de saída.nixmeta resume as meta-atributos nixpkgs da versão Nixpkgs fornecida.vulnxscan é um scanner de vulnerabilidade que demonstra o uso de SBOMs na execução de varreduras de vulnerabilidades.repology_cli e repology_cve são clientes de linha de comando para repology.org.nix_outdated é um utilitário que encontra dependências desatualizadas do NIX para o caminho fornecido, listando os pacotes desatualizados em ordem prioritária com base em quantos outros pacotes dependem do pacote desatualizado.provenance é uma ferramenta de linha de comando para gerar arquivos de atestado de proveniência compatíveis com SLSA v1.0 no formato JSON para qualquer flago ou derivação nix.Para um exemplo de como usar as ferramentas fornecidas neste repositório para automatizar verificações diárias de vulnerabilidades para um projeto Nix Flake, consulte: GhafScan.
O CyclonedX e o SPDX SBOMS para cada liberação de ferramentas SBOMNIX está disponível nos ativos de liberação.
Todas as ferramentas deste repositório se originam da estrutura GHAF.
sbomnix requer ferramentas comuns de nix como nix e nix-store . Espera -se que essas ferramentas estejam em $PATH .
sbomnix pode ser executado como um flago NIX do repositório tiiuae/sbomnix :
# '--' signifies the end of argument list for `nix`.
# '--help' is the first argument to `sbomnix`
$ nix run github:tiiuae/sbomnix#sbomnix -- --helpou de um repositório local:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix run . # sbomnix -- --help Veja a lista completa de alvos de flocos suportados executando nix flake show .
Se você tiver flocos de nix ativados, inicie um shell de desenvolvimento:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix develop Você também pode usar nix-shell para entrar no Shell Development:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix-shell Lembre -se de que isso não adiciona os vários binários do ponto de entrada diretamente ao seu PATH . Eles são produzidos durante a construção do SetupTools.
Enquanto estiver no devhell, você pode executar várias ferramentas de linha de comando através dos arquivos de entrada de entrada diretamente:
# 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 --helpO fechamento de um caminho da loja Nix é uma lista de todos os caminhos de loja dependentes, recursivamente, referenciados pelo caminho da loja de destino. Para um pacote, o fechamento de sua derivação lista todas as dependências do BuildTime. Como exemplo, para um programa C simples, as dependências do BuildTime incluem pacotes para Bootstrap GCC, STDENV, GLIBC, BASH, etc. Na arquitetura de destino. Mesmo um simples programa de Hello-World C normalmente inclui mais de 150 pacotes em sua lista de dependências do BuildTime. É importante observar que a geração de dependências do BuildTime no NIX não requer a construção do alvo.
Para referência, a seguir é um link para o gráfico de um exemplo do Hello-World C Program que inclui as duas primeiras camadas de dependências de compilação: dependências diretas e o primeiro nível de dependências transitivas: C Hello-World BuildTime, profundidade = 2.
As dependências de tempo de execução são um subconjunto de dependências do BuildTime. O NIX determina automaticamente as dependências de tempo de execução, digitalizando os caminhos de saída gerados (ou seja, saída de construção) para os caminhos da loja das dependências de BuildTime. Isso significa que o NIX precisa criar a saída de destino primeiro, antes que as dependências de tempo de execução possam ser determinadas. Para referência, abaixo está um gráfico completo de dependência de tempo de execução de um exemplo de hello-mundo C Program:
Por padrão, quando aplicável, as ferramentas neste repositório assumem dependências de tempo de execução. Isso significa, por exemplo, que, a menos que especificado de outra forma, sbomnix produzirá um SBOM, incluindo dependências somente para o tempo de execução, nixgraph SATENS RUNDTIME DEPENCENCE DE DEPENDÊNCIA GRAPENO e as dependências de tempo de execução do vulnxscan e nix_outdated . Como o NIX precisa criar a saída de destino para determinar as dependências de tempo de execução, todas as ferramentas neste repositório também criarão (realizar a força) a saída de destino como parte da invocação de cada ferramenta ao determinar as dependências de tempo de execução. Todas as ferramentas mencionadas neste repositório também suportam o trabalho com dependências do BuildTime, em vez de dependências de tempo de execução com a ajuda do argumento da linha de comando --buildtime . Como mencionado anteriormente, a geração de dependências do BuildTime no NIX não requer a construção do alvo. Da mesma forma, quando --buildtime é especificado, as ferramentas neste repositório não precisam ser construídas no destino especificado.
Os exemplos de uso funcionam para o pacote construído, bem como dentro do devhell.
Lembre -se de dentro do devhell, as chamadas para sbomnix precisam ser substituídas pelo src/sbomnix/main.py (e similar para outros pontos de entrada).
Nos exemplos abaixo, usamos o nix pacote wget como um exemplo de destino. Para imprimir o caminho wget no sistema local, tente:
$ nix eval -f ' <nixpkgs> ' ' wget.outPath '
" /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 " Por padrão, sbomnix digitaliza o alvo fornecido e gera um SBOM, incluindo as dependências de tempo de execução. Aviso: determinar as dependências de tempo de execução do destino no NIX requer a criação do alvo.
# 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.csvAs principais saídas são os arquivos SBOM JSON sbom.cdx.json e sbom.spdx.json nos formatos CyclonedX e SPDX.
Por padrão, sbomnix verifica o alvo fornecido em busca de dependências de tempo de execução. Você pode dizer ao SBOMNIX para determinar as dependências do BuildTime usando o argumento --buildtime . O exemplo abaixo gera o SBOM, incluindo dependências do BuildTime. Aviso: ao contrário das dependências de tempo de execução, a determinação das dependências do BuildTime não requer a construção do alvo.
$ sbomnix /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --buildtime sbomnix também pode ser usado com caminhos de saída (por exemplo, qualquer coisa que produza um link de resultado):
$ sbomnix /path/to/result sbomnix também suporta referências de varredura de flocos:
$ sbomnix github:NixOS/nixpkgs ? ref=nixos-unstable#wget --buildtime sbomnix encontra as dependências do pacote usando nixgraph . Além disso, nixgraph também pode ser usado como uma ferramenta independente para visualizar dependências de pacotes. Abaixo, mostramos um exemplo de visualização de dependências de tempo de execução do pacote wget :
$ nixgraph /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --depth=2Que produz o gráfico de dependência como uma imagem (com o MaxDepth 2):
Para obter mais exemplos sobre a consulta e a visualização das dependências do pacote, consulte: Nixgraph.
Quaisquer solicitações, perguntas e relatórios de erros são bem -vindos. Para iniciar o desenvolvimento, recomendamos o uso do 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 Run make help para ver a lista de alvos suportados. Antes de enviar solicitações de tração, verifique se pelo menos o make pre-push é executado sem falhas.
Para desativar o nix devhell, execute exit em seu shell. Para ver outros alvos do Nix Flake, Run nix flake show .
Este projeto está licenciado sob a licença Apache-2.0-consulte o arquivo Apache-2.0.txt para obter detalhes.
sbomnix usa o Nix Store Derivation Scanner (nix.py e derivation.py) originalmente da Vulnix.