it-swarm.com.de

Verschlüsselte und sichere Docker-Container

Wir alle kennen Situationen, in denen Sie nicht Open Source nutzen können und Software frei verteilen können - und ich bin in einer dieser Situationen.

Ich habe eine App, die aus einer Reihe von Binärdateien (aus C-Quellen kompiliert) und Python-Code besteht, der alles in ein System einschließt. Diese App diente früher als Cloud-Lösung, sodass Benutzer über ein Netzwerk auf App-Funktionen zugreifen konnten, ohne jedoch den Server zu berühren, auf dem Binärdateien und Code gespeichert sind.

Nun wollen wir die "lokale" Version unseres Systems liefern. Die App wird auf PCs ausgeführt, die unsere Benutzer physisch besitzen. Wir wissen, dass alles kaputt sein könnte, möchten aber die App zumindest so weit wie möglich vor möglichem Kopieren und Reverse-Engineering schützen.

Ich weiß, dass Docker ein wunderbares Bereitstellungstool ist. Ich frage mich, ob es möglich ist, verschlüsselte Docker-Container zu erstellen, bei denen niemand Daten im Dateisystem des Containers sehen kann. Gibt es eine bekannte Lösung für dieses Problem?

Vielleicht gibt es auch bekannte Lösungen, die nicht auf Docker basieren.

28
Alexey Petrenko

Was Sie danach fragen, heißt Verschleierung . Es hat nichts mit Docker zu tun und ist ein sehr sprachspezifisches Problem. Für Daten können Sie immer das tun, was Sie wollen, aber während Sie hoffen, den Angreifer zu entmutigen, wird er niemals sicher sein. Selbst modernste Verschlüsselungsverfahren können nichts helfen, da das Programm (das Sie bereitstellen) den Schlüssel enthalten muss.

C ist normalerweise schwer genug, um Reverse Engineering durchzuführen, für Python können Sie pyobfuscate und ähnlich versuchen.

Für Daten habe ich diese Frage gefunden (Schlüsselwörter: Verschlüsseln von Dateien ).

6
remram

Der Benutzer root auf dem Host-Computer (auf dem der Daemon docker ausgeführt wird) hat uneingeschränkten Zugriff auf alle auf dem Host ausgeführten Prozesse. Das bedeutet, dass die Person, die den Host-Computer steuert, immer Zugriff auf das RAM der Anwendung sowie auf das Dateisystem erhalten kann. Dies macht es unmöglich, einen Schlüssel zum Entschlüsseln des Dateisystems oder zum Schutz von RAM vor dem Debuggen zu verbergen.

Durch die Verwendung von Verschleierung bei einer Standard-Linux-Box können Sie das Lesen des Dateisystems und des Arbeitsspeichers schwieriger machen, aber Sie können dies nicht unmöglich machen oder der Container kann nicht ausgeführt werden.

Wenn Sie die Hardware des Betriebssystems steuern können, möchten Sie möglicherweise das Trusted Platform Module betrachten, das die Systemprüfung startet, sobald das System startet. Sie könnten dann theoretisch etwas tun, bevor der Root-Benutzer Zugriff auf das System hat, um Schlüssel auszublenden und Dateisysteme stark zu verschlüsseln. Selbst dann kann ein entschlossener Angreifer bei physischem Zugriff auf die Maschine die entschlüsselten Daten erhalten.

19
Andy

Wenn Sie eine absolut sichere Lösung suchen, suchen Sie nach dem 'heiligen Gral' der Vertraulichkeit: der homomorphen Verschlüsselung. Kurz gesagt, Sie möchten Ihre Anwendung und Ihre Daten verschlüsseln, an einen PC senden und von diesem PC ausführen lassen, ohne dass dessen Besitzer, Betriebssystem oder andere Personen in der Lage sind, die Daten zu erfassen. Dies ohne große Leistung Die Strafe ist ein aktives Forschungsprojekt. Es hat mindestens ein Projekt geschafft, aber dies hat immer noch Einschränkungen:

  1. Es ist nur Fenster
  2. Die CPU hat Zugriff auf den Schlüssel (dh Sie müssen Intel vertrauen)
  3. Es ist für Cloud-Szenarien optimiert. Wenn Sie dies auf mehreren PCs installieren möchten, müssen Sie den Schlüssel auf sichere Weise bereitstellen (dh, gehen Sie dorthin und geben Sie ihn selbst ein) für einen der PCs, auf dem Sie Ihre Anwendung installieren, und dieser PC sollte dies können um den Schlüssel sicher an die anderen PCs weiterzugeben. 

Andys Vorschlag zur Verwendung des TPM hat ähnliche Auswirkungen wie die Punkte 2 und 3.

5
tec-goblin

Klingt nach Docker ist nicht das richtige Werkzeug, weil es nie als vollwertige Sandbox verwendet werden sollte (zumindest basierend auf dem, was ich gelesen habe). Warum verwenden Sie keinen umfassenderen VirtualBox-Ansatz? Zumindest können Sie dann die virtuelle Maschine hinter Anmeldungen sperren (so viel wie eine physische Installation auf dem Computer eines anderen Computers gesperrt werden kann) und sie auf isolierten, verschlüsselten Dateisystemen und den gesamten neun Metern ausführen.

Sie können entweder leicht und offen gehen oder fett und geschlossen. Ich weiß nicht, dass es eine "leichte und geschlossene" Option gibt.

4
WineSoaked

Ich habe genau das gleiche Problem. Derzeit konnte ich herausfinden, was ich entdecken konnte. 

A. Asylo ( https://asylo.dev

  1. Asylo erfordert, dass Programme/Algorithmen in C++ geschrieben werden.
  2. Die Asylo-Bibliothek ist in Docker integriert, und es scheint sinnvoll zu sein, ein auf Asylo basierendes Benutzerbild zu erstellen.
  3. Asylo hängt von vielen nicht so populären Technologien wie "Proto-Puffer" und "Bazel" usw. ab. Für mich scheint die Lernkurve NICHT steil zu sein, dh die Person, die Docker-Images/(Programme) erstellt, braucht viel Zeit, um zu verstehen wie es geht.
  4. Asyl ist kostenlos
  5. Asylo ist hell neu mit allen Vor- und Nachteilen.
  6. Asylo wird von Google produziert, ist jedoch KEIN offiziell unterstütztes Google-Produkt gemäß dem Haftungsausschluss auf seiner Seite.
  7. Asylo verspricht, dass Daten in einer vertrauenswürdigen Umgebung auch von Benutzern mit Root-Berechtigungen gespeichert werden können. Es fehlt jedoch an Dokumentation, und derzeit ist nicht klar, wie dies umgesetzt werden kann.

B. Scone ( https://sconedocs.github.io )

  1. Es ist an die INTEL SGX-Technologie gebunden, aber es gibt auch den Simulationsmodus (für die Entwicklung). 
  2. Es ist nicht frei. Es gibt nur ein paar Funktionen, die nicht bezahlt werden. 
  3. Scheint viele Sicherheitsfunktionen zu unterstützen. 
  4. Einfach zu bedienen. 
  5. Es scheint mehr Dokumentation und Anweisungen zu geben, wie man mit seiner Technologie ein eigenes Docker-Image erstellt. 
1
osoitza