Question:
Comment empêcher une société d'hébergement d'accéder aux clés de chiffrement d'une VM?
Benjamin
2019-08-26 14:03:22 UTC
view on stackexchange narkive permalink

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 de l'utiliser comme ils le donnent, de loin , la meilleure 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és), avant de pouvoir démarrer les serveurs de base de données Web &; mais je suppose que je suis prêt à vivre avec ça pour le moment.

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

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

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

Je sais que le contrôle de l'hyperviseur donne un énorme avantage pour quelqu'un qui tente 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 l'accès aux données aussi difficile que possible, afin qu'il ne soit pas économiquement viable de consacrer du temps aux ressources d'& pour les obtenir.

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


Modifier - clarification

D'après 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 activité consiste à héberger, pas à voler, et l'entreprise est relativement digne de confiance. Ce contre quoi j'essaie de me protéger, c'est quelqu'un qui 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 de stock peut faire, je considère que la solution est suffisamment bonne pour mon cas d'utilisation.

Si le cryptage homomorphe devient un jour viable, je suis sûr qu'une société d'hébergement offrira un hébergement sécurisé de VM.
@user Le cryptage homomorphique n'est pas une sauce magique pour «calculer des choses sur des supports non fiables».
... pourquoi s'embêter avec les clés de cryptage, lorsque votre code / base de données va être décrypté lors de l'exécution?Autrement dit, il suffit de prendre un instantané du code déchiffré directement.
@Clockwork-Muse Si vous parlez du code exécutable (opcodes) résidant dans la mémoire, les pages de mémoire du serveur de base de données et le cache disque, alors oui, au moins une partie du code source + base de données sera en mémoire lors de la capture instantanée.Cependant, je considère que le code source et la base de données n'ont de valeur que dans leur ensemble, pas comme un puzzle de 1 000 000 pièces que l'on passerait des mois à essayer de comprendre.Tant que le travail pour récupérer tout ce qui est utile à partir de l'instantané n'est pas trivial, je suis heureux.
louez simplement un petit appartement près de cet emplacement du centre de données (car il est connu pour donner une faible latence à votre zone cible) et obtenez un abonnement Internet approprié et hébergez-le vous-même?
Avez-vous essayé de demander à l'entreprise quelles mesures elle prend pour empêcher un employé malveillant de faire quelque chose comme ça?
supprimé une réponse applicable, avérée efficace - parce que cette question est quelque peu hypothétique et basée sur rien d'autre que la paranoïa de sécurité ... probablement même pas à la recherche d'une solution.
@MartinZeitler Si seulement je pouvais comprendre votre commentaire, je pourrais peut-être répondre.
Huit réponses:
Lie Ryan
2019-08-26 14:29:11 UTC
view on stackexchange narkive permalink

Vous ne pouvez pas, clairement et simplement. Si vous ne faites pas confiance à la société d'hébergement, vous n'hébergez pas avec elle. Il s'agit de la loi n ° 3 de la 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 d'un hyperviseur non autorisé.

Une façon que vous pouvez faire pour bénéficier de leur emplacement réseau mais toujours garder votre code sécurisé, c'est faire un hébergement en colocation. Dans un hébergement en colocation, vous apportez votre propre machine que vous mettez 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 quand même se connecter à votre machine. Si cela vous préoccupe, 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 important, vous voudriez également faire une vérification régulière 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 ceux-ci deviennent très vite chers.

