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:

Eingabe
bomnipotent_client bom list
Ausgabe
[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”:

Eingabe (lange Variante)
bomnipotent_client bom list --name="Your Project" --version="1.0.0"
Eingabe (kurze Variante)
bomnipotent_client bom list -n "Your Project" -v "1.0.0"
Ausgabe
[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:

Eingabe
bomnipotent_client bom download /home/boms
Ausgabe
[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.

Eingabe
tree /home/boms/
Ausgabe
/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:

Eingabe
bomnipotent_client bom download /home/boms
Ausgabe
[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:

Eingabe (lange Variante)
bomnipotent_client bom download /home/boms --overwrite
Eingabe (kurze Variante)
bomnipotent_client bom download /home/boms -o
Ausgabe
[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:

Eingabe (lange Variante)
bomnipotent_client bom download /home/boms --name="Your Project" --version="1.0.0"
Eingabe (kurze Variante)
bomnipotent_client bom download /home/boms -n "Your Project" -v "1.0.0"
Ausgabe
[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:

Eingabe
bomnipotent_client bom get "Your Project" "1.0.0" | grep -v "serialNumber" | head -n 16
Ausgabe
{
  "$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:

Eingabe
bomnipotent_client bom get "Your Project" "1.0.0" | grype
Ausgabe
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.
Eingabe (lange Variante)
bomnipotent_client bom exist --name="Your Project" --version="1.0.0"
Eingabe (kurze Variante)
bomnipotent_client bom exist -n "Your Project" -v "1.0.0"
Ausgabe
[INFO] The server contains 1 BOM(s) matching the filters.