sthack 2014 - ninon eyrolles obfuscation 101
DESCRIPTION
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.TRANSCRIPT
![Page 1: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/1.jpg)
OBFUSCATION 101Ou : � Pourquoi faire simple quand on peut faire complique ? �
Ninon Eyrolles
![Page 2: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/2.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Plan
1 IntroductionQu’est-ce que l’obfuscation ?
2 Obfuscation du flot de controle
3 Obuscation du flot de donnees
4 Obfuscation Python
![Page 3: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/3.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Qu’est-ce que l’obfuscation ?
Prelude
1 def checkauth(password):2 if (password == "chunkybacon"):3 print("Here’s some super private information ...")4 else:5 print("Wrong password , go away!")
![Page 4: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/4.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Qu’est-ce que l’obfuscation ?
L’obfuscation, ou � obscurcissement � de code
Definition
L’obfuscation consiste a rendre l’analyse de code la plus complexe et laplus couteuse possible, tout en conservant le comportement original (lasemantique observable) du programme.
![Page 5: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/5.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Qu’est-ce que l’obfuscation ?
L’obfuscation, ou � obscurcissement � de code
Definition
L’obfuscation consiste a rendre l’analyse de code la plus complexe et laplus couteuse possible, tout en conservant le comportement original (lasemantique observable) du programme.
![Page 6: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/6.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Qu’est-ce que l’obfuscation ?
L’obfuscation, ou � obscurcissement � de code
Definition
L’obfuscation consiste a rendre l’analyse de code la plus complexe et laplus couteuse possible, tout en conservant le comportement original (lasemantique observable) du programme.
![Page 7: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/7.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Qu’est-ce que l’obfuscation ?
Definition plus formelle
On peut definir obfuscateur ideal O ainsi (pour tout programme P) :
1. Fonctionnalite : P et sa version obfusquee O(P) doivent avoir lememe comportement au niveau des entrees / sorties.
2. Efficacite : le temps d’execution et la taille de O(P) ne doivent pasetre 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 entrees et sorties.
![Page 8: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/8.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Qu’est-ce que l’obfuscation ?
Definition plus formelle
On peut definir obfuscateur ideal O ainsi (pour tout programme P) :
1. Fonctionnalite : P et sa version obfusquee O(P) doivent avoir lememe comportement au niveau des entrees / sorties.
2. Efficacite : le temps d’execution et la taille de O(P) ne doivent pasetre 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 entrees et sorties.
→ Un tel obfuscateur n’existe pas pour tous les programmes ! a
aOn the (Im)possibility of Obfuscating Programs, Barack et al.
![Page 9: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/9.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Qu’est-ce que l’obfuscation ?
Pourquoi, ou et comment obfusquer ?
Motivations
protection du code sensible : dissimuler des cles embarquees dans lecode par exemple
protection d’algorithme : question de propriete intellectuelle
Differents niveaux
Problemes poses
![Page 10: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/10.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Qu’est-ce que l’obfuscation ?
Pourquoi, ou et comment obfusquer ?
Motivations
Differents niveaux
code source
langage intermediaire (IR)
code assembleur
Problemes poses
![Page 11: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/11.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Qu’est-ce que l’obfuscation ?
Pourquoi, ou et comment obfusquer ?
Motivations
Differents niveaux
Problemes poses
→ on veut obfusquer de facon automatique→ il faut trouver un compromis performances / obfuscation
![Page 12: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/12.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Qu’est-ce que l’obfuscation ?
Plusieurs types d’obfuscation
obfuscation du flot de controle (control flow)
obfuscation du flot de donnees (data flow)
reecriture des symboles : nom de variable, de fonction...
chiffrement du code, packing...
![Page 13: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/13.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Qu’est-ce que l’obfuscation ?
Plusieurs types d’obfuscation
obfuscation du flot de controle (control flow)
obfuscation du flot de donnees (data flow)
reecriture des symboles : nom de variable, de fonction...
chiffrement du code, packing...
![Page 14: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/14.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Plan
1 Introduction
2 Obfuscation du flot de controleDefinitionsObfuscation du control flowApplatissement de code
3 Obuscation du flot de donnees
4 Obfuscation Python
![Page 15: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/15.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Definitions
Le flot de controle (control flow)
represente le flot d’execution d’un programme : les differentschemins possibles lors de l’execution
on retrouve les boucles (for, while), les conditions (if), lesappels a d’autres fonctions...
on le modelise grace a un Control Flow Graph (CFG), qui representeles basic blocks et les liaisons entre eux
![Page 16: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/16.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Definitions
Le flot de controle (control flow)
x = 10y = 0
while(x ≥ 0)
y = y + 2x = x − 1
return y
true false
Figure : CFG de pseudo-code source
Figure : CFG de code assembleur
![Page 17: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/17.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Obfuscation du control flow
Diverses techniques
On cherche a transformer le CFG :
deroulage des boucles for
inlining de fonctions
insertion de junk code
predicats opaques
applatissement de flot de controle (ou control flow flattening)
![Page 18: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/18.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Obfuscation du control flow
Diverses techniques
On cherche a transformer le CFG :
deroulage des boucles for
inlining de fonctions
insertion de junk code
predicats opaques
applatissement de flot de controle (ou control flow flattening)
![Page 19: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/19.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Obfuscation du control flow
Diverses techniques
On cherche a transformer le CFG :
deroulage des boucles for
inlining de fonctions
insertion de junk code
predicats opaques
applatissement de flot de controle (ou control flow flattening)
![Page 20: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/20.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Obfuscation du control flow
Diverses techniques
On cherche a transformer le CFG :
deroulage des boucles for
inlining de fonctions
insertion de junk code
predicats opaques
applatissement de flot de controle (ou control flow flattening)
![Page 21: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/21.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Obfuscation du control flow
Diverses techniques
On cherche a transformer le CFG :
deroulage des boucles for
inlining de fonctions
insertion de junk code
predicats opaques
applatissement de flot de controle (ou control flow flattening)
![Page 22: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/22.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Obfuscation du control flow
Diverses techniques
On cherche a transformer le CFG :
deroulage des boucles for
inlining de fonctions
insertion de junk code
predicats opaques
applatissement de flot de controle (ou control flow flattening)
![Page 23: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/23.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Applatissement de code
Definition
Applatissement de flot de controle
transformer la structure du programme pour rendre la reconstructiondu CFG plus difficile
coder les informations du flot de controle et cacher le resultat dansle flot de donnees
![Page 24: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/24.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Applatissement de code
Principe
Implementation
les basic blocks sont numerotes
un dispatcher gere l’execution
une variable determine quelbloc doit etre execute apres lebloc courant
a chaque fin de bloc, cettevariable est remise a jour, et onva vers le dispatcher quiredirige vers le bloc suivant.
INITval = 1
DISPATCHERswitch(val)
block 1
some codeval = 2
block 2
some codeval = 3
block 3
some codereturn
Figure : Principe de l’applatissement decode
![Page 25: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/25.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Applatissement de code
Exemple
Figure : CFG original
Figure : CFG apres applatissement duflot de controle
![Page 26: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/26.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Plan
1 Introduction
2 Obfuscation du flot de controle
3 Obuscation du flot de donneesDefinitionQuelques techniques d’obfuscation du flot de donneesLa Whitebox
4 Obfuscation Python
![Page 27: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/27.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Definition
Analyse du flot de donnees
Plusieurs axes
informations fournies par les donnees du programme : chaınes decaracteres, entiers...
relations entre les donnees ou entre les entrees et sorties (duprogramme, d’une fonction, d’un basic block)
interactions entre le programme et les donnees : lectures, ecritures,emplacement des donnees dans la memoire...
notions plus formelles : variables � vivantes �(live), equations de flotde donnees, analyse avant et arriere...
![Page 28: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/28.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Quelques techniques d’obfuscation du flot de donnees
Exemples
Pour complexifier l’analyse des donnees :
encoder les constantes (chaınes de caracteres par exemple)
insertion de donnees inutiles (proche du junk code)
complexification des operations arithmetiques sur les donneesx + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)
modifier la facon dont sont stockees / manipulees les donnees :eclater les tableaux, changer la convention d’appel des fonctions...
encoder les donnees lors des lectures et ecritures
f (x)
MEMORYx xf f −1
![Page 29: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/29.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Quelques techniques d’obfuscation du flot de donnees
Exemples
Pour complexifier l’analyse des donnees :
encoder les constantes (chaınes de caracteres par exemple)
insertion de donnees inutiles (proche du junk code)
complexification des operations arithmetiques sur les donneesx + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)
modifier la facon dont sont stockees / manipulees les donnees :eclater les tableaux, changer la convention d’appel des fonctions...
encoder les donnees lors des lectures et ecritures
f (x)
MEMORYx xf f −1
![Page 30: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/30.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Quelques techniques d’obfuscation du flot de donnees
Exemples
Pour complexifier l’analyse des donnees :
encoder les constantes (chaınes de caracteres par exemple)
insertion de donnees inutiles (proche du junk code)
complexification des operations arithmetiques sur les donneesx + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)
modifier la facon dont sont stockees / manipulees les donnees :eclater les tableaux, changer la convention d’appel des fonctions...
encoder les donnees lors des lectures et ecritures
f (x)
MEMORYx xf f −1
![Page 31: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/31.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Quelques techniques d’obfuscation du flot de donnees
Exemples
Pour complexifier l’analyse des donnees :
encoder les constantes (chaınes de caracteres par exemple)
insertion de donnees inutiles (proche du junk code)
complexification des operations arithmetiques sur les donneesx + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)
modifier la facon dont sont stockees / manipulees les donnees :eclater les tableaux, changer la convention d’appel des fonctions...
encoder les donnees lors des lectures et ecritures
f (x)
MEMORYx xf f −1
![Page 32: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/32.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Quelques techniques d’obfuscation du flot de donnees
Exemples
Pour complexifier l’analyse des donnees :
encoder les constantes (chaınes de caracteres par exemple)
insertion de donnees inutiles (proche du junk code)
complexification des operations arithmetiques sur les donneesx + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)
modifier la facon dont sont stockees / manipulees les donnees :eclater les tableaux, changer la convention d’appel des fonctions...
encoder les donnees lors des lectures et ecritures
f (x)
MEMORYx xf f −1
![Page 33: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/33.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Quelques techniques d’obfuscation du flot de donnees
Exemples
Pour complexifier l’analyse des donnees :
encoder les constantes (chaınes de caracteres par exemple)
insertion de donnees inutiles (proche du junk code)
complexification des operations arithmetiques sur les donneesx + y ⇔ (x ⊕ y) + 2 ∗ (x ∧ y)
modifier la facon dont sont stockees / manipulees les donnees :eclater les tableaux, changer la convention d’appel des fonctions...
encoder les donnees lors des lectures et ecritures
f (x)
MEMORYx xf f −1
![Page 34: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/34.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
La Whitebox
Definition d’une Whitebox
Algorithme cryptographique
prend en entree un message et une cle
fournit un message chiffre en sortie
Whitebox
Whitebox attack context (WBAC)
![Page 35: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/35.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
La Whitebox
Definition d’une Whitebox
Algorithme cryptographique
Whitebox
implementation particuliere d’un algorithme cryptographique
la cle est incorporee dans l’algorithme
Whitebox attack context (WBAC)
![Page 36: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/36.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
La Whitebox
Definition d’une Whitebox
Algorithme cryptographique
Whitebox
Whitebox attack context (WBAC)
l’attaquant a tous les privileges, il a acces a l’implementation del’algorithme
il peut observer l’execution du programme (avec des cles instanciees)
les details internes de l’algorithme sont visibles et modifiables
![Page 37: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/37.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
La Whitebox
Definition d’une whitebox
White-box AES
etapes de l’AES = SubBytes, ShiftRows, MixColumns etAddRoundKey
on decrit les etapes de l’AES avec des tables (lookup-tables)
on applique des encodages pour masquer les entrees et les sorties
![Page 38: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/38.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
La Whitebox
Definition d’une whitebox
White-box AES
etapes de l’AES = SubBytes, ShiftRows, MixColumns etAddRoundKey
on decrit les etapes de l’AES avec des tables (lookup-tables)
on applique des encodages pour masquer les entrees et les sorties
S(x ⊕ k r−1i,j )F−1 G G−1 MC(x) H
Figure : Principe d’encodage des lookup-tables
![Page 39: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/39.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
La Whitebox
Definition d’une whitebox
White-box AES
etapes de l’AES = SubBytes, ShiftRows, MixColumns etAddRoundKey
on decrit les etapes de l’AES avec des tables (lookup-tables)
on applique des encodages pour masquer les entrees et les sorties
F−1 ◦ S(x ⊕ k r−1i,j ) ◦ G G−1 ◦MC(x) ◦ H
Figure : Principe d’encodage des lookup-table
![Page 40: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/40.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Plan
1 Introduction
2 Obfuscation du flot de controle
3 Obuscation du flot de donnees
4 Obfuscation PythonPourquoi obfusquer du code Python ?Comment obfusquer du code Python ?Obfuscation source a sourceQuelques codes d’exemples
![Page 41: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/41.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Pourquoi obfusquer du code Python ?
Contexte
applications developpees en Python (DropBox par exemple) : uninterpreteur modifie est livre avec l’application
creations de � packeurs �pour complexifier l’acces de l’utilisateur aucode source
trois axes d’obfuscation :
- l’interpreteur modifie pour rendre difficile l’analyse des fichierscompiles
- differentes mesures pour rendre la decompilation plus difficile- l’obfuscation source a source dans le cas ou le code est retrouve
![Page 42: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/42.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Comment obfusquer du code Python ?
Obfuscations propres a Python
Modification de l’interpreteur
compilation statique du programme et des modules necessaires
permutation des opcodes du code compile
Prevention de la decompilation
![Page 43: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/43.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Comment obfusquer du code Python ?
Obfuscations propres a Python
Modification de l’interpreteur
Prevention de la decompilation
insertion d’opcodes inutiles
transformation des operateurs lors de l’execution
![Page 44: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/44.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Obfuscation source a source
L’arbre syntaxique abstrait
Arbre syntaxique abstrait (ou AbstractSyntax Tree) : representation abstraite d’unprogramme par un arbre.
les nœuds representent les operateurs
les feuilles representent les operandes
×
+
x y
z
Figure : Representation del’AST de (x + y) × z
![Page 45: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/45.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Obfuscation source a source
Le module ast
def func(x):a = 0;for i in range (0,10):
a = a + xreturn 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 (simplifie) obtenu avec le moduleast
![Page 46: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/46.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees 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
![Page 47: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/47.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Obfuscation source a source
Le source a source en Python
Principe
Exemples d’obfuscation
transformation du flot de controle : boucles for en boucleswhile, instructions if en boucles while, modification de la creationde certains objets comme les list comprehension
transformation du flot de donnees : encodage des chaınes decaracteres, insertion d’expressions booleennes-arithmetiques
transformation des symboles : remplacement des noms defonctions et variables par des chaınes de caracteres aleatoires
transformation � facon programmation fonctionnelle � : lesfonctions sont remplacees par des fonctions lambda
![Page 48: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/48.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Quelques codes d’exemples
Obfuscation de flot de controle
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
![Page 49: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/49.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Quelques codes d’exemples
Obfuscation de flot de controle
1 res = [i[0] for i in2 [j for j in3 [[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 uskewh1112 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 pass21 return ueovat22 res = rphfuq ()
Figure : Exemple d’obfuscation de declaration de list comprehension
![Page 50: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/50.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Quelques codes d’exemples
Obfuscation facon programmation fonctionnelle
def ack1(M, N):if M == 0:
return N + 1elif 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
![Page 51: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/51.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Conclusion
L’obfuscation
utilisee pour rendre l’analyse de code plus difficile
obfuscation de flot de controle, de flot de donnees
obfuscation Python : mise en pratique des techniques
Travaux futurs
generateur d’expressions booleennes-arithmetiques
mise au point d’un module d’obfuscation
nouvelles techniques d’obfuscation Python ?
![Page 52: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/52.jpg)
[email protected] I @quarkslab.com
Questions?
Remerciements : Serge Guelton pour l’obfuscation Python, et toutel’equipe de Quarkslab
![Page 53: StHack 2014 - Ninon Eyrolles Obfuscation 101](https://reader034.vdocuments.us/reader034/viewer/2022052620/557622d6d8b42a4e1c8b4de2/html5/thumbnails/53.jpg)
Introduction Obfuscation du flot de controle Obuscation du flot de donnees Obfuscation Python
Table des matieres
1 IntroductionQu’est-ce que l’obfuscation ?
2 Obfuscation du flot de controleDefinitionsObfuscation du control flowApplatissement de code
3 Obuscation du flot de donneesDefinitionQuelques techniques d’obfuscation du flot de donneesLa Whitebox
4 Obfuscation PythonPourquoi obfusquer du code Python ?Comment obfusquer du code Python ?Obfuscation source a sourceQuelques codes d’exemples