Этот репозиторий является домом для различных инструментов командной строки и библиотек Python, которые направлены на помощь с задачами цепочки поставок программного обеспечения:
sbomnix - это утилита, которая генерирует SBOMS, данный выводом NIX или пути.nixgraph помогает запрашивать и визуализировать графики зависимости для получения Nix или пути.nixmeta суммирует мета-атрибуты Nixpkgs из данной версии Nixpkgs.vulnxscan - это сканер уязвимости, демонстрирующий использование SBOMS при проведении сканирования уязвимости.repology_cli и repology_cve являются клиентами командной строки для Repology.org.nix_outdated - это утилита, которая находит устаревшие зависимости NIX для данного пути, перечисляя устаревшие пакеты в приоритетном порядке в зависимости от того, сколько других пакетов зависят от данного устаревшего пакета.provenance - это инструмент командной строки для генерации файлов аттестации Provenance SLSA V1.0 в формате JSON для любого NIX Flake или Drevation.На примере того, как использовать инструмент, предоставленные в этом хранилище для автоматизации ежедневных сканирования уязвимости для проекта NIX Flake, см. GHAFSCAN.
SBOMS CYCLONEDX и SPDX для каждого высвобождения инструментов SBOMNIX доступны в активах высвобождения.
Все инструменты в этом репозитории происходят из Framework GHAF.
sbomnix требует общих инструментов NIX, таких как nix и nix-store . Ожидается, что эти инструменты будут на $PATH .
sbomnix можно запустить в виде NIX Frake из репозитория 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 .
Если у вас включен NIX Flakes, запустите оболочку разработки:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix develop Вы также можете использовать nix-shell для входа в оболочку разработки:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix-shell Имейте в виду, что это не добавляет различных двоичных файлов вступительной точки к вашему PATH напрямую. Они производятся во время сборки Setuptools.
Пока вы находитесь в Devshell, вы можете напрямую запускать различные инструменты командной строки через файлы входа.
# 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 --helpЗакрытие пути магазина NIX - это список всех зависимых путей хранилища, рекурсивно, на который ссылаются путь целевого хранилища. Для пакета закрытие его деривации перечисляет все зависимости времени настройки. Например, для простой C -программы зависимости времени настройки включают пакеты для начальной загрузки GCC, Stdenv, Glibc, Bash и т. Д. В целевую архитектуру. Даже простая программа Hello-World C обычно включает в себя более 150 пакетов в список зависимостей времени BuildTime. Важно отметить, что генерирование зависимостей времени настройки в NIX не требует построения цели.
Для справки, следующая ссылка на график из примера программы Hello-World C, которая включает в себя первые два уровня зависимостей времени настройки: прямые зависимости и первый уровень переходных зависимостей: C Hello-World Time, Dexit = 2.
Зависимости времени выполнения являются подмножеством зависимостей времени настройки. NIX автоматически определяет зависимости времени выполнения, сканируя сгенерированные выходные пути (т.е. Это означает, что NIX должен сначала построить целевой выход, прежде чем можно определить зависимости во время выполнения. Для справки, ниже представлен полный график зависимости среды выполнения примера программы Hello-World C:
По умолчанию, где это применимо, инструменты в этом хранилище предполагают зависимости времени выполнения. Это означает, например, что, если не указано иное, sbomnix выведет SBOM, включая зависимости только от выполнения, только зависимости от nixgraph выходов, график времени выполнения, а также зависимости времени выполнения vulnxscan и nix_outdated . Поскольку NIX необходимо создать целевой выход для определения зависимостей времени выполнения, все инструменты в этом репозитории также будут создавать (силу-реализуйте) целевой выход как часть вызова каждого инструмента при определении зависимостей времени выполнения. Все упомянутые инструменты в этом репозитории также поддерживают работу с зависимостями времени BuildTime вместо зависимостей времени выполнения с помощью аргумента командной строки --buildtime . Как упоминалось ранее, генерирование зависимостей времени настройки в NIX не требует построения цели. Точно так же, когда указано --buildtime , инструменты в этом репозитории не должны строить данную цель.
Примеры использования работают как для встроенного пакета, так и внутри Devshell.
Имейте в виду внутри Devshell, вызовы в sbomnix необходимо заменить на src/sbomnix/main.py (и аналогичный для других точек входа).
В приведенных ниже примерах мы используем NIX Package wget в качестве примера цели. Чтобы напечатать wget Out Path в вашей местной системе, попробуйте:
$ 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 в форматах cyclonex и spdx.
По умолчанию sbomnix сканирует заданную цель для зависимостей времени выполнения. Вы можете сказать Sbomnix определить зависимости времени настройки, используя аргумент --buildtime . Ниже пример генерирует SBOM, включая зависимости времени настройки. УВЕДОМЛЕНИЕ: В отличие от зависимостей времени выполнения, определение зависимостей времени настройки не требует построения цели.
$ sbomnix /nix/store/8nbv1drmvh588pwiwsxa47iprzlgwx6j-wget-1.21.3 --buildtime sbomnix можно использовать и с выходными путями (например, все, что дает символ результата):
$ sbomnix /path/to/result sbomnix также поддерживает сканирующие ссылки на чешуйку:
$ sbomnix github:NixOS/nixpkgs ? ref=nixos-unstable#wget --buildtime sbomnix находит зависимости пакета с использованием nixgraph . Кроме того, nixgraph также может быть использован в качестве автономного инструмента для визуализации зависимостей пакетов. Ниже мы показываем пример визуализации пакетных зависимостей wget Wime:
$ 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 Запустите make help , чтобы увидеть список поддерживаемых целей. Перед отправкой любых запросов на привлечение убедитесь, что хотя бы make pre-push без сбоев.
Чтобы деактивировать Nix Devshell, запустите exit в своей оболочке. Чтобы увидеть другие целевые цели Nix, запустите nix flake show .
Этот проект лицензирован по лицензии Apache-2.0-для получения подробной информации см. Файл Apache-2.0.0.txt.
sbomnix использует сканер деривации Nix Store (nix.py и derivation.py) первоначально из Vulnix.