Thèse soutenue

Contrôle sûr de chaînes d'obfuscation logicielle

FR  |  
EN
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

Résumé

FR  |  
EN

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é.