
Identification of cryptographic algorithms in binary programs Pierre Lestringant To cite this version: Pierre Lestringant. Identification of cryptographic algorithms in binary programs. Cryptography and Security [cs.CR]. Université Rennes 1, 2017. English. NNT : 2017REN1S067. tel-01699544 HAL Id: tel-01699544 https://tel.archives-ouvertes.fr/tel-01699544 Submitted on 2 Feb 2018 HAL is a multi-disciplinary open access L’archive ouverte pluridisciplinaire HAL, est archive for the deposit and dissemination of sci- destinée au dépôt et à la diffusion de documents entific research documents, whether they are pub- scientifiques de niveau recherche, publiés ou non, lished or not. The documents may come from émanant des établissements d’enseignement et de teaching and research institutions in France or recherche français ou étrangers, des laboratoires abroad, or from public or private research centers. publics ou privés. ANNÉE 2017 THÈSE / UNIVERSITÉ DE RENNES 1 sous le sceau de l’Université Bretagne Loire pour le grade de DOCTEUR DE L’UNIVERSITÉ DE RENNES 1 Mention : informatique Ecole doctorale Mathématiques et STIC présentée par Pierre Lestringant préparée à l’Institut de Recherche en Informatique et Systèmes Aléatoires (IRISA) UMR 6074 en partenariat avec Amossys Thèse soutenue à Rennes le 12 décembre 2017 Identification devant le jury composé de : d’Algorithmes Jean-Yves MARION Professeur, U. Lorraine - rapporteur Pascal JUNOD Cryptographiques dans Chercheur, Snap Inc. - rapporteur Sandrine BLAZY du Code Natif Professeur, U. Rennes 1 - examinatrice Marion VIDEAU Maître de conférences, U. Lorraine en détachement auprès de Quarkslab - examinatrice Colas LE GUERNIC Ingénieur de recherche, DGA - examinateur Frédéric GUIHÉRY Responsable R&D, Amossys - examinateur Pierre-Alain FOUQUE Professeur, U. Rennes 1 - directeur de thèse Contents R´esum´een Fran¸cais 4 1 Identification des Primitives . 4 2 Identification des Modes Op´eratoires . 6 3 Evaluation´ Exp´erimentale . 7 4 Organisation du Manuscrit . 8 5 Impl´ementation . 8 6 Liste des Publications . 8 Introduction 9 1 Reverse Engineering . 9 2 Cryptographic Notions . 10 3 Motivation . 11 4 Solution Overview . 12 5 Layout of the Thesis . 14 1 Related Work 16 1.1 Basic Techniques . 16 1.2 Cryptographic Parameters Retrieval . 18 1.3 Binary Code Comparison . 19 1.4 Primitive Identification . 20 2 Data Flow Graph 33 2.1 DFG Definition . 33 2.2 Sequence of Dynamic Instructions . 37 2.3 Construction . 40 2.4 Built-in Mechanisms . 43 3 Normalization 46 3.1 Formal Presentation . 46 3.2 Practical Aspects . 51 3.3 Common Subexpression Elimination . 52 3.4 Constant Simplification . 54 3.5 Constant Expression Detection . 57 3.6 Memory Access Simplification . 59 3.7 Memory Coalescing . 66 3.8 Commutative and Associative Operation Normalization . 70 3.9 Affine Expression Simplification . 72 3.10 Operation Size Expansion . 73 3.11 Miscellaneous Rewrite Rules . 75 3.12 Conclusion . 75 4 Subgraph Isomorphism for Primitive Identification 77 4.1 Signature . 77 4.2 Signature Detection . 81 4.3 Experimental Evaluation . 88 2 5 Dynamic Slicing for Mode of Operation Identification 105 5.1 Primitive Identification . 105 5.2 Slicing Definition . 108 5.3 Adjustments Based on Semantics . 112 5.4 Slice Construction . 115 5.5 Experimental Evaluation . 117 6 Detailed Use Cases 124 6.1 Automatic Test Vectors Verification . 124 6.2 Complete Analysis of an Instant Messaging Application . 128 A Cryptographic Algorithms Background 133 A.1 Primitives . 133 A.2 Modes of Operation . 136 3 R´esum´een Fran¸cais Durant ma th`ese,j'ai travaill´e`ala conception de m´ethodes automatis´eespermettant l'identification d'algorithmes cryptographiques dans des programmes compil´esen langage machine. Ce besoin bien sp´ecifiquetrouve une partie de son origine dans le domaine de l'´evaluation logicielle. L'utilisation d'algorithmes cryptographiques se fait dans le but d'obtenir des fonctions de s´ecurit´etelles que la confidentialit´e,l'int´egrit´eet l'authenticit´epour la cryptographie sym´etrique ou des fonctions plus diverses comme la signature num´erique, l'´etablissement de secrets partag´esou le chiffre- ment `acl´epublique pour la cryptographie asym´etrique. Cependant le choix des algorithmes, leur impl´ementation et leur utilisation au sein d'un programme informatique sont autant de points sensibles pouvant remettre en cause la robustesse de ces fonctions de s´ecurit´e.Il est donc primor- dial dans le cadre de l'´evaluation logicielle d'analyser les impl´ementations cryptographiques afin de s'assurer de leur bon niveau de s´ecurit´e. Si dans bien des cas il est possible et plus commode de conduire cette analyse `apartir du code source, il n'en demeure pas moins important de pouvoir ´egalement op´erer`apartir du code machine. En effet le code source n'est ni toujours disponible (´evaluation pour le compte d'une tierce partie ou avec des informations limit´eesdans le but de simuler un attaquant r´eel)ni toujours fiable (biais d´elib´er´eou non entre le code source et le code machine, d^upar exemple aux optimisations du compilateur [5]). L'id´een'est pas ici d'automatiser un type d'analyse particulier (par exemple: v´erifierl'absence de corr´elationentre temps d'ex´ecutionet param`etressecrets pour emp^echer les attaques par canaux temporels), mais d'automatiser l'identification des algorithmes cryptographiques, premi`ere´etape n´ecessaire`atoute analyse plus approfondie. A` ce titre, les r´esultatsobtenus ne permettront pas directement dans bien des cas de juger du bon niveau de s´ecurit´edes m´ecanismescryptographiques, mais serviront de socle `al'´evaluateur pour d´ebuterson analyse. Pour ce travail, je me suis limit´e `ala cryptographie sym´etrique,proposant deux m´ethodes: une pour l'identification des primitives cryptographiques et l'autre pour l'identification des modes op´eratoires.Note: ces deux m´ethodes n'ayant pas ´et´econ¸cuespour l'analyse de code obfusqu´e,elles n’offrent aucune garantie de bon fonctionnement dans ce domaine. 1 Identification des Primitives Il est possible, `al'aide d'heuristiques simples (instructions particuli`eres,constantes particuli`eres, taille des blocs de base, fr´equenced'ex´ecution,position dans l'arbre d'appels), d'identifier efficace- ment et de fa¸cons^ureun petit nombre de parties du code comme ´etant de possibles impl´ementations cryptographiques [33, 81]. La m´ethode propos´eepour l'identification des primitives a donc ´et´e con¸cuepour s'ex´ecuternon sur l'ensemble du programme, mais sur des portions de taille restreinte pouvant ^etres´electionn´ees`al'aide de ces heuristiques. Elle utilise des signatures. Une approche par signatures est particuli`erement adapt´eedans le cas des primitives puisque le nombre de prim- itives fr´equemment utilis´eesen pratique est faible et que leurs impl´ementations sont peu sujettes aux variations. 1.1 Graphe de Flot de Donn´ees Le code machine est repr´esent´epar une structure de donn´eesappel´eeDFG (pour Data Flow Graph). Bien qu'initialement con¸cuede fa¸conind´ependante, cette structure de donn´eesse rapproche des Term Graphs [60] et des jungles [39]. Elle permet de repr´esenter une ou plusieurs expressions compos´eesde symboles d'op´erationet de symboles de variable sous forme de multigraphe orient´e 4 acyclique. Un sommet v poss`edeune ´etiquettenot´ee labV (v) qui est soit un symbole d'op´eration, soit un symbole de variable. Chaque sommet v repr´esente une expression, not´ee term(v), qui se d´efinitr´ecursivement de la fa¸consuivante: ( labV (v) si v est ´etiquet´eavec un symbole de variable term(v) = labV (v)(term(v1); :::; term(vn)) si v est ´etiquet´eavec un symbole d'op´eration Dans le second cas, v1; :::; vn d´esignent les pr´ed´ecesseursdirects de v ordonn´esd'apr`esles ´etiquettes des ar^etesles reliant respectivement `a v. L'organisation sous forme de graphe a l'avantage par rapport `aune organisation plus naturelle sous forme d'arbre, de permettre le partage des sous- expressions communes r´eduisant fortement les besoins en m´emoireet les temps de traitement. La portion du programme `aanalyser est vue comme une s´equenced'instructions. Cette hypoth`esesimplificatrice s'explique par le fait que les primitives sym´etriquescontiennent peu d'instructions conditionnelles et que celles-ci ne d´ependent g´en´eralement pas des arguments d'entr´ee et de sortie. Par cons´equent, le chemin d'ex´ecutionne varie pas d'une ex´ecution`al'autre `a l'int´erieurdu code cryptographique qui peut donc ^etreassimil´e`aune s´equenced'instructions. Les DFGs sont construits par compositions successives. Chaque instruction de la s´equence`a analyser est convertie vers un petit DFG. Ceux-ci sont ensuite compos´espour obtenir le DFG final repr´esentant la totalit´ede la s´equence. Ce mode de construction se r´ev`eleparticuli`erement utile par la suite puisque m^emeune fois modifi´esil sera toujours possible de composer les DFGs (technique utilis´eelors de l'agrandissement de la fen^etred'analyse par exemple). Un effort partic- ulier a ´et´eapport´e`ala traduction des instructions vectorielles (couramment utilis´eespar certaines impl´ementation cryptographique). L'utilisation de DFGs pour repr´esenter le code machine permet de r´epondre `aun certain nombre de besoins: r´e´ecritured'expressions tout en pr´eservant une certaine notion de s´emantique appel´ee similarit´eobservable, comparaison d'expressions et recherche de sous-expressions `atravers la notion d'isomorphisme de graphes, slicing, et m^emevisualisation par un op´erateurd'une partie du code. Cette repr´esentation sera ´egalement utilis´eepour l'identification des modes op´eratoires. 1.2 Normalisation Le but de la phase de normalisation est de supprimer au maximum les diff´erencesqui peuvent exister entre plusieurs impl´ementations d'une m^emeprimitive afin de pouvoir d´etecteravec un petit nombre de signatures une grande vari´et´ed'impl´ementations.
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages143 Page
-
File Size-