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?
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 ).
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.
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:
La suggestion d'Andy sur l'utilisation du TPM a des implications similaires aux points 2 et 3.
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".
J ai exactement le même problème. Actuellement ce que j'ai pu découvrir est ci-dessous.
A. Asylo ( https://asylo.dev )
B. Scone ( https://sconedocs.github.io )