web-dev-qa-db-fra.com

Conteneurs dockers cryptés et sécurisés

Nous connaissons tous des situations dans lesquelles vous ne pouvez pas utiliser une source ouverte et distribuer librement des logiciels - et je suis dans l'une de ces situations.

J'ai une application composée d'un certain nombre de fichiers binaires (compilés à partir de sources C) et de code python qui intègre tout cela dans un système. Auparavant, cette application fonctionnait comme une solution en nuage. Les utilisateurs avaient donc accès aux fonctions de l'application via le réseau, mais aucune chance de toucher au serveur où sont stockés les fichiers binaires et le code.

Nous voulons maintenant livrer la version "locale" de notre système. L'application fonctionnera sur des PC que nos utilisateurs posséderont physiquement. Nous savons que tout peut être cassé, mais au moins, nous voulons protéger l'application autant que possible de la copie et de l'ingénierie inverse.

Je sais que docker est un formidable outil de déploiement et je me demande donc: il est possible de créer des conteneurs de docker cryptés où personne ne peut voir les données stockées dans le système de fichiers du conteneur? Existe-t-il une solution connue à ce problème?

Aussi, peut-être y at-il des solutions bien connues qui ne reposent pas sur le menu fixe?

28
Alexey Petrenko

Ce que vous demandez est appelé obfuscation . Cela n'a rien à voir avec Docker et constitue un problème très spécifique à la langue; pour les données, vous pouvez toujours faire ce que vous voulez, mais vous pouvez espérer décourager l’attaquant, cela ne sera jamais sécurisé. Même les systèmes de cryptage les plus modernes ne peuvent aider, car le programme (fourni) doit contenir la clé.

C est généralement assez difficile à inverser, pour Python, vous pouvez essayer pyobfuscate et similaire .

Pour les données, j'ai trouvé cette question (mots-clés: cryptage de fichiers jeu ).

6
remram

L'utilisateur root sur la machine hôte (où le démon docker est exécuté) dispose d'un accès complet à tous les processus en cours d'exécution sur l'hôte. Cela signifie que la personne qui contrôle la machine hôte peut toujours avoir accès au RAM de l'application ainsi qu'au système de fichiers. Cela rend impossible de cacher une clé pour déchiffrer le système de fichiers ou protéger RAM du débogage.

En utilisant l'obscurcissement sur une machine Linux standard, vous pouvez rendre la lecture du système de fichiers et de la RAM plus difficile, mais vous ne pouvez pas empêcher cela ou le conteneur ne peut pas s'exécuter.

Si vous pouvez contrôler le matériel exécutant le système d'exploitation, vous voudrez peut-être consulter le Trusted Platform Module qui démarre la vérification du système dès son démarrage. Vous pouvez alors théoriquement faire des choses avant que l'utilisateur root ait accès au système pour cacher des clés et chiffrer fortement les systèmes de fichiers. Même dans ce cas, compte tenu de l'accès physique à la machine, un attaquant déterminé peut toujours obtenir les données déchiffrées.

19
Andy

Si vous voulez une solution totalement sécurisée, vous recherchez le «Saint Graal» de la confidentialité: le cryptage homomorphe. En bref, vous souhaitez chiffrer votre application et vos données, les envoyer à un PC et les faire fonctionner sans que son propriétaire, son système d’exploitation ou toute autre personne puisse puiser dans les données . peine est un projet de recherche actif. Il y a eu au moins un projet l'avoir géré, mais il a toujours des limites:

  1. C'est seulement des fenêtres
  2. Le processeur a accès à la clé (c’est-à-dire que vous devez faire confiance à Intel)
  3. Il est optimisé pour les scénarios de cloud. Si vous souhaitez l’installer sur plusieurs PC, vous devez fournir la clé de manière sécurisée (c’est-à-dire y aller et taper vous-même) à l’un des PC sur lesquels vous allez installer votre application, et ce PC devrait pouvoir propager de manière sécurisée la clé aux autres PC. 

La suggestion d'Andy sur l'utilisation du TPM a des implications similaires aux points 2 et 3.

5
tec-goblin

On dirait que Docker n'est pas le bon outil, car il n'a jamais été conçu pour être utilisé comme un bac à sable à part entière (du moins d'après ce que j'ai lu). Pourquoi n'utilisez-vous pas une approche plus complète de VirtualBox? Au moins, vous pourrez alors verrouiller la machine virtuelle derrière des connexions (autant qu'une installation physique sur l'ordinateur de quelqu'un d'autre peut être verrouillée) et l'exécuter, sur des systèmes de fichiers isolés et chiffrés et sur les neuf mètres.

Vous pouvez soit aller léger et ouvert, soit gros et fermé. Je ne sais pas s'il existe une option "légère et fermée".

4
WineSoaked

J ai exactement le même problème. Actuellement ce que j'ai pu découvrir est ci-dessous. 

A. Asylo ( https://asylo.dev

  1. Asylo nécessite que les programmes/algorithmes soient écrits en C++.
  2. La bibliothèque Asylo est intégrée à docker et il semble facile de créer une image personnalisée du pilote basée sur Asylo.
  3. Asylo dépend de nombreuses technologies peu répandues comme les "proto tampons" et le "bazel", etc. Pour moi, il semble que la courbe d'apprentissage ne soit PAS raide, c'est-à-dire que la personne qui crée des images de docker/(programmes) aura besoin de beaucoup de temps pour comprendre comment faire.
  4. Asylo est gratuit
  5. Asylo est une nouveauté brillante qui présente tous les avantages et les inconvénients.
  6. Asylo est produit par Google, mais ce n'est PAS un produit Google officiellement pris en charge, conformément à la clause de non-responsabilité figurant sur sa page.
  7. Asylo promet que les données dans un environnement sécurisé pourraient être sauvegardées même par les utilisateurs disposant des privilèges root. Cependant, la documentation est insuffisante et on ne sait pas pour le moment comment cela pourrait être mis en œuvre.

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

  1. Il est lié à la technologie INTEL SGX, mais il existe également un mode Simulation (pour le développement). 
  2. Ce n'est pas gratuit. Il a juste un petit ensemble de fonctionnalités qui ne sont pas payées. 
  3. Semble supporter beaucoup de fonctionnalités de sécurité. 
  4. Facile à utiliser. 
  5. Ils semblent avoir plus de documentation et d’instructions sur la façon de créer votre propre image de menu fixe avec leur technologie. 
1
osoitza