Rocket.chat x Constellation

Rocket.Chat + Constellation

Wie sich "always-encrypted" Rocket.Chat einrichten lässt


Duch Constellation können Benutzer Confidential Computing nutzen, um ein durchgehend verschlüsseltes Rocket.Chat zu erstellen, so dass sensible Daten wie Metadaten, Serverkonfigurationen und Code geschützt werden.

Herausforderung


Rocket.Chat ist eine Open-Source-Kommunikationsplattform, die an Slack erinnert und selbst gehostet werden kann. Rocket.Chat positioniert sich laut eigener Website als "sichere und gesetzeskonforme Kommunikationsplattform".

Ein wesentliches Angebot von Rocket.Chat ist die Ende-zu-Ende-Verschlüsselung von Nachrichten. Zwar bietet die Verschlüsselung von Nachrichten erheblichen Schutz, jedoch werden dadurch keine sensiblen Daten wie Metadaten, Serverkonfigurationen, Code, etc. geschützt. Gleichzeitig gibt es einige Nachteile, wie z.B. das Fehlen von Suchfunktionen und die Notwendigkeit, den Key manuell zu verwalten.

Dadurch könnten Angreifer mit Root-Zugriff auf einen Kubernetes-Knoten immer noch viele Informationen extrahieren und manipulieren. Weiterhin könnte diese Art von Angreifer sogar bösartigen JS-Code in Client-Sitzungen einschleusen, E2E-Verschlüsselungskeys oder Klartextnachrichten von Rocket.Chat durchsickern lassen sowie die Verschlüsselung deaktivieren.

Die E2E-Verschlüsselung von Rocket.Chat hilft also hauptsächlich gegen passive Angreifer, die in der Lage sind, einige serverseitige Daten zu lesen oder abzufangen.

Treath model of using Rocket.chat without constellation

Lösung


Confidential Computing bietet eine umfassendere Lösung für die Anwendung von Verschlüsselung.

Es handelt sich um eine revolutionäre Technologie, welche Daten immer verschlüsselt, auch während der Verarbeitung. Wenn es richtig angewendet wird, kann Confidential Computing sogar komplexe Anwendungen vor der Cloud-Infrastruktur abschirmen. So können nicht einmal Systemadministratoren, Mitarbeiter von Cloud-Anbietern oder privilegierte Angreifer darauf zugreifen. Zudem kann diese Verschlüsselung sogar remote überprüft werden. Grundlegende Funktionen des Confidential Computing‘s sind bereits auf den großen Clouds wie Azure, GCP und AWS verfügbar. Diese reichen jedoch nicht aus, um komplexe und skalierbare Anwendungen wie Rocket.Chat zu schützen.

Hierfür benötigen Sie eine Lösung wie Constellation. Constellation ist eine Open-Source-Software, die gesamte Kubernetes-Deployments Ende-zu-Ende mithilfe von Confidential Computing in Public Clouds schützt. Im Wesentlichen kann Constellation jede Anwendung, die auf Kubernetes ausgeführt werden kann, abschirmen und zur Laufzeit verschlüsseln. Rocket.Chat läuft auf Constellation, wodurch das gesamte Deployment, einschließlich MongoDB und anderer Komponenten, von der Infrastruktur isoliert und die Daten stets verschlüsselt sind.


Anleitung: Einrichtung von "always-encrypted" Rocket.Chat auf Kubernetes


Tutorial: Wie sich "always encrypted" Rocket.Chat auf Kubernetes einrichten lässt


Live demo


Hier können Sie eine Demo des vollständig verschlüsselten Rocket.Chat in Aktion sehen: https://rocket.edgeless.systems/home.



Voraussetzungen und Übersicht


Um Rocket.Chat auf Constellation auszuführen, benötigen Sie Folgendes:

• Einen Cloud-Anbieter mit Confidential Computing Fähigkeiten

• Einen Domain-Registrar, um einen Domainnamen für Ihren Cluster einzurichten

• Kubectl und Helm müssen auf ihrem Rechner installiert sein


Der Prozess besteht aus drei entscheidenden Schritten:

  1. Einrichten von Constellation

  2. Einrichten der Domain

  3. Installation von Rocket.Chat über Helmchart

Einrichten von Constellation


Nachdem Sie sich mit ihrem Cloud-Anbieter verbunden haben, downloaden und installieren Sie die Constellation CLI.

Führen Sie dann die folgenden Befehle aus:

Dieser Prozess ist nochmal detailliert beschrieben in den Constellation Docs.


constellation config generate azure
constellation iam create azure --region=westus --resourceGroup=constellTest --servicePrincipal=spTest --update-config
constellation create -y
constellation init
export KUBECONFIG="$PWD/constellation-admin.conf"


Sie können nun mit kubectl oder anderen Tools eine Verbindung zum Cluster herstellen, indem Sie die automatisch erstellte constellation-admin.conf verwenden. Die Konfiguration stellt sicher, dass die Verbindung "confidential" ist und innerhalb des korrekten Clusters endet. Dadurch sind keine Man-in-Middle-Attacken mehr möglich.


Installation von Rocket.Chat (automatisiert)


Im Fall unserer Beispielkonfiguration (Azure mit GoDaddy) können Sie Rocket.Chat mithilfe eines von uns vorab erstellten Helm-Charts installieren. Dieser konfiguriert die URL und nutzt TLS.


Obwohl dies auch manuell über einen der offiziellen Helm Charts von Rocket.Chat möglich ist, empfehlen wir die Verwendung des Helm-Charts von Edgeless Systems für einen schnelleren Überblick über den gesamten Prozess.


Der Chart enthält detaillierte Konfigurationen für jede Komponente. Nachdem Sie Ihren gewünschten Hostnamen in der values.yaml festgelegt haben, kann der Chart wie folgt installiert werden (unter der Annahme, dass GoDaddy der Domain-Anbieter ist):