... et la prochaine étape, bien sûr, est de mettre en place votre propre installation d'hébergement, avec tout ce qui est physique (serrures, portes, ...), électronique (systèmes d'alarme, caméras de surveillance, ...) et humain (gardiens, réceptionnistes, ...) des éléments de sécurité sont nécessaires pour assurer un niveau de sécurité adéquat.Bien sûr, cela coûte très vite cher, mais bon, quel est le prix d'une bonne nuit de sommeil de toute façon?
Je suis sur un budget, donc je cherche une solution «assez bonne» qui ne rendra pas économiquement viable d'essayer de décrypter les données.Qu'en est-il de [TRESOR] (https://www.cs1.tf.fau.de/research/system-security-and-software-protection-group/tresor-trevisor-armored/?q=content%2Freadme), qui sembleconserver la clé de chiffrement dans les registres du processeur et non dans la RAM?
@Benjamin: TRESOR suppose que l'hyperviseur est digne de confiance.Un hyperviseur non autorisé peut le simuler pour que votre programme pense qu'il exécute du code sur le processeur, mais il s'avère que vos instructions s'exécutent en fait sur un processeur émulé dont le comportement et les registres de débogage sont entièrement contrôlés par l'attaquant.
@LieRyan Je pourrais vivre avec ça.Je suis sûr que leurs hyperviseurs ne sont en aucun cas modifiés pour faire ce genre de choses, car leur activité n'est pas de voler des choses et l'entreprise est * relativement * digne de confiance.Ce contre quoi j'essaie de me protéger, c'est quelqu'un qui 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 de stock peut faire, c'est assez bon pour moi.
@Benjamin: la machine hôte est privilégiée sur la machine invitée.C'est assez simple pour l'hyperviseur fonctionnant sur la machine hôte de lire les registres de débogage du vcpu invité.Ce n'est même pas difficile car de nombreux hyperviseurs prennent en charge l'API de débogage d'invité qui inclut la lecture des registres de débogage entre autres.Même dans du matériel réel, l'attaquant peut attacher un débogueur JTAG pour lire les registres de débogage.Ces types d'attaques se situent bien en dehors du modèle de menace de TRESOR, mais seront pertinents pour le vôtre.
Cette.Si j'étais cet employé d'une société d'hébergement voyou ... eh bien, je ne prendrais pas le pot-de-vin, mais si les méchants avaient un membre de ma famille en otage, je pourrais * absolument * obtenir une décharge de registre.Et pourrait le faire d'une manière totalement indétectable, en supposant que l'hyperviseur en question prend en charge la migration en direct ou les instantanés (système complet / en direct).Videz l'état du matériel (émulé), copiez ces données sur un support personnel et revenez pour l'analyser plus tard.Et je ne suis pas un spécialiste de pentester ou de RE, juste un ingénieur système avec une certaine expérience en administration système et en C.
@LieRyan Eh bien, certaines cartes ont en fait une option pour désactiver JTAG physiquement en brûlant des éléments à l'intérieur de la puce, mais vous maintenez votre point car cela ne fait que rendre les choses beaucoup plus délicates.
À proprement parler, vous pouvez utiliser l'attestation à distance et exécuter tous les calculs sensibles dans une enclave SGX (et SGX désactivé JTAG), mais ce serait difficile à réaliser, nécessitant une réécriture complète de l'hyperviseur.Au moins, cela déplacerait la confiance de votre hôte VM vers le matériel Intel.La seule solution complète que je connaisse est vCage, qui est commercial et assez cher.Le seul problème avec cela est qu'il ne désactive pas JTAG, pour autant que je sache.
@LieRyan TRESOR ne fonctionne pas correctement sous un hyperviseur.J'ai travaillé sur un correctif pour que KVM prenne en charge TRESOR sans un énorme impact sur les performances, et ce n'est pas trivial.Mais vous avez raison de dire qu'il ne protège de toute façon pas d'un hôte malveillant.Il protège uniquement de la lecture de la RAM (par exemple, une attaque de démarrage à froid).
@val C'est le chipset qui prend en charge cela, mais vous avez généralement besoin de la puce Intel en mode de fabrication pour définir ces fusibles OTP.Cependant, presque tous les processeurs Intel n'autorisent pas JTAG sans mot de passe spécifique, par numéro de série, qui ne peut être obtenu qu'en signant un NDA avec Intel.Mais une NDA n'est pas une barrière de sécurité!
@Benjamin: [Voici Jeff Atwood] (https://blog.codinghorror.com/the-cloud-is-just-someone-elses-computer/) sur les prix colo qu'il paie._Quelqu'un_ a toujours le potentiel pour un accès physique à votre ordinateur, mais ils devraient bricoler votre matériel pour obtenir une image mémoire.
Il existe des châssis avec un interrupteur ouvert qui détectent lorsque le panneau latéral a été ouvert.C'est utile pour détecter quand quelqu'un a peut-être volé la RAM d'un bureau dans un laboratoire informatique ou quelque chose (s'il se connecte au micrologiciel sans avoir besoin du processeur sous tension), mais probablement aussi pour cela si le logiciel peut être notifié.
@aCVn il y a une étape entre les deux: embaucher un garde qui s'assoit à côté de la machine physique placée dans leur centre de données ^^
Graham
2019-08-27 04:35:42 UTC
view on stackexchange narkive permalink

pour qu'il ne soit pas économiquement viable de dépenser du temps avec les ressources d'& pour les obtenir.

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

Tenez compte du rapport coût-bénéfice. Pour la société d'hébergement, si cela se produit une fois , ils feraient une hémorragie aux clients. Ils vont donc avoir des journaux appropriés. Tout employé surpris en train de faire cela sera non seulement licencié, mais également arrêté. Le pot-de-vin devrait donc être sérieux . Nous parlons de millions, car cela doit compenser 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 plus. Cela valorise votre entreprise dans des dizaines de millions, et plus probablement des centaines de millions.

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

-1 pour _Je déteste te le dire, mais tu n'es tout simplement pas si important_.Les gens qui supposent que ce sont les gens qui finissent par être le plus foutus.Même si OP n'est pas si important, OP pourrait avoir accès à quelque chose qui est (peut-être qu'il travaillait chez un FAI majeur et qu'un attaquant recherche d'anciens employés qui pourraient avoir d'anciennes informations d'identification enregistrées).
Oui et non.Bien sûr, vous n'êtes peut-être pas important vous-même, mais vous pourriez être juste un tremplin dans une [attaque de point d'eau] (https://en.wikipedia.org/wiki/Watter_hole_attack)
Vous avez parfaitement raison, l'entreprise est plutôt petite et le projet n'est pas si important.Cependant, la base de données contient un nombre décent de clients de toute l'île et l'application a pris plusieurs milliers d'heures de travail à écrire.De plus, je ne croirais pas que l'entreprise tient réellement des journaux des actions de ses employés ou que l'employé en question risque quoi que ce soit (sans parler de la prison) s'il pénétrait par effraction dans notre serveur.Par conséquent, je ne serais pas surpris si quelqu'un vendait réellement un instantané pour quelques ** milliers **, pas des millions.C'est contre cela que j'essaie de me protéger.
@Benjamin Ensuite, vous devez vérifier que l'entreprise * conserve * ces journaux, et vous devez vérifier que le mécanisme d'audit existe pour que vous puissiez voir toutes les actions administratives sur vos VM.Surtout si vous êtes dans un pays avec des lois sur la confidentialité (le RGPD est le plus évident; faites-vous des affaires avec des clients européens?), La sécurité de vos clients dépend de la sécurité de votre société d'hébergement.Et si vous avez vraiment une mauvaise opinion de votre société d'hébergement, vous ne devriez pas les utiliser, quelle que soit leur latence.
@forest C'est un étirement hypothétique.L'OP est à la recherche de sécurité sur son projet actuel.Bien sûr, il a déployé beaucoup d'efforts lui-même, mais cela ne veut pas dire qu'il est un acteur important dans ce secteur, ni que ses concurrents se soucient suffisamment de faire des efforts illégaux pour le saboter.Un ransomware serait une possibilité, mais en tant que petite startup, il n'aura pas l'argent nécessaire pour payer beaucoup (sinon il n'utiliserait pas cette société d'hébergement).Et si le problème est la sécurité des données confidentielles des clients, il ne devrait tout simplement pas héberger ces données sur un serveur non approuvé.
@Gaius Comment?Il ne s'agit pas de sécurité des utilisateurs, mais de sécurité d'hébergement du serveur.
@graham l'hypothèse selon laquelle vous ne serez pas attaqué si vous n'êtes pas important est dangereuse
@Gaius L'attaque du point d'eau n'est pas pertinente pour sa situation.Et bien que je convienne qu'il n'est pas sûr de supposer que vous ne serez pas attaqué, la sécurité est * toujours * une fonction du coût et de la probabilité.En tant qu'ingénieur où «sécurité» sur mes projets signifiait «les gens meurent», j'en suis plus conscient que la plupart!:) L'OP doit décider de ce qui est "suffisamment sûr" étant donné la probabilité de * ce vecteur d'attaque spécifique *, et à moins qu'il n'y ait d'autres facteurs, la probabilité semble extrêmement faible.Bien sûr, si son entreprise réussit, il doit réévaluer, mais il peut probablement se permettre un meilleur hébergement aussi.
interfect
2019-08-26 23:45:31 UTC
view on stackexchange narkive permalink

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

Bien que l'exposition du système informatique de confiance SGX d'Intel à des VM ne semble pas possible sur les hyperviseurs de série, AMD dispose d'une fonctionnalité appelée Secure Encrypted Virtualization, ou SEV, qui ressemble exactement à ce que vous recherchez: vous pouvez configurer votre VM de telle manière qu'elle soit protégée de l'hyperviseur avec des clés connues uniquement de AMD ou quelqu'un qui souhaite et est capable de démonter le processeur 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 à leurs clients.

Intéressant, merci.En effet, il n'y a aucune chance que cette société d'hébergement l'utilise.
Quoi qu'il en soit, en ce qui concerne le SEV, en lisant rapidement à ce sujet, il ne semble pas prouvable que l'hôte l'utilise vraiment.Qu'est-ce qui arrêterait un serveur malveillant exécutant la machine virtuelle sur un système émulé qui prétend utiliser SEV mais qui simule simplement les instructions appropriées?
@Vality si votre fournisseur d'hébergement vous donne accès à la machine d'hébergement et que vous êtes celui qui configure le serveur avec SEV, cela pourrait fonctionner.
@Vality Comme décrit dans https://github.com/AMDESE/sev-tool#guest-owner, il semble que vous cryptez (la partie sensible de) votre VM avec une clé partagée entre vous et le matériel de confiance dans le CPU, donc leles données ne peuvent être utilisées que dans un invité exécutant l'image que vous avez spécifiée.La vérification d'image est accomplie un peu comme un démarrage sécurisé, je pense, sauf qu'au lieu que le TPM vérifie les mesures sur le processus de démarrage de l'hôte, vous vérifiez et approuvez vous-même les mesures concernant le processus de démarrage de la machine virtuelle.
@Vality Vous pouvez le vérifier comme vous pouvez vérifier qu'un TPM est réel et non émulé (pour un TPM, c'est via sa clé d'approbation).Je ne sais pas exactement comment SEV fait cela, ou même si AMD prend en charge l'attestation à distance au-delà de la simple vérification du micrologiciel, mais c'est possible.
Gaius
2019-08-26 23:50:17 UTC
view on stackexchange narkive permalink

Microsoft a une solution possible pour cela, appelée VM protégées, elles sont spécifiquement destinées au vecteur d'attaque selon lequel un acteur malveillant a un accès administratif à l'hyperviseur. Un exemple de ceci serait les machines déployées soit dans le cloud, soit dans une colo.

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

IBM Secure Service Container est encore plus exagéré.Il fonctionne sur une machine LinuxONE (le coût commence autour de 100k, si je me souviens bien) ...
Malheureusement, je n'ai absolument aucun contrôle sur le choix de l'hyperviseur!
jpa
2019-08-26 23:54:00 UTC
view on stackexchange narkive permalink

Je n'ai pas entièrement confiance pour une raison quelconque

De quelle manière leur faire confiance? Pensez-vous qu'ils peuvent être incompétents ou pensez-vous qu'ils peuvent être malveillants?

S'ils sont simplement incompétents, vous bénéficierez probablement d'une 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 d'hôte Web typiques, les attaquants n'iront pas aussi loin. Ils trouveront simplement un endroit facile pour vider leurs malwares ou des mots de passe faciles à récupérer.

Mais s'ils sont activement malveillants, vous ne pouvez pas protéger les données sur la VM. 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.

Comme précisé dans la question, je pensais à un employé malveillant qui serait soudoyé pour obtenir un instantané et le remettre à quelqu'un contre de l'argent.En ce qui concerne le serveur proxy, j'ai également réfléchi à cette idée;cela peut être une solution de secours raisonnable si tout le reste échoue.Évidemment, tout ne peut pas être mis en cache par le proxy, en particulier dans une application Web, mais s'il donne 80% ou 90% des performances perçues, cela peut être suffisant.Cela nécessiterait cependant un examen approfondi de l'application, car elle n'a pas été conçue pour la mise en cache jusqu'à présent.
R.. GitHub STOP HELPING ICE
2019-08-27 03:55:07 UTC
view on stackexchange narkive permalink

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 publique, et à la canaliser vers un serveur sur site via une liaison haut débit domestique ou professionnelle décente.

Si vous voulez vraiment avoir de la fantaisie, vous pouvez même faire une approche mixte où les clés privées des certificats ne laissent jamais les vôtres. le serveur local et le serveur du site d'hébergement n'ont accès que pour générer des 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 utilisez les vôtres, en faisant un usage sophistiqué de primitives cryptographiques) d'avoir les données sur le site d'hébergement, mais cryptées avec des clés symétriques qui ne sont jamais sur le site d'hébergement, et de transmettre le connexion au site d'hébergement de telle manière que seul le client, mais pas le site d'hébergement, puisse décrypter les données.

Il est décrit sur https://www.cloudflare.com/learning/ssl/keyless-ssl/
Jas Panesar
2019-08-28 19:18:49 UTC
view on stackexchange narkive permalink

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 que vous voudrez probablement héberger des projets pendant longtemps, ce n'est pas une mauvaise idée.

Dennis Jaheruddin
2019-08-27 19:44:05 UTC
view on stackexchange narkive permalink

Votre question semble changer de rythme à quelques reprises, mais si votre principale préoccupation est quelqu'un de cloner votre travail, ce qui suit devrait être une simple protection:

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 ne déployez que les binaires.

Cela devrait empêcher quiconque de copier votre travail car ils ne peuvent pas mettre à jour le 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 si elles copient la version actuelle.

Gardez à l'esprit que même si une quantité importante de votre code a besoin de vivre dans le serveur, cela devient déjà financièrement peu attrayant si vous êtes en mesure d'empêcher quiconque d'utiliser une ou deux parties principales. Bien sûr, ils peuvent faire l'objet d'une ingénierie inverse, mais cela est probablement d'un coût 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 prévenir la concurrence est plus une préoccupation que les données deviennent publiques.

Le code est écrit en PHP, donc code source == code de production.Il n'y a actuellement aucun moyen de livrer uniquement les opcodes compilés (qui dépendent de la machine), et même s'il y en avait, la décompilation des opcodes vous apporterait probablement quelque chose de très proche du code source dans ce langage.Les obfuscateurs de code PHP sont généralement loin de la qualité de la production et ruinent toute chance de déboguer tout problème sur le serveur lui-même.Et enfin, je ne veux pas non plus que la base de données soit volée!
Dans ce cas, je comprends que cela ne fonctionnera pas pour vous, mais je laisserai cette réponse ici car cela peut aider les futurs visiteurs avec la même question dans un cadre différent.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...