ที่เก็บนี้เป็นที่ตั้งของเครื่องมือสายคำสั่งต่างๆและไลบรารี Python ที่มีจุดมุ่งหมายเพื่อช่วยในการท้าทายโซ่อุปทานโซ่
sbomnix เป็นยูทิลิตี้ที่สร้าง SBOMs ที่ได้รับ NIX หรือเส้นทางออกnixgraph ช่วยค้นหาและแสดงภาพกราฟการพึ่งพาสำหรับ Nix Derivation หรือ Out Pathnixmeta สรุป Nixpkgs meta-attributes จากรุ่น Nixpkgs ที่กำหนดvulnxscan เป็นเครื่องสแกนช่องโหว่ที่แสดงให้เห็นถึงการใช้ SBOMs ในการสแกนช่องโหว่repology_cli และ repology_cve เป็นลูกค้าสายคำสั่ง to repology.orgnix_outdated เป็นยูทิลิตี้ที่พบการพึ่งพา NIX ที่ล้าสมัยสำหรับเส้นทางที่กำหนดโดยแสดงรายการแพ็คเกจที่ล้าสมัยในลำดับความสำคัญตามจำนวนแพ็คเกจอื่น ๆ ขึ้นอยู่กับแพ็คเกจที่ล้าสมัยprovenance เป็นเครื่องมือบรรทัดคำสั่งในการสร้างไฟล์การรับรองที่เป็นไปได้ของ SLSA v1.0 ในรูปแบบ JSON สำหรับสะเก็ดหรือที่ได้มาใด ๆสำหรับตัวอย่างของวิธีการใช้เครื่องมือที่มีให้ในที่เก็บนี้เพื่อทำการสแกนช่องโหว่ในชีวิตประจำวันโดยอัตโนมัติสำหรับโครงการ Nix Flake โปรดดู: GHAFSCAN
CyclonedX และ SPDX SBOMs สำหรับการเปิดตัว SBOMNIX Tooling แต่ละรายการมีอยู่ในสินทรัพย์ที่ปล่อย
เครื่องมือทั้งหมดในที่เก็บนี้มาจากกรอบ GHAF
sbomnix ต้องการเครื่องมือ NIX ทั่วไปเช่น nix และ nix-store เครื่องมือเหล่านี้คาดว่าจะอยู่ใน $PATH
sbomnix สามารถทำงานเป็นเกล็ด nix จากที่เก็บ 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 ให้เริ่มการพัฒนา Shell:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix develop นอกจากนี้คุณยังสามารถใช้ nix-shell เพื่อเข้าสู่ Shell Development:
$ git clone https://github.com/tiiuae/sbomnix
$ cd sbomnix
$ nix-shell โปรดทราบว่าสิ่งนี้ไม่ได้เพิ่มไบนารีจุดเข้าต่าง ๆ ไปยัง 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 --helpการปิดเส้นทางร้านค้า Nix เป็นรายการของเส้นทางร้านค้าที่ขึ้นอยู่กับทั้งหมดซ้ำซากอ้างถึงโดยเส้นทางร้านค้าเป้าหมาย สำหรับแพ็คเกจการปิดของมันคือรายการการพึ่งพาของ BuildTime ทั้งหมด ตัวอย่างเช่นสำหรับโปรแกรม C แบบง่ายการพึ่งพา buildtime รวมถึงแพ็คเกจไปยัง Bootstrap GCC, STDENV, GLIBC, BASH และอื่น ๆ ในสถาปัตยกรรมเป้าหมาย แม้แต่โปรแกรม Hello-World C ที่เรียบง่ายมักจะมีแพ็คเกจมากกว่า 150 แพ็คเกจในรายการการพึ่งพา BuildTime เป็นสิ่งสำคัญที่จะต้องทราบว่าการสร้างการพึ่งพา buildtime ใน Nix ไม่จำเป็นต้องสร้างเป้าหมาย
สำหรับการอ้างอิงต่อไปนี้เป็นลิงค์ไปยังกราฟจากตัวอย่างโปรแกรม Hello-World C ซึ่งมีสองชั้นแรกของการพึ่งพา buildtime: การพึ่งพาโดยตรงและการพึ่งพาสกรรมกริยาระดับแรก: C Hello-World Buildtime, DEPTH = 2
การพึ่งพารันไทม์เป็นส่วนย่อยของการพึ่งพา buildtime Nix จะกำหนดการพึ่งพารันไทม์โดยอัตโนมัติโดยการสแกนพา ธ เอาท์พุทที่สร้างขึ้น (เช่นการสร้างเอาต์พุต) สำหรับเส้นทางการจัดเก็บของ BuildTime ซึ่งหมายความว่า NIX จำเป็นต้องสร้างเอาต์พุตเป้าหมายก่อนก่อนที่จะสามารถพิจารณาการพึ่งพารันไทม์ได้ สำหรับการอ้างอิงด้านล่างนี้เป็นกราฟการพึ่งพารันไทม์ที่สมบูรณ์ของตัวอย่างโปรแกรม Hello-World C:
โดยค่าเริ่มต้นหากใช้งานเครื่องมือในที่เก็บนี้ถือว่าการพึ่งพารันไทม์ ตัวอย่างเช่นซึ่งหมายความว่าเว้นแต่จะระบุไว้เป็นอย่างอื่น sbomnix จะส่งออก SBOM รวมถึงการพึ่งพารันไทม์เท่านั้นกราฟการพึ่งพารันไทม์ของ nixgraph และ vulnxscan และ nix_outdated Scan Runtime เนื่องจาก Nix จำเป็นต้องสร้างเอาต์พุตเป้าหมายเพื่อกำหนดการพึ่งพารันไทม์เครื่องมือทั้งหมดในที่เก็บนี้จะสร้าง (บังคับให้ใช้จริง) เอาต์พุตเป้าหมายเป็นส่วนหนึ่งของการเรียกใช้เครื่องมือแต่ละครั้งเมื่อพิจารณาการพึ่งพารันไทม์ เครื่องมือทั้งหมดที่กล่าวถึงในที่เก็บนี้ยังสนับสนุนการทำงานกับการพึ่งพา buildtime แทนการพึ่งพารันไทม์ด้วยความช่วยเหลือของอาร์กิวเมนต์บรรทัดคำสั่ง --buildtime ดังที่ได้กล่าวไว้ก่อนหน้านี้การสร้างการพึ่งพา buildtime ใน Nix ไม่จำเป็นต้องสร้างเป้าหมาย ในทำนองเดียวกันเมื่อมีการระบุ --buildtime เครื่องมือในพื้นที่เก็บข้อมูลนี้ไม่จำเป็นต้องสร้างเป้าหมายที่กำหนด
ตัวอย่างการใช้งานได้ผลสำหรับทั้งแพ็คเกจที่สร้างขึ้นรวมถึงภายใน Devshell
โปรดจำไว้ว่าภายใน devshell การโทรไปยัง sbomnix จะต้องถูกแทนที่ด้วย src/sbomnix/main.py (และคล้ายกับจุดเข้าอื่น ๆ )
ในตัวอย่างด้านล่างเราใช้ Nix Package 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 ในรูปแบบ cyclonedx และ SPDX
โดยค่าเริ่มต้น sbomnix จะสแกนเป้าหมายที่กำหนดสำหรับการพึ่งพารันไทม์ คุณสามารถบอก SBOMNIX เพื่อกำหนดการพึ่งพา buildTime โดยใช้อาร์กิวเมนต์ --buildtime ตัวอย่างด้านล่างสร้าง 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 เรียก make help เพื่อดูรายการของเป้าหมายที่รองรับ ก่อนที่จะส่งคำขอแบบดึงใด ๆ ตรวจสอบให้แน่ใจว่าอย่างน้อยการ make pre-push การวิ่งโดยไม่ล้มเหลว
หากต้องการปิดการใช้งาน nix devshell ให้วิ่ง exit ในเปลือกของคุณ หากต้องการดูเป้าหมายอื่น ๆ ของ Nix Flake ให้เรียกใช้ nix flake show
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต Apache-2.0-ดูไฟล์ Apache-2.0.txt สำหรับรายละเอียด
sbomnix ใช้ Nix Store Derivation Scanner (nix.py และ derivation.py) มีพื้นเพมาจาก Vulnix