web-dev-qa-db-fra.com

Comment empêcher une société d'hébergement d'accéder aux clés de chiffrement d'une machine virtuelle?

Je veux empêcher le vol potentiel de mon application Web (code source + base de données) par mon hébergeur local, auquel je n'ai pas entièrement confiance pour une raison quelconque (mais je n'ai pas d'autre choix que d'utiliser car ils donnent, de loin, le meilleur) latence ici).

Je prévois de crypter une partition avec cryptsetup et d'y stocker le répertoire Web + les fichiers de base de données.

Le seul problème est que je devrai déverrouiller la partition à chaque redémarrage (même non contrôlé), avant de pouvoir démarrer les serveurs Web et de base de données; mais je suppose que je suis prêt à vivre avec ça pour l'instant.

Cependant, pour autant que je puisse lire sur le Web, les clés de chiffrement sont stockées telles quelles en mémoire, et peuvent être lues avec un accès physique à la machine, même à partir d'une machine dédiée utilisant - attaques de démarrage à froid . Sur une machine virtuelle, je suppose que c'est encore plus simple, car l'hyperviseur peut prendre un instantané de l'état du serveur entier (stockage + RAM).

Donc, pour autant que je sache, il devrait être assez facile de faire un vidage de mémoire et de localiser la clé de chiffrement à tout moment.

Existe-t-il un moyen d'empêcher cela?

Je sais que le contrôle de l'hyperviseur donne un énorme avantage à quelqu'un qui essaie de voler des données, et en tant que tel, je ne cherche pas une solution parfaite ici; mais j'essaie plutôt de rendre le plus difficile possible l'accès aux données, afin qu'il ne soit pas économiquement viable de dépenser du temps et des ressources pour les obtenir.

Je ne suis pas vraiment optimiste ici, car les clés de cryptage doivent être stockées sous forme certains en mémoire pour le décryptage, mais j'espère avoir raté quelque chose.


Modifier - clarification

De mon commentaire ci-dessous:

Je suis sûr que les hyperviseurs de la société d'hébergement ne sont en aucun cas modifiés pour effectuer une opération malveillante; leur entreprise héberge, ne vole pas, et l'entreprise est digne de confiance relativement. Ce que j'essaie de protéger, c'est que quelqu'un soudoie un employé pour lui vendre un instantané des données. Tant que la clé de chiffrement ne peut pas être récupérée à partir d'un instantané que l'hyperviseur stock peut faire, je considère que la solution est assez bonne pour mon cas d'utilisation.

46
Benjamin

Vous ne pouvez pas, clair et simple. Si vous ne faites pas confiance à la société d'hébergement, vous n'hébergez pas avec eux. Ceci est la loi n ° 3 de 10 loi de sécurité immuable :

Loi n ° 3: Si un méchant a un accès physique illimité à votre ordinateur, ce n'est plus votre ordinateur.

L'hyperviseur a toujours une position privilégiée sur votre machine virtualisée, vous ne pouvez pas vous protéger contre l'hyperviseur escroc.

Une façon que vous pouvez faire pour bénéficier de leur emplacement réseau mais en gardant votre code sécurisé est de faire un hébergement en colocation. Dans un hébergement en colocation, vous apportez votre propre machine que vous placez dans le centre de données de quelqu'un d'autre.

La colocation de base elle-même devrait décourager la plupart des attaquants opportunistes, mais un attaquant ciblé/déterminé peut se connecter à votre machine de toute façon. Si cela vous inquiète, vous devez placer votre machine dans un boîtier de serveur inviolable/inviolable, de sorte que le seul port déverrouillé vers le monde extérieur soit le câble d'alimentation et le câble réseau, et vous cryptez tout le trafic réseau en cours dans/hors de la machine. De cette façon, vous pouvez mettre votre machine dans leur réseau et bénéficier de la faible latence du réseau, et ils ne pourront pas voler les données de votre serveur à moins qu'ils ne cassent le châssis du serveur.

Si la protection de vos données est très importante, vous voudrez également faire un audit régulier que le cas n'a pas été falsifié. Si vous avez un budget infini, il peut également être possible de concevoir un châssis inviolable doté de divers capteurs pouvant déclencher une alarme et déclencher l'arrêt (en supprimant toutes les clés sensibles/de cryptage) s'ils détectent que le châssis a été altéré, mais bien sûr cela devient très vite cher.

109
Lie Ryan

de sorte qu'il ne serait pas économiquement viable de dépenser du temps et des ressources pour les obtenir.

Je déteste vous le dire, mais vous n'êtes tout simplement pas si important. Personne ne vous connaît ni connaît votre application Web. Ce n'est donc déjà pas économiquement viable.

Considérez le rapport coût-avantage. Pour la société d'hébergement, si cela se produit ne fois, ils auraient des clients hémorragiques. Ils vont donc avoir des journaux appropriés. Tout employé pris en flagrant délit sera non seulement licencié, mais également arrêté. Le pot-de-vin devrait donc être sérieux. Nous parlons de millions, car cela doit indemniser l'employé pour avoir été emprisonné et ne plus jamais pouvoir travailler une fois libéré. Et si c'est le pot-de-vin, votre entreprise doit valoir au moins 10 fois cela. Cela valorise votre entreprise par dizaines de millions, et plus probablement par centaines de millions.

Honnêtement, votre entreprise en vaut-elle la peine? Tout ce que vous avez dit jusqu'à présent ne l'est pas. Et si c'est le cas, vous n'avez aucune raison de ne pas exécuter vos propres serveurs.

19
Graham

En théorie, vous devriez pouvoir utiliser les fonctionnalités matérielles fiables des processeurs modernes pour exécuter le chiffrement de votre disque, ou même votre machine virtuelle entière, à l'intérieur d'une partie inviolable du processeur, ayant toutes les données sur le disque et en mémoire chiffrées avec des clés qui ne sont accessibles qu'à l'intérieur de cette enclave de confiance inviolable.

Tout en exposant le système informatique de confiance SGX d'Intel aux machines virtuelles cela ne semble pas être possible sur les hyperviseurs de stock , AMD a une fonctionnalité appelée Virtualisation cryptée sécurisée ou SEV , qui ressemble exactement à ce que vous recherchez: vous pouvez configurer votre VM de manière à ce qu'il soit protégé de l'hyperviseur avec des clés connues uniquement d'AMD ou d'une personne désireuse et capable de démonter le CPU hôte .

Malheureusement, il est peu probable que la société d'hébergement particulière que vous devez utiliser fournisse des hôtes prenant en charge AMD SEV ou rende la fonctionnalité disponible pour leurs clients.

11
interfect

Microsoft a une solution possible pour cela appelée VM blindées , celles-ci sont spécifiquement destinées au vecteur d'attaque auquel un acteur malveillant a un accès administratif à l'hyperviseur. Un exemple de ceci serait des machines déployées dans le cloud ou dans un colo.

L'inconvénient est que vous devrez maintenir un serveur Guardian sous votre contrôle physique. Cela peut être exagéré pour vos besoins.

4
Gaius

Je ne fais pas entièrement confiance pour une raison quelconque

Faites-leur confiance de quelle manière? Croyez-vous qu'ils peuvent être incompétents ou pensez-vous qu'ils peuvent être malveillants?

Si vous êtes simplement incompétent, vous obtiendrez probablement une protection raisonnable contre le cryptage que vous avez décrit. Il est bien sûr possible que leur machine hôte soit compromise et que l'attaquant trouve un moyen de récupérer les clés de chiffrement actuelles de la RAM, mais dans les compromis typiques de l'hôte Web, les attaquants n'iront pas aussi loin. Ils trouveront simplement un endroit facile pour vider leur malware ou saisir des mots de passe.

Mais s'ils sont activement malveillants, vous ne pouvez pas protéger les données sur la machine virtuelle. Au mieux, vous pouvez le configurer en tant que serveur proxy, ce qui pourrait vous offrir des avantages de latence sans exposer votre base de données et votre code source.

4
jpa

La réponse de Lie Ryan est la bonne, mais au-delà de la colocation, qui a toujours une surface d'attaque physique dans les locaux de l'hôte, une possibilité supplémentaire consiste à utiliser le fournisseur d'hébergement juste pour vous obtenir une adresse IP accessible au public, et à la créer par tunneling à une seule -premises serveur via une liaison haut débit domestique ou professionnelle décente.

Si vous voulez devenir vraiment sophistiqué, vous pouvez même faire une approche mixte où les clés privées des certificats ne quittent jamais votre propre serveur local et le serveur du site d'hébergement n'a accès qu'à la génération de clés de session. Cloudflare propose quelque chose comme ça; Je ne sais pas exactement comment cela fonctionne. Je pense qu'il est même possible (pas avec les leurs, mais si vous lancez les vôtres, en faisant un usage fantaisiste des primitives cryptographiques) d'avoir les données sur le site d'hébergement, mais chiffrées avec des clés symétriques qui ne sont jamais sur le site d'hébergement, et en remettant le connexion au site d'hébergement de manière à ce que seul le client, mais pas le site d'hébergement, puisse décrypter les données.

Le cloud est finalement l'ordinateur de quelqu'un d'autre et les règles de quelqu'un d'autre. Si vous recherchez une sécurité d'accès physique, le meilleur moyen peut être d'héberger votre propre serveur physique ou d'obtenir un serveur physique dédié. Avec tous les outils disponibles pour orchestrer cela aujourd'hui, et le fait probable que vous souhaitiez héberger des projets pendant longtemps, ce n'est pas une mauvaise idée.

1
Jas Panesar

Votre question semble changer de rythme plusieurs fois, mais si votre principale préoccupation est que quelqu'un clone votre travail, la protection suivante devrait être simple:

Assurez-vous qu'il n'y a rien d'intéressant à voler

Plutôt que de laisser le code source de tout vivre sur leurs machines, travaillez sur le code dans un environnement différent et déployez uniquement les binaires.

Cela devrait empêcher quiconque de copier votre travail car il ne peut pas mettre à jour les binaires, si vous êtes vraiment paranoïaque, vous pouvez même mettre une bombe à retardement dans la logique pour vous assurer que les choses cessent de fonctionner même s'ils copient la version actuelle.

Gardez à l'esprit que même si une quantité importante de votre code doit vivre sur le serveur, il devient déjà financièrement peu attrayant si vous êtes en mesure d'empêcher quelqu'un d'utiliser une ou deux parties principales. Bien sûr, ils peuvent être rétroconçus, mais cela est probablement prohibitif.


Cette solution n'offre bien sûr pas de protection contre les fuites de données, mais sur la base de votre question, il semble que la prévention de la concurrence soit plus un problème que la divulgation des données.

0
Dennis Jaheruddin