Thèse soutenue

Privagic : utilisation d'environnement d'exécution sécurisé rendu pratique avec typage

FR  |  
EN
Auteur / Autrice : Subashiny Tanigassalame
Direction : Gaël Thomas
Type : Thèse de doctorat
Discipline(s) : Informatique, données, IA
Date : Soutenance le 05/04/2024
Etablissement(s) : Institut polytechnique de Paris
Ecole(s) doctorale(s) : École doctorale de l'Institut polytechnique de Paris
Partenaire(s) de recherche : Laboratoire : Télécom SudParis (Evry ; 2012-....) - Institut Polytechnique de Paris / IP Paris - Département Informatique / INF - Efficient and safe distributed systems / BENAGIL
Etablissement opérateur d'inscription : Télécom SudParis (Evry ; 2012-....)
Jury : Président / Présidente : Stéphane Ducasse
Examinateurs / Examinatrices : Marc Shapiro, Laurent Réveillère, Sonia Ben Mokhtar
Rapporteurs / Rapporteuses : Marc Shapiro, Laurent Réveillère

Résumé

FR  |  
EN

L'informatique confidentielle consiste à protéger les données des utilisateurs lorsqu'elles sont traitées dans un système non fiable tel qu'une infrastructure cloud. Au niveau matériel, l'informatique confidentielle repose sur un environnement d'exécution fiable (TEE) (SGX d'Intel, SEV d'AMD ou TrustZone d'ARM). Un TEE est un environnement matériel qui isole une zone de mémoire, appelée enclave, d'un système d'exploitation ou d'un hyperviseur potentiellement compromis. Étant donné qu'il est difficile de partitionner manuellement une application entre une enclave et la mémoire non sécurisée, de nombreux outils de partitionnement automatique ont été proposés. Avec ces outils, le développeur annote certaines valeurs sensibles et l'outil analyse ensuite le code pour trouver les emplacements de mémoire dans lesquels les valeurs sensibles propagent. La plupart de ces outils se comportent incorrectement en présence de pointeurs. Lorsqu'ils sont corrects, ils ne parviennent pas à gérer les threads en raison de la difficulté à suivre les pointeurs dans une application multi-thread. Les outils actuels sont également incapables de diviser une application en plus de deux partitions. Cela est causé par une surapproximation, qui conduit à des emplacements mémoire faussement partagés entre les deux partitions.Nous proposons de partir d'un autre point de l'espace de conception, en laissant le développeur annoter explicitement tous les emplacements de mémoire qui contiennent des valeurs sensibles. Puisque le développeur annote explicitement tous les emplacements de mémoire sensibles, il n'est pas nécessaire d'analyser le code. Nous évitons ainsi par construction tout risque d'erreur d'analyse dans une application multithread. Afin de permettre au développeur d'indiquer les emplacements de mémoire qui contiennent des valeurs sensibles, nous introduisons une nouvelle construction du langage appelée « type sécurisé ». Un type sécurisé est un type enrichi d'un identifiant d'enclave, que nous appelons une couleur.Le typage sécurisé indique comment partitionner le code. En lui-même, le typage sécurisé ne fournit aucune garantie de sécurité. Pour renforcer la sécurité, nous proposons donc de compléter le typage sécurisé par des règles de typage. Le typage explicite de chaque emplacement de mémoire susceptible de contenir une valeur sensible rend possible le partitionnement d'une application multithread. L'ajout d'un type sécurisé à chaque emplacement mémoire sensible peut prendre beaucoup de temps au développeur.Pour cette raison, nous proposons de faciliter l'utilisation du typage sécurisé avec une forme simple d'inférence de type. Nous déduissons le type d'une variable locale non colorée, mais seulement si le code ne crée pas de pointeur sur la variable. Dans ce cas, la variable ne s'échappe pas de la portée d'une seule fonction, ce qui évite l'analyse inter procédurale.De plus, comme la variable ne s'échappe pas de la portée de sa fonction, elle ne peut pas être accédée par un autre thread. Avec cette restriction, la déduction d'un type sécurisé nécessite une simple analyse de la chaîne use-def, et le type déduit est correct même dans les applications multithread. Nous avons mis en œuvre notre principe de typage sécurisé dans le cadre Privagic pour Intel SGX et le langage C.Le compilateur Privagic s'appuie sur le compilateur LLVM, ce qui signifie qu'il ne s'appuie pas sur la sémantique C : il considère une représentation intermédiaire de bas niveau du code avec des types sécurisés ajoutés aux variables, aux arguments et aux champs des structures de données. Notre évaluation avec des micro- et macro-applications montre que (i) le typage sécurisé peut gérer les pointeurs, le multi-threads et plus de deux partitions, (ii) l'ajout de types sécurisés dans une application existante est facile, (iii) le typage sécurisé réduit la base de confiance et est plus efficace que l'intégration complète d'une application dans une enclave.