Betriebssysteme & Firmware-Images scannen

kunnus sbom os inventarisiert ein Betriebssystem-Dateisystem: die Maschine, vor der Sie stehen, oder ein read-only gemountetes Firmware-Image. Das ist der Modus für Industrie-PCs, IoT-Gateways und jedes Gerät, das mit einem OS ausgeliefert wird.

shell
# Die Maschine, vor der Sie stehen (Standard-Root: / unter Unix, C:\ unter Windows)
kunnus sbom os --output machine.cdx.json

# Ein gemountetes Firmware-Image oder extrahiertes Rootfs
kunnus sbom os /mnt/firmware --target-os linux --output firmware.cdx.json

Was inventarisiert wird

  • Linux: Die Distro-Familie wird per Fingerprint erkannt (Debian/Ubuntu, RHEL, SUSE, Alpine, Arch, Gentoo, Nix, Container-Optimized OS) und ihre Paketdatenbank gelesen; Flatpak- und Snap-Pakete werden ebenfalls erfasst.
  • Windows: installierte Programme aus der Registry, plus Chocolatey- und winget-Bestand.
  • macOS: Homebrew, MacPorts und installierte .app-Bundles.
  • Nicht-paketierte Binaries: Ein Klassifikator findet Executables, die kein Paketmanager kennt — ein selbst kompiliertes memcached, ein vendortes python — mit Überlappungsunterdrückung, damit nichts doppelt erscheint.
  • Auf dem Image installierte Sprachpakete (site-packages-Wheels, Gems, JARs, node_modules, Go-Binaries, …).

Fremdes Rootfs scannen: --target-os

Wenn das gescannte Dateisystem nicht das OS ist, auf dem Sie arbeiten — etwa ein Linux-Firmware-Image auf Ihrem Mac — sagt --target-os (linux | windows | mac) kunnus, womit es es zu tun hat.

Firmware-Image mounten

kunnus sbom os scannt einen Verzeichnisbaum; eine Image-Datei muss also zuerst gemountet oder extrahiert werden. Alle folgenden Wege sind read-only — kunnus schreibt nie in das Scan-Root.

Raw- oder Einzelpartitions-Image (.img, .ext4)
sudo mount -o ro,loop firmware.img /mnt/firmware
kunnus sbom os /mnt/firmware --target-os linux --output firmware.cdx.json
sudo umount /mnt/firmware
Komplettes Disk-Dump mit Partitionstabelle (eMMC/SD)
sudo losetup -f --show -P firmware.img   # gibt z. B. /dev/loop0 aus
lsblk /dev/loop0                          # Rootfs-Partition finden
sudo mount -o ro /dev/loop0p2 /mnt/firmware
kunnus sbom os /mnt/firmware --target-os linux -o firmware.cdx.json
SquashFS (OpenWrt, Appliance-Images)
unsquashfs -d rootfs rootfs.squashfs
kunnus sbom os ./rootfs --target-os linux

Hersteller-Update-Pakete (.swu, .raucb, zip-/tar-Container) umhüllen meist eines der obigen Formate — erst den Container entpacken, dann das Dateisystem darin mounten oder extrahieren. Bei unbekanntem Format findet und extrahiert binwalk -e eingebettete Dateisysteme. Unter macOS oder Windows gibt es kein Loop-Mount für Linux-Dateisysteme: stattdessen extrahieren (7z, unsquashfs, binwalk) und --target-os linux setzen.

Das Rootfs scannen, nicht die Boot-Partition — die Paketdatenbank (var/lib/dpkg, lib/apk/db, …) treibt die OS-Paket-Erkennung. Verteilt das Gerät das OS über mehrere Partitionen (A/B-Schemata, separates /usr), den vollen Satz mounten oder einzeln scannen und downstream zusammenführen.