export GODADDY_API_KEY=<your creds here>
export GODADDY_SECRET_KEY=<your creds here>
export MONGO_USER_SECRET=$(openssl rand -base64 32)
export MONGO_ROOT_SECRET=$(openssl rand -base64 32)
export OWNER_ID= <your name here>


Mit Ihren Anmeldeinformationen können Sie nun die erforderlichen Helm Befehle ausführen.

git clone https://github.com/edgelesssys/constellation-rocketchat.git
cd constellation-rocketchat
helm dependency update ./rocketchat
helm upgrade rocket-infra ./rocketchat --install --namespace default --set infra.enabled=true --set apiKey=$GODADDY_API_KEY --set secretKey=$GODADDY_SECRET_KEY
helm upgrade rocket-app ./rocketchat --install --namespace default --set app.enabled=true rocketchat.mongodb.auth.password=$MONGO_USER_SECRET --set rocketchat.mongodb.auth.rootPassword=$MONGO_ROOT_SECRET


Das Ergebnis ist öffentlich über die von Ihnen festgelegte URL erreichbar.

Sie können die Version von Edgeless Systems unter https://rocket.edgeless.systems/ sehen. Schauen Sie gerne vorbei und sagen Sie "Hallo"!



Welche Vorteile bringt das mit sich?


Die Ausführung von Rocket.Chat auf Constellation stellt sicher, dass das gesamte Deployment, einschließlich MongoDB und aller oben installierten Komponenten, von der Infrastruktur isoliert ist und alle Daten stets verschlüsselt sind.

Rocketchat protected with constellation

Was bedeutet das?


Durch Constellation laufen alle Kubernetes-Nodes auf AMD-basierten Confidential VMs (CVMs) laufen. CVMs sind stark isoliert vom Host und bleiben während der Laufzeit im Speicher verschlüsselt. Gleichzeitig stellt Constellation auch sicher, dass alle Nodes das gleiche minimale mkosi-basierte Node-Image ausführen.



Wie gewährleistet Constellation diese Eigenschaften?


Constellation setzt auf die hardwarebasierte "Remote Attestation" von CVMs. Das Constellation CLI nutzt diese Funktion, um den ersten Node im Cluster zu überprüfen und eine sichere Verbindung herzustellen. Weitere Nodes im Cluster werden von den bereits verifizierten Nodes überwacht. Während der Überprüfung wird sichergestellt, dass ein "gutes" Node-Image auf "guter" Hardware mit der "richtigen" Konfiguration läuft. "Gute" Node-Images werden durch signierte Merkmale, wie z.B. Hashes, erkannt, die für jede freigegebene Version veröffentlicht werden.

Nach erfolgreicher Verifizierung erhält ein Node Zugang zu einem gemeinsam genutzten Cilium/Wireguard-basierten VPN. Zudem bekommt er einen Schlüssel zur Speicherverschlüsselung. Die Nodes gewährleisten, dass sämtliche geschriebenen Daten im Netzwerk oder im Speicher verschlüsselt sind. Das Key Management erfolgt automatisch, ohne dass der Kubernetes-Administrator eingreifen muss.

Wenn wir all das zusammenfassen, erhalten wir einen Kubernetes-Cluster, der:

  1. Alle Daten im Netzwerk sowie im Laufwerk- und Arbeitsspeicher verschlüsselt hält.

  2. Von der zugrunde liegenden Infrastruktur (einschließlich Hypervisor und Host-Betriebssystem) isoliert ist.

  3. Basierend auf "Remote Attestation" überprüft wird.

Für weitere Details zur Architektur und den Sicherheitsfunktionen werfen Sie doch einen Blick auf die Constellation Docs.


Was ist mit Benutzer-Verbindungen?


Benutzer stellen über den Browser eine Verbindung zu Rocket.Chat her, indem sie z.B. zu https://rocket.edgeless.systems/ browsen. TLS-Verbindungen zu Rocket.Chat auf Constellation werden innerhalb der CVMs beendet, was eine Ende-zu-Ende Verschlüsselung gewährleistet.

Encrypted Rocket.chat

Aber wie kann der Benutzer sich sicher sein?

Leider gibt es keine direkte Möglichkeit für den Benutzer, dies zu überprüfen. Sie können jedoch das TLS-Zertifikat manuell überprüfen (indem sie auf das Schlosssymbol in der Browserleiste klicken) und dies mit Ihren Peers bestätigen, wenn es sich um das erwartete Zertifikat handelt. Der SHA-256-Fingerabdruck des Edgeless Systems-Servers, der in diesem Tutorial erstellt wurde, lautet: CB 2C 2D 96 E6 B2 59 9D DC FD 99 C5 7A 80 58 60 3C A1 22 99 6D 28 BF FA AD 5B F0 52 EF F0 31 C5.


Idealerweise würde ein Browser-Plugin existieren, das es erlaubt, ein Zertifikat für eine Domain festzulegen (zu pinnen) und auch hardwarebasierte Remote Attestierungen überprüfen kann. Dies ist jedoch zukünftige Arbeit. Auch ohne ein solches Plugin schützt Rocket.Chat in Verbindung mit Constellation vor vielen Arten von Angriffen auf die Infrastruktur und versehentlichen Datenlecks.

Lernen Sie mehr über Constellation


Schauen Sie sich die Constellation Docs doch näher an oder lesen Sie, wie Constellation genutzt wird, um Journalisten zu schützen.

Interessiert an weiteren Informationen?


Kontaktieren Sie uns für eine eingehende Präsentation von Constellation oder um die Möglichkeiten des Tooling‘s von Edgeless Systems zu entdecken.