BOMnipotent Client ist ein Programm um mit dem BOMnipotent Server zu interageren. Es kann von Konsumenten genutzt werden um Dokumente herunterzuladen, oder um Zugriff zu beantragen. Server Admins und Manager hingegen können es nutzen um die Server Datenbank von außen zu bearbeiten.
Unterabschnitte von Client
Grundlegende Nutzung
Dieser Abschnitt behandelt die grundlegende Nutzung von BOMnipotent Client. Sie ist sowohl relevant für Konsumenten als auch Produzenten von Dokumenten zur Lieferkettensicherheit.
Unterabschnitte von Grundlegende Nutzung
Client Installation
Um BOMnipotent Client manuell herunterzuladen, gehen Sie zu
https://www.bomnipotent.de/downloads/
, wählen Sie Ihre Platform und Version, und klicken Sie auf den Download Button.
Um den Prozess weiter zu automatisieren, können Sie den Download Link direkt nutzen:
Ersetzen sie “latest” mit einem Spezifischen Versionstag, zum Beispiel “v1.0.0”, um diese statt der neuesten herunterzuladen.
Um von überall im System auf BOMnipotent Client zugreifen zu können, verschieben Sie es in einen Ordner der in ihrer PATH Umgebungsvariable enthalten ist. Dieser Schritt ist jedoch optional.
Benutzerkonto Erstellen
Die meisten Interaktion mit BOMnipotent benötigen eine Berechtigung. Die einzige Ausnahme ist der Zugriff auf Daten, welche als TLP:WHITE / TLP:CLEAR klassifiziert wurden.
Berechtigungen sind an Benutzerkonten gebunden. Weitere Informationen, wie Berechtigungen vergeben werden, befinden sich im Abschnitt über
Zugriffsverwaltung
.
Erstellung eine neuen Benutzerkontos
Ein neues Benutzerkonto erstellen Sie per
bomnipotent_client --domain=<Server> user request <Ihre-Email>
bomnipotent_client -d <Server> user request <Ihre-Email>
Wenn Sie dies zum ersten Mal rufen, wird es ein neues
Schlüsselpaar
mit dem
ED25519 Algorithmus
generieren. Ein Schlüsselpaar besteht aus einem öffentlichen und einem geheimen Schlüssel. Beide werden lokal in Ihrem Nutzerordner gespeichert.
[INFO] Generating new key pair
[INFO] Storing secret key to "/home/simon/.config/bomnipotent/secret_key.pem" and public key to "/home/simon/.config/bomnipotent/public_key.pem"
[INFO] User request submitted. It now needs to be confirmed by a user manager.
Der geheime Schlüssel wird auch häufig “privater Schlüssel” genannt. Der Autor glaubt aber, dass “geheimer Schlüssel” eine treffendere Beschreibung ist, und außerdem, vor allem im Englischen, die Chance auf Verwechslung mit dem öffentlichen Schlüssel verringert.
Der öffentliche Schlüssel kann, im Prinzip, mit jeder beliebigen Person geteilt werden. Der “user request” Befehl schickt ihn an den BOMnipotent server. Der geheime Schlüssel hingegen sollte wie ein Passwort behandelt werden!
Alle nun folgenden Aufrufe vom BOMnipotent Client werden das existierende Schlüsselpaar wiederverwenden.
Jetzt, da Ihre Anfrage gestellt ist, müssen Sie darauf warten, dass ein Nutzermanager sie bestätigt. Danach können Sie
authentifizierte Anfragen
stellen.
Falls Sie dieser Nutzermanager sind und herausfinden wollen, wie Sie Nutzer bestätigen können, konsultieren Sie den Abschnitt über
Nutzerverwaltung
.
Gespeicherte Schlüssel nutzen
Falls Sie ein Schlüsselpaar im üblichen Nutzerordner (welcher auf Ihre Platform ankommt) gespeichert haben, wird BOMnipotent Client ihn automatisch lesen und nutzen.
Falls Sie stattdessen gerne einen existierenden Schlüssel wiederverwenden wollen, der an einem anderen Ord gespeichert ist, dann können Sie den Pfad als positionales Argument angeben:
bomnipotent_client --domain=<Server> user request <Ihre-Email> <Pfad/zum/Schlüssel>
bomnipotent_client -d <Server> user request <Ihre-Email> <Pfad/zum/Schlüssel>
Damit dies funktioniert muss der Schlüssel mit dem
ED25519 Algorithmus
generiert worden und im
PEM
Format gespeichert sein. Falls Sie darauf bestehen, Ihre Schlüssel selber zu verwalten, oder falls Sie ein Beispiel sehen möchten, dann können Sie ein solches Paar am einfachsten wie folgt generieren: Rufen Sie openssl genpkey -algorithm ED25519 -out secret_key.pem um einen geheimen Schlüssel zu generieren, und dann openssl pkey -in secret_key.pem -pubout -out public_key.pem um den zugehörigen öffentlichen Schlüssel zu erstellen.
Falls Sie hier aus Versehen den Pfad zu ihrem geheimen Schlüssel angeben wirft BOMnipotent Client eine Fehlermeldung anstatt ihn zum Server zu schicken.
Sobald Ihr Account (also ihre Email und ihr öffentlicher Schlüssel) bestätigt ist, können Sie BOMnipotent Client Ihre Email mitgeben um eine authentifizierte Anfrage an den Server zu stellen:
BOMnipotent Client ließt dann automatisch Ihren geheimen Schlüssel und nutzt ihn zur Authentifizierung.
Ihr geheimer Schlüssel wird benutzt, um die HTTP Methode, Ihre Email, einen Zeitstempel und den Haupttext der Anfrage kryptografisch zu signieren. Dies schützt gleichzeitig davor, dass andere sich als Sie ausgeben, dass Inhalte verändert werden, und vor Replay Attacks. Der geheime Schlüssel erreicht all dies, ohne jemals ihren lokalen Rechner verlassen zu müssen. Die Schönheit des Ganzen würde leider den Umfang dieser Dokumentation sprengen.
Falls Sie Ihren Schlüssel nicht im üblichen Nutzerordner speichern, müssen Sie BOMnipotent Client den Pfad per Kommandozeilenoption angeben:
Um diese drei zusätzlichen Argumente bei jeder einzelnen Anfrage zu vermeiden, können Sie die Daten stattdessen in einer
Nutzersitzung
speichern.
Benutzersitzung
Anmeldung
Der BOMnipotent Client bietet mehrere globale optionale Argumente. Um diese nicht immer wieder angeben zu müssen, können Sie den Anmeldebefehl verwenden, um sie in einer Benutzersitzung zu speichern:
Dies erstellt eine Datei im lokalen Benutzerordner, die die angegebenen Parameter speichert.
[INFO] Storing session data in /home/simon/.config/bomnipotent/session.toml
Wann immer Sie den BOMnipotent Client von nun an aufrufen, werden diese Parameter automatisch verwendet:
bomnipotent_client bom list # Wird automatisch die angegebene Domain kontaktieren und Ihre Authentifizierungsdaten verwenden.
Jegliche relativen Dateipfade, die Sie hierbei angeben, werden vor dem Speichern in absolute Pfade umgewandelt. Somit können Sie die Sitzungsdaten von überall auf Ihrem Computer nutzen.
Parameter überschreiben
Wenn Sie angemeldet sind und bei einem Aufruf des BOMnipotent Clients globale optionale Parameter angeben, werden diese stattdessen verwendet:
bomnipotent_client --domain=<anderer-Server> bom list # Wird den andereren Server kontaktieren
bomnipotent_client -d <anderer-Server> bom list # Wird den andereren Server kontaktieren
Um die im Sitzungsspeicher gespeicherten Daten dauerhaft zu ändern, melden Sie sich einfach erneut mit den neuen Parametern an.
Dies kann auch verwendet werden, um Parameter zu entfernen, indem Sie sie einfach nicht angeben:
bomnipotent_client --domain=<anderer-Server> --email=<Ihre-Email> --output=<mode> login # Setzt secret-key und trusted-root zurück.
bomnipotent_client -d <anderer-Server> -e <Ihre-Email> -o <Modus> login # Setzt secret-key und trusted-root zurück.
Status
Um die Parameter der aktuellen Sitzung auszugeben, rufen Sie:
bomnipotent_client session status
Die Ausgabe ist im
TOML Format
(so wie die Daten auch auf Ihrem Dateisystem gespeichert sind):
Falls Sie nicht eingeloggt sind, erhalten sie einen informativen Trace und einen leeren TOML/JSON Output:
[INFO] No session data is currently stored
[INFO] No session data is currently stored
{}
Falls Sie diesen Befehl verwenden möchten, um programmatisch zu prüfen, ob Sitzungsdaten gespeichert sind, verwenden Sie zum Beispiel den “raw” Ausgabemodus um den Info Trace zu vermeiden, und prüfen Sie, ob die Ausgabe leer ist:
#!/bin/bash
output=$(./bomnipotent_client --output raw session status)if[ -n "$output"]; then echo "Found session data:" echo "$output"else echo "Session not logged in."fi
$output = ./bomnipotent_client --output raw session status
if ($output) {
Write-Output "Found session data:" Write-Output $output
} else {
Write-Output "Session not logged in."}
Abmeldung
Um alle Parameter zu entfernen, rufen Sie logout auf:
bomnipotent_client logout
Dies entfernt die Sitzungsdatei.
Log Level
BOMnipotent Client bietet verschiedene Schweregrade an Logs:
error
warn
info (default)
debug
trace
Diese können wie folgt ausgewählt werden:
bomnipotent_client --log-level=<LEVEL> <BEFEHL>
bomnipotent_client -l <LEVEL> <BEFEHL>
Sie definieren einen minimalen Schweregrad, den eine Nachricht haben muss um ausgegeben zu werden: Mit log-level debug gibt BOMnipotent alle Nachrichten der Schweregrade error, warn, info und debug aus, aber nicht trace.
Standardmäßig schreibt BOMnipotent Client die Nachrichten zu stdout, unabhängig vom Schweregrad. Sie können es stattdessen anweisen, die Logs
in eine Datei
zu schreiben.
Info, Warn und Error
Der Standard-Ausgabemodus ist info. Er gibt einige Informationen aus, überflutet den Benutzer jedoch nicht mit Nachrichten.
[ERROR] Received response:
404 Not Found
BOM Volcano_1.0.0 not found in database
Debug
Der Debug-Ausgabemodus gibt zusätzliche Informationen aus, die bei der Fehlersuche in der Eingabe oder Konfiguration nützlich sein können:
bomnipotent_client --log-level=debug health
bomnipotent_client -l debug health
[DEBUG] Looking for secret key
[DEBUG] The provided key is a path: /home/simon/git/bomnipotent/test_cryptofiles/admin
[DEBUG] Reading secret key from provided path "/home/simon/git/bomnipotent/test_cryptofiles/admin"
[DEBUG] Adding trusted root certificate
[DEBUG] Signing request
[DEBUG] Assembled GET request to https://localhost:62443/health
[DEBUG] starting new connection: https://localhost:62443/
[INFO] Service is healthy
Trace
Im Trace-Modus gibt BOMnipotent zusätzlich das Modul aus, aus dem die Nachricht stammt. Dies ist primär nützlich, um Fehler im Programm selbst zu identifizieren.
bomnipotent_client --log-level=trace health
bomnipotent_client -l trace health
[bomnipotent_client] [TRACE] Running command Health with args Arguments {
domain: Some(
"https://localhost:62443",
),
email: Some(
"admin@wwh-soft.com",
),
log_level: Some(
Trace,
),
log_file: None,
output_mode: None,
secret_key: Some(
"/home/simon/git/bomnipotent/test_cryptofiles/admin",
),
trusted_root: Some(
"/home/simon/git/bomnipotent/test_cryptofiles/ca.crt",
),
command: Health,
}
[bomnipotent_client::keys] [DEBUG] Looking for secret key
[bomnipotent_client::keys] [DEBUG] The provided key is a path: /home/simon/git/bomnipotent/test_cryptofiles/admin
[bomnipotent_client::keys] [DEBUG] Reading secret key from provided path "/home/simon/git/bomnipotent/test_cryptofiles/admin"
[bomnipotent_client::request] [DEBUG] Adding trusted root certificate
[reqwest::blocking::wait] [TRACE] (ThreadId(1)) park without timeout
[reqwest::blocking::client] [TRACE] (ThreadId(14)) start runtime::block_on
[bomnipotent_client::request] [DEBUG] Signing request
[bomnipotent_client::request] [DEBUG] Assembled GET request to https://localhost:62443/health
[reqwest::blocking::wait] [TRACE] wait at most 30s
[reqwest::blocking::wait] [TRACE] (ThreadId(1)) park timeout 29.999994032s
[reqwest::connect] [DEBUG] starting new connection: https://localhost:62443/
[reqwest::blocking::wait] [TRACE] wait at most 30s
[reqwest::blocking::client] [TRACE] closing runtime thread (ThreadId(14))
[reqwest::blocking::client] [TRACE] signaled close for runtime thread (ThreadId(14))
[reqwest::blocking::client] [TRACE] (ThreadId(14)) Receiver is shutdown
[reqwest::blocking::client] [TRACE] (ThreadId(14)) end runtime::block_on
[reqwest::blocking::client] [TRACE] (ThreadId(14)) finished
[reqwest::blocking::client] [TRACE] closed runtime thread (ThreadId(14))
[bomnipotent_client::output] [INFO] Service is healthy
Log Datei
Um die Log Ausgabe eines BOMnipotent Client Aufrufs in einer Datei zu speichern anstatt sie auf stdout zu schreiben, rufen Sie:
bomnipotent_client --log-file=<PFAD> <BEFEHL>
bomnipotent_client -f <PFAD> <BEFEHL>
Die Ausgabe ist die Gleiche, abgesehen davon, dass sie für stdout entsprechend ihres Schweregrades eingefärbt wird, und für ide Logdatei nicht.
Falls BOMnipotent Client wiederholt mit derselben Logdatei gerufen wird, wird es diese überschreiben, falls die existierende Datei aussieht wie eine Logdatei.
Eine Datei sieht für BOMnipotent wie eine Logdatei aus, falls sie entweder leer ist, oder mindestens einen der Strings “[ERROR]”, “[WARN]”, “[INFO]”, “[DEBUG]” oder “[TRACE]” enthält.
Falls eine existierende Datei nicht wie eine Logdatei aussieht, wird BOMnipotent vorsichtigt und bricht ab:
Logfile "/tmp/loggy.log" already exists and does not look like a logfile. Aborting before overwriting any data you do not want overwritten.
Da die Befehle
“bom get”
/
“csaf get”
und “fetch” dafür gedacht sind, von Maschinen verarbeitet zu werden, schreiben sie ihre Ausgabe in stdout, selbst wenn eine Logdatei konfiguriert ist. Diese Trennung der Ausgaben macht es möglich, gleichzeitig die Daten zu verarbeiten und mögliche Fehlermeldungen zu speichern.
Ausgabemodus
Ohne das irgendein Ausgabemodus angegeben ist, schreibt BOMnipotent Client seine Lognachrichten entweder auf stdout, oder in eine konfigurierte
Logdatei
. Das ist großartig falls es von Menschen genutzt wird, aber nicht so praktisch für Automation. Deswegen bietet BOMnipotent Client zusätzlich die beiden Ausgabemodi
“code”
und
“raw”
an. Diese modifizieren welche Ausgabe wohin geschrieben wird.
Ausgaben
In den Ausgabemodi “code” oder “raw” wird nur der HTTP Code oder der Response Body zu stdout ausgegeben. Falls Sie
eine Logdatei konfiguriert haben
, werden alle Logs bis zu dem angegebenen
Log-Level
dort gespeichert.
Falls Sie hingegen keine Logdatei angegeben haben, will BOMnipotent Sie dennoch wissen lassen, falls etwas schiefgeht. Deswegen werden in diesem Fall Lognachrichten mit den Schweregraden “error” oder “warn” zu stderr ausgegeben.
Das ist besonders nützlich, wenn Sie BOMnipotent-Client in einem Skript verwendet möchten:
#!/bin/bash
set -e # Return on error# ...other code..../bomnipotent_client \
--output-mode=code \
--domain=$domain \
--log-level=debug \
--log-file="/tmp/loggy.log"\
session login
code=$(./bomnipotent_client health)if(( code !=200)); then echo "Server at $domain is not healthy!" cat /tmp/loggy.log
exit 1;
fi
Beachten Sie, dass am Ende der Ausgabe kein Zeilenumbruch oder Wagenrücklaufzeichen steht.
“Wagenrücklaufzeichen” ist tatsächlich die deutsche Übersetzung von “carriage return”. Abgefahren.
Achtung: Im Code Modus hat BOMnipotent Client immer einen Terminal Rückgabewert von 0 (was Erfolg anzeigt), egal welchen HTTP Code es zurückbekommt. Das macht es leichter, das Programm in Skripten zu verwenden, welche bei einem Fehler abbrechen.
Raw
Für Aufrufe, die auf strukturierte Daten zugreifen, gibt der raw-Modus die Daten aus dem Response Body aus, welche üblicherweise im JSON Format vorliegen.
Die Ausgabe kann dann einfach von der Programmlogik analysiert und weiterverarbeitet werden.
Beachten Sie, dass am Ende der Ausgabe kein Zeilenumbruch oder Wagenrücklaufzeichen steht.
Für Konsumenten
Dieser Abschnitt behandelt übliche Nutzungssczenarien für Konsumenten von Lieferkettensicherheitsdokumenten. In diesem Kontext bezeichnet “Konsument” eine Person oder Automation, welche lesenden Zugriff (beschränkt oder unbeschränkt) auf BOMs, Sicherheitslücken oder CSAF Dokumente hat.
Unterabschnitte von Für Konsumenten
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.
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.
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 ./boms
[INFO] Storing BOMs under ./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.
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:
[WARN] File ./boms/white/2023/wid-sec-w-2023-0001.json already exists.
Use the "--overwrite" flag to replace it.
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:
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 <NAME> <VERSION> | grype
NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY
ring 0.17.10 0.17.12 rust-crate GHSA-4p46-pwfr-66x6 Medium
Komponentenliste
Der Zweck eines Stücklistenverzeichnisses (Bill of Materials, BOM) besteht darin, die Komponenten eines Produkts zu katalogisieren. BOMnipotent Client kann verwendet werden, um alle Pakete usw. aufzulisten, die in einem Produkt enthalten sind, welches über Ihr Benutzerkonto zugänglich ist. Rufen Sie einfach den Client mit den Argumenten “component”, “list” und anschließend dem Namen und der Version des Produkts auf:
Diese Ausgabe ist in erster Linie für den Menschen lesbar. Die Verwendung der Option --output=raw macht sie prinzipiell maschinenlesbar, aber
das vollständige Herunterladen der BOM
ist höchstwahrscheinlich vorzuziehen, anstatt diese Tabellenausgabe zu parsen.
Ein Anbieter eines Produkts sollte die BOM eines Produkts regelmäßig auf Schwachstellen überprüfen, beispielsweise mit Tools wie
grype
. Der
nächste Abschnitt
erklärt, wie Sie als Nutzer eines Produkts auf diese Listen zugreifen können.
Sicherheitslücken
Um eine Liste bekannter Sicherheitslücken anzuzeigen, die ein Produkt betreffen, rufen Sie “vulnerability”, “list” sowie den Namen und die Version des Produkts auf:
Produktname und -version sind optionale positionale Argumente. Falls Sie keine Version angeben erhalten sie die Ausgabe für alle Versionen des Produktes, und falls Sie auch dieses nicht angeben, die für alle Ihnen zur Verfügung stehenden Produkte.
Die Ausgabe enthält eine ID für die Schwachstelle, eine Beschreibung sowie, und, falls verfügbar, einen
CVSS Wert
und/oder eine Schweregrad-Einstufung. Zudem enthält sie eine
TLP Klassifizierung
, welche sich von der des betroffenen Produkts ableitet, und idealerweise eine
CSAF Bewertung
durch den Anbieter.
Das CSAF-Dokument ist ein entscheidender Bestandteil, da es Ihnen als Nutzer des Produkts mitteilt, wie Sie auf diese Schwachstelle in der Lieferkette reagieren sollten. Lesen Sie den
nächsten Abschnitt
, um herauszufinden, wie Sie darauf zugreifen können.
CSAF Dokumente
Wenn eine Sicherheitslücke in einer der Komponenten eines von Ihnen genutzten Produkts bekannt wird, stellt sich eine der naheliegendsten Fragen: “Was muss ich jetzt tun?”. Das
Common Security Advisory Format (CSAF)
soll diese Frage auf automatisierte Weise beantworten. Es handelt sich um ein hauptsächlich maschinenlesbares Format zum Austausch von Sicherheitswarnungen zu Schwachstellen.
Eine der Hauptfunktionen von BOMnipotent besteht darin, die Verteilung von CSAF-Dokumenten so einfach wie möglich zu gestalten. Jede laufende Instanz des BOMnipotent-Servers fungiert als “CSAF Provider” gemäß dem
OASIS Standard
.
Auflistung
Das Ausführen des Befehls
./bomnipotent_client csaf list
gibt eine Liste aller für Sie zugänglichen CSAF-Dokumente aus.
╭───────────────┬───────────────────────────┬──────────────────────┬──────────────────────┬────────┬───────────╮
│ ID │ Title │ Initial Release │ Current Release │ Status │ TLP │
├───────────────┼───────────────────────────┼──────────────────────┼──────────────────────┼────────┼───────────┤
│ BSI-2022-0001 │ CVRF-CSAF-Converter: XML │ 2022-03-17 13:03 UTC │ 2022-07-14 08:20 UTC │ final │ TLP:WHITE │
│ │ External Entities Vulnera │ │ │ │ │
│ │ bility │ │ │ │ │
╰───────────────┴───────────────────────────┴──────────────────────┴──────────────────────┴────────┴───────────╯
Zugängliche CSAF-Dokumente sind diejenigen, die entweder mit TLP:WHITE/TLP:CLEAR, gekennzeichnet sind oder sich auf ein Produkt beziehen, für das Sie Zugriff erhalten haben.
Herunterladen
Um alle für Sie zugänglichen CSAF-Dokumente lokal zu spiegeln, führen Sie den folgenden Befehl aus:
bomnipotent_client csaf download ./csaf
[INFO] Storing CSAF documents under ./csaf
Dies speichert die CSAF-Dokumente im angegebenen Ordner ("./csaf"in diesem Beispiel). Falls der Ordner noch nicht existiert, wird die Verzeichnisstruktur automatisch erstellt. Die CSAF-Dokumente werden in Dateipfaden abgelegt, die dem Namensschema {tlp}/{initial_release_year}/{csaf_id}.json.
Die Dateinamen der CSAF-Dokumente folgen einem vom
OASIS Standard
vorgegebenen Namensschema: Die IDs werden in Kleinbuchstaben umgewandelt, und die meisten Sonderzeichen werden durch einen Unterstrich ‘_’ ersetzt. Das bedeutet, dass theoretisch verschiedene CSAF-Dokumente zum selben Dateipfad führen könnten. In einem solchen Fall zeigt BOMnipotent einen Fehler an, anstatt eine Datei stillschweigend zu überschreiben.
tree ./csaf/
./csaf/
└── white
└── 2022
└── bsi-2022-0001.json
Bevor Dateien zum Download angefordert werden, erstellt der BOMnipotent-Client eine Inventarliste der bereits im Ordner vorhandenen CSAF-Dokumente und lädt nur die fehlenden herunter.
Es ist auch möglich, eine einzelne Datei herunterzuladen, indem der Pfad als zusätzliches Argument angegeben wird:
BOMnipotent überschreibt existierende Dateien nicht, selbst falls sie sich auf dem Server geändert haben. Stattdessen gibt es eine Warnung aus:
[WARN] File ./csaf/white/2023/wid-sec-w-2023-0001.json already exists.
Use the "--overwrite" flag to replace it.
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:
Dieser Abschnitt richtet sich an Manager eines Teils eines BOMnipotent-Systems. Ein Manager bezeichnet in diesem Zusammenhang ein Benutzerkonto, welches die Berechtigung zum
Hochladen oder Ändern
von Lieferkettensicherheitsdokumenten oder zur
Verwaltung der Zugriffsrechten
anderer Benutzer besitzt.
Unterabschnitte von Für Manager
Abonnementverwaltung
Die meisten Aktionen, die Daten zu Ihrer BOMnipotent-Datenbank hinzufügen, erfordern ein aktives Abonnement. Das Lesen und Entfernen von Daten hingegen nicht. Diese Richtlinie stellt sicher, dass Ihre Nutzer den Zugriff auf die vorhandenen Daten nicht verlieren, falls Sie das Produkt nicht mehr bezahlen möchten.
Gewerbliche Unternehmen wie Firmen können ein Abonnement auf
bomnipotent.de
erwerben. Nicht-gewerbliche Unternehmen können BOMnipotent kostenlos nutzen. Fordern Sie dafür den Zugriff per E-Mail an
info@wwh-soft.com
an.
Auf dieser Seite wird beschrieben, wie Sie mit dem BOMnipotent-Client und Ihrem Abonnementschlüssel eine Instanz des BOMnipotent-Servers (de-)aktivieren. Das Abonnement selbst, d. h. Zahlung, Validierung und Testphase, wird von der externen Firma Paddle abgewickelt. Eine Beschreibung der Verwaltung dieser Aspekte würde den Rahmen dieser Dokumentation sprengen. Bei Fragen wenden Sie sich bitte an
die Hilfeseite
von Paddle.
Kurz nach Abschluss Ihres Abonnements erhalten Sie eine E-Mail mit Ihrem Abonnementschlüssel.
Abonnements können nur von Benutzern mit der Rolle “Administrator” verwaltet werden.
Aktivieren
Um Ihr neues Abonnement zu aktivieren, rufen Sie einfach Folgendes auf:
Der Server benachrichtigt Sie, falls bei der Aktivierung ein Fehler auftritt:
[ERROR] Received response:
404 Not Found
Failed to activate subscription key: The subscription is missing in the sever database. Please visit https://www.wwh-soft.com to acquire it.
Status
Um Informationen über den aktuellen Status Ihres Abonnements zu erhalten, rufen Sie:
bomnipotent_client subscription status
╭──────────┬─────────────┬─────────────────────┬─────────────────────────┬─────────────────────────┬───────────────────────────╮
│ Key │ Product │ Subscription Status │ Valid Until │ Last Updated │ Assessment │
├──────────┼─────────────┼─────────────────────┼─────────────────────────┼─────────────────────────┼───────────────────────────┤
│ ***ccfb3 │ BOMnipotent │ active │ 2025-04-10 17:26:29 UTC │ 2025-03-10 16:26:29 UTC │ The subscription is valid │
│ │ │ │ │ │ . │
╰──────────┴─────────────┴─────────────────────┴─────────────────────────┴─────────────────────────┴───────────────────────────╯
Diese Ausgabe enthält eine verschleierte Variante Ihres Schlüssels, einen Status und einige zusätzliche Informationen.
Entfernen
Wenn Sie Ihr Abonnement von einer Instanz des BOMnipotent-Servers entfernen möchten (z. B. weil Sie es für eine andere Instanz verwenden möchten), rufen Sie Folgendes auf:
Um zu vermeiden, dass eine BOMnipotent-Serverinstanz, auf die Sie Administratorzugriff haben, versehentlich deaktiviert wird, ist der korrekte Schlüssel als Argument erforderlich.
Dokumentenverwaltung
BOMnipotent unterstützt zwei Arten von Lieferkettensicherheitsdokumenten: Stücklisten (BOMs) und Common Security Advisory Format (CSAF)-Dokumente. Darüber hinaus kann es Informationen zu Schwachstellen in Zusammenhang mit einer BOM bereitstellen.
Eine typische Herangehensweise an das Dokumentenmanagement sieht folgendermaßen aus:
Eine neue Produktversion wird zusammen mit der zugehörigen BOM veröffentlicht. Die BOM kann beispielsweise mit
syft
erstellt werden. Dieses Dokument wird auf den Server
hochgeladen
hochgeladen. Im Gegensatz zu anderen Dokumenten sollten BOMs als statische Daten behandelt werden. Das Ändern oder Löschen von Stücklisten ist möglich, aber selten.
Ein automatisiertes Tool oder Skript lädt die BOMs regelmäßig herunter und prüft sie auf Schwachstellen. Dies kann beispielsweise mit
grype
erfolgen. Die Ergebnisse werden auf dem Server
aktualisiert
.
Ein weiteres Tool oder Skript
prüft
den BOMnipotent-Server regelmäßig auf neue Schwachstellen und schlägt Alarm, falls eine gefunden wird. Menschliches Denken ist gefragt!
Der Mitarbeitende analysiert die Schwachstelle gründlich und ermittelt, ob und wie Ihre Kunden reagieren müssen. Er erstellt ein CSAF-Dokument, beispielsweise mithilfe von
secvisogram
. Das CSAF-Dokument wird auf den BOMnipotent-Server
hochgeladen
.
Ihre Nutzer finden jetzt das neue CSAF-Dokument, wenn sie bei Ihrer Instanz des BOMnipotent-Servers
anfragen
.
Unterabschnitte von Dokumentenverwaltung
BOMs
Stücklisten (Bills of Materials, BOMs) stehen im Mittelpunkt der Funktionalität und des Namens von BOMnipotents. Eine BOM ist eine Liste aller Komponenten, aus denen ein Produkt besteht. Im Kontext der Cybersicherheit ist die Software-BOM (SBOM) die bekannteste Variante, BOMs ermöglichen aber auch allgemeinere Überlegungen.
Für BOM-Interaktionen, die über das Lesen hinausgehen, benötigen Sie die Berechtigung BOM_MANAGEMENT. Im Abschnitt zur
Verwaltung von Zugriffsrechten
wird beschrieben, wie diese erteilt wird.
Hochladen
Um eine BOM hochzuladen, rufen Sie Folgendes auf:
bomnipotent_client bom upload <PFAD/ZUR/BOM>
BOMnipotent erwartet seine BOM im strukturierten
CycloneDX
JSON-Format.
Im
Syft-Tutorial
erfahren Sie, wie Sie eine BOM für Ihr Produkt erstellen.
Der BOMnipotent Client ließt die Datei unter dem angegebenen Pfad und lädt ihren Inhalt hoch. Die BOM kann dann von Konsumenten mit entsprechenden Berechtigungen eingesehen werden.
BOMs für Konsumenten
beschreibt, wie die BOMs auf dem Server aufgelistet und heruntergeladen werden.
Um eine BOM zur Datenbank hinzuzufügen, benötigt der BOMnipotent Client einige zusätzliche Informationen: einen Namen, eine Version und optional ein TLP-Label. Name und Version können entweder abgeleitet (empfohlen) oder wie unten beschrieben überschrieben werden.
Name und Version
BOMnipotent verwendet Name und Version zur Identifizierung einer Stückliste. Diese werden aus den bereitgestellten CycloneDX-JSON-Feldern “metadata.component.name” und “metadata.component.version” abgeleitet. Gemäß der
CycloneDX-Spezifikation
ist das Feld “metadata.component” jedoch optional.
Wenn keine Version angegeben ist, verwendet BOMnipotent stattdessen das Datum von “metadata.timestamp”, sofern verfügbar.
Um Komplikationen zu vermeiden, wird empfohlen, beim Generieren der Stückliste Name und Version anzugeben, wie im
Syft-Tutorial
beschrieben.
Falls Ihrer BOM aus irgendeinem Grund ein Name oder eine Version fehlt oder diese fehlerhaft ist, bietet der BOMnipotent Client die Möglichkeit, dies über Befehlszeilenargumente zu beheben:
Wichtig: Der BOMnipotent Client ändert in diesem Fall die Daten, bevor sie an den Server gesendet werden. Die lokale Datei wird nicht geändert, da dies zu weit gehen würde. Das bedeutet, dass Ihre lokale Datei und die Daten auf dem Server nicht mehr synchron sind. Schlimmer noch: Falls Sie Ihre BOM signiert haben, ist Ihre Signatur nun ungültig.
Falls Sie diese Option nutzen, wird daher empfehlen, die BOM umgehend vom Server herunterzuladen (wie in
BOMs für Verbraucher
beschrieben) und Ihre lokale Datei durch das Ergebnis zu ersetzen.
Falls Sie keines von beiden tun, behandelt BOMnipotent alle nicht klassifizierten Dokumente so, als wären sie mit dem Label TLP:RED gekennzeichnet, und gibt jedes Mal eine Warnung aus, wenn dies erforderlich ist.
Ändern
Im einfachsten Fall funktioniert das Ändern einer vorhandenen Stückliste ähnlich wie das Hochladen einer neuen.
bomnipotent_client bom modify <PFAD/ZUR/BOM>
Dadurch werden Name und Version des Dokuments abgeleitet und der vorhandene Inhalt auf dem Server überschrieben. Sollten die Daten auf dem Server nicht vorhanden sein, wird ein 404-Fehler “Nicht gefunden” zurückgegeben.
TLP-Label ändern
Wenn der Stückliste zuvor ein TLP-Label zugewiesen wurde, wird dieses durch eine Änderung des Inhalts nicht automatisch geändert.
Wenn Sie ein neues TLP-Label angeben möchten, können Sie dies über das folgende Argument tun:
Wenn sich der Inhalt der Stückliste nicht geändert hat und Sie nur das TLP-Label ändern möchten, müssen Sie das Dokument nicht erneut hochladen. Anstatt einen Dateipfad anzugeben, können Sie Name und Version der neu zu klassifizierenden BOM angeben:
Wenn Sie als TLP-Label “none”, “default” oder “unlabelled” angeben, wird jede vorhandene Klassifizierung entfernt und der Server greift auf das
Default-TLP-Label
der Serverkonfiguration zurück:
bomnipotent_client bom modify <PFAD/ZUR/BOM> --tlp=none
bomnipotent_client bom modify <PFAD/ZUR/BOM> --tlp=default # Führt dasselbe aus
bomnipotent_client bom modify <PFAD/ZUR/BOM> --tlp=unlabelled # Führt dasselbe aus
bomnipotent_client bom modify <PFAD/ZUR/BOM> -t none
bomnipotent_client bom modify <PFAD/ZUR/BOM> -t default # Führt dasselbe aus
bomnipotent_client bom modify <PFAD/ZUR/BOM> -t unlabelled # Führt dasselbe aus
Name oder Version ändern
Wenn das hochgeladene Dokument einen anderen Namen oder eine andere Version hat als die zu ändernden Daten, müssen Sie diese Informationen dem BOMnipotent-Client mithilfe der folgenden Befehlszeilenargumente mitteilen:
Wichtig: Wie beim Hochladen werden die JSON-Daten vor dem Hochladen auf den Server geändert! Es gelten die gleichen Dinge zu bedenken.
Wenn die Daten auf dem Server einen anderen Namen und/oder eine andere Version haben als im Dokument angegeben, können Sie die Angabe mit einem Überschreiben der Daten kombinieren:
Das Ändern von Name und/oder Version ohne Angabe des vollständigen Dokuments ist nicht unterstützt.
Löschen
Das Löschen einer BOM ist sehr einfach:
bomnipotent_client bom delete <NAME> <VERSION>
Falls die BOM nicht existiert, gibt der Server den Fehler 404 “Nicht gefunden” zurück. Ist sie vorhanden, wird sie aus der Datenbank entfernt.
Alle Komponenten und Sicherheitslücken, die mit der BOM assoziiert sind, werden ebenfalls gelöscht.
Sicherheitslücken
Ein zentraler Bestandteil der Lieferkettensicherheit ist der Abgleich des Inhalts einer Stückliste (BOM), also aller Komponenten eines Produkts, mit Datenbanken bekannter Schwachstellen.
Für Schwachstelleninteraktionen, die über das Lesen hinausgehen, benötigen Sie die Berechtigung VULN_MANAGEMENT. Im Abschnitt zur
Verwaltung von Zugriffsrechten
wird beschrieben, wie diese erteilt wird.
Erkennen
BOMnipotent erkennt selbst keine neuen Schwachstellen. Ein Tool, das in Kombination mit BOMnipotent verwendet werden kann, ist
grype
. Es verwendet eine BOM als Eingabe und erstellt eine Liste der Schwachstellen als Ausgabe. Das
grype-Tutorial
enthält weitere Informationen zur Verwendung. Es können aber auch andere Tools verwendet werden, solange sie Output im
CycloneDX JSON Format
erstellen können.
Mit dem BOMnipotent-Client können Sie den Inhalt einer BOM direkt ausgeben und an grype weiterleiten.
bomnipotent_client bom get <BOM-NAME> <BOM-VERSION> | grype --output cyclonedx-json=./vuln.cdx.json
bomnipotent_client bom get <BOM-NAME> <BOM-VERSION> | grype -o cyclonedx-json=./vuln.cdx.json
Dadurch werden die Softwarekomponenten anhand mehrerer Datenbanken geprüft und die Ergebnisse in das CycloneDX eingepflegt. Anschließend werden alle Ergebnisse in einer Datei namens “vuln.cdx.json” (oder einem anderen von Ihnen angegebenen Namen) gespeichert.
Grype hat derzeit einen kleinen
bekannten Fehler
, der dazu führt, dass die Version der Hauptkomponente beim Hinzufügen der Schwachstellen vergessen wird. Dies ist problematisch, da BOMnipotent die Version zur eindeutigen Identifizierung eines Produkts benötigt. Eine mögliche Problemumgehung besteht darin, die Version erneut zum Dokument hinzuzufügen, beispielsweise über jq '.metadata.component.version = "<VERSION>"' "vuln.cdx.json" > "vuln_with_version.cdx.json". Ab BOMnipotent v0.3.1 können Sie die Version stattdessen direkt beim Hochladen der Schwachstelle angeben, wie unten beschrieben.
Aktualisierung
Der Befehl zum Aktualisieren der mit einer BOM verknüpften Schwachstellen lautet:
Das Argument “<VULNERABILITIES>” muss ein Pfad zu einer Datei im
CycloneDX JSON-Format
sein.
Idealerweise enthält diese Datei den Namen und die Version der zugehörigen BOM. In diesem Fall werden diese automatisch gelesen. Falls einer der Werte fehlt (z. B. aufgrund eines
bekannten Fehlers
in grype), können Sie ihn mit einem optionalen Argument angeben:
[INFO] Updated vulnerabilities of BOM BOMnipotent_1.0.0
Schwachstellen sollten regelmäßig aktualisiert werden. Dadurch werden alle vorherigen Schwachstellen, die mit einer BOM verknüpft sind, vollständig ersetzt. Das hochgeladene CycloneDX-Dokument muss daher eine vollständige Liste aller bekannten Schwachstellen enthalten.
Sie können Schwachstellen nur für eine BOM aktualisieren, die auf dem Server vorhanden ist:
[ERROR] Received response:
404 Not Found
BOM Schlagsahne_1.0.1 not found in database
Auflistung
Der Abschnitt zum
Auflisten von Schwachstellen
in der Dokumentation für Verbraucher behandelt die meisten Aspekte der Auflistung von Schwachstellen.
Ein Aspekt, der dort nicht erwähnt wird, ist die Option “–unassessed”. Damit listet der BOMnipotent-Client nur Schwachstellen auf, denen kein CSAF-Dokument zugeordnet ist.
bomnipotent_client vulnerability list --unassessed
In diesem Modus beendet der BOMnipotent Client den Vorgang mit einem Fehlercode genau dann wenn nicht bewertete Schwachstellen vorliegen. Dies erleichtert die Integration dieses Aufrufs in Ihre regelmäßige CI/CD.
Sie können diese Option frei mit der Angabe eines Produktnamens oder einer Version kombinieren:
bomnipotent_client vulnerability list <NAME> <VERSION> --unassessed
bomnipotent_client vulnerability list <NAME> <VERSION> -u
[INFO] No unassessed vulnerabilities found
CSAF Dokumente
Ein Common Security Advisory Format (CSAF)-Dokument ist die Antwort eines Herstellers auf eine neu entdeckte Sicherheitslücke. Es ist ein maschinenlesbares Format, welches Informationen darüber verbreitet, wie Nutzer Ihres Produkts reagieren sollten: Muss auf eine neuere Version aktualisiert werden? Muss eine Konfiguration geändert werden? Ist Ihr Produkt überhaupt betroffen oder ruft es den betroffenen Teil der anfälligen Bibliothek möglicherweise nie auf?
Für CSAF-Interaktionen, die über das Lesen hinausgehen, benötigen Sie die Berechtigung CSAF_MANAGEMENT. Im Abschnitt über die
Verwaltung von Zugriffsrechten
wird beschrieben, wie diese erteilt wird.
Hochladen
Um ein CSAF-Dokument hochzuladen, rufen Sie
bomnipotent_client csaf upload <PFAD/ZUM/CSAF> auf.
[INFO] Uploaded CSAF with id WID-SEC-W-2024-3470
Bevor Ihr CSAF-Dokument hochgeladen wird, prüft der BOMnipotent Client, ob es gemäß dem
OASIS CSAF-Standard
gültig ist.
Sie können das Ergebnis des Vorgangs mit
bomnipotent_client csaf list
╭─────────────────────┬───────────────────────────┬─────────────────────────┬─────────────────────────┬────────┬───────────╮
│ ID │ Title │ Initial Release │ Current Release │ Status │ TLP │
├─────────────────────┼───────────────────────────┼─────────────────────────┼─────────────────────────┼────────┼───────────┤
│ WID-SEC-W-2024-3470 │ binutils: Schwachstelle e │ 2024-11-14 23:00:00 UTC │ 2024-11-17 23:00:00 UTC │ final │ TLP:WHITE │
│ │ rmöglicht Denial of Servi │ │ │ │ │
│ │ ce │ │ │ │ │
╰─────────────────────┴───────────────────────────┴─────────────────────────┴─────────────────────────┴────────┴───────────╯
Alle Daten stammen aus dem CSAF-Dokument.
Falls das Dokument nicht den optionalen TLP-Labeleintrag enthält, wird es mit dem für den Server konfigurierten
Default-TLP
behandelt.
...┬────────┬─────────╮
...│ Status │ TLP │
...┼────────┼─────────┤
...│ final │ Default │
...┴────────┴─────────╯
Ändern
Wenn sich der Status Ihres Dokuments ändert, Sie es neu klassifizieren möchten oder neue Informationen vorliegen, können Sie es ändern. Um die neue Version hochzuladen, rufen Sie Folgendes auf:
bomnipotent_client csaf delete <PFAD/ZUM/CSAF>
[INFO] Modified CSAF with id BSI-2024-0001-unlabeled
Der Befehl kann sogar die ID vom CSAF Dokument modifizieren. Da die bisheriger ID in diesem Fall nicht aus dem neuen Dokument abgeleitet werden kann, muss sie als optionales Argument angegeben werden:
Um ein CSAF-Dokument von Ihrem Server zu löschen (was Sie wirklich nur tun sollten, falls etwas komplett schiefgelaufen ist), rufen Sie einfach Folgendes auf:
bomnipotent_client csaf delete <CSAF-ID>
[INFO] Deleted CSAF with id WID-SEC-W-2024-3470
Zugriffsverwaltung
Dokumente zur Lieferkettensicherheit sind das Was von BOMnipotent, Nutzer das Wer. Sofern Sie nicht ausdrücklich etwas anderes angeben, sind die gehosteten Dokumente nur für die Nutzerkonten sichtbar, welch von Ihnen Zugriff erahalten haben.
BOMnipotent verwendet rollenbasierte Zugriffskontrolle (RBAC): Nutzer haben Rollen, und Rollen haben
Berechtigungen
. Nach der Einrichtung enthält BOMnipotent einige Standardrollen. Diese reichen für die Serververwaltung aus. Um jedoch Nutzeranfragen annehmen zu können, sollten Sie mindestens eine neue Rolle
erstellen
.
Sobald dies erledigt ist, sieht ein typischer Workflow zur Einführung eines neuen Nutzers in Ihr BOMnipotent-System wie folgt aus:
Ein neuer Nutzer
erfragt Zugriff
zu Ihrem Server. Dabei sendet der BOMnipotent-Client einen mit dem Konto verknüpften öffentlichen Schlüssel an Ihren Server, wo er gespeichert und als “REQUESTED” gekennzeichnet wird.
Sie
genehmigen
die Anfrage. Das neue Benutzerkonto wird nun als gültig akzeptiert, verfügt aber noch über keine Berechtigungen.
Sie
weisen
dem neuen Benutzerkonto eine oder mehrere Rollen zu.
Unterabschnitte von Zugriffsverwaltung
Berechtigungen
In BOMnipotent sind Berechtigungen nicht direkt mit Benutzerkonten, sondern mit Rollen verknüpft. Der Abschnitt zur
Rollenverwaltung
beschreibt, wie diese Verknüpfung verwaltet wird, und der Abschnitt zur
Rollenzuweisung
erläutert, wie Rollen (und damit letztlich Berechtigungen) Benutzern zugewiesen werden.
Der Server verfügt über mehrere Berechtigungen im Code, von denen einige fest programmiert, andere konfigurierbar sind. Alle werden hier erläutert. Informationen zum Erstellen einer Berechtigung, die einer Rolle zugeordnet ist, finden Sie im entsprechenden
Abschnitt
.
Ihre Kunden sind in der Regel mit einem oder mehreren Ihrer Produkte verknüpft. Sie möchten alle Arten von Dokumenten und Informationen zu diesem Produkt einsehen, haben aber nicht automatisch Anspruch auf Informationen zu anderen Produkten.
PRODUCT_ACCESS
Eine Berechtigung mit dem Wert “PRODUCT_ACCESS(<PRODUCT>)” gewährt Leseberechtigung für alle mit “<PRODUCT>” verknüpften Dokumente. Dies umfasst alle Stücklisten (BOMs) dieses Produkts, alle damit verbundenen Schwachstellen und alle CSAF-Dokumente zu diesem Produkt.
Beispielsweise könnte eine Rolle mit dem Wert “PRODUCT_ACCESS(BOMnipotent)” alle mit BOMnipotent verknüpften Dokumente (und nur diese) einsehen.
Dem Sternchen-Operator “*” kann als Globbing-Platzhalter für Produktnamen genutzt werden. Dabei entspricht das Sternchen einer beliebigen Anzahl von Symbolen. Beispielsweise würde die Berechtigung “PRODUCT_ACCESS(BOM*ent)” sowohl auf “BOMnipotent” als auch auf die (fiktiven) Produkte “BOMent” und “BOM-burárum-ent” zutreffen, nicht jedoch auf “BOMtastic” (da letzteres nicht auf “ent” endet).
Folglich ermöglicht “PRODUCT_ACCESS(*)” die Anzeige aller Dokumente.
Berechtigungen für Manager
Für Dokumentmanager ist die Situation in der Regel umgekehrt: Sie benötigen die Berechtigung, die Datenbankinhalte nicht nur anzuzeigen, sondern auch zu ändern. Ihr Umfang ist typischerweise nicht auf ein bestimmtes Produkt, sondern auf einen bestimmten Dokumenttyp beschränkt. Daher wird die Trennung der Managerberechtigungen aus einer anderen Perspektive betrachtet.
BOM_MANAGEMENT
Diese Berechtigung ermöglicht das
Hochladen, Ändern und Löschen
von Stücklisten (BOMs). Sie gewährt automatisch auch die Berechtigung zur Anzeige aller gehosteten Stücklisten.
VULN_MANAGEMENT
Diese Berechtigung ermöglicht das
Aktualisieren und Anzeigen
der Liste der Schwachstellen, die mit einer BOM verknüpft sind.
CSAF_MANAGEMENT
Diese Berechtigung ermöglicht das
Hochladen, Ändern und Löschen
von CSAF-Dokumenten (Common Security Advisory Format). Sie gewährt außerdem automatisch Anzeigeberechtigungen für alle gehosteten CSAF-Dokumente.
ROLE_MANAGEMENT
Mit dieser Berechtigung kann ein Benutzer die
Berechtigungen von Rollen ändern
. Dies kann weitreichende Folgen haben, da die Änderungen potenziell viele Benutzer betreffen.
BOMnipotent kennt die feststehende Rolle “admin”. Diese Rolle verfügt stets über alle Berechtigungen, die Benutzern erteilt werden können. Darüber hinaus gibt es einige Aufgaben, die nur von Benutzern mit der Administratorrolle ausgeführt werden können:
– Nur Administratoren können die Administratorrolle anderen Benutzern
zuweisen oder entziehen
. Ein
spezieller temporärer Administratormechanismus
ermöglicht die Erstellung des ersten Administrators für einen neu erstellten BOMnipotent Server.
– Nur Administratoren können den Abonnementschlüssel für eine BOMnipotent Server Instanz
(de)aktivieren
.
Rollenverwaltung
BOMnipotent verwendet ein rollenbasiertes Zugriffsmodell (RBAC), bei dem Benutzer Rollen und Rollen Berechtigungen zugeordnet werden. Während
Berechtigungen
in BOMnipotent größtenteils fest kodiert sind, können Rollen (fast) frei verwaltet werden. Dieser Abschnitt erklärt, wie das geht.
Um Rollen und ihre Berechtigungen zu ändern oder anzuzeigen, benötigt Ihr Benutzerkonto die Berechtigung ROLE_MANAGEMENT.
Standardrollen
Beim ersten Start Ihres BOMnipotent Servers werden in der Datenbank mehrere kreativ benannte Standardrollen angelegt:
Es gibt eine spezielle Rolle namens “admin”, die nicht in den anderen Rollen aufgeführt ist. Der Grund dafür ist, dass sie nicht Teil der Datenbank, sondern des BOMnipotent-Codes selbst ist. Daher kann sie nicht geändert werden.
Da Rollen ohne Berechtigungen bedeutungslos sind, werden sie immer paarweise verwendet. Es gibt keinen speziellen Mechanismus zum Erstellen einer neuen Rolle. Stattdessen existiert eine Rolle dadurch, dass ihr eine Berechtigung hinzugefügt wird.
Die Syntax zum Hinzufügen einer Berechtigung zu einer Rolle lautet:
[INFO] Removed permission VULN_MANAGEMENT from role vuln_manager
Sobald Sie die letzte Rolle aus einer Berechtigung entfernt haben, existiert diese nicht mehr.
Um Hoppla-Momente zu vermeiden, unterstützt BOMnipotent nicht das Löschen ganzer Stapel von Rollenberechtigungen.
Nutzerverwaltung
Der erste Schritt beim Anlegen eines neuen Benutzers ist die Beantragung eines neuen Kontos. Dieser Schritt wird
an anderer Stelle
beschrieben, da er sowohl für Manager als auch für Konsumenten relevant ist.
Aus Sicht von BOMnipotent ist ein Benutzer verknüpft mit einer eindeutigen E-Mail-Adresse als Kennung, und einem öffentlichen Schlüssel zur Authentifizierung. Dies sind alle Daten, die bei der Erstellung eines neuen Benutzerkontos gesendet werden.
Nach der Beantragung eines neuen Kontos obliegt es einem Benutzermanager, die Anfrage zu genehmigen oder abzulehnen.
Für die meisten Benutzerinteraktionen, einschließlich der Auflistung, benötigen Sie die Berechtigung USER_MANAGEMENT.
Auflistung
Um alle Benutzer in Ihrer Datenbank aufzulisten, rufen Sie
bomnipotent_client user list
╭────────────────────┬───────────┬─────────────────────────┬─────────────────────────╮
│ User Email │ Status │ Expires │ Last Updated │
├────────────────────┼───────────┼─────────────────────────┼─────────────────────────┤
│ admin@wwh-soft.com │ APPROVED │ 2026-03-23 04:51:26 UTC │ 2025-03-22 04:51:26 UTC │
│ info@wildeheide.de │ REQUESTED │ 2026-03-23 03:52:21 UTC │ 2025-03-22 03:52:21 UTC │
╰────────────────────┴───────────┴─────────────────────────┴─────────────────────────╯
So können Sie die E-Mail-Adressen und die Stati der Benutzer einsehen.
Ein Benutzer ohne den Status “APPROVED” hat keine besonderen Berechtigungen, unabhängig von zugewiesenen Rollen.
Jedem Benutzer ist außerdem ein Ablaufdatum zugeordnet. Ab diesem Zeitpunkt wird der öffentliche Schlüssel ungültig und muss erneuert werden. Die Gültigkeitsdauer eines Schlüssels kann in der Serverkonfiguration
frei konfiguriert
werden.
Genehmigung oder Ablehnung
Wenn Sie die Benutzeranfrage erwartet haben, können Sie sie genehmigen:
bomnipotent_client user approve <EMAIL>
[INFO] Changed status of info@wildeheide.de to APPROVED
Analog dazu können Sie diesem Benutzer stattdessen keinen Zugriff gewähren:
bomnipotent_client user deny <EMAIL>
[INFO] Changed status of info@wildeheide.de to DENIED
Es ist möglich, einem bereits genehmigten Benutzer den Zugriff wieder zu verweigern, wodurch das Konto effektiv widerrufen wird.
Entfernen
Wenn Sie ein Benutzerkonto vollständig löschen möchten, rufen Sie
bomnipotent_client user remove <EMAIL>
[INFO] Deleted user info@wildeheide.de
Dies löscht zusätzlich alle dem Benutzer zugewiesenen Rollen.
Rollenzuweisung
Rollen verbinden Benutzer mit Berechtigungen. Das Hinzufügen oder Entfernen von Rollen steuert indirekt, in welchem Umfang Benutzer mit Ihrer BOMnipotent Server Instanz interagieren können.
Zu Ihrer Bequemlichkeit werden beim ersten Start des BOMnipotent-Servers mehrere
Standardrollen
angelegt. BOMnipotent kennt außerdem die
Administratorrolle
, die eine besondere Behandlung erhält.
Um Benutzerrollen zu ändern oder anzuzeigen, benötigt Ihr Benutzerkonto die Berechtigung USER_MANAGEMENT.
Auflistung
Um alle Rollen aller Benutzer aufzulisten, rufen Sie
bomnipotent_client user-role list
╭──────────────────┬─────────────┬───────────────────────────╮
│ User Email │ User Role │ Last Updated │
├──────────────────┼─────────────┼───────────────────────────┤
│ info@quantumwire │ bom_manager │ 2025-03-22 04:27:33.71579 │
│ │ │ 7 UTC │
│ info@wildeheide │ bom_manager │ 2025-03-22 04:26:08.83708 │
│ │ │ 3 UTC │
╰──────────────────┴─────────────┴───────────────────────────╯
Hinzufügen
Um einem Benutzer eine neue Rolle hinzuzufügen, rufen Sie
bomnipotent_client user-role add <EMAIL> <ROLLE>
[INFO] Added role to user
Der Benutzeraccount muss zu diesem Zeitpunkt bereits auf dem Server existieren, die Rolle jedoch nicht.
Nur Benutzer mit der
Admin-Rolle
können anderen Benutzern die Admin-Rolle zuweisen.
Entfernen
Um einem Benutzer eine Rolle zu entfernen, rufen Sie Folgendes auf: