Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a...

26
esobfuscation automatique de binaires Et autres idyles bucoliques. . . Alexandre Gazet Sogeti / ESEC R&D alexandre.gazet(at)sogeti.com Yoann Guillot Sogeti / ESEC R&D yoann.guillot(at)sogeti.com SSTIC 2009

Transcript of Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a...

Page 1: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 2: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 3: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 4: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 5: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 6: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 7: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 8: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 9: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 10: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 11: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 12: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 13: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 14: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 15: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 16: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 17: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 18: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 19: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 20: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 21: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 22: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 23: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 24: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

La compilation dans tous ses etatsDecompilation

Demo

Decompilation

A. Gazet, Y. Guillot Desobfuscation automatique de binaires 24/26

Page 25: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

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

Page 26: Désobfuscation automatique de binaires - Et autres idyles ... · Etant donnn es deux langages L a et L b, il est possible de trouver un compilateur de L b vers L a, si on conna^

La compilation dans tous ses etatsDecompilation

Conclusion

Merci pour votre attention.

Des questions ?

A. Gazet, Y. Guillot Desobfuscation automatique de binaires 26/26