En rendant le code source, l'octet ou le code machine beaucoup plus difficile à comprendre par l'homme, l'obscurcissement du code est un aspect essentiel de la sécurité des applications, car il complique considérablement (voire rend presque impossible) la tâche des attaquants qui veulent faire de l'ingénierie inverse en temps voulu. 

C'est évidemment important, car un code vulnérable pourrait potentiellement révéler le fonctionnement interne de l'application et ses vulnérabilités exploitables. Le code obscurci est également beaucoup moins susceptible d'être altéré, ce qui en fait un élément essentiel pour garantir l'intégrité du code des applications.

8 Techniques d'obscurcissement du code

Les techniques d'obscurcissement du code modifient le code de manière à ce qu'il reste fonctionnel, qu'il ait un impact négligeable sur les performances et l'empreinte mémoire, mais qu'il soit plus difficile à analyser pour les cybercriminels. Cependant, toutes les solutions d'obscurcissement ne sont pas identiques. 

Les approches open-source ont tendance à se concentrer sur la "minimisation" de l'application, l'obscurcissement du code devenant simplement un effet secondaire. Ce type d'obscurcissement n'offre pas de barrière contre les attaques. Pour une obfuscation solide, il faut utiliser le flux de contrôle et d'autres techniques avancées.

Parmi les techniques d'obscurcissement qui ne sont généralement pas présentes dans les solutions à code source ouvert, on peut citer les suivantes :

01

Manipulation de l'APK

Ajoute du code mort ou muté, augmentant ainsi la complexité de l'application sans ajouter de données au flux original des fonctions. Cette technique rend l'application plus difficile à lire sans avoir d'impact sur le flux de données ou les fonctions.

02

Insertion de code conditionnel muté

Duplique et modifie le code légitime en code mort pour confondre les attaquants.

03

Déroulement de la boucle

Les modifications apportées aux boucles des instances répétables pour arrêter la recherche de motifs en modifiant les motifs standard que les attaquants recherchent généralement (y compris les motifs cryptographiques). Cela rend les motifs trop volumineux pour que la recherche de motifs permette d'attraper un motif.

04

Substitution de valeurs littérales

Les valeurs littérales sont obscurcies et n'apparaîtront pas dans le code lors de l'analyse statique. Au lieu de cela, elles seront calculées au cours de l'exécution lorsque l'application l'exigera.

05

Obfuscation des chaînes de caractères

Les chaînes de caractères sont obscurcies et illisibles lors de l'analyse statique. Elles ne sont générées qu'au cours de l'exécution, lorsque l'application les requiert.

06

Aller aux insertions

Ajoute des redirections dans le code pour passer d'un bloc de code à l'autre, cachant ainsi la structure du code.

07

Cryptage de la section

Crypte toute la section du binaire, la rendant illisible par une analyse statique. Cette technique s'applique aux URL et aux instructions SQL utilisées par les applications, ce qui réduit les risques de rétro-ingénierie des valeurs sensibles par les attaquants.

08

Crypto-Vars

Une version améliorée du cryptage de section qui fonctionne dans le temps d'exécution de l'application. Les valeurs sont déchiffrées globalement pendant l'exécution pour que l'application puisse les utiliser si nécessaire. Une fois utilisées, les valeurs seront à nouveau cryptées.

Si l'obscurcissement du code permet de retarder les tentatives de rétro-ingénierie en rendant le code plus difficile à analyser, les acteurs malveillants qui analysent le code en profondeur peuvent, avec suffisamment de temps, très probablement comprendre le code et surmonter l'obscurcissement. Face à une telle situation, les organisations doivent s'assurer qu'elles emploient plusieurs couches de protection dans leur suite RASP.

Polymorphisme

Outre les contrôles dynamiques RASP, qui bloquent les tentatives de débogage, d'accrochage, de proxy et d'enracinement, des protections statiques doivent également être mises en place, notamment les techniques d'obscurcissement susmentionnées et d'autres tactiques. 

L'une de ces tactiques est le polymorphisme du code, une technique qui consiste à modifier activement le code d'une application à chaque étape de sa compilation. Le polymorphisme du code conduit à un résultat différent à chaque compilation, même si le code source n'a pas changé. 

Ce type de protection fait qu'il est difficile pour les attaquants d'utiliser les informations qu'ils ont recueillies par expérience, ce qui les oblige à repartir de zéro pour chaque construction. La combinaison de plusieurs couches d'obscurcissement du code et de polymorphisme du code sont des facteurs qui offrent aux organisations une bien meilleure protection contre la rétro-ingénierie.

Dans l'ensemble, l'obscurcissement et le polymorphisme du code sont des outils puissants qui rendent le processus de rétro-ingénierie exponentiellement plus difficile pour les acteurs malveillants et les empêchent d'obtenir un accès non autorisé à des données sensibles ou de perturber le fonctionnement de l'application. 

Par conséquent, la mise en œuvre de ces techniques permet aux entreprises et aux organisations d'assurer la sécurité de leurs applications et de se protéger contre des attaques potentiellement dévastatrices.

Grâce à cette approche, la méthode de sécurité multicouche des applications, qui comprend à la fois des mesures statiques et dynamiques, permet d'améliorer l'étendue de la protection en faisant travailler ensemble différentes mesures de sécurité dans différentes couches pour se protéger contre les vecteurs d'attaque en constante expansion. 

Pour plus d'informations sur la technologie d'injection zéro code de Verimatrix et ses nombreuses innovations en matière de sécurité des applications, cliquez ici.