Contrôle sûr de chaînes d'obfuscation logicielle
Auteur / Autrice : | Nicolas Szlifierski |
Direction : | Fabien Dagnat |
Type : | Thèse de doctorat |
Discipline(s) : | Informatique |
Date : | Soutenance le 17/12/2020 |
Etablissement(s) : | Ecole nationale supérieure Mines-Télécom Atlantique Bretagne Pays de la Loire |
Ecole(s) doctorale(s) : | École doctorale Mathématiques et sciences et technologies de l'information et de la communication (Rennes) |
Partenaire(s) de recherche : | Laboratoire : Process for Adaptative Software Systems - Département Informatique - Institut de recherche en informatique et systèmes aléatoires (Rennes) |
Jury : | Président / Présidente : Thomas Jensen |
Examinateurs / Examinatrices : Fabien Dagnat, Catherine Dubois, Pierre-Etienne Moreau, Laure Gonnord, Serge Guelton | |
Rapporteurs / Rapporteuses : Catherine Dubois, Pierre-Etienne Moreau |
Mots clés
Résumé
L’obfuscation de code est une technique de protection de programme qui consiste à rendre la rétro-ingénierie d’un programme plus difficile, afin de protéger des secrets, de la propriété intellectuelle, ou de compliquer la détection (malware). L’obfuscation est généralement effectuée à l’aide d’un ensemble de transformations sur le programme cible. L’obfuscation est également souvent utilisée en conjonction avec d’autres techniques de protection de programmes telles que le watermarking ou le tamperproofing. Ces transformations sont généralement intégrées dans les transformations de code appliquées pendant le processus de compilation, comme les optimisations. Cependant, appliquer des transformations d’obfuscation demande plus de préconditions sur le code et de précisions dans l’application pour offrir un compromis performance/sécurité acceptable ce qui rend les compilateurs traditionnels peu adaptés à l’obfuscation. Pour répondre à ces problèmes, cette thèse propose SCOL, un langage qui permet de décrire le processus de compilation d’un programme en prenant en compte les problématiques spécifiques à l’obfuscation. Celui-ci permet de décrire des chaînes de compilation avec un haut niveau d’abstraction, tout en permettant une précision élevée sur la composition des transformations. Le langage possède un système de types qui permet de vérifier la cohérence de la chaîne de compilation. C’est-à-dire que vérifier que la composition des transformations permet d’obtenir le niveau de protection et de couverture visé.