이 저장소는 소프트웨어 공급망 문제를 돕는 다양한 명령 줄 도구 및 파이썬 라이브러리가 있습니다.
sbomnix 는 NIX 파생 또는 출력 경로가 주어진 SBOM을 생성하는 유틸리티입니다.nixgraph 닉스 파생 또는 출력 경로에 대한 종속성 그래프를 쿼리하고 시각화하는 데 도움이됩니다.nixmeta 주어진 nixpkgs 버전의 nixpkgs meta-aattributes를 요약합니다.vulnxscan 은 취약성 스캔을 실행할 때 SBOM의 사용을 보여주는 취약성 스캐너입니다.repology_cli 및 repology_cve 는 Repology.org의 명령 줄 클라이언트입니다.nix_outdated 주어진 구식 패키지에 의존하는 다른 패키지의 수에 따라 구식 패키지를 우선 순위로 나열하는 주어진 경로에 대한 오래된 NIX 종속성을 찾는 유틸리티입니다.provenance Nix 플레이크 또는 파생에 대해 JSON 형식의 SLSA v1.0 준수 입증 파일을 생성하는 명령 줄 도구입니다.이 저장소에 제공된 툴링을 사용하여 Nix 플레이크 프로젝트의 일일 취약점 스캔을 자동화하는 방법의 예는 다음을 참조하십시오. Ghafscan.
SBOMNIX 툴링의 각 릴리스에 대한 CyclonEDX 및 SPDX SBOM은 릴리스 자산에서 사용할 수 있습니다.
이 저장소의 모든 도구는 GHAF 프레임 워크에서 시작됩니다.
sbomnix nix 및 nix-store 와 같은 일반적인 Nix 도구가 필요합니다. 이 도구는 $PATH 에있을 것으로 예상됩니다.
sbomnix tiiuae/sbomnix 저장소에서 닉스 플레이크로 실행할 수 있습니다.
# '--' 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 실행하여 지원되는 플레이크 대상의 전체 목록을 참조하십시오.
닉스 플레이크가 활성화 된 경우 개발 쉘을 시작하십시오.
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix develop nix-shell 사용하여 개발 쉘에 들어갈 수도 있습니다.
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix-shell 이것은 다양한 Entrypoint 바이너리를 당신의 PATH 에 직접 추가하지 않습니다. SetUptools 빌드 중에 생산됩니다.
DevShell에있는 동안 EntryPoint 파일을 통해 다양한 명령 줄 도구를 실행할 수 있습니다.
# 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 매장 경로의 폐쇄는 대상 상점 경로에 의해 참조 된 모든 종속 매장 경로의 목록입니다. 패키지의 경우 파생의 폐쇄에는 모든 빌드 타임 종속성이 나와 있습니다. 예를 들어, 간단한 C 프로그램의 경우 빌드 타임 종속성에는 대상 아키텍처에 GCC, STDENV, GLIBC, BASH 등을 부트 스트랩으로하는 패키지가 포함됩니다. 간단한 Hello-World C 프로그램조차도 일반적으로 빌드 타임 종속성 목록에 150 개가 넘는 패키지가 포함되어 있습니다. NIX에서 빌드 타임 종속성을 생성하면 대상을 구축 할 필요가 없다는 점에 유의해야합니다.
참고로, 다음은 빌드 타임 종속성의 첫 두 층을 포함하는 Hello-World C 프로그램의 예제에서 그래프에 대한 링크입니다. 직접 종속성 및 첫 번째 수준의 전이 종속성 : C Hello-World 빌드 타임, 깊이 = 2.
런타임 종속성은 빌드 타임 종속성의 하위 집합입니다. NIX는 빌드 타임 종속성의 저장 경로에 대해 생성 된 출력 경로 (예 : 빌드 출력)를 스캔하여 런타임 종속성을 자동으로 결정합니다. 이는 런타임 종속성을 결정하기 전에 NIX가 대상 출력을 먼저 구축해야한다는 것을 의미합니다. 참고로 아래는 Hello-World C 프로그램의 예제의 완전한 런타임 종속성 그래프입니다.
적용 가능한 경우 기본적 으로이 저장소의 도구는 런타임 종속성을 가정합니다. 예를 들어, 달리 지정되지 않으면 sbomnix 런타임 전용 종속성, nixgraph 출력 런타임 종속성 그래프 및 vulnxscan 및 nix_outdated 스캔 런타임 부상을 포함한 SBOM을 출력한다는 것을 의미합니다. NIX는 런타임 종속성을 결정하기 위해 대상 출력을 구축해야 하므로이 리포지토리의 모든 도구는 런타임 종속성을 결정할 때 각 도구의 호출의 일부로 대상 출력을 구축 (강제 실현)합니다. 이 저장소에서 언급 된 모든 도구는 --buildtime 명령 줄 인수를 사용하여 런타임 종속성 대신 빌드 타임 종속성 작업을 지원합니다. 앞에서 언급했듯이 NIX에서 빌드 타임 종속성을 생성한다고해서 대상을 구축 할 필요는 없습니다. 마찬가지로 --buildtime 지정되면이 저장소의 도구를 주어진 대상을 빌드 할 필요가 없습니다.
사용 예제는 제작 된 패키지와 Devshell 내부에서 모두 작동합니다.
DevShell 내부에서 sbomnix 에 대한 호출을 src/sbomnix/main.py (및 기타 ENTRYPOINTS와 유사)로 교체해야합니다.
아래 예제에서는 닉스 패키지 wget 예제 대상으로 사용합니다. 로컬 시스템에서 wget 아웃 경로를 인쇄하려면 다음을 시도하십시오.
$ 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 및 SPDX 형식입니다.
기본적으로 sbomnix 주어진 대상을 런타임 종속성에 대해 스캔합니다. --buildtime 인수를 사용하여 빌드 타임 종속성을 결정하도록 sbomnix에 알릴 수 있습니다. 아래 예제는 빌드 타임 종속성을 포함한 SBOM을 생성합니다. 통지 : 런타임 종속성과 달리 빌드 타임 종속성을 결정하는 것은 대상을 구축 할 필요가 없습니다.
$ sbomnix /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --buildtime sbomnix 출력 경로와 함께 사용할 수 있습니다 (예 : 결과 Symlink를 생성하는 모든 것) :
$ sbomnix /path/to/result sbomnix 또한 스캔 플레이크 참조를 지원합니다.
$ sbomnix github:NixOS/nixpkgs ? ref=nixos-unstable#wget --buildtime sbomnix nixgraph 사용하여 패키지 종속성을 찾습니다. 또한 nixgraph 패키지 종속성을 시각화하기위한 독립형 도구로 사용될 수 있습니다. 다음은 패키지 wget 런타임 종속성 시각화의 예를 보여줍니다.
$ nixgraph /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --depth=2종속성 그래프를 이미지로 출력합니다 (MaxDepth 2와 함께) :
패키지 종속성 쿼리 및 시각화에 대한 더 많은 예는 다음을 참조하십시오 : nixgraph.
모든 풀 요청, 질문 및 오류 보고서를 환영합니다. 개발을 시작하려면 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 . 풀 요청을 보내기 전에 최소한 make pre-push 실패하지 않고 실행되는지 확인하십시오.
Nix Devshell을 비활성화하려면 쉘에서 exit 실행하십시오. 다른 닉스 플레이크 대상을 보려면 nix flake show 실행하십시오.
이 프로젝트는 Apache-2.0 라이센스에 따라 라이센스가 부여됩니다. 자세한 내용은 Apache-2.0.txt 파일을 참조하십시오.
sbomnix 원래 Vulnix에서 Nix Store Detivity Scanner (nix.py 및 devation.py)를 사용합니다.