OBFUSCATION 101
Ou :  Pourquoi faire simple quand on peut faire compliqu´e ? 
Ninon Eyrolles
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Plan
1 Introduction
Qu’est-c...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Qu’est-ce que l’obfuscation ...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Plan
1 Introduction
2 Obfusc...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
D´efinitions
Le flot de contrˆ...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
D´efinitions
Le flot de contrˆ...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation du control flow
D...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation du control flow
D...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation du control flow
D...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation du control flow
D...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation du control flow
D...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation du control flow
D...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Applatissement de code
D´efin...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Applatissement de code
Princ...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Applatissement de code
Exemp...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Plan
1 Introduction
2 Obfusc...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
D´efinition
Analyse du flot de...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques techniques d’obfusc...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques techniques d’obfusc...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques techniques d’obfusc...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques techniques d’obfusc...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques techniques d’obfusc...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques techniques d’obfusc...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
La Whitebox
D´efinition d’une...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
La Whitebox
D´efinition d’une...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
La Whitebox
D´efinition d’une...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
La Whitebox
D´efinition d’une...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
La Whitebox
D´efinition d’une...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
La Whitebox
D´efinition d’une...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Plan
1 Introduction
2 Obfusc...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Pourquoi obfusquer du code P...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Comment obfusquer du code Py...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Comment obfusquer du code Py...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation source `a source...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation source `a source...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation source `a source...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Obfuscation source `a source...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques codes d’exemples
Ob...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques codes d’exemples
Ob...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Quelques codes d’exemples
Ob...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Conclusion
L’obfuscation
uti...
contact@quarkslab.com I @quarkslab.com
Questions?
Remerciements : Serge Guelton pour l’obfuscation Python, et toute
l’´equ...
Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python
Table des mati`eres
1 Introd...
Prochain SlideShare
Chargement dans…5
×

StHack 2014 - Ninon Eyrolles Obfuscation 101

896 vues

Publié le

The general purpose of software obfuscation is to make the analysis of software as difficult and expensive as possible, while keeping the original behaviour of the program. Its main applications are the protection of sensitive code and/or intellectual property. This talk will show you the two major types of obfuscation (control flow, data flow), several techniques of these two categories, and then concrete examples of "source-to-source" obfuscation applied to the Python langage.


Bio : Native of Bordeaux, Ninon Eyrolles completed her studies at Bordeaux 1 University (Master Cryptologie et Sécurité Informatique), and did an internship in the LaBRI. Then she exiled herself to Paris for her final internship, and stayed there to start a thesis on software obfuscation.

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
896
Sur SlideShare
0
Issues des intégrations
0
Intégrations
42
Actions
Partages
0
Téléchargements
9
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

StHack 2014 - Ninon Eyrolles Obfuscation 101

  1. 1. OBFUSCATION 101 Ou : Pourquoi faire simple quand on peut faire compliqu´e ? Ninon Eyrolles
  2. 2. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Plan 1 Introduction Qu’est-ce que l’obfuscation ? 2 Obfuscation du flot de contrˆole 3 Obuscation du flot de donn´ees 4 Obfuscation Python
  3. 3. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? Pr´elude 1 def checkauth(password): 2 if (password == chunkybacon ): 3 print(Here ’s some super private information ...) 4 else: 5 print(Wrong password , go away!)
  4. 4. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? L’obfuscation, ou obscurcissement de code D´efinition L’obfuscation consiste `a rendre l’analyse de code la plus complexe et la plus coˆuteuse possible, tout en conservant le comportement original (la s´emantique observable) du programme.
  5. 5. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? L’obfuscation, ou obscurcissement de code D´efinition L’obfuscation consiste `a rendre l’analyse de code la plus complexe et la plus coˆuteuse possible, tout en conservant le comportement original (la s´emantique observable) du programme.
  6. 6. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? L’obfuscation, ou obscurcissement de code D´efinition L’obfuscation consiste `a rendre l’analyse de code la plus complexe et la plus coˆuteuse possible, tout en conservant le comportement original (la s´emantique observable) du programme.
  7. 7. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? D´efinition plus formelle On peut d´efinir obfuscateur id´eal O ainsi (pour tout programme P) : 1. Fonctionnalit´e : P et sa version obfusqu´ee O(P) doivent avoir le mˆeme comportement au niveau des entr´ees / sorties. 2. Efficacit´e : le temps d’ex´ecution et la taille de O(P) ne doivent pas ˆetre trop grands par rapport `a ceux de P. 3. Obfuscation : on ne peut pas apprendre plus de l’analyse de O(P) que de l’observation de ses entr´ees et sorties.
  8. 8. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? D´efinition plus formelle On peut d´efinir obfuscateur id´eal O ainsi (pour tout programme P) : 1. Fonctionnalit´e : P et sa version obfusqu´ee O(P) doivent avoir le mˆeme comportement au niveau des entr´ees / sorties. 2. Efficacit´e : le temps d’ex´ecution et la taille de O(P) ne doivent pas ˆetre trop grands par rapport `a ceux de P. 3. Obfuscation : on ne peut pas apprendre plus de l’analyse de O(P) que de l’observation de ses entr´ees et sorties. → Un tel obfuscateur n’existe pas pour tous les programmes ! a aOn the (Im)possibility of Obfuscating Programs, Barack et al.
  9. 9. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? Pourquoi, o`u et comment obfusquer ? Motivations protection du code sensible : dissimuler des cl´es embarqu´ees dans le code par exemple protection d’algorithme : question de propri´et´e intellectuelle Diff´erents niveaux Probl`emes pos´es
  10. 10. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? Pourquoi, o`u et comment obfusquer ? Motivations Diff´erents niveaux code source langage interm´ediaire (IR) code assembleur Probl`emes pos´es
  11. 11. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? Pourquoi, o`u et comment obfusquer ? Motivations Diff´erents niveaux Probl`emes pos´es → on veut obfusquer de fa¸con automatique → il faut trouver un compromis performances / obfuscation
  12. 12. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? Plusieurs types d’obfuscation obfuscation du flot de contrˆole (control flow) obfuscation du flot de donn´ees (data flow) r´e´ecriture des symboles : nom de variable, de fonction... chiffrement du code, packing...
  13. 13. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Qu’est-ce que l’obfuscation ? Plusieurs types d’obfuscation obfuscation du flot de contrˆole (control flow) obfuscation du flot de donn´ees (data flow) r´e´ecriture des symboles : nom de variable, de fonction... chiffrement du code, packing...
  14. 14. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Plan 1 Introduction 2 Obfuscation du flot de contrˆole D´efinitions Obfuscation du control flow Applatissement de code 3 Obuscation du flot de donn´ees 4 Obfuscation Python
  15. 15. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python D´efinitions Le flot de contrˆole (control flow) repr´esente le flot d’ex´ecution d’un programme : les diff´erents chemins possibles lors de l’ex´ecution on retrouve les boucles (for, while), les conditions (if), les appels `a d’autres fonctions... on le mod´elise grˆace `a un Control Flow Graph (CFG), qui repr´esente les basic blocks et les liaisons entre eux
  16. 16. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python D´efinitions Le flot de contrˆole (control flow) x = 10 y = 0 while(x ≥ 0) y = y + 2 x = x − 1 return y true false Figure : CFG de pseudo-code source Figure : CFG de code assembleur
  17. 17. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation du control flow Diverses techniques On cherche `a transformer le CFG :
  18. 18. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation du control flow Diverses techniques On cherche `a transformer le CFG : d´eroulage des boucles for
  19. 19. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation du control flow Diverses techniques On cherche `a transformer le CFG : d´eroulage des boucles for inlining de fonctions
  20. 20. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation du control flow Diverses techniques On cherche `a transformer le CFG : d´eroulage des boucles for inlining de fonctions insertion de junk code
  21. 21. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation du control flow Diverses techniques On cherche `a transformer le CFG : d´eroulage des boucles for inlining de fonctions insertion de junk code pr´edicats opaques
  22. 22. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation du control flow Diverses techniques On cherche `a transformer le CFG : d´eroulage des boucles for inlining de fonctions insertion de junk code pr´edicats opaques applatissement de flot de contrˆole (ou control flow flattening)
  23. 23. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Applatissement de code D´efinition Applatissement de flot de contrˆole transformer la structure du programme pour rendre la reconstruction du CFG plus difficile coder les informations du flot de contrˆole et cacher le r´esultat dans le flot de donn´ees
  24. 24. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Applatissement de code Principe Impl´ementation les basic blocks sont num´erot´es un dispatcher g`ere l’ex´ecution une variable d´etermine quel bloc doit ˆetre ex´ecut´e apr`es le bloc courant `a chaque fin de bloc, cette variable est remise `a jour, et on va vers le dispatcher qui redirige vers le bloc suivant. INIT val = 1 DISPATCHER switch(val) block 1 some code val = 2 block 2 some code val = 3 block 3 some code return Figure : Principe de l’applatissement de code
  25. 25. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Applatissement de code Exemple Figure : CFG original Figure : CFG apr`es applatissement du flot de contrˆole
  26. 26. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Plan 1 Introduction 2 Obfuscation du flot de contrˆole 3 Obuscation du flot de donn´ees D´efinition Quelques techniques d’obfuscation du flot de donn´ees La Whitebox 4 Obfuscation Python
  27. 27. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python D´efinition Analyse du flot de donn´ees Plusieurs axes informations fournies par les donn´ees du programme : chaˆınes de caract`eres, entiers... relations entre les donn´ees ou entre les entr´ees et sorties (du programme, d’une fonction, d’un basic block) interactions entre le programme et les donn´ees : lectures, ´ecritures, emplacement des donn´ees dans la m´emoire... notions plus formelles : variables vivantes (live), ´equations de flot de donn´ees, analyse avant et arri`ere...
  28. 28. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques techniques d’obfuscation du flot de donn´ees Exemples Pour complexifier l’analyse des donn´ees :
  29. 29. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques techniques d’obfuscation du flot de donn´ees Exemples Pour complexifier l’analyse des donn´ees : encoder les constantes (chaˆınes de caract`eres par exemple)
  30. 30. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques techniques d’obfuscation du flot de donn´ees Exemples Pour complexifier l’analyse des donn´ees : encoder les constantes (chaˆınes de caract`eres par exemple) insertion de donn´ees inutiles (proche du junk code)
  31. 31. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques techniques d’obfuscation du flot de donn´ees Exemples Pour complexifier l’analyse des donn´ees : encoder les constantes (chaˆınes de caract`eres par exemple) insertion de donn´ees inutiles (proche du junk code) complexification des op´erations arithm´etiques sur les donn´ees x + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)
  32. 32. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques techniques d’obfuscation du flot de donn´ees Exemples Pour complexifier l’analyse des donn´ees : encoder les constantes (chaˆınes de caract`eres par exemple) insertion de donn´ees inutiles (proche du junk code) complexification des op´erations arithm´etiques sur les donn´ees x + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y) modifier la fa¸con dont sont stock´ees / manipul´ees les donn´ees : ´eclater les tableaux, changer la convention d’appel des fonctions...
  33. 33. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques techniques d’obfuscation du flot de donn´ees Exemples Pour complexifier l’analyse des donn´ees : encoder les constantes (chaˆınes de caract`eres par exemple) insertion de donn´ees inutiles (proche du junk code) complexification des op´erations arithm´etiques sur les donn´ees x + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y) modifier la fa¸con dont sont stock´ees / manipul´ees les donn´ees : ´eclater les tableaux, changer la convention d’appel des fonctions... encoder les donn´ees lors des lectures et ´ecritures f (x) MEMORYx xf f −1
  34. 34. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python La Whitebox D´efinition d’une Whitebox Algorithme cryptographique prend en entr´ee un message et une cl´e fournit un message chiffr´e en sortie Whitebox Whitebox attack context (WBAC)
  35. 35. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python La Whitebox D´efinition d’une Whitebox Algorithme cryptographique Whitebox impl´ementation particuli`ere d’un algorithme cryptographique la cl´e est incorpor´ee dans l’algorithme Whitebox attack context (WBAC)
  36. 36. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python La Whitebox D´efinition d’une Whitebox Algorithme cryptographique Whitebox Whitebox attack context (WBAC) l’attaquant a tous les privil`eges, il a acc`es `a l’impl´ementation de l’algorithme il peut observer l’ex´ecution du programme (avec des cl´es instanci´ees) les d´etails internes de l’algorithme sont visibles et modifiables
  37. 37. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python La Whitebox D´efinition d’une whitebox White-box AES ´etapes de l’AES = SubBytes, ShiftRows, MixColumns et AddRoundKey on d´ecrit les ´etapes de l’AES avec des tables (lookup-tables) on applique des encodages pour masquer les entr´ees et les sorties
  38. 38. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python La Whitebox D´efinition d’une whitebox White-box AES ´etapes de l’AES = SubBytes, ShiftRows, MixColumns et AddRoundKey on d´ecrit les ´etapes de l’AES avec des tables (lookup-tables) on applique des encodages pour masquer les entr´ees et les sorties S(x ⊕ kr−1 i,j )F−1 G G−1 MC(x) H Figure : Principe d’encodage des lookup-tables
  39. 39. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python La Whitebox D´efinition d’une whitebox White-box AES ´etapes de l’AES = SubBytes, ShiftRows, MixColumns et AddRoundKey on d´ecrit les ´etapes de l’AES avec des tables (lookup-tables) on applique des encodages pour masquer les entr´ees et les sorties F−1 ◦ S(x ⊕ kr−1 i,j ) ◦ G G−1 ◦ MC(x) ◦ H Figure : Principe d’encodage des lookup-table
  40. 40. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Plan 1 Introduction 2 Obfuscation du flot de contrˆole 3 Obuscation du flot de donn´ees 4 Obfuscation Python Pourquoi obfusquer du code Python ? Comment obfusquer du code Python ? Obfuscation source `a source Quelques codes d’exemples
  41. 41. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Pourquoi obfusquer du code Python ? Contexte applications d´evelopp´ees en Python (DropBox par exemple) : un interpr´eteur modifi´e est livr´e avec l’application cr´eations de packeurs pour complexifier l’acc`es de l’utilisateur au code source trois axes d’obfuscation : - l’interpr´eteur modifi´e pour rendre difficile l’analyse des fichiers compil´es - diff´erentes mesures pour rendre la d´ecompilation plus difficile - l’obfuscation source `a source dans le cas o`u le code est retrouv´e
  42. 42. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Comment obfusquer du code Python ? Obfuscations propres `a Python Modification de l’interpr´eteur compilation statique du programme et des modules n´ecessaires permutation des opcodes du code compil´e Pr´evention de la d´ecompilation
  43. 43. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Comment obfusquer du code Python ? Obfuscations propres `a Python Modification de l’interpr´eteur Pr´evention de la d´ecompilation insertion d’opcodes inutiles transformation des op´erateurs lors de l’ex´ecution
  44. 44. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation source `a source L’arbre syntaxique abstrait Arbre syntaxique abstrait (ou Abstract Syntax Tree) : repr´esentation abstraite d’un programme par un arbre. les nœuds repr´esentent les op´erateurs les feuilles repr´esentent les op´erandes × + x y z Figure : Repr´esentation de l’AST de (x + y) × z
  45. 45. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation source `a source Le module ast def func(x): a = 0; for i in range (0 ,10): a = a + x return a Module( body =[ FunctionDef( name=’func ’, args=Name(id=’x’) body =[ Assign(Name(id=’a’), value=Num(n=0)), For( Name(id=’i’), Call(Name(id=’range ’), args =[Num(n=0), Num(n=10) ]) body =[ Assign(Name(id=’a’), value= BinOp( left=Name(id=’a’), op=Add(), right=Name(id=’x’)))]) Return(value=Name(id=’a’)]) Figure : Exemple de code Python et son AST (simplifi´e) obtenu avec le module ast
  46. 46. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation source `a source Le source `a source en Python Principe Figure : Flot de compilation pour le source-`a-source Python Exemples d’obfuscation
  47. 47. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Obfuscation source `a source Le source `a source en Python Principe Exemples d’obfuscation transformation du flot de contrˆole : boucles for en boucles while, instructions if en boucles while, modification de la cr´eation de certains objets comme les list comprehension transformation du flot de donn´ees : encodage des chaˆınes de caract`eres, insertion d’expressions bool´eennes-arithm´etiques transformation des symboles : remplacement des noms de fonctions et variables par des chaˆınes de caract`eres al´eatoires transformation fa¸con programmation fonctionnelle : les fonctions sont remplac´ees par des fonctions lambda
  48. 48. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques codes d’exemples Obfuscation de flot de contrˆole 1 for i in range (0 ,10): 2 a = a + x 1 uijjpf = (range (0, 10)).__iter__ () 2 try: 3 while 1: 4 i = uijjpf.next () 5 a = (a + x) 6 except StopIteration : 7 pass Figure : Exemple d’obfuscation de boucle for
  49. 49. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques codes d’exemples Obfuscation de flot de contrˆole 1 res = [i[0] for i in 2 [j for j in 3 [[1 ,2] ,[3 ,4] ,[5 ,6]]]] 1 def baizvc (): 2 uskewh = [] 3 fyxvcb = ([[1 , 2], [3, 4], [5, 6]]).__iter__ () 4 try: 5 while 1: 6 j = fyxvcb.next () 7 uskewh.append(j) 8 except StopIteration : 9 pass 10 return uskewh 11 12 def rphfuq (): 13 ueovat = [] 14 gmivjw = baizvc ().__iter__ () 15 try: 16 while 1: 17 i = gmivjw.next () 18 ueovat.append(i[0]) 19 except StopIteration : 20 pass 21 return ueovat 22 res = rphfuq () Figure : Exemple d’obfuscation de d´eclaration de list comprehension
  50. 50. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Quelques codes d’exemples Obfuscation fa¸con programmation fonctionnelle def ack1(M, N): if M == 0: return N + 1 elif N == 0: return ack1(M - 1, 1) else: return ack1(M - 1, ack1(M, N - 1)) ack1 = (lambda M, N: (lambda _: (( lambda _: (_.__setitem__ (’$’, ((_[’N’] if (’N’ in _) else N) + 1)), _)[( -1)])(_) if ((_ [’M’] if (’M’ in _) else M) == 0) else (lambda _: (( lambda _: (_.__setitem__ (’$’, (_[’ack1 ’] if (’ack1 ’ in _) else ack1)(((_[’M’] if (’M’ in _) else M) - 1), 1)), _) [( -1)])(_) if ((_[’N’] if (’N ’ in _) else N) == 0) else ( lambda _: (_.__setitem__ (’$’, (_[’ack1 ’] if (’ack1 ’ in _) else ack1)(((_[’M’] if (’M’ in _) else M) - 1), (_[’ack1 ’ ] if (’ack1 ’ in _) else ack1) ((_[’M’] if (’M’ in _) else M ), ((_[’N’] if (’N’ in _) else N) - 1)))), _)[( -1)])(_) ))(_)))({’M’: M, ’N’: N, ’$’: None })[’$’]) Figure : Obfuscation de la fonction d’Ackermann
  51. 51. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Conclusion L’obfuscation utilis´ee pour rendre l’analyse de code plus difficile obfuscation de flot de contrˆole, de flot de donn´ees obfuscation Python : mise en pratique des techniques Travaux futurs g´en´erateur d’expressions bool´eennes-arithmetiques mise au point d’un module d’obfuscation nouvelles techniques d’obfuscation Python ?
  52. 52. contact@quarkslab.com I @quarkslab.com Questions? Remerciements : Serge Guelton pour l’obfuscation Python, et toute l’´equipe de Quarkslab
  53. 53. Introduction Obfuscation du flot de contrˆole Obuscation du flot de donn´ees Obfuscation Python Table des mati`eres 1 Introduction Qu’est-ce que l’obfuscation ? 2 Obfuscation du flot de contrˆole D´efinitions Obfuscation du control flow Applatissement de code 3 Obuscation du flot de donn´ees D´efinition Quelques techniques d’obfuscation du flot de donn´ees La Whitebox 4 Obfuscation Python Pourquoi obfusquer du code Python ? Comment obfusquer du code Python ? Obfuscation source `a source Quelques codes d’exemples

×