Techniques d'obfuscation informatique

Qu’est-ce que l’obfuscation ?

L’obfuscation en informatique désigne l’ensemble des méthodes visant à altérer la lisibilité et la compréhension d’une partie d’un code source sans en changer le fonctionnement.

La protection applicative par l’obfuscation informatique...

L’obfuscation peut être utilisée comme outil pour protéger une application en production afin d’éviter son « reverse engineering », c’est-à-dire la possibilité pour un utilisateur externe de comprendre le code source afin, par exemple, d’en exploiter de potentielles vulnérabilités.

Dans cet optique il est possible de remplacer des noms de variables par des caractères tel que l’underscore « _ » afin de ne donner aucune information sur leur utilité.

... mais également un outil utilisé par les pirates informatiques

Cependant ces techniques peuvent tout aussi bien servir à des fins malveillantes, concernant la sécurité des applications web, l’obfuscation permet de passer outre certaines restrictions, ces dernières peuvent être des mécanismes de sécurité directement dans le code source ou bien des pares-feux applicatifs web.

L’obfuscation est donc un outil à double tranchant, en étant aussi efficace pour protéger une application que pour en attaquer certaines.

Quelle différence entre une attaque normale et une attaque obfusquée ?

1. Scénario d'attaque normale

Standard Attack

Dans le cadre d’une attaque classique, l’attaquant se contente d’envoyer une attaque visant le serveur d’une entreprise, telle une injection de commande, cependant le pare-feu applicatif web va analyser la requête et repérer l’attaque.
La requête n’étant pas saine, l’utilisateur ne peut pas avoir accès au serveur et sa tentative d’attaque est répertoriée dans un journal de log.

2. Attaque par obfuscation informatique

Obfuscation attack

Dans ce deuxième exemple, l’attaquant envoie la même attaque mais obfusquée (grâce aux techniques que nous verrons plus bas) pour que les algorithmes ne puissent pas en tirer la moindre conclusion fiable.

Ici, le pare feu applicatif web, n’étant pas conçu pour détecter les obfuscations, va laisser passer l’attaque et le serveur pourra alors être compromis car le pare feu applicatif web n’aura pas sû distinguer une vraie requête d’une fausse.

Quels sont les différents types d’obfuscations ?

De multiples techniques d’obfuscation existent et diffèrent d’un langage à l’autre. Citons quelques exemples :

Obfuscation de code, quel langage ?

1. Double encoding

Dans une requête web (requête HTTP), chaque caractère correspond à un nombre hexadécimal et peut être représenté de la manière suivante %XX, XX étant le nombre en hexadécimal par exemple %2F représentant le « / »

Pour éviter certains filtres il est possible d’encoder le signe « % », ainsi le « / » qui donne %2F en hexadécimal, peut être encoder de la manière suivante %252F.

Le double encoding peut aussi lui-même être encodé, on parle alors de multi encoding, cela est notamment utilisé pour exploiter des failles de type Directory Traversal.

Il sera bien entendu nécessaire que le backend soit aussi capable de gèrer le multi décoding pour qu’une faille soit exploitée.

2.  L’encodage en base64

L’encodage en base64 est un procédé qui peut être utilisé à différentes fins. Prenons un exemple avec l’injection de commande (voir l’article associé).

Sur un terminal il est possible de convertir une commande en base64, puis de l’exécuter de la manière suivante: « eval $(echo « bHMK » | base64 -d) »

Si un pare feu applicatif web n’est prévu que pour filtrer certaines commandes, il cèdera à cette manipulation et pourra facilement se faire contourner grâce à cette méthode.

3. Propriétés d’un langage

D’autres moyens d’obfuscations existent, parfois implémenté directement dans un langage, un exemple peut être le Javascript avec sa partie atomique.

Cette technique d’obfuscation se base sur seulement une chaine de 6 caractères : [, ], (, )! et +, et permet de transformer du code Javascript en script incompréhensible pour un humain.

Pour obtenir la simple lettre « d », il est nécessaire d’utiliser « ([][[]]+[])[!+[]+!+[]] », ainsi, un code pour exploiter une XSS peut facilement monter à plus de 20000 caractères.

Comment R&S®Cloud Protector protège contre l'obfuscation informatique ?

 

Afin d’éviter de se faire piéger, R&S®Cloud Protector utilise des moteurs de normalisation visant à identifier les techniques d’obfuscations avant de lancer son analyse.

Les moteurs utilisés par R&S®Cloud Protector peuvent être appelés récursivement et ainsi contrer les encodages multiples.

Ainsi, les parties obfusquées d’une requête sont décodées, analysées et envoyées vers les différents moteurs de sécurité en fonction du pattern d’attaque rencontré.

Demandez vos 14 jours de démo gratuite

Cela ne prend que 60 secondes pour protéger vos sites et applications web.
Qu’attendez-vous pour essayer ?