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.
Unterabschnitte von Erforderliche Konfigurationen
Datenbank-URL
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:
Der Treiber ist “postgres”, der einzige Treiber, welcher derzeit unterstützt wird.
Der Benutzername lautet “bomnipotent_user”, da dies der Wert ist, der PostgreSQL während der Einrichtung bereitgestellt wurde.
Das Passwort wird aus der externen Variable “BOMNIPOTENT_DB_PW” gelesen, die über die Umgebung oder eine .env-Datei bereitgestellt werden kann. Sie könnten es auch direkt in der Konfigurationsdatei speichern, aber das gilt als schlechte Praxis.
Die Domäne lautet “bomnipotent_db”, das ist der Name des Docker-Containers, welcher die Datenbank ausführt. Für eine Datenbank in derselben Umgebung wäre dies stattdessen “localhost”, und für eine externe Datenbank wäre es eine andere Domäne oder IP-Adresse.
Der Port ist 5432, der Standardport, auf den PostgreSQL lauscht. In diesem Fall befindet sich der Docker-Container im selben Docker-Netzwerk wie der BOMnipotent-Server Container. Ohne diese direkte Verbindung müssten Sie diesen internen Port im Docker-Setup einem beliebigen externen Port zuordnen und diesen externen Port in der Konfiguration angeben.
Die Datenbank selbst wird auch “bomnipotent_db” genannt, da dies der Wert ist, der PostgreSQL während des Setups bereitgestellt wurde.
Wenn der BOMnipotent-Server die Datenbank nicht erreichen kann, werden Sie in den Logs darüber informiert.
Serverdomäne
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"
TLS-Konfiguration
Die TLS-Konfiguration unterstützt kein Hot Reloading. Sie müssen den Server nach der Änderung neu starten.
Was ist TLS?
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:
Den öffentlichen Schlüssel Ihres Servers, mit dem der Client nun Nachrichten senden kann, die nur der Server lesen kann.
Die Domäne(n), für die dieses Zertifikat gültig ist. Diese werden normalerweise im Feld “Subject Alternative Names” (SAN) gespeichert und sollen sicherstellen, dass der Client wirklich mit der Adresse kommuniziert, die er erreichen wollte.
Eine digitale Signatur, die kryptografisch beweist, dass das Zertifikat unterwegs nicht verändert wurde.
Vieles mehr. Sehen Sie sich einfach ein beliebiges Zertifikat in Ihrem Browser an.
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:
Der Client vertraut der Stammzertifizierungsstelle.
Die Stammzertifizierungsstelle vertraut der Zwischenzertifizierungsstelle.
Die Zwischenzertifizierungsstelle vertraut dem Server.
Daher entscheidet sich der Client, dem Server zu vertrauen und eine verschlüsselte Verbindung aufzubauen.
TLS-Konfiguration
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:
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.
allow_http
Wenn Sie dieses optionale Feld auf true setzen, lässt Ihr BOMnipotent-Server eine unverschlüsselte Verbindungen 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.
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:
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:
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.
SMTP-Einstellungen
Simple Mail Transfer Protocol (SMTP) ist das Protokoll zum Versenden von E-Mails. Im Kontext von BOMnipotent verwendet der Server es, um zu überprüfen, ob neu angefragte Benutzer Zugriff auf die von ihnen angegebene E-Mail-Adresse haben. Dazu muss der Server einen SMTP-Endpunkt erreichen.
SMTP konfigurieren
Der SMTP-Abschnitt der Konfigurationsdatei sieht folgendermaßen aus:
Der SMTP-Benutzer ist die E-Mail-Adresse, die Sie zur Authentifizierung bei Ihrem Mailserver verwenden.
Endpunkt
Der SMTP-Endpunkt teilt BOMnipotent mit, wohin die Daten gesendet werden sollen. Er kann direkt auf Ihren Mailserver oder auf ein SMTP-Relay verweisen.
Beginnt der Endpunkt mit dem Marker “smtp://”, versucht BOMnipotent Server, eine direkte Verbindung zu dieser URL herzustellen. Dies ist typischerweise bei der Verbindung mit einem lokal laufenden Relay erwünscht. Andernfalls wird eine Verbindung zu einem externen Relay hergestellt.
Geheimnis
Bei der direkten Kommunikation mit Ihrem Mailserver müssen Sie sich authentifizieren. Das Geheimnis ist entweder Ihr Passwort oder ein API-Schlüssel, falls Ihr Mail-Provider einen anbietet. Im obigen Beispiel wird das Geheimnis aus der Umgebungsvariable “SMTP_SECRET” gelesen, die zum Beispiel aus einer .env-Datei stammen kann.
Ein lokal laufendes SMTP-Relay benötigt nicht unbedingt ein Passwort zum Empfangen von E-Mails, daher ist dieses Feld optional.
STARTTLS
STARTTLS ist eine Möglichkeit, E-Mails zu verschlüsseln, die andere ist SMTPS. Seit 2018 rät die Internet Engineering Task Force
von der Verwendung von STARTTLS ab
. Sollte Ihr Mailserver jedoch kein SMTPS unterstützen, ist STARTTLS besser als gar keine Verschlüsselung. Daher wird es von BOMnipotent Server weiterhin unterstützt.
Benutzerverifizierung überspringen
Wenn Sie (noch) keinen Zugriff auf einen SMTP-Server haben, können Sie die SMTP-Konfiguration umgehen, indem Sie die folgende Zeile im globalen Kontext (also am Anfang) Ihrer config.toml hinzufügen:
skip_user_verification = true
Der BOMnipotent Server sendet dann keine Verifizierungs-E-Mail an neu angemeldete Benutzer. Stattdessen wird jedes Mal eine Warnmeldung ausgegeben, wenn die E-Mail nicht versendet wird, da diese Konfiguration die Sicherheit Ihres Servers beeinträchtigt.
CSAF-Provider Metadaten
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.
Daten generieren
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>"# Optionalcontact_details = "<Bitte kontaktieren Sie uns unter...>"# Optional
Dateneingaben des Herausgebers
Name
In diesem Feld müssen Sie den Namen Ihres Unternehmens, Ihrer Organisation oder Ihren Namen als Einzelperson angeben.
Namespace
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.
Kategorie
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.
Issuing Authority / Ausstellerinformation
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.
Kontaktdaten
In dem optionalen Feld “contact_details” können Sie Kontaktdaten für allgemeine oder Sicherheitsanfragen angeben. Die Eingabe ist in freier Form.
Generiertes Dokument
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:
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.
Dateipfad angeben
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:
Sie müssen entweder einen Pfad zu einer Datei oder Herausgeberdaten angeben. Wenn Sie keines oder beides angeben, wird die Konfiguration nicht geladen.