Server
Dieses Kapitel richtet sich ausschließlich an Systemadministratoren. Es enthält Anweisungen, wie Sie den BOMnipotent-Server zum Laufen bringen und ihn Ihren Anforderungen entsprechend konfigurieren.
Dieses Kapitel richtet sich ausschließlich an Systemadministratoren. Es enthält Anweisungen, wie Sie den BOMnipotent-Server zum Laufen bringen und ihn Ihren Anforderungen entsprechend konfigurieren.
Dieser Abschnitt soll Ihnen die Einrichtung Ihres Servers zum Hosten einer Instanz von BOMnipotent Server so einfach wie möglich machen.
Die Einrichtung besteht aus den folgenden, notwendigen Schritten:
Anschließend können Sie den Server nach Belieben konfigurieren .
Hier werden mehrere Einrichtungsvarianten vorgestellt. Sie können diejenige auswählen, die Ihren Anforderungen am besten entspricht, oder sie nach Belieben ändern. Wenn Sie nicht wissen, wo Sie anfangen sollen, ist die Einrichtung über Docker Compose eine ausgezeichnete Wahl.
Nachdem Sie die Schritte einer der Varianten befolgt haben, hat Ihr Server eine Standardkonfiguration und sollte über das Internet erreichbar sein. Danach sollten Sie einen Admin User Account hinzufügen .
Das empfohlene und einfachste Setup für BOMnipotent Server verwendet Docker Compose .
Die vorgeschlagene Dateistruktur im Favoritenverzeichnis Ihres Servers sieht folgendermaßen aus:
├── .env
├── bomnipotent_config
│ ├── config.toml
│ └── config.toml.default
└── compose.yaml
Dieses Tutorial führt Sie durch die Dateien und erklärt sie einzeln.
Der BOMnipotent-Server kommuniziert mit einer Datenbank. Derzeit wird nur PostgreSQL als Backend unterstützt. Die Datenbank ist durch ein Passwort geschützt. Es empfiehlt sich, das Passwort in einer separaten .env-Datei zu speichern, anstatt direkt im compose.yaml.
Der Name der Datei muss “.env” lauten, ansonsten erkennt Docker sie nicht.
Ihre .env-Datei sollte so aussehen:
BOMNIPOTENT_DB_PW=<Ihr-Datenbank-Passwort>
Falls Sie ein Versionierungssystem zum Speichern Ihres Setups verwenden, vergessen Sie nicht, “.env” zu Ihrer .gitignore oder analogen Ignore-Datei hinzuzufügen!
Um die Sicherheit ins rechte Licht zu rücken: Die Compose-Datei macht den PostgreSQL-Container nicht direkt vom Internet aus erreichbar. Das Passwort wird daher nur für Aufrufe innerhalb des Containernetzwerks verwendet.
BOMnipotent Server benötigt eine Konfigurationsdatei, die in einem anderen Abschnitt ausführlicher erläutert wird.
Der Name der Datei ist grundsätzlich beliebig, aber der einsatzbereite Docker-Container von BOMnipotent Server ist so eingerichtet, dass er nach “config.toml” sucht.
Eine minimale Konfiguration sieht so aus:
# Die db_url hat die Struktur [db_client]://[Benutzer]:[Passwort]@[Container]:[Port]/[db]
# Beachten Sie, dass ${BOMNIPOTENT_DB_PW} auf eine Umgebungsvariable verweist.
db_url = "postgres://bomnipotent_user:${BOMNIPOTENT_DB_PW}@bomnipotent_db:5432/bomnipotent_db"
# Domain, hinter der der Bomnipotent-Server gehostet wird
domain = "https://<Ihre-Domain>.<Top-Level>"
[tls]
# Der Pfad zu Ihrer vollständigen TLS-Zertifikatskette
certificate_chain_path = "/etc/ssl/certs/<Ihre-TLS-Zertifikatskette.crt>"
# Der Pfad zu Ihrem geheimen TLS-Schlüssel
secret_key_path = "/etc/ssl/private/<Ihr-geheimer-TLS-Schlüssel>"
# Herausgeberdaten gemäß dem unten verlinkten CSAF-Standard
[provider_metadata.publisher]
name = "<Geben Sie den Namen Ihrer Organisation an>"
# Namespace Ihrer Organisation in Form einer vollständigen URL
namespace = "https://<Ihre Domain>.<Top-Level>"
# Dies ist höchstwahrscheinlich die gewünschte Kategorie
category = "vendor"
# Kontaktdaten sind optional und in freier Form
contact_details = "<Bei Sicherheitsfragen kontaktieren Sie uns bitte unter...>"
Füllen Sie die Klammern mit Ihren Daten aus.
Der Abschnitt über TLS Konfiguration enthält detailiertere Information wie Sie übliche Fallstricke verhindern können.
Die Herausgeberdaten werden verwendet, um dem OASIS CSAF-Standard zu entsprechen.
Der Abschnitt über Provider-Metadata enthält mehr Details dazu was die verschiedenen Felder bedeuten.
Es wird empfohlen, Ihre config.toml-Datei in einem dedizierten Verzeichnis zu speichern, in diesem Beispiel “bomnipotent_config”. Die Docker-Compose-Datei gewährt Lesezugriff auf diesen Ordner. Dieses Setup hat zwei Vorteile:
Viele Konfigurationseinstellungen unterstützen Hot Reloading, d. h. sie können geändert werden, ohne den Server neu zu starten.
Nachdem Sie Ihre config.toml eingerichtet haben, möchten Sie sie möglicherweise beispielsweise als config.toml.default kopieren, um Ihre ursprüngliche Konfiguration schnell wiederherstellen zu können. Dies ist jedoch völlig optional.
In der Compose-Datei geben Sie das Container-Setup an. Sobald es reibungslos läuft, muss es nicht mehr so oft geändert werden, aber wenn Sie Docker noch nicht kennen, kann es einige Zeit dauern, bis Sie es verstanden haben.
Die Datei muss “compose.yaml” heißen, da kann Docker etwas pingelig sein.
Eine vollständig einsatzbereite Compose-Datei sieht so aus:
# Es ist optional, dem Setup einen Namen zu geben, andernfalls wird er von Docker abgeleitet.
name: bomnipotent_server_containers
# Die Docker-Container müssen kommunizieren und benötigen dafür ein Netzwerk.
networks:
# Dieses Netzwerk benötigt eine Referenz
bomnipotent_network:
# Da sich die Container auf demselben Docker-Host befinden, ist "bridge" eine sinnvolle Treiberwahl.
driver: bridge
# Es ist in Ordnung, dem Netzwerk denselben Namen wie der Referenz zu geben.
name: bomnipotent_network
volumes:
# Definieren Sie das Volume für die dauerhafte Speicherung der Datenbank
bomnipotent_data:
driver: local
# Der Server selbst benötigt auch noch ein Volumen falls Sie nicht das Abonnement nach jedem Neustart aktivieren wollen
bomnipotent_subscription:
driver: local
services:
bomnipotent_db:
# Name des Datenbankcontainers
container_name: bomnipotent_db
deploy:
resources:
limits:
# Begrenzen Sie die CPU-Auslastung auf 0,5 Kerne
cpus: "0.5"
# Begrenzen Sie die Speicherauslastung auf 512 MB
memory: "512M"
environment:
# Legen Sie den Datenbanknamen fest
POSTGRES_DB: bomnipotent_db
# Legen Sie den Datenbankbenutzer fest
POSTGRES_USER: bomnipotent_user
# Legen Sie das Datenbankkennwort aus der .env-Dateivariable fest
POSTGRES_PASSWORD: ${BOMNIPOTENT_DB_PW}
healthcheck:
# Überprüfen Sie, ob die Datenbank bereit ist
test: ["CMD-SHELL", "pg_isready -U bomnipotent_user -d bomnipotent_db"]
# Intervall zwischen Integritätsprüfungen
interval: 60s
# Timeout für jede Integritätsprüfung
timeout: 10s
# Anzahl der Wiederholungsversuche, bevor der Container als fehlerhaft betrachtet wird
retries: 5
# Startzeitraum vor der ersten Integritätsprüfung
start_period: 10s
# Verwenden Sie das angegebene PostgreSQL-Image
# Sie können das Container-Tag nach Belieben anpassen
image: postgres:17-alpine3.21
logging:
# Verwenden Sie den lokalen Protokollierungstreiber
driver: local
options:
# Begrenzen Sie die Protokollgröße auf 10 MB
max-size: "10m"
# Bewahren Sie maximal 3 Protokolldateien auf
max-file: "3"
networks:
# Stellen Sie eine Verbindung zum angegebenen Netzwerk her
- bomnipotent_network
# Starten Sie den Container neu, wenn er aus einem anderen Grund als einem Benutzerbefehl angehalten wurde
restart: always
volumes:
# Mounten Sie das Volume für die dauerhafte Datenspeicherung
- bomnipotent_data:/var/lib/postgresql/data
bomnipotent_server:
# Name des Servercontainers
container_name: bomnipotent_server
depends_on:
# Stellen Sie sicher, dass der Datenbankdienst fehlerfrei ist, bevor Sie den Server starten
bomnipotent_db:
condition: service_healthy
deploy:
resources:
limits:
# Begrenzen Sie die CPU-Auslastung auf 0,5 Kerne
cpus: "0.5"
# Begrenzen Sie die Speicherauslastung auf 512 MB
memory: "512M"
environment:
# Geben Sie das Datenbankkennwort an den Server weiter.
BOMNIPOTENT_DB_PW: ${BOMNIPOTENT_DB_PW}
healthcheck:
# Prüfen Sie, ob der Server fehlerfrei ist
# Ihr TLS-Zertifikat ist höchstwahrscheinlich für "localhost" nicht gültig
# Daher das --insecure Flag
test: ["CMD-SHELL", "curl --fail --insecure https://localhost:8443/health || exit 1"]
# Intervall zwischen den Integritätsprüfungen
interval: 60s
# Timeout für jede Integritätsprüfung
timeout: 10s
# Anzahl der Wiederholungsversuche, bevor der Container als fehlerhaft betrachtet wird
retries: 5
# Startzeitraum vor dem ersten Integritätscheck
start_period: 10s
# Dies ist das offizielle Docker-Image, auf dem eine BOMnipotent-Serverinstanz ausgeführt wird.
image: wwhsoft/bomnipotent_server:latest
logging:
# Verwenden Sie den lokalen Protokollierungstreiber
driver: local
options:
# Begrenzen Sie die Protokollgröße auf 10 MB
max-size: "10m"
# Bewahren Sie maximal 3 Protokolldateien auf
max-file: "3"
networks:
# Stellen Sie eine Verbindung zum angegebenen Netzwerk her
- bomnipotent_network
ports:
# Ordnen Sie Port 443 auf dem Host Port 8443 auf dem Container zu
# Dies ermöglicht die Verbindung über verschlüsselte Kommunikation
- target: 8443
published: 443
# Starten Sie den Container neu, wenn er aus einem anderen Grund als einem Benutzerbefehl angehalten wurde
restart: always
volumes:
# Mounten Sie den Konfigurationsordner auf dem Host per Bind
- type: bind
source: ./bomnipotent_config
target: /etc/bomnipotent_server/configs/
read_only: true
# Mounten Sie das SSL-Verzeichnis per Bind
- type: bind
source: /etc/ssl
target: /etc/ssl
read_only: true
# Die Subscription darf gern in dem Container persisitert werden
- bomnipotent_subscription:/root/.config/bomnipotent
name: bomnipotent_server_containers
networks:
bomnipotent_network:
driver: bridge
name: bomnipotent_network
volumes:
bomnipotent_data:
driver: local
bomnipotent_subscription:
driver: local
services:
bomnipotent_db:
container_name: bomnipotent_db
deploy:
resources:
limits:
cpus: "0.5"
memory: "512M"
environment:
POSTGRES_DB: bomnipotent_db
POSTGRES_USER: bomnipotent_user
POSTGRES_PASSWORD: ${BOMNIPOTENT_DB_PW}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U bomnipotent_user -d bomnipotent_db"]
interval: 60s
timeout: 10s
retries: 5
start_period: 10s
image: postgres:17-alpine3.21
logging:
driver: local
options:
max-size: "10m"
max-file: "3"
networks:
- bomnipotent_network
restart: always
volumes:
- bomnipotent_data:/var/lib/postgresql/data
bomnipotent_server:
container_name: bomnipotent_server
depends_on:
bomnipotent_db:
condition: service_healthy
deploy:
resources:
limits:
cpus: "0.5"
memory: "512M"
environment:
BOMNIPOTENT_DB_PW: ${BOMNIPOTENT_DB_PW}
healthcheck:
test: ["CMD-SHELL", "curl --fail --insecure https://localhost:8443/health || exit 1"]
interval: 60s
timeout: 10s
retries: 5
start_period: 10s
image: wwhsoft/bomnipotent_server:latest
logging:
driver: local
options:
max-size: "10m"
max-file: "3"
networks:
- bomnipotent_network
ports:
- target: 8443
published: 443
restart: always
volumes:
- type: bind
source: ./bomnipotent_config
target: /etc/bomnipotent_server/configs/
read_only: true
- type: bind
source: /etc/ssl
target: /etc/ssl
read_only: true
- bomnipotent_subscription:/root/.config/bomnipotent
Speichern Sie diese Datei als “compose.yaml”. Dann rufen Sie:
docker compose --detach
docker compose -d
Ihr Server ist jetzt einsatzbereit!
Ist er nicht? Bitte kontaktieren Sie mich !
Rufen Sie “docker ps” um den Zustand des Servers zu überprüfen.
Für einige Interaktionen mit BOMnipotent ist ein Benutzer mit Administratorrechten erforderlich. Eine davon ist die Gewährung von Administratorrechten an einen neuen Benutzer. Dies bedeutet, dass eine Art Bootstrapping-Mechanismus erforderlich ist.
Zuerst müssen Sie ein Benutzerkonto erstellen :
bomnipotent_client --domain=<Server> user request <Ihre-E-Mail>
bomnipotent_client -d <Server> user request <Ihre-E-Mail>
[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.
Um etwas Arbeit beim Tippen zu sparen, speichern Sie die Domäne Ihres Servers und Ihre E-Mail-Adresse in einer Benutzersitzung :
bomnipotent_client --domain=<Server> --email=<Ihre-Email> session login
bomnipotent_client -d <Server> -e <Ihre-Email> session login
[INFO] Storing session data in /home/simon/.config/bomnipotent/session.toml
Aus Sicherheitsgründen muss der Benutzer zu diesem Zeitpunkt bereits in der Datenbank vorhanden sein. Andernfalls könnte ein böswilliger Akteur die E-Mail-Adresse, die Sie für Ihren Administrator verwenden, erraten und zu einem geeigneten Zeitpunkt eine eigene Anfrage stellen. Um dies zu verhindern, blockiert der TMP-Admin-Mechanismus alle Anfragen, diesen bestimmten Benutzer neu zur Datenbank hinzuzufügen.
Als Nächstes werden Sie zu dem Benutzermanager, der in der Serverantwort erwähnt wurde: Melden Sie sich bei Ihrem Servercomputer an und stellen Sie in Ihrer Serverkonfigurationsdatei die folgende Zeile an den Anfang:
tmp_admin = "<Ihre-E-Mail>"
Es ist wichtig, diese Zeile am Anfang der Datei hinzuzufügen, da BOMnipotent sonst versuchen könnte, dieses Feld als Teil eines anderen Abschnitts zu interpretieren.
Ihre Serverprotokolle sollten jetzt zeigen, dass die Konfiguration zusätzlich zu der Benutzeranfrage, die Sie zuvor gestellt haben, neu geladen wurde.
docker logs bomnipotent_server
...
2025-03-06 11:30:15 +00:00 [INFO] Received POST request from 101.102.103.104 to https://bomnipotent.wwh-soft.com/user/info@wwh-soft.com
2025-03-06 11:32:56 +00:00 [INFO] Configuration successfully reloaded from "/etc/bomnipotent_server/configs/config.toml"
...
Der Server behandelt authentifizierte Anfragen dieses Benutzers jetzt so, als wäre die Person ein Administrator. Um dauerhafter Administrator zu werden, müssen Sie zuerst Ihre Benutzeranfrage genehmigen. Zurück auf dem Client rufen Sie:
bomnipotent_client user approve <Ihre-Email>
[INFO] Changed status of info@wwh-soft.com to APPROVED
Jetzt können Sie sich selbst zum vollwertigen Serveradministrator machen:
bomnipotent_client user-role add <Ihre-Email> admin
[INFO] Added role to user
Der Status eines temporären Administrators soll, nun ja, temporär sein. Der Server protokolliert eine Warnung, wenn Sie temporäre Zugriffsrechte verwenden:
docker logs bomnipotent_server -n 4
2025-03-06 14:51:35 +00:00 [INFO] Received POST request from info@wwh-soft.com to https://bomnipotent.wwh-soft.com/user/info@wwh-soft.com/roles
2025-03-06 14:51:35 +00:00 [WARN] Temporary admin functionality is enabled for info@wwh-soft.com
2025-03-06 14:51:35 +00:00 [INFO] User info@wwh-soft.com was authenticated as a temporary admin
2025-03-06 14:51:35 +00:00 [INFO] Temporary admin info@wwh-soft.com has permission USER_MANAGEMENT to perform this action
Aber nachdem Sie sich nun erfolgreich zum permanenten Admin gemacht haben, können und sollten Sie das Feld “tmp_admin” wieder aus der Konfigurationsdatei entfernen.
Sie sind nun bereit, Ihr Abonnement zu aktivieren .
Die meisten Aktionen, die Daten zu Ihrer BOMnipotent-Datenbank hinzufügen, erfordern ein aktives Abonnement, während das Lesen und Entfernen von Daten dies nicht erfordert. Diese Richtlinie stellt sicher, dass Ihre Benutzer den Zugriff auf die vorhandenen Daten nicht verlieren, falls Sie eines Tages die Zahlung für das Produkt einstellen sollten.
Gewerbliche Einrichtungen wie Unternehmen können ein Abonnement auf bomnipotent.de erwerben. Wenn Sie eine nicht-gewerbliche Einrichtung sind, können Sie BOMnipotent kostenlos nutzen. Sie können den Zugriff anfordern, indem Sie eine E-Mail an info@wwh-soft.com senden.
Kurz nachdem Sie ein Abonnement erworben haben, erhalten Sie eine E-Mail mit Ihrem Abonnementschlüssel.
Abonnements können nur von einem Benutzer mit der Rolle “Administrator” verwaltet werden. Erstellen Sie eines , falls Sie dies noch nicht getan haben.
Als dieser Benutzer angemeldet, rufen Sie:
bomnipotent_client subscription activate <Ihr Abonnementschlüssel>
[INFO] Successfully stored subscription key.
Um den aktuellen Status Ihres Abonnements zu überprüfen, führen Sie Folgendes aus:
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 │
│ │ │ │ │ │ . │
╰──────────┴─────────────┴─────────────────────┴─────────────────────────┴─────────────────────────┴───────────────────────────╯
Dieser Abschnitt beschreibt, wie Sie eine Instanz des BOMnipotent-Servers zu Ihrer eigenen machen können. Er stellt die Konfigurationsdatei vor und erklärt alle erforderlichen und optionalen Parameter, die diese versteht.
Ihre Instanz von BOMnipotent Server wird mithilfe einer Konfigurationsdatei konfiguriert. Sie enthält mehrere Werte, die im TOML-Format übergeben werden. Die Anleitungen zum Starten des Servers enthalten jeweils eine Konfigurationsdatei, die Sie mit Ihren spezifischen Daten füllen können. Alle von BOMnipotent Server akzeptierten Konfigurationen werden im Rest dieses Abschnitts beschrieben.
Viele Konfigurationen unterstützen Hot Reloading. Dies bedeutet, dass Sie sie innerhalb der Datei ändern können und sie wirksam werden, ohne dass ein Neustart des Servers erforderlich ist. BOMnipotent Server erreicht dies, indem es auf Dateiänderungen in dem Verzeichnis lauscht, in dem sich die Konfigurationsdatei befindet. Sie können ein erfolgreiches Neuladen der Konfigurationen überprüfen, indem Sie sich die Protokolle ansehen:
docker logs bomnipotent_server -n 1
2025-03-06 15:34:45 +00:00 [INFO] Configuration successfully reloaded from "/etc/bomnipotent_server/configs/config.toml"
Wenn etwas nicht wie vorgesehen funktioniert, informiert BOMnipotent Sie ebenfalls in den Protokollen darüber:
docker logs bomnipotent_server -n 6
2025-03-06 16:11:03 +00:00 [ERROR] Failed to read config file "/etc/bomnipotent_server/configs/config.toml": Failed to parse config file: TOML parse error at line 5, column 1
|
5 | starlight_throughput = "16 GW"
| ^^^^^^^^^^^^^^^^^^^^
unknown field `starlight_throughput`, expected one of `allow_http`, `allow_tlp2`, `certificate_chain_path`, `db_url`, `default_tlp`, `domain`, `dos_prevention_limit`, `dos_prevention_period`, `log_level`, `provider_metadata_path`, `publisher_data`, `secret_key_path`, `tmp_admin`, `user_expiration_period`
Wenn beim Laden der Konfiguration während des Serverstarts ein Fehler auftritt, wird der Vorgang abgebrochen. Wenn die Konfiguration für einen bereits laufenden Server nicht neu geladen werden kann, bleibt die letzte gültige Konfiguration unverändert.
Das offizielle BOMnipotent Server-Docker-Image sucht im Container unter dem Pfad “/etc/bomnipotent_server/configs/config.toml” nach der Konfigurationsdatei. Es wird empfohlen, den Containerpfad “/etc/bomnipotent_server/configs/” mit nur Leserechten an ein Verzeichnis Ihrer Wahl auf dem Hostcomputer zu binden.
Wichtig: Damit das Hot Reloading funktioniert, muss Ihr Docker Volume an das Verzeichnis gebunden sein, in dem sich die Konfigurationsdatei befindet, nicht an die Datei selbst. Bei einer direkten Dateibindung empfängt BOMnipotent keine Dateiereignisse und kann die Konfiguration daher bei Änderungen nicht neu laden.
In Ihren Konfigurationsdateien können Sie auf Umgebungsvariablen verweisen. Verwenden Sie dazu einfach ${<irgendeine-Umbgeunsvariable>}
irgendwo in der Datei, wobei “<irgendeine-Umbgeunsvariable>” durch den Namen der Variable ersetzt wird.
Wenn Sie beispielsweise Folgendes angeben:
BOMNIPOTENT_DB_PW=eHD5B6S8Kze3
export BOMNIPOTENT_DB_PW=eHD5B6S8Kze3
set BOMNIPOTENT_DB_PW=eHD5B6S8Kze3
$env:BOMNIPOTENT_DB_PW = "eHD5B6S8Kze3"
docker run -e BOMNIPOTENT_DB_PW=eHD5B6S8Kze3 wwhsoft/bomnipotent_server --detach
db_url = "postgres://bomnipotent_user:${BOMNIPOTENT_DB_PW}@bomnipotent_db:5432/bomnipotent_db"
Sie würden dieses öffentlich verfügbare Beispielpasswort doch nicht wirklich verwenden, oder?
BOMnipotent Server unterstützt das Lesen von Variablen aus einer .env Datei. Wenn sich eine Datei mit genau diesem Namen, “.env”, neben Ihrer Konfigurationsdatei befindet, versucht der Server, sie auszuwerten, bevor die Konfiguration geladen wird.
Das Ändern der .env-Datei während der Ausführung des BOMnipotent-Servers löst ein Hot Reloading und eine Neuauswertung sowohl der .env- als auch der Konfigurationsdatei aus.
In diesem Abschnitt werden alle Parameter erläutert, die Sie festlegen müssen, damit der BOMnipotent-Server gestartet werden kann. Diese erforderlichen Daten sind spezifisch für Sie und Ihr Setup, weshalb hier keine sinnvollen Defaultwerte angenommen werden können.
Die “db_url”-Konfiguration unterstützt kein Hot Reloading. Sie müssen den Server nach einer Änderung neu starten.
BOMnipotent Server ist Ihr Gateway zur Bereitstellung von Daten zur Lieferkettensicherheit und zur Verwaltung des Zugriffs darauf. Die Daten selbst werden in einer SQL-Datenbank gespeichert.
Derzeit wird nur PostgreSQL als Treiber unterstützt.
Diese Datenbank kann grundsätzlich in derselben Umgebung, in einem anderen Container oder auf einem Remote-Server ausgeführt werden. BOMnipotent muss beigebracht werden, wie es sie erreicht. Der Parameter zum Bereitstellen dieser Informationen in der Konfigurationsdatei ist “db_url”, und die Syntax ist die folgende:
db_url = "<Treiber>://<Benutzer>:<Passwort>@<Domäne>:<Port>/<Datenbank>"
BOMnipotent wird sauer auf Sie sein, wenn die von Ihnen angegebene Zeichenfolge nicht diesem Format entspricht.
Ein tatsächlicher Eintrag könnte beispielsweise lauten:
db_url = "postgres://bomnipotent_user:${BOMNIPOTENT_DB_PW}@bomnipotent_db:5432/bomnipotent_db"
Lassen Sie uns das aufschlüsseln:
Wenn der BOMnipotent-Server die Datenbank nicht erreichen kann, werden Sie in den Logs darüber informiert.
Der BOMnipotent-Server ist nicht nur per API erreichbar, sondern zeigt auch einige statische XML- und HTML-Seiten an. Ein wichtiges Beispiel ist, dass er für Sie CSAF-Provider-Metadaten generieren kann. Da einige dieser Seiten aufeinander verweisen, muss der Server die vollständige Domäne kennen, hinter der er vom Internet aus erreichbar ist.
Der Parameter wird einfach “domain” genannt. Die Angabe eines Protokolls ist optional, “https” wird als Default angenommen.
Der entsprechende Teil in der Konfigurationsdatei kann beispielsweise so aussehen:
domain = "https://bomnipotent.wwh-soft.com"
domain = "bomnipotent.wwh-soft.com"
Die TLS-Konfiguration unterstützt kein Hot Reloading. Sie müssen den Server nach der Änderung neu starten.
Dieser Abschnitt soll Personen, die noch nie mit TLS zu tun hatten, ein allgemeines Verständnis des Prozesses vermitteln. Sie können gerne direkt zum Abschnitt über die Konfiguration springen.
Transport Layer Security (TLS), manchmal auch mit seinem alten Namen Secure Socket Layer (SSL) bezeichnet, ist für das “S” in “HTTPS” verantwortlich. Es ist eine sehr ausgereifte, intelligente und weit verbreitete Methode zur Ende-zu-Ende Verschlüsselung der Kommunikation über das Internet. Es kann aber auch zu viel Kopfzerbrechen führen.
Grob umrissen funktioniert TLS wie in den folgenden Absätzen beschrieben:
Ihr Server generiert ein Paar aus geheimem und öffentlichem Schlüssel. Jeder kann den öffentlichen Schlüssel verwenden, um entweder eine Nachricht zu verschlüsseln, die nur der geheime Schlüssel entschlüsseln kann, oder um eine Nachricht zu entschlüsseln, die mit dem geheimen Schlüssel verschlüsselt wurde.
Wenn ein Client Ihren Server kontaktiert und um Verschlüsselung bittet, antwortet dieser mit dem Senden eines TLS-Zertifikats. Es enthält mehrere wichtige Felder:
Die digitale Signatur wird nicht mit dem geheimen Schlüssel des Servers erstellt, da der Client diesem Schlüssel noch nicht vertraut. Stattdessen sind auf Ihrem Computer einige (mehrere hundert) öffentliche Schlüssel gespeichert, die zu sogenannten “Root Certificate Authorities” oder “Stammzertifizierungsstellen” gehören. Ihre Aufgabe ist es, Serverzertifikate zu signieren, nachdem sie überprüft haben, dass der Inhaber des geheimen Schlüssels auch der Besitzer der Domänen ist, auf die sie Anspruch erheben.
Aus praktischen Gründen signieren die Stammzertifizierungsstellen normalerweise kein Serverzertifikat direkt, sondern ein Zwischenzertifikat, welches dann zum Signieren des endgültigen Zertifikats verwendet wird.
Insgesamt sieht die Vertrauenskette also folgendermaßen aus:
Daher entscheidet sich der Client, dem Server zu vertrauen und eine verschlüsselte Verbindung aufzubauen.
Da BOMnipotent dem Secure-by-Default Prinzip folgt, fordert es von Ihnen mindestens eine Aussage zur TLS-Verschlüsselung. Der Abschnitt “tls” Ihrer Konfigurationsdatei akzeptiert die folgenden Felder:
[tls]
allow_http = false # Optional, ist standardmäßig false
certificate_chain_path = „your-chain.crt“
secret_key_path = „your-key.pem“
Die Angabe der TLS-Zertifikatpfade ist erforderlich, falls HTTP nicht erlaubt ist (da der Server sonst keine Verbindung anbieten könnte), und optional, falls HTTP ausdrücklich erlaubt ist, indem allow_http auf true gesetzt wird. Wenn Sie entweder den certificate_chain_path oder den secret_key_path festlegen, müssen Sie auch den jeweils anderen Wert festlegen. Darüber hinaus prüft der Server, ob Zertifikat und Schlüssel zusammenpassen.
Wenn Sie dieses optionale Feld auf true setzen, lässt Ihr BOMnipotent-Server unverschlüsselte Verbindungen über Port 8080 zu. Dies ist sinnvoll, falls Ihr Server hinter einem Reverse-Proxy läuft und nur über das lokale Netzwerk mit ihm kommuniziert. In diesem Setup ist der Server nicht direkt vom Internet aus erreichbar, sodass der Reverse-Proxy die Verschlüsselung für ihn übernehmen kann.
Bitte beachten Sie, dass der OASIS CSAF-Standard erfordert, dass der Zugriff auf Ihre CSAF-Dokumente verschlüsselt ist!
Der Wert von “secret_key_path” muss auf eine Datei verweisen, die für den BOMnipotent-Server erreichbar ist. Ein gängiger Wert ist:
secret_key_path = "/etc/ssl/private/<Ihre-Domain>_private_key.key"
Wenn Ihr BOMnipotent-Server in einem Docker Container ausgeführt wird, möchten Sie vermutlich das Containerverzeichnis “/etc/ssl” an das gleichnamige Verzeichnis auf dem Host binden.
Die Datei muss ein ASCII-geschützter geheimer Schlüssel im PEM-Format sein. Glücklicherweise ist dies das Format, in dem TLS Zertifikate üblicherweise ausgestellt werden.
Der Inhalt der Datei könnte beispielsweise so aussehen:
-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VwBCIEIHru40FLuqgasPSWDuZhc5b2EhCGGcVC+j3DuAqiw0/m
-----END PRIVATE KEY-----
Dies ist der geheime Schlüssel aus einem Zertifikat, das für die BOMnipotent Integrationstests generiert wurde.
Ebenso muss der “certificate_chain_path” auf eine Datei verweisen, die durch BOMnipotent Server gelesen werden kann. Ein typischer Speicherort ist:
certificate_chain_path = „/etc/ssl/certs/<Ihre-Domain>-fullchain.crt“
Die Kette muss alle Zertifikate in der Vertrauenskette zusammengefügt enthalten, beginnend mit dem Zertifikat für Ihren Server und endend mit der Stammzertifizierungsstelle.
Der Inhalt der vollständigen Zertifikatskette für den Integrationstest sieht folgendermaßen aus:
-----BEGIN CERTIFICATE-----
MIIB8jCCAaSgAwIBAgIBAjAFBgMrZXAwPTELMAkGA1UEBhMCREUxHDAaBgNVBAoT
E0JPTW5pcG90ZW50IFRlc3QgQ0ExEDAOBgNVBAMTB1Rlc3QgQ0EwHhcNMjUwMzA1
MTMxNzEwWhcNMjUwNDI0MTMxNzEwWjBFMQswCQYDVQQGEwJERTEgMB4GA1UEChMX
Qk9Nbmlwb3RlbnQgVGVzdCBTZXJ2ZXIxFDASBgNVBAMTC1Rlc3QgU2VydmVyMCow
BQYDK2VwAyEAMzw8ZVgiuP3bSwh+xcBXu62ORwakr/D+s0XQks1BTFOjgcAwgb0w
DAYDVR0TAQH/BAIwADBIBgNVHREEQTA/gglsb2NhbGhvc3SCCTEyNy4wLjAuMYIT
c3Vic2NyaXB0aW9uX3NlcnZlcoISYm9tbmlwb3RlbnRfc2VydmVyMBMGA1UdJQQM
MAoGCCsGAQUFBwMBMA4GA1UdDwEB/wQEAwIGwDAdBgNVHQ4EFgQUC/RAGubXMfx1
omYTXChtqneWDLcwHwYDVR0jBBgwFoAUStstIFLzDjBSHYSsSr9hSgRVZT4wBQYD
K2VwA0EAXN/6PpJQ0guaJq67kdKvPhgjWVdfxxeCAap8i24R39s7XxNz5x5lPyxA
DQG63NS/OED43+GfpkUguoKxfZLBBA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIBazCCAR2gAwIBAgIBATAFBgMrZXAwPTELMAkGA1UEBhMCREUxHDAaBgNVBAoT
E0JPTW5pcG90ZW50IFRlc3QgQ0ExEDAOBgNVBAMTB1Rlc3QgQ0EwHhcNMjUwMzA1
MTMxNzEwWhcNMjUwNjEzMTMxNzEwWjA9MQswCQYDVQQGEwJERTEcMBoGA1UEChMT
Qk9Nbmlwb3RlbnQgVGVzdCBDQTEQMA4GA1UEAxMHVGVzdCBDQTAqMAUGAytlcAMh
AIoFFlU/ADa77huqAb5aBY9stDwzzDd/Tdocb9RZDBG2o0IwQDAPBgNVHRMBAf8E
BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUStstIFLzDjBSHYSsSr9h
SgRVZT4wBQYDK2VwA0EARYL+v9oDGjaSW5MhjjpQUFXnAVMFayaKFfsfbbkmTkv4
+4SRWFb4F/UULlbbvlskSgt8jAaaTSk7tu/iX67YDw==
-----END CERTIFICATE-----
Das erste Zertifikat (“MIIB8j…”) authentifiziert den Server, das zweite (“MIIBaz…”) ist das der Stammzertifizierungsstelle.
Eine Zwischenzertifizierungsstelle gibt es hier nicht, da sie für die Tests nicht benötigt wird. In Ihrer Produktivumgebung mit echten Zertifikaten müssen Sie höchstwahrscheinlich ein Zwischenzertifikat in der Mitte einfügen.
Der OASIS-Standard erfordert, dass Anbieter von CSAF-Dokumenten eine “provider-metadata.json” anbieten, die einem bestimmten Schema folgen muss.
BOMnipotent ist bestrebt, die Erfüllung dieser Anforderung so einfach wie möglich zu machen. Sie können entweder die Datei aus einigen wenigen Eingaben generieren oder eine Datei bereitstellen , welche BOMnipotent laden kann.
Durch die Bereitstellung einiger benutzerspezifischer Eingaben können Sie BOMnipotent dazu bringen, eine gültige provider-metadata.json Datei zu generieren. Dies ist viel einfacher als die Datei manuell zu erstellen, bietet aber etwas weniger Kontrolle.
Der relevante Abschnitt in Ihrer Konfigurationsdatei sieht folgendermaßen aus:
[provider_metadata.publisher]
name = "<Name Ihrer Organisation>"
namespace = "https://<Ihre Domain>.<Top-Level>"
category = "vendor"
issuing_authority = "<Zusätzliche Informationen>" # Optional
contact_details = "<Bitte kontaktieren Sie uns unter...>" # Optional
In diesem Feld müssen Sie den Namen Ihres Unternehmens, Ihrer Organisation oder Ihren Namen als Einzelperson angeben.
Während das Feld “name” in erster Linie für Menschen gedacht ist, wird der “namespace” von Maschinen verwendet, um Ihre Organisation in verschiedenen Sicherheitsdokumenten zu identifizieren. Er muss im URI-Format vorliegen, einschließlich Protokoll, Domäne und Top-Level-Domäne. Da er sich auf Ihre gesamte Organisation bezieht, sollte er keine Subdomäne enthalten.
Das ist, was das Feld “provider_metadata.publisher.namespace” von der Konfiguration “domain” unterscheidet: Letztere verweist auf Ihre Instanz von BOMnipotent Server, während Erstere viel allgemeiner ist.
Die Herausgeberkategorie ist eine maschinenlesbare Klassifizierung Ihrer Organsiation. Gemäß dem CSAF-Standard sind in den Herausgeberkategorien die Werte “coordinator”, “discoverer”, “other”, “translator”, “user” oder “vendor” zulässig. Als Benutzer von BOMnipotent Server sind Sie höchstwahrscheinlich ein “vendor”, also ein Entwickler oder Weiterverkäufer von Produkten oder Dienstleistungen.
Das optionale Feld “issuing_authority” kann verwendet werden, um Ihre Verbindung zu den gehosteten Dokumenten zu verdeutlichen. Sind Sie der Entwickler? Sind Sie ein Händler? Die Eingabe ist in freier Form.
In dem optionalen Feld “contact_details” können Sie Kontaktdaten für allgemeine oder Sicherheitsanfragen angeben. Die Eingabe ist in freier Form.
Sobald Sie die Daten bereitgestellt und den Server gestartet haben, wird das generierte Dokument unter “Ihre-Domain/.well-known/csaf/provider-metadata.json” gehostet. Sie können hier ein Live-Beispiel und hier ein statisches Beispiel sehen:
{
"canonical_url": "https://bomnipotent.wwh-soft.com/.well-known/csaf/provider-metadata.json",
"distributions": [
{
"rolie": {
"feeds": [
{
"summary": "WHITE advisories",
"tlp_label": "WHITE",
"url": "https://bomnipotent.wwh-soft.com/.well-known/csaf/white/csaf-feed-tlp-white.json"
},
{
"summary": "GREEN advisories",
"tlp_label": "GREEN",
"url": "https://bomnipotent.wwh-soft.com/.well-known/csaf/green/csaf-feed-tlp-green.json"
},
{
"summary": "AMBER advisories",
"tlp_label": "AMBER",
"url": "https://bomnipotent.wwh-soft.com/.well-known/csaf/amber/csaf-feed-tlp-amber.json"
},
{
"summary": "RED advisories",
"tlp_label": "RED",
"url": "https://bomnipotent.wwh-soft.com/.well-known/csaf/red/csaf-feed-tlp-red.json"
},
{
"summary": "UNLABELED advisories",
"tlp_label": "UNLABELED",
"url": "https://bomnipotent.wwh-soft.com/.well-known/csaf/unlabeled/csaf-feed-tlp-unlabeled.json"
}
]
}
}
],
"last_updated": "2025-03-06T16:13:24.632235974Z",
"list_on_CSAF_aggregators": true,
"metadata_version": "2.0",
"mirror_on_CSAF_aggregators": true,
"publisher": {
"category": "vendor",
"contact_details": "For security inquiries, please contact info@wwh-soft.com",
"name": "Weichwerke Heidrich Software",
"namespace": "https://wwh-soft.com"
},
"role": "csaf_provider"
}
Diese Datei enthält einen ROLIE-Feed für alle Ihre CSAF-Dokumente, was wahrscheinlich der Hauptgrund ist, warum Sie dieses Dokument nicht von Hand erstellen möchten.
Das Feld “last_updated” wird aus dem letzten Modifizierungszeitstempel Ihrer Konfigurationsdatei generiert.
BOMnipotent geht davon aus, dass Sie Ihre CSAF-Dokumente auf öffentlich verfügbaren Repositorien aufgelistet und gespiegelt haben möchten. Dies betrifft nur die mit TLP:WHITE / TLP:CLEAR gekennzeichneten Dokumente! Die Aggregatoren haben keinen Zugriff auf anderweitig klassifizierte Dokumente.
BOMnipotent hilft Ihnen, alle Anforderungen zu erfüllen, um ein CSAF-Anbieter gemäß dem OASIS-Standard zu sein.
Wenn Sie aus irgendeinem Grund die vollständige Kontrolle über das Dokument mit den Anbietermetadaten haben möchten, können Sie in der Konfigurationsdatei einen Dateipfad angeben:
[provider_metadata]
path = "<Dateipfad>"
BOMnipotent ließt dann die Datei, überprüft, ob sie dem Anbietermetadaten-JSON-Schema entspricht, und hostet sie.
Sie müssen entweder einen Pfad zu einer Datei oder Herausgeberdaten angeben. Wenn Sie keines oder beides angeben, wird die Konfiguration nicht geladen.
Dieser Abschnitt listet alle optionalen Konfigurationsparameter für BOMnipotent auf. Sie können verwendet werden, um das Verhalten des Servers weiter anzupassen. Wenn sie nicht angegeben werden, nehmen sie einen sinnvollen Standardwert an.
BOMnipotent folgt dem Secure-by-Default Prinzip, was bedeutet, dass Sie diese Parameter bei der anfänglichen Servereinrichtung guten Gewissens ignorieren können.
Um den Verlauf der Interaktionen mit BOMnipotent Server zu verfolgen, kann jedes Ereignis potentiell dazu führen, dass ein Logeintrag geschrieben wird. Diese werden in die Standardausgabe gedruckt. Wenn der Server in einem Docker Container mit dem Namen “bomnipotent_server” ausgeführt wird, können Sie die letzten 3 Zeilen der Protokolle mit folgendem Befehl anzeigen:
docker logs bomnipotent_server -n 3
2025-03-08 09:16:10 +00:00 [INFO] Database is ready.
2025-03-08 09:16:15 +00:00 [DEBUG] Header X-Auth-Email was not found in request
2025-03-08 09:16:15 +00:00 [DEBUG] Received healthcheck request from 127.0.0.1
Die Protokolle haben das Format „Datum, Uhrzeit, Zeitzone, Log-Level, Nachricht“.
Der relevante Abschnitt Ihrer Konfigurationsdatei zur Manipulation der Protokollierung sieht folgendermaßen aus:
[log] # Dieser Abschnitt ist optional
level = "info" # Dies ist der Standardschweregrad
Die Protokolle enthalten keine vertraulichen Informationen. Beispielsweise verschleiert die Benachrichtigung über die Datenbankverbindung Benutzername und Passwort:
2025-03-08 09:16:10 +00:00 [INFO] Creating connection pool for database: postgres://[user]:[password]@database:5432/bomnipotent_db
BOMnipotent Server unterstützt fünf Schweregrade für Logs:
Jede Schweregradebene enthält die Log Einträge der vorherigen. Der Standardschweregrad ist “info”, es werden also Logeintröge mit den Schweregraden “error”, “warn” und “info” ausgegeben.
Ein Fehler zeigt an, dass ein Vorgang abgebrochen werden muss. Damit er funktioniert, muss entweder die Benutzereingabe oder die Konfiguration geändert werden, und er muss erneut ausgelöst werden.
Gängige Beispiele sind:
Eine Warnung wird angezeigt, wenn eine Eingabe oder Konfiguration nicht optimal ist. Der Vorgang wird trotzdem abgeschlossen, aber Sie oder der Benutzer werden aufgefordert, entweder die Eingabe oder die Konfiguration zu ändern.
Gängige Beispiele sind:
Dies ist der Standardschweregrad für Protokolle.
Protokolle mit dem Level “info” weisen auf regelmäßige Ereignisse hin, die wichtig, aber selten genug sind, um die Ausgabe nicht zu überlasten.
Gängige Beispiele sind:
Konfigurieren Sie das Log Level des “debug”, um Fehler in der Konfiguration oder der Benutzereingabe zu finden. Die Logs helfen dabei, Schritt für Schritt zu verstehen, was das Programm tut, und wo etwas schiefgehen kann.
Gängige Beispiele sind:
Als niedrigstmöglicher Schweregrad geben Trace-Protokolle sehr viel aus. Im Gegensatz zum Debug-Level soll das Trace-Level dabei helfen, Fehler in BOMnipotent selbst zu finden. Es ist daher unwahrscheinlich, dass Sie dieses Level jemals konfigurieren müssen, da es sich hauptsächlich an den Entwickler richtet.
Gängige Beispiele sind:
Nur ein Administrator kann einem Benutzer Administratorrechte erteilen. Um den ersten Administrator zu erstellen, müssen Sie diese Rechte daher über einen anderen, temporären Pfad aktivieren. Dies geschieht mit dem Konfigurationsparameter “tmp_admin”, der die E-Mail-Adresse eines Benutzers als Eingabe verwendet:
tmp_admin = "<email>"
Das gesamte Verfahren ist in der Anleitung zum Aufsetzen des Servers beschrieben.
Aus Sicherheitsgründen sind die Regeln für die temporäre Administratorrolle recht streng und erlauben nur eine bestimmte Reihenfolge der Vorgänge:
Wenn die Regeln weniger streng wären und Sie einen temporären Administrator festlegen könnten, bevor der Benutzer in der Datenbank registriert wird, könnte ein Angreifer möglicherweise einen neuen Benutzer mit der richtigen E-Mail-Adresse anfordern und hätte dann Administratorrechte auf Ihrem System.
CSAF-Dokumente können und sollten mit dem Traffic Light Protocol (TLP) klassifiziert werden. Es klärt, ob und mit wem Sie Dokumente teilen können, auf die Sie Zugriff haben. Der etwas ältere TLP v1.0-Standard kennt vier verschiedene Klassifizierungen:
Der aktuellere TLP v2.0-Standard ersetzt TLP:WHITE durch TLP:CLEAR und fügt die neue Klassifizierung TLP:AMBER+STRICT hinzu, die nur die Weitergabe an die Organisation des Empfängers auf Need-to-know-Basis erlaubt, aber nicht darüber hinaus.
Von BOMnipotent Server gehostete Dokumente, die als TLP:WHITE oder TLP:CLEAR klassifiziert sind, sind für jeden sichtbar, egal ob Administrator, völlig unauthentifizierter Benutzer oder Crawler-Bot!
Der Abschnitt “tlp” Ihrer Konfigurationsdatei kann die folgenden Felder enthalten:
[tlp]
allow_tlp2 = true # Der Default ist false
default_tlp = "amber+strict" # Der Default ist "red"
Der aktuelle OASIS CSAF-Standard erfordert, dass Dokumente mit einem TLP v1.0 Label klassifiziert werden. Viele Unternehmen würden jedoch lieber die TLP:AMBER+STRICT Klassifizierung aus dem TLP v2.0 Standard für ihre Dokumente verwenden. Darüber hinaus wird der TLP v2.0-Standard verbindlich , sobald der CSAF-Standard 2.1 veröffentlicht wird.
Um vollständig mit dem CSAF-Standard kompatibel zu sein, lässt BOMnipotent standardmäßig keine TLP v2.0 Beschriftungen zu. Sie können jedoch das Feld “allow_tlp2” im Abschnitt “tlp” Ihrer Konfigurationsdatei auf “true” setzen:
[tlp]
allow_tlp2 = true
Wenn Sie dies tun, werden sowohl TLP v1.0 als auch TLP v2.0 Label akzeptiert.
Wenn Sie dies hingegen nicht tun und BOMnipotent auf TLP v2.0 Beschriftungen stößt, konvertiert es TLP:CLEAR stillschweigend in TLP:WHITE. Da TLP:AMBER+STRICT in TLP v1.0 kein direktes Äquivalent hat, wählt BOMnipotent den konservativen Ansatz, konvertiert es in TLP:RED und protokolliert eine Warnung.
Die Klassifizierung eines CSAF-Dokuments mit einem TLP-Label ist optional, und eine TLP-Klassifizierung ist nicht einmal Teil des CycloneDX-Standards für BOM-Dokumente. BOMnipotent muss zumindest wissen, ob das Dokument mit TLP:CLEAR / TLP:WHITE gekennzeichnet und somit öffentlich verfügbar ist, oder ob der Zugriff darauf eingeschränkt ist.
Es empfiehlt sich, eine TLP-Klassifizierung zu definieren, auf die BOMnipotent für ein nicht gekennzeichnetes Dokument zurückgreifen kann. Sie können dies in Ihrer Konfigurationsdatei über den folgenden Eintrag tun:
[tlp]
default_tlp = "amber"
Die Deserialisierung gibt Ihnen etwas Spielraum: Sie berücksichtigt die Groß-/Kleinschreibung nicht und das Präfix „TLP:“ ist optional. Die Werte „amber“, „AMBER“, „tlp:amber“ und „TLP:AMBER“ werden alle als TLP:AMBER erkannt.
Wenn Sie kein Standard-TLP-Label angeben und BOMnipotent auf ein unbeschriftetes Dokument stößt, wird standardmäßig TLP:RED verwendet und eine Warnung ausgegeben.
Das Default-TLP Label wird zum Zeitpunkt des Zugriffs ausgewertet, nicht zum Zeitpunkt des Schreibens. Unklassifizierte Dokumente bleiben in der Datenbank unklassifiziert. Wenn Sie das Default-TLP Label zu irgendeinem Zeitpunkt ändern, ändern Sie es somit für alle unklassifizierten Dokumente der Vergangenheit und Zukunft.
Wenn eine Anfrage für ein neues Benutzerkonto gestellt wird, wird ein öffentlicher Schlüssel in der Datenbank hinterlegt.
Dieser Schlüssel hat ein Ablaufdatum, nach dem er nicht mehr akzeptiert wird. Dieses können Sie sich anzeigen lassen:
./bomnipotent_client user list
╭───────────────────┬──────────┬───────────────────────────┬───────────────────────────╮
│ User Email │ Status │ Expires │ Last Updated │
├───────────────────┼──────────┼───────────────────────────┼───────────────────────────┤
│ info@wwh-soft.com │ APPROVED │ 2026-03-03 11:30:15.62432 │ 2025-03-02 11:47:38.51048 │
│ │ │ 5 UTC │ 5 UTC │
╰───────────────────┴──────────┴───────────────────────────┴───────────────────────────╯
Standardmäßig ist der Schlüssel nach der Anforderung etwas mehr als ein Jahr lang gültig. Diese Zeit kann mit dem Parameter “user_expiration_period” konfiguriert werden. Als Werte akzeptiert er einen Zeitraum im menschenlesbaren Format „user_expiration_period = "366 days"
user_expiration_period = "5 years"
user_expiration_period = "1 month"
user_expiration_period = "3 weeks"
user_expiration_period = "5 days"
Falls Sie Ihre Benutzer wirklich hassen, können Sie auch “hours”, “minutes”, seconds", “ms”, “us” oder “ns” als Einheit verwenden. BOMnipotent stellt nicht in Frage, wie realistisch Ihre Erwartungen sind.
Das Ändern dieser Konfiguration hat keine Auswirkungen auf die Ablaufdaten bestehender Benutzer! Es beeinflusst nur, wie viel Zeit neu angeforderten Benutzern eingeräumt wird.
Denial of Service (DOS)-Angriffe haben das Ziel, ein Programm oder einen Server unresponsiv zu machen. Sie sind bekanntermaßen schwer abzuwenden, da sie häufig darauf basieren, den Dienst mit ansonsten legitimen Anfragen zu überfluten.
BOMnipotent verfügt über mehrere DOS-Präventionsmechanismen (von der Ablehnung von Code, der den Server zum Absturz bringen könnten, bis zur Begrenzung der Länge von Protokollausgaben), aber eine bestimmte Technik kann vom Benutzer angepasst werden.
Wenn die Anzahl der Anfragen von einer einzelnen Quelle innerhalb eines Zeitraums einen Grenzwert überschreitet, wird diese Quelle für eine Stunde auf eine Greylist gesetzt, welche die Anfragen dann automatisch ablehnt.
Standardmäßig geschieht dies, wenn die Anzahl der Anfragen innerhalb einer Minute 100 überschreitet, aber Sie können dieses Verhalten in Ihrer Konfigurationsdatei ändern:
[dos_prevention]
limit = 50 # Standard ist 100
period = "30 Sekunden" # Standard ist "1 Minute"
Diese neue Konfiguration würde den Server schneller auf einen möglichen DOS-Angriff reagieren lassen, birgt aber auch ein erhöhtes Risiko, Anfragen fälschlicherweise als Angriff zu werten.
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.
Dieser Abschnitt behandelt die grundlegende Nutzung von BOMnipotent Client. Sie ist sowohl relevant für Konsumenten als auch Produzenten von Dokumenten zur Lieferkettensicherheit.
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:
Invoke-WebRequest -Uri https://www.bomnipotent.de/downloads/raw/latest/windows/bomnipotent_client.exe -OutFile bomnipotent_client.exe
curl -O https://www.bomnipotent.de/downloads/raw/latest/macos/bomnipotent_client
chmod +x bomnipotent_client
wget https://www.bomnipotent.de/downloads/raw/latest/debian-glibc/bomnipotent_client;
chmod +x bomnipotent_client
wget https://www.bomnipotent.de/downloads/raw/latest/linux-musl/bomnipotent_client;
chmod +x bomnipotent_client
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.
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 .
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 .
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 dannopenssl 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.
Authentifizierung setzt voraus, dass Sie einen Nutzeraccount beantragt haben , und dass dieser von einem Nutzermanager bestätigt wurde .
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 --domain=<Server> --email=<Ihre-Email> <Kommando>
bomnipotent_client -d <Server> -e <Ihre-Email> <Kommando>
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:
bomnipotent_client --domain=<Server> --email=<Ihre-Email> --secret-key=<Pfad/zum/Schlüssel> <Kommando>
bomnipotent_client -d <Server> -e <Ihre-Email> -s <Pfad/zum/Schlüssel> <Kommando>
Um diese drei zusätzlichen Argumente bei jeder einzelnen Anfrage zu vermeiden, können Sie die Daten stattdessen in einer Nutzersitzung speichern.
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:
bomnipotent_client --domain=<Server> --email=<Ihre-Email> --output=<Modus> --secret-key=<Pfad/zum/Schlüssel> --trusted-root=<Pfad/zum/Zertifikat> login
bomnipotent_client -d <Server> -e <Ihre-Email> -o <Modus> -s <Pfad/zum/Schlüssel> -t <Pfad/zum/Zertifikat> login
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.
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.
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):
domain = "https://localhost:62443"
email = "admin@wwh-soft.com"
secret_key_path = "/home/simon/git/bomnipotent/test_cryptofiles/admin"
trusted_root_path = "/home/simon/git/bomnipotent/test_cryptofiles/ca.crt"
Falls Sie JSON bevorzugen, fügen Sie einfach die “–json” Option hinzu:
./bomnipotent_client session status --json
./bomnipotent_client session status -j
{
"domain": "https://localhost:62443",
"email": "admin@wwh-soft.com",
"secret_key_path": "/home/simon/git/bomnipotent/test_cryptofiles/admin",
"trusted_root_path": "/home/simon/git/bomnipotent/test_cryptofiles/ca.crt"
}
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."
}
Um alle Parameter zu entfernen, rufen Sie logout auf:
bomnipotent_client logout
Dies entfernt die Sitzungsdatei.
BOMnipotent Client bietet verschiedene Schweregrade an Logs:
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.
Der Standard-Ausgabemodus ist info. Er gibt einige Informationen aus, überflutet den Benutzer jedoch nicht mit Nachrichten.
bomnipotent_client health
[INFO] Service is healthy
bomnipotent_client bom list
[INFO]
╭─────────────┬─────────┬─────────────────────────┬─────────┬────────────╮
│ Product │ Version │ Timestamp │ TLP │ Components │
├─────────────┼─────────┼─────────────────────────┼─────────┼────────────┤
│ BOMnipotent │ 1.0.0 │ 2025-02-01 03:31:50 UTC │ Default │ 363 │
╰─────────────┴─────────┴─────────────────────────┴─────────┴────────────╯
Oder, falls ein Fehler auftritt:
[ERROR] Received response:
404 Not Found
BOM Volcano_1.0.0 not found in database
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
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
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.
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.
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.
Der code-Modus gibt nur den HTTP Statuscode der Antwort aus.
bomnipotent_client --output-mode=code health
bomnipotent_client -o code health
200
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.
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.
bomnipotent_client --output-mode=raw bom list
bomnipotent_client -o raw bom list
[{"name":"BOMnipotent","version":"1.0.0","timestamp":"2025-01-03T05:38:03Z","tlp":null,"components":350}]
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.
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.
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.
Das Ausführen des Befehls
bomnipotent_client bom list
listet alle für Sie zugänglichen BOMs auf:
╭─────────────┬─────────┬─────────────────────────┬───────────┬────────────╮
│ Product │ Version │ Timestamp │ TLP │ Components │
├─────────────┼─────────┼─────────────────────────┼───────────┼────────────┤
│ BOMnipotent │ 1.0.0 │ 2025-02-01 03:31:50 UTC │ TLP:WHITE │ 363 │
│ BOMnipotent │ 1.0.1 │ 2025-02-01 03:31:50 UTC │ TLP:WHITE │ 363 │
│ vulny │ 0.1.0 │ 2025-02-02 06:51:40 UTC │ TLP:AMBER │ 63 │
╰─────────────┴─────────┴─────────────────────────┴───────────┴────────────╯
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.
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.
tree ./boms/
./boms/
├── bomnipotent_1.0.0.cdx.json
├── bomnipotent_1.0.1.cdx.json
└── vulny_0.1.0.cdx.json
1 directory, 3 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:
[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:
bomnipotent_client bom download ./boms --overwrite
bomnipotent_client bom download ./boms -o
Sie können den Inhalt einer einzelnen BOM direkt in die Konsole ausgeben lassen, indem Sie folgendes rufen:
bomnipotent_client bom get <NAME> <VERSION>
{
"$schema": "http://cyclonedx.org/schema/bom-1.6.schema.json",
"bomFormat": "CycloneDX",
"specVersion": "1.6",
"serialNumber": "urn:uuid:60d5a033-6d54-4ac4-a5fa-824d0b04c718",
"version": 1,
"metadata": {
"timestamp": "2025-02-23T07:23:33+01:00",
"tools": {
"components": [
...
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
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:
bomnipotent_client component list vulny 0.1.0
╭──────────────┬─────────┬─────────┬───────────────────────────┬───────────────────────────╮
│ Name │ Version │ Type │ CPE │ PURL │
├──────────────┼─────────┼─────────┼───────────────────────────┼───────────────────────────┤
│ aho-corasick │ 1.1.3 │ library │ cpe:2.3:a:aho-corasick:ah │ pkg:cargo/aho-corasick@1. │
│ │ │ │ o-corasick:1.1.3:*:*:*:*: │ 1.3 │
│ │ │ │ *:*:* │ │
│ aws-lc-rs │ 1.12.2 │ library │ cpe:2.3:a:aws-lc-rs:aws-l │ pkg:cargo/aws-lc-rs@1.12. │
│ │ │ │ c-rs:1.12.2:*:*:*:*:*:*:* │ 2 │
│ aws-lc-sys │ 0.25.0 │ library │ cpe:2.3:a:aws-lc-sys:aws- │ pkg:cargo/aws-lc-sys@0.25 │
│ │ │ │ lc-sys:0.25.0:*:*:*:*:*:* │ .0 │
│ │ │ │ :* │ │
│ bindgen │ 0.69.5 │ library │ cpe:2.3:a:bindgen:bindgen │ pkg:cargo/bindgen@0.69.5 │
│ │ │ │ :0.69.5:*:*:*:*:*:*:* │ │
...
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.
Um eine Liste bekannter Sicherheitslücken anzuzeigen, die ein Produkt betreffen, rufen Sie “vulnerability”, “list” sowie den Namen und die Version des Produkts auf:
bomnipotent_client vulnerability list vulny 0.1.0
╭─────────┬─────────┬─────────────────────┬───────────────────────────┬───────┬──────────┬─────────┬─────────────────╮
│ Product │ Version │ Vulnerability │ Description │ Score │ Severity │ TLP │ CSAF Assessment │
├─────────┼─────────┼─────────────────────┼───────────────────────────┼───────┼──────────┼─────────┼─────────────────┤
│ vulny │ 0.1.0 │ GHSA-qg5g-gv98-5ffh │ rustls network-reachable │ │ medium │ Default │ │
│ │ │ │ panic in `Acceptor::accep │ │ │ │ │
│ │ │ │ t` │ │ │ │ │
╰─────────┴─────────┴─────────────────────┴───────────────────────────┴───────┴──────────┴─────────┴─────────────────╯
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.
bomnipotent_client vulnerability list
╭─────────────┬─────────┬─────────────────────┬───────────────────────────┬───────┬──────────┬─────────┬─────────────────╮
│ Product │ Version │ Vulnerability │ Description │ Score │ Severity │ TLP │ CSAF Assessment │
├─────────────┼─────────┼─────────────────────┼───────────────────────────┼───────┼──────────┼─────────┼─────────────────┤
│ BOMnipotent │ 1.0.0 │ GHSA-qg5g-gv98-5ffh │ rustls network-reachable │ │ medium │ Default │ │
│ │ │ │ panic in `Acceptor::accep │ │ │ │ │
│ │ │ │ t` │ │ │ │ │
│ vulny │ 0.1.0 │ GHSA-qg5g-gv98-5ffh │ rustls network-reachable │ │ medium │ Default │ │
│ │ │ │ panic in `Acceptor::accep │ │ │ │ │
│ │ │ │ t` │ │ │ │ │
╰─────────────┴─────────┴─────────────────────┴───────────────────────────┴───────┴──────────┴─────────┴─────────────────╯
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.
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 .
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.
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_client csaf download ./csaf white/2022/bsi-2022-0001.json
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:
bomnipotent_client csaf download ./csaf --overwrite
bomnipotent_client csaf download ./csaf -o
Sie können den Inhalt eines einzelnen CSAF Dokuments direkt in die Konsole ausgeben lassen, indem Sie folgendes rufen:
bomnipotent_client csaf get <ID>
{
"document" : {
"aggregate_severity" : {
"text" : "mittel"
},
"category" : "csaf_base",
"csaf_version" : "2.0",
"distribution" : {
"tlp" : {
"label" : "WHITE",
...
Das ist besonder praktisch falls Sie den Inhalt des CSAF Dokuments in einem Skript weiterverwenden wollen.
Um genau zu sehen, welche Produkte von einem CSAF Dokument behandelt werden, führen Sie den folgenden Befehl aus:
./bomnipotent_client product list
╭───────────────────────────┬────────────────┬────────────────┬───────────────┬───────────╮
│ Product │ Vulnerability │ Status │ CSAF ID │ TLP │
├───────────────────────────┼────────────────┼────────────────┼───────────────┼───────────┤
│ CSAF Tools CVRF-CSAF-Conv │ CVE-2022-27193 │ known_affected │ BSI-2022-0001 │ TLP:WHITE │
│ erter 1.0.0-alpha │ │ │ │ │
│ CSAF Tools CVRF-CSAF-Conv │ CVE-2022-27193 │ known_affected │ BSI-2022-0001 │ TLP:WHITE │
│ erter 1.0.0-dev1 │ │ │ │ │
│ CSAF Tools CVRF-CSAF-Conv │ CVE-2022-27193 │ known_affected │ BSI-2022-0001 │ TLP:WHITE │
│ erter 1.0.0-dev2 │ │ │ │ │
│ CSAF Tools CVRF-CSAF-Conv │ CVE-2022-27193 │ known_affected │ BSI-2022-0001 │ TLP:WHITE │
│ erter 1.0.0-dev3 │ │ │ │ │
│ CSAF Tools CVRF-CSAF-Conv │ CVE-2022-27193 │ known_affected │ BSI-2022-0001 │ TLP:WHITE │
│ erter 1.0.0-rc1 │ │ │ │ │
│ CSAF Tools CVRF-CSAF-Conv │ CVE-2022-27193 │ first_fixed │ BSI-2022-0001 │ TLP:WHITE │
│ erter 1.0.0-rc2 │ │ │ │ │
│ CSAF Tools CVRF-CSAF-Conv │ CVE-2022-27193 │ fixed │ BSI-2022-0001 │ TLP:WHITE │
│ erter 1.0.0-rc2 │ │ │ │ │
╰───────────────────────────┴────────────────┴────────────────┴───────────────┴───────────╯
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.
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.
Um Ihr neues Abonnement zu aktivieren, rufen Sie einfach Folgendes auf:
bomnipotent_client subscription activate <IHR-ABONNEMENTSCHLÜSSEL>
[INFO] Successfully stored subscription key.
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.
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.
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:
bomnipotent_client subscription remove <IHR-ABONNEMENTSCHLÜSSEL>
[INFO] Subscription key was removed
Um zu vermeiden, dass eine BOMnipotent-Serverinstanz, auf die Sie Administratorzugriff haben, versehentlich deaktiviert wird, ist der korrekte Schlüssel als Argument erforderlich.
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:
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.
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.
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:
bomnipotent_client bom upload <PFAD/ZUR/BOM> --name-overwrite=<NEUER-NAME> --version-overwrite=<NEUE-VERSION>
bomnipotent_client bom upload <PFAD/ZUR/BOM> -n <NEUER-NAME> -v <NEUE-VERSION>
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.
Für Konsumenten verwaltet BOMnipotent den Datenzugriff über das Traffic Light Protocol (TLP) . Das CycloneDX-Format unterstützt derzeit keine Dokumentklassifizierung.
Um BOMnipotent mitzuteilen, wie ein Dokument klassifiziert werden soll, haben Sie zwei Möglichkeiten:
bomnipotent_client bom upload <PFAD/ZUR/BOM> --tlp=<label>
bomnipotent_client bom upload <PFAD/ZUR/BOM> -t <LABEL>
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.
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.
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:
bomnipotent_client bom modify <PFAD/ZUR/BOM> --tlp=<LABEL>
bomnipotent_client bom modify <PFAD/ZUR/BOM> -t <LABEL>
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:
bomnipotent_client bom modify --name=<NAME> --version=<VERSION> --tlp=<LABEL>
bomnipotent_client bom modify -n <NAME> -v <VERSION> -t <LABEL>
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
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:
bomnipotent_client bom modify <PFAD/ZUR/BOM> --name=<ALTER-NAME> --version=<ALTE-VERSION>
bomnipotent_client bom modify <PFAD/ZUR/BOM> -n <ALTER-NAME> -v <ALTE-VERSION>
BOMnipotent leitet die neuen Daten aus dem von Ihnen bereitgestellten Dokument ab und ändert die Datenbankeinträge entsprechend.
Wie beim Hochladen können Sie den im lokalen Dokument gespeicherten Namen und/oder die Version überschreiben:
bomnipotent_client bom modify <PFAD/ZUR/BOM> --name-overwrite=<NEUER-NAME> --version-overwrite=<NEUE_VERSION>
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:
bomnipotent_client bom modify <PFAD/ZUR/BOM> --name=<ALTER-NAME> --version=<ALTE-VERSION> --name-overwrite=<NEUER-NAME> --version-overwrite=<NEUE-VERSION>
bomnipotent_client bom modify <PFAD/ZUR/BOM> -n <ALTER-NAME> -v <ALTE-VERSION> --name-overwrite=<NEUER-NAME> --version-overwrite=<NEUE-VERSION>
Das Ändern von Name und/oder Version ohne Angabe des vollständigen Dokuments ist nicht unterstützt.
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.
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.
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.
Der Befehl zum Aktualisieren der mit einer BOM verknüpften Schwachstellen lautet:
bomnipotent_client vulnerability update <VULNERABILITIES>
[INFO] Updated vulnerabilities of BOM vulny_0.1.0
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:
bomnipotent_client vulnerability update <VULNERABILITIES> --name=<NAME> --version=<VERSION>
bomnipotent_client vulnerability update <VULNERABILITIES> -n <NAME> -v <VERSION>
[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
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
bomnipotent_client vulnerability list -u
╭─────────────┬─────────┬─────────────────────┬───────────────────────────┬───────┬──────────┬─────────┬─────────────────╮
│ Product │ Version │ Vulnerability │ Description │ Score │ Severity │ TLP │ CSAF Assessment │
├─────────────┼─────────┼─────────────────────┼───────────────────────────┼───────┼──────────┼─────────┼─────────────────┤
│ BOMnipotent │ 1.0.0 │ GHSA-qg5g-gv98-5ffh │ rustls network-reachable │ │ medium │ Default │ │
│ │ │ │ panic in `Acceptor::accep │ │ │ │ │
│ │ │ │ t` │ │ │ │ │
│ vulny │ 0.1.0 │ GHSA-qg5g-gv98-5ffh │ rustls network-reachable │ │ medium │ Default │ │
│ │ │ │ panic in `Acceptor::accep │ │ │ │ │
│ │ │ │ t` │ │ │ │ │
╰─────────────┴─────────┴─────────────────────┴───────────────────────────┴───────┴──────────┴─────────┴─────────────────╯
[ERROR] Found 2 unassessed vulnerabilities.
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
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.
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 │
...┴────────┴─────────╯
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:
bomnipotent_client csaf delete <PFAD/ZUM/CSAF> --id=<ALTE-ID>
bomnipotent_client csaf delete <PFAD/ZUM/CSAF> -i <ALTE-ID>
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
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:
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 .
Die Berechtigungen lassen sich gedanklich in Berechtigungen für Konsumenten , Manager und einige Sonderberechtigungen für Administratoren unterteilen.
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.
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.
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.
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.
Diese Berechtigung ermöglicht das Aktualisieren und Anzeigen der Liste der Schwachstellen, die mit einer BOM verknüpft sind.
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.
Mit dieser Berechtigung kann ein Benutzer die Berechtigungen von Rollen ändern . Dies kann weitreichende Folgen haben, da die Änderungen potenziell viele Benutzer betreffen.
Diese Berechtigung ist erforderlich, um Benutzer anzuzeigen, oder ihre Anfragen zur Kontoerstellung zu gewähren oder abzulehnen . Sie wird auch benötigt, um Nutzern Rollen zuzuweisen .
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 .
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.
Beim ersten Start Ihres BOMnipotent Servers werden in der Datenbank mehrere kreativ benannte Standardrollen angelegt:
Sie können diese Rollen nach Belieben ändern oder löschen; es handelt sich lediglich um Vorschläge.
Wenn Ihnen diese Rollen nicht gefallen, können Sie sie mit den folgenden Aufrufen löschen:
bomnipotent_client role-permission remove bom_manager BOM_MANAGEMENT;
bomnipotent_client role-permission remove csaf_manager CSAF_MANAGEMENT;
bomnipotent_client role-permission remove role_manager ROLE_MANAGEMENT;
bomnipotent_client role-permission remove user_manager USER_MANAGEMENT;
bomnipotent_client role-permission remove vuln_manager VULN_MANAGEMENT;
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.
bomnipotent_client role-permission remove admin BOM_MANAGEMENT
bomnipotent_client role-permission add admin "PRODUCT_ACCESS(BOMnipotent)"
[ERROR] Received response:
422 Unprocessable Entity
Cannot modify admin role permissions
Die Administratorrolle verfügt über alle Berechtigungen, die erteilt werden können, und dann noch einige weitere .
Um alle Rollen und die zugehörigen Berechtigungen aufzulisten, rufen Sie Folgendes auf:
bomnipotent_client role-permission list
╭──────────────┬─────────────────┬───────────────────────────╮
│ Role │ Permission │ Last Updated │
├──────────────┼─────────────────┼───────────────────────────┤
│ bom_manager │ BOM_MANAGEMENT │ 2025-03-20 10:38:27.29648 │
│ │ │ 0 UTC │
│ csaf_manager │ CSAF_MANAGEMENT │ 2025-03-20 10:38:27.29695 │
│ │ │ 2 UTC │
│ role_manager │ ROLE_MANAGEMENT │ 2025-03-20 10:38:27.29621 │
│ │ │ 3 UTC │
│ user_manager │ USER_MANAGEMENT │ 2025-03-20 10:38:27.29562 │
│ │ │ 0 UTC │
│ vuln_manager │ VULN_MANAGEMENT │ 2025-03-20 10:38:27.29671 │
│ │ │ 9 UTC │
╰──────────────┴─────────────────┴───────────────────────────╯
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:
bomnipotent_client role-permission add <ROLLE> <BERECHTIGUNG>
[INFO] Added permission BOM_MANAGEMENT to role
Sie könnten beispielsweise mehrere Berechtigungen in den Rollen “doc_manager” und “access_manager” zusammenfassen:
bomnipotent_client role-permission add doc_manager BOM_MANAGEMENT;
bomnipotent_client role-permission add doc_manager CSAF_MANAGEMENT;
bomnipotent_client role-permission add doc_manager VULN_MANAGEMENT;
bomnipotent_client role-permission add access_manager ROLE_MANAGEMENT;
bomnipotent_client role-permission add access_manager USER_MANAGEMENT;
Falls Sie die Standardrollen wie oben beschrieben entfernt haben, erhalten Sie Folgendes:
bomnipotent_client role-permission list
╭────────────────┬─────────────────┬───────────────────────────╮
│ Role │ Permission │ Last Updated │
├────────────────┼─────────────────┼───────────────────────────┤
│ access_manager │ ROLE_MANAGEMENT │ 2025-03-20 11:05:42.06443 │
│ │ │ 7 UTC │
│ access_manager │ USER_MANAGEMENT │ 2025-03-20 11:04:57.51274 │
│ │ │ 7 UTC │
│ doc_manager │ BOM_MANAGEMENT │ 2025-03-20 11:05:55.15986 │
│ │ │ 0 UTC │
│ doc_manager │ CSAF_MANAGEMENT │ 2025-03-20 11:05:50.92466 │
│ │ │ 9 UTC │
│ doc_manager │ VULN_MANAGEMENT │ 2025-03-20 11:05:47.35620 │
│ │ │ 9 UTC │
╰────────────────┴─────────────────┴───────────────────────────╯
Falls die hinzuzufügende Berechtigung nicht existiert oder fehlerhaft ist, erhalten Sie eine Fehlermeldung:
bomnipotent_client role-permission add clam_manager CLAM_MANAGEMENT
[ERROR] Received response:
422 Unprocessable Entity
Failed to parse permission: Invalid UserPermission string: CLAM_MANAGEMENT
Um eine Berechtigung aus einer Rolle zu entfernen, rufen Sie einfach Folgendes auf:
bomnipotent_client role-permission remove <ROLE> <PERMISSION>
[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.
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.
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.
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.
Wenn Sie ein Benutzerkonto vollständig löschen möchten, rufen Sie
bomnipotent_client user remove <EMAIL>
[INFO] Deleted user info@wildeheide.de
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.
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 │
╰──────────────────┴─────────────┴───────────────────────────╯
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.
Um einem Benutzer eine Rolle zu entfernen, rufen Sie Folgendes auf:
bomnipotent_client user-role remove <EMAIL> <ROLLE>
[INFO] Removed role bom_manager from user info@wildeheide
Wenn eine der beiden Rollen nicht vorhanden ist, wird ein Fehler angezeigt:
[ERROR] Received response:
404 Not Found
User with email info@wildeheide does not have role bom_manager
Nur Benutzer mit der Admin-Rolle können die Admin-Rolle von anderen Benutzern entfernen.
Diese Seiten listen alle Änderungen, die durch verschiedene Versionen in BOMnipotent Server und Client dazugekommen sind. Die Versionsnummern folgen semantischer Versionierung , was bedeutet, dass sie alle die Form MAJOR.MINOR.PATCH haben, und dass
Es wird empfohlen, stets die aktuellste Version zu verwenden.
Sobald der BOMnipotent-Server läuft, können Sie mit dem Hochladen von Dokumenten beginnen. Ein typischer Workflow beginnt mit der Erstellung eines SBOM, einer Inventarliste der Komponenten, die Ihr Produkt enthält. Dieser Schritt sollte automatisch ausgelöst werden, sobald eine neue Version erstellt wird. Anschließend wird dieses Inventar auf bekannte Sicherheitslücken überprüft. Auch dieser Schritt sollte automatisch erfolgen, jedoch in regelmäßigen Abständen.
Falls eine Sicherheitslücke entdeckt wird, muss sie analysiert werden. Diese Aufgabe erfordert Fachwissen und kann daher nicht automatisiert werden. Das Ergebnis dieser Analyse ist ein CSAF-Dokument, das Ihren Nutzern mitteilt, ob und wie sie auf diese neue Entwicklung reagieren müssen.
Dieser Abschnitt enthält Anleitungen für einen beispielhaften Workflow zur Erstellung einer SBOM mit Syft , Überprüfung auf Sicherheitslücken mit Grype , und Erstellung von CSAF Dokumenten mit Secvisogram . Es gibt auch andere Programme für diese Aufgaben. Solange sie gültige CycloneDX- und CSAF-JSON-Dokumente erzeugen, sind sie mit BOMnipotent kompatibel.
Eine Software Bill of Materials (SBOM) ist eine Liste aller Softwarekomponenten, die in deinem Produkt verwendet werden. Im Kontext der Lieferkettensicherheit dient sie als maschinenlesbare Liste von Elementen, mit der neue Schwachstellen abgeglichen werden können, sobald sie bekannt werden.
Es gibt mehrere Tools zur automatischen Erstellung einer solchen SBOM. Dieses Tutorial konzentriert sich auf Syft von Anchore, einem Open-Source-Kommandozeilentool.
Das offizielle Syft GitHub Repository enthält Installationsanweisungen. Die Installation ist über ein Shell-Skript oder verschiedene Paketmanager möglich.
Auf manchen Linux-Systemen sollten Sie den Installationspfad (das letzte Argument des Shell-Befehls) auf “~/.local/bin” ändern, da für Änderungen an “/usr/local/bin” Root-Rechte erforderlich sind.
Die grundlegende Verwendung von Syft lautet:
syft <Ziel> [Optionen]
Zusätzlich lassen sich einige Konfigurationen über Umgebungsvariablen vornehmen.
Syft unterstützt Lockfiles, Verzeichnisse, Container-Images und weitere Zieltypen.
Ein Beispielaufruf sieht folgendermaßen aus:
SYFT_FORMAT_PRETTY=1 syft Cargo.lock --output cyclonedx-json=./sbom.cdx.json --source-name="BOMnipotent" --source-version="1.0.0"
SYFT_FORMAT_PRETTY=1 syft Cargo.lock -o cyclonedx-json=./sbom.cdx.json --source-name="BOMnipotent" --source-version="1.0.0"
Erklärung:
Syft unterstützt eine Vielzahl von Ökosystemen, welche in Ihrem GitHub repo aufgelistet sind.
Syft kann auf ein ganzes Verzeichnis angewendet werden, allerdings ist das oft übertrieben. Es durchsucht alle Unterverzeichnisse und erfasst alles, was entfernt wie eine Lockfile aussieht, einschließlich aller Testabhängigkeiten, Entwicklungsskripte und GitHub Actions.
syft . --output cyclonedx-json=./dev_env_sbom.cdx.json --source-name="BOMnipotent Entwicklungsumgebung" --source-version=1.2.3
syft . -o cyclonedx-json=./dev_env_sbom.cdx.json --source-name="BOMnipotent Entwicklungsumgebung" --source-version=1.2.3
Falls Sie einen Docker-Container als ‘.tar’-Datei exportiert haben, können Sie diesen ebenfalls als Ziel angeben:
syft container.tar --output cyclonedx-json=./container_sbom.cdx.json --source-name="BOMnipotent Container" --source-version=1.2.3
syft container.tar -o cyclonedx-json=./container_sbom.cdx.json --source-name="BOMnipotent Container" --source-version=1.2.3
Bei kompilierten Sprachen können die Ergebnisse stark abweichen, da die meisten Informationen über die Komponenten, die in die Kompilierung eingeflossen sind, verloren gehen. Andererseits enthält diese SBOM Informationen über die Umgebung, in der das Produkt später möglicherweise ausgeführt wird.
Bei der Auswahl eines Ziels ist es wichtig, den Umfang der Anwendung zu berücksichtigen: Was wird an den Kunden ausgeliefert? In welchem Umfang sind Sie für die Lieferkette des Produkts verantwortlich? Bei Unentschlossenheit spricht nichts dagegen, mehrere Varianten einer SBOM hochzuladen – solange der Produktname oder die Version unterschiedlich ist.
Sobald die SBOM generiert ist, kann sie mit dem BOMnipotent Client auf dem BOMnipotent Server hochgeladen werden.
Danach können Sie Grype nutzen, um regelmäßig nach Sicherheitslücken zu scannen .
Sobald Ihre SBOM (Software Bill of Materials) erstellt wurde, ist es an der Zeit, sie kontinuierlich auf Schwachstellen zu scannen. Beachten Sie, dass einige Gesetze, wie beispielsweise der Cyber Resilience Act der EU, vorschreiben, dass Produkte ohne bekannte Schwachstellen veröffentlicht werden. Der erste Scan sollte daher vor einer Veröffentlichung erfolgen.
Es gibt verschiedene Tools zur Überprüfung eines Produkts auf Schwachstellen in der Lieferkette. Dieses Tutorial verwendet Grype von Anchore, da es sich gut mit Syft von Anchore aus dem SBOM tutorial integriert. Genau wie Syft ist Grype ein Open-Source-Befehlszeilenprogramm.
Das offizielle Grype GitHub Repository enthält Installationsanweisungen. Ähnlich wie bei Syft können Sie den Installationspfad (das letzte Argument des Shell-Befehls) auf ‘~/.local/bin’ ändern, da ‘/usr/local/bin’ Root-Berechtigungen zum Ändern erfordert.
Sobald eine SBOM vorliegt, ist das Scannen auf Schwachstellen sehr einfach:
grype sbom:./sbom.cdx.json --fail-on low
grype sbom:./sbom.cdx.json -f low
✔ Scanned for vulnerabilities [2 vulnerability matches]
├── by severity: 0 critical, 0 high, 2 medium, 0 low, 0 negligible
└── by status: 2 fixed, 0 not-fixed, 0 ignored
NAME INSTALLED FIXED-IN TYPE VULNERABILITY SEVERITY
ring 0.17.8 0.17.12 rust-crate GHSA-4p46-pwfr-66x6 Medium
rustls 0.23.15 0.23.18 rust-crate GHSA-qg5g-gv98-5ffh Medium
[0000] ERROR discovered vulnerabilities at or above the severity threshold
Beim Ausführen dieses Befehls überprüft Grype mehrere Schwachstellendatenbanken auf Übereinstimmungen mit den im SBOM angegebenen Komponenten. Die Option ‘fail-on’ sorgt dafür, dass das Programm mit einem Fehlercode ungleich null beendet wird, falls eine Schwachstelle mit mindestens der angegebenen Schwere ’low’ gefunden wird.
Die Syntax zum Exportieren eines Schwachstellenberichts, der von BOMnipotent verarbeitet werden kann, ist ähnlich wie bei Syft:
grype sbom:./sbom.cdx.json --output cyclonedx-json=./vuln.cdx.json
grype sbom:./sbom.cdx.json -o cyclonedx-json=./vuln.cdx.json
Grype lässt sich leicht mit BOMnipotent kombinieren. Sie können das “bom get” Kommando von BOMnipotent Client verwenden, um den Inhalt einer BOM direkt in die Konsole ausgeben zu lassen, und diesen dann an Grype weitergeben:
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
Dieser Abschnitt enthält mehrere Texte, welche notwendig sind, um mit verschiedenen Gesetzen und Regulationen konform zu sein.
BOMnipotent basiert auf vielerlei Open Source Software Projekten. Mehrere (obgleich nicht alle) davon haben eine Lizenz, welche verlangt, dass der volle Lizenztext in der Dokumentation gelistet wird. Diese Seite erfüllt dieses Versprechen.
Für die rechtlich geltenden Datenschutzbestimmungen, konsultieren Sie bitte die englische Seite .
Für die rechtlich geltenden Nutzungsbedingungen, konsultieren Sie bitte die englische Seite .
Weichwerke Heidrich Software
Im Hirschmorgen 32
DE-69181 Leimen
Mail info@wwh-soft.com
Webseite: https://www.wwh-soft.com
Vertreten durch: Simon Heidrich
USt–IdNr. gemäß §27a Umsatzsteuergesetz: DE450755905
Gründungsdatum: 02.12.2024