Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a...
Transcript of Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a...
Desobfuscation automatique de binairesEt autres idyles bucoliques. . .
Alexandre GazetSogeti / ESEC R&D
alexandre.gazet(at)sogeti.com
Yoann GuillotSogeti / ESEC R&D
yoann.guillot(at)sogeti.com
SSTIC 2009
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Plan
1 La compilation dans tous ses etatsOptimiser pour regnerLes limites de la virtualisationConclusion(s)
2 Decompilation
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 2/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Point de depart
Necessite d’automatisation
Nous avons deja :
Processeur filtrantParcours du graphe de controle (CFG)Application de regles de reecritureModification a la volee du CFG
Analyse manuelle du code obfusque
Recherche manuelle de motifs
PeniblePeu generiqueEventuellement inefficace : ex resistance aupolymorphisme
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 3/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Nouvelle approche
Besoins
Conservation de la semantique
Reecriture du code dans une forme plus simple
Elimination du code mort
etc.
Les compilateurs le font deja : l’optimisation
Notre critere d’optimisation : la concision du code
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 4/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Presentation de la cible
La cible
Une protection a base de virtualisation
Massivement obfusquee (difficulte d’analyse +polymorphisme)
Approche proposee
Greffe d’un module d’optimisation sur lemodule du parcours de graphes
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 5/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Constant propagation
c f h mov a l , 12h67h mov c l , 46h69h x o r c l , a l
c f h mov a l , 12h67h mov c l , 46h69h x o r c l , 12h
Fig.: Propagation de 12h a travers al.
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 6/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Constant folding
c f h mov a l , 12h67h mov c l , 46h69h x o r c l , 12h
c f h mov a l , 12h67h mov c l , 54h
Fig.: Reduction de cl.
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 7/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Operation folding
4 f h add a l , −7f h51h add a l , b l53h add a l , −70h
4 f h add a l , 11h51h add a l , b l
Fig.: Reduction de l’operation add.
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 8/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Demo
Optimisation d’un handler
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 9/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Analyse semantique des handlers
Methode code binding de l’objet disassembler
Exemple de handler optimise
l o d s dx o r eax , ebxadd eax , 859 f c f a e hsub ebx , eaxpush eax
Semantique (binding)
dword p t r [ esp ] := ( dword p t r [ e s i ] ˆ ebx )+859 f c f a e heax := ( dword p t r [ e s i ] ˆ ebx )+859 f c f a e hebx := ebx+−(dword p t r [ e s i ] ˆ ebx )−859 f c f a e he s i := e s i +4esp := esp−4
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 10/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Au commencement
2eme projection de Futamura
Etant donnnes deux langages La et Lb, il est possible de trouver uncompilateur de Lb vers La, si on connaıt un interpreteur de Lb ecriten La
Comment ?
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 11/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Du statique au (presque) dynamique
Binding contextualise :
dword p t r [ esp ] := 0 c0000001heax := 0 c0000001hebx := 4000 f d 8 c he s i := 100167 c2hesp := esp−4
Assembleur genere : push 0c0000001h
Suivi du flot d’execution du bytecode
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 12/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Demo
Execution symbolique et generationassembleur
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 13/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Interpretation du resultat
L’integralite du bytecode a etecompilee en asm Ia32 natif
Des references au contexte del’interpreteur
Proche d’un automate a pile
⇒ module d’optimisation + abstraction
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 14/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Injection d’abstraction
Extension du processeur
I a 3 2 : : Reg . i t o s [ 3 2 ] . c o n c a t ( %w[ v i r t e a x ] )I a 3 2 : : Reg . i t o s [ 1 6 ] . c o n c a t ( %w[ v i r t a x ] )I a 3 2 : : Reg . i t o s [ 8 ] . c o n c a t ( %w[ v i r t a l ] )
I a 3 2 : : Reg . s t o i . c l e a rI a 3 2 : : Reg . i t o s . each { | sz , hh |
hh . e a c h w i t h i n d e x { | r , i |I a 3 2 : : Reg . s t o i [ r ] = [ i , s z ]
}}I a 3 2 : : Reg : : Sym . r e p l a c e I a 3 2 : : Reg . i t o s [ 3 2 ] . map { | s | s . to sym }
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 15/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Demo
Chunk optimise avec registres virtuels
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 16/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Phase finale
Injections des registres virtuels
Optimisation
Expression du code en registres virtuels uniquement
Registres virtuels remappes sur les registres natifs
Compilation et edition des liens
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 17/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Demo
Code devirtualise, mappe dans le binaireoriginal
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 18/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Conclusion(s) 1/2
Methodes d’optimisation (regles de reecriture)
Tres efficacesImplementation limitee
localite des optimisationsmanque d’une representation intermediaireinadaptee aux obfuscations du flot de controle
L’evaluation partielle ou specialisationPre-calcul de tous les elements statiques :
Mouvements de donnees dans le code obfusqueApplication de l’interpreteur au bytecode
Approche generiqueRelativement couteux en temps de calcul
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 19/26
La compilation dans tous ses etatsDecompilation
Optimiser pour regnerLes limites de la virtualisationConclusion(s)
Conclusion(s) 2/2
Integration et reutilisation du desobfuscateurLe code actuel est a l’etat de prototypeEn cours d’integration au framework sous forme d’un pluginpropreUtilisable sur tout code x86, avec des parties cross-platforme
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 20/26
La compilation dans tous ses etatsDecompilation
Plan
1 La compilation dans tous ses etats
2 Decompilation
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 21/26
La compilation dans tous ses etatsDecompilation
Decompilation
Interface arch-specifique reduite
Meilleure expressivite du code
Representation plus simple des boucles
Semantique plus simple a manipuler
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 22/26
La compilation dans tous ses etatsDecompilation
Decompilation : limitations
Des constructions assembleur sont difficiles a transcrire en Crol, rorjmp eax
Necessite que le code soit formatte correctement
Fonction/sous-fonctionsABIs/Conventions d’appels
On peut imaginer des moyens de s’en accomoder
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 23/26
La compilation dans tous ses etatsDecompilation
Demo
Decompilation
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 24/26
La compilation dans tous ses etatsDecompilation
N’oubliez pas
Metasmhttps://metasm.cr0.org/
Bloghttp://esec.fr.sogeti.com/blog/
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 25/26
La compilation dans tous ses etatsDecompilation
Conclusion
Merci pour votre attention.
Des questions ?
A. Gazet, Y. Guillot Desobfuscation automatique de binaires 26/26