Stücklisten / BOMs
Stücklisten (Bills of Materials, BOMs) stehen im Mittelpunkt sowohl der Funktionalität als auch des Namens von BOMnipotent. Eine BOM ist eine Liste aller Komponenten, die ein Produkt ausmachen. Im Bereich der Cybersicherheit ist die bekannteste Variante die Software-Stückliste (Software Bill of Materials, SBOM), aber BOMs ermöglichen auch allgemeinere Überlegungen.
Auflisten
Das Ausführen des folgenden Befehls listet alle für Sie zugänglichen BOMs auf:
bomnipotent_client bom list
[INFO]
╭────────────────────────┬─────────┬─────────────────────────┬───────────┬────────────╮
│ Product │ Version │ Timestamp │ TLP │ Components │
├────────────────────────┼─────────┼─────────────────────────┼───────────┼────────────┤
│ Best Project │ 3.1.4 │ 2025-01-01 10:11:12 UTC │ TLP:GREEN │ 75 │
│ Your Project │ 1.0.0 │ 2025-01-01 10:11:12 UTC │ Default │ 75 │
│ Your Project │ 1.1.0 │ 2025-01-01 10:11:12 UTC │ Default │ 75 │
│ Your Project Container │ 1.2.3 │ 2025-01-01 10:11:12 UTC │ TLP:WHITE │ 939 │
╰────────────────────────┴─────────┴─────────────────────────┴───────────┴────────────╯
BOMs mit der Klassifizierung TLP:WHITE / TLP:CLEAR sind für alle sichtbar. In diesem Beispiel hat Ihr Konto Zugriff auf eine BOM mit dem Label TLP:AMBER.
Der Befehlt akzeptiert die optionalen Filter “name” und “version”:
bomnipotent_client bom list --name="Your Project" --version="1.0.0"
bomnipotent_client bom list -n "Your Project" -v "1.0.0"
[INFO]
╭──────────────┬─────────┬─────────────────────────┬─────────┬────────────╮
│ Product │ Version │ Timestamp │ TLP │ Components │
├──────────────┼─────────┼─────────────────────────┼─────────┼────────────┤
│ Your Project │ 1.0.0 │ 2025-01-01 10:11:12 UTC │ Default │ 75 │
╰──────────────┴─────────┴─────────────────────────┴─────────┴────────────╯
Herunterladen
Um eine lokale Kopie aller BOMs zu erstellen, die der Server für Sie bereitstellt, führen Sie folgenden Befehl aus:
bomnipotent_client bom download /home/boms
[INFO] Storing BOMs under /home/boms
Dies speichert die BOMs im angegebenen Ordner ("./boms" in diesem Beispiel). Falls der Ordner noch nicht existiert, wird er automatisch erstellt. Die BOMs werden in Dateien gespeichert, die folgendem Namensschema folgen: {Produktname}_{Produktversion}.cdx.json
.
Um inkonsistentes Verhalten zwischen verschiedenen Betriebssystemen zu vermeiden, werden der Name und die Version des Produkts in Kleinbuchstaben umgewandelt, und die meisten Sonderzeichen durch einen Unterstrich ‘_’ ersetzt. Dadurch könnte es theoretisch vorkommen, dass verschiedene Produkte zum selben Dateinamen führen. In einem solchen Fall zeigt BOMnipotent eine Warnung an, anstatt die Datei stillschweigend zu überschreiben.
tree /home/boms/
/home/boms/
|-- best_project_3.1.4.cdx.json
|-- your_project_1.0.0.cdx.json
|-- your_project_1.1.0.cdx.json
`-- your_project_container_1.2.3.cdx.json
1 directory, 4 files
Bevor BOMnipotent Client Dateien zum Download anfordert, erstellt er eine Inventarliste der bereits im Ordner vorhandenen BOMs und lädt nur die fehlenden Dateien herunter.
BOMnipotent überschreibt existierende Dateien nicht, selbst falls sie sich auf dem Server geändert haben. Stattdessen gibt es eine Warnung aus:
bomnipotent_client bom download /home/boms
[INFO] Storing BOMs under /home/boms
[WARN] File /home/boms/best_project_3.1.4.cdx.json already exists.
The existing BOM doc has name 'BEST%PROJECT' and version '3.1.4' while the new one has name 'Best Project' and version '3.1.4'.
Note that to avoid shenangians with the filesystem, both are mapped to the same filename 'best_project_3.1.4.cdx.json'.
Skipping download to prevent data loss.
Sie können BOMnipotentn mitteilen, dass Sie die Datei wirklich gern überschrieben hätten, indem Sie die “–overwrite” flag nutzen:
bomnipotent_client bom download /home/boms --overwrite
bomnipotent_client bom download /home/boms -o
[INFO] Storing BOMs under /home/boms
[INFO] Overwriting existing BOM document at '/home/boms/best_project_3.1.4.cdx.json'.
Analog zum list Befehl akzeptiert der download Befehl die Filter “name” und “version”, sodass nur ein Teil der BOMs heruntergeladen wird:
bomnipotent_client bom download /home/boms --name="Your Project" --version="1.0.0"
bomnipotent_client bom download /home/boms -n "Your Project" -v "1.0.0"
[INFO] Storing BOMs under /home/boms
Anzeigen
Sie können den Inhalt einer einzelnen BOM direkt in die Konsole ausgeben lassen, indem Sie folgendes rufen:
bomnipotent_client bom get "Your Project" "1.0.0" | grep -v "serialNumber" | head -n 16
{
"$schema": "http://cyclonedx.org/schema/bom-1.6.schema.json",
"bomFormat": "CycloneDX",
"specVersion": "1.6",
"version": 1,
"metadata": {
"timestamp": "2025-01-01T10:11:12Z",
"tools": {
"components": [
{
"type": "application",
"author": "anchore",
"name": "syft",
"version": "1.28.0"
}
]
Das ist besonder praktisch falls Sie den Inhalt der BOM in einem Skript weiterverwenden wollen. Falls sie zum Beispiel nach Schwachstellen in der Lieferkette schauen wollen, können sie folgendes rufen:
bomnipotent_client bom get "Your Project" "1.0.0" | grype
NAME INSTALLED FIXED IN TYPE VULNERABILITY SEVERITY EPSS RISK
rustls 0.23.15 0.23.18 rust-crate GHSA-qg5g-gv98-5ffh Medium N/A N/A
Existenz
Der Sub-Befehl "exist" prüft, wie viele Einträge auf dem Server mit bestimmten Filtern übereinstimmt. Er ist für alle Befehle verfügbar, die den "list" Sub-Befehl akzeptieren, und akzeptiert dieselben Filter.
Basierend auf dem Ausgabeformat gibt der Client Folgendes aus:
- Normaler Modus: Ein Satz, der die Anzahl der gefundenen Objekte enthält.
- code: Den String "200", falls mindestens ein Element gefunden wurde, oder "404", falls keine gefunden wurden.
- raw: Die Anzahl der Einträge, die gefunden wurden.
bomnipotent_client bom exist --name="Your Project" --version="1.0.0"
bomnipotent_client bom exist -n "Your Project" -v "1.0.0"
[INFO] The server contains 1 BOM(s) matching the filters.