Date de publication : 20 avril 2008 00h40

Auteur : BeatriX

5 . Conclusion.

L'obfuscation est une technique qui vise à dérouter une analyse spécifique. Certaines formes d'obfuscations assez résistantes pour une analyse statique (obligation d'avoir recourt à une recherche de patterns) sont complètement invisibles pour une analyse dynamique.

Ce défi a été une véritable aubaine pour moi ; j'ai pu développer et peaufiner quelques outils pour analyser un binaire tels que l'analyseur d'instructions rares ou le moteur de back-stepping qui est désormais automatisé. Je tiens à remercier Yolejedi pour ça.

Pour terminer, je résume les faiblesses de l'obfuscation proposée :

  • Le différentiel entre code source et obfuscation est fort (50 % du code source a été retrouvé avec cette technique)
  • Le code source n'a pas subit de mutations ce qui simplifie la compréhension
  • Une analyse locale suffit pour obtenir des slices complets. (pas de variables globales dépendantes de plusieurs procédures).
  • les slices sont assez courts et de type single path.
  • les constructions opaques sont peu nombreuses
  • les stealth codes sont employés une seule fois

Notion de stealth code

A posteriori, il me semble que la notion maitresse dans ce type d'obfuscation est le "stealth code". C'est un concept relatif puisqu'il peut être vu suivant deux points de vue :

1. L'obfuscation ajoutée utilise des constructions "stealth" pour noyer le code source.

2. Cette fois, c'est le code source qui est codé de façon à se confondre avec l'obfuscation

C'est sans nul doute la seconde approche qui est la meilleure. On ne peut finalement pas décemment accepter ceci :

	mov [esp], ebx
	mov [esp+4], edi
	inc [esp+8]
	mov [esp+1Ch], eax
	add [esp+4], 1

Il est clair que le "esp+1Ch" est complètement visible lors d'un filtrage d'instructions. On peut donc imaginer établir un vocabulaire d'obfuscation. Le vocabulaire fixé n'est pas nécessairement très riche et permet de restreindre l'univers des possibles des instructions utilisées. En somme, on doit parallèlement à l'insertion de code obfusqué, réaliser une mutation du code source pour qu'il se fonde dans le décor.

De ce fait, il sera impossible de réaliser une analyse différentielle intéressante ce qui rend l'exploitation des program points plus difficile. De même, la taille des slices sera plus conséquente et donc nécessitera une optimisation de code.

C'est finalement le principe adopté par les machines virtuelles embarquées à la différence près qu'ici, le dictionnaire n'est pas disponible et doit être reconstruit par l'attaquant.

Lectures utiles

[1] Wroblewski - "General Method Of Code Obfuscation" - (2002)

[2] Balakrishnan / Shulze - "Code Obfuscation Literature Survey" - (2005)

[3] Chiueh - "Innovative Software-Based Anti-Temper Techniques"

[4] Krinke - "Barrier Slicing and Chopping" - (2003)

[5] Tip - "A Survey of Program Slicing Techniques" - (1994)

Copyright (C)- FRET (2008)

Page suivante

Valid XHTML 1.0 Strict

Valid CSS!