Code-Garage #50 - L'obfuscation, qu'est-ce que c'est ?

Durée: 9m0s

Date de sortie: 20/02/2023

Salut et bienvenue dans ce nouvel épisode du podcast de Code Garage. Je m'appelle Nicolas
Brondin-Bernard et aujourd'hui on va parler de l'obfuscation de code et à quoi ça
sert. Est-ce que c'est vraiment utile ? Alors rendre des données secrètes, le chiffrement
et le déchiffrement, ça fait partie intégrante de l'histoire de l'informatique. Que ce soit
pour des raisons de sécurité de données personnelles, des stratégies géopolitiques
industrielles et gens-passes, c'est un sujet hyper important. J'ai d'ailleurs fait un
épisode du podcast sur le chiffrement symétrique que vous pouvez retrouver dans les épisodes
précédents. Mais quand on distribue un logiciel ou une application disponible sur le web,
par exemple, le code qu'il soit compilé, quand c'est un logiciel ou pas compilé quand
c'est du web, doit être exécutable par la machine cliente et donc ne peut pas être
chiffré parce que sinon il devient inutilisable. Alors l'alternatif parfois choisi, c'est
donc de modifier suffisamment le code d'origine de manière automatique ou parfois manuel et
c'est plus rare pour que la lecture et la compréhension de ce code soient rendues beaucoup
plus difficiles pour un utilisateur « malveillant » et ça, c'est ce qu'on va appeler l'obfuscation.
En français, on parle parfois de brouillage mais on trouve ce terme beaucoup moins souvent.
Alors est-ce que c'est une technique réellement efficace ? Et surtout, quels sont les différentes
utilisations ? C'est ce qu'on va voir tout de suite. Alors il y a trois grands types
d'obfuscation de code. Il y a d'abord l'optimisation. Ce que l'obfuscation, c'est pas toujours une
volonté directe, parfois c'est une conséquence. Si on prend par exemple le monde du front-end web,
et bien en fait, afin d'optimiser le temps de chargement des sites et des applis web,
il est recommandé d'utiliser des outils qu'on appelle de minification. Alors pendant la
minification, tous les caractères inutiles sont supprimés, les noms de variable et de
fonction sont raccourcis au maximum et ça donne donc un code beaucoup moins lisible mais beaucoup
plus optimisé en termes de taille, de poids de fichiers et donc de chargement de ces données
et de ces scripts. Alors si jamais la minification vous intéresse, j'ai écrit un article pour code
garage, donc si jamais vous pouvez le retrouver dans les notes de l'épisode.
Ensuite on a la minification artistique parce que le code, c'est un art. J'espère que cette
affirmation a plus ou moins fait son chemin et qu'on ne va pas vraiment le démontrer dans cet
épisode, mais en gros il existe des compétitions d'obfuscation de code afin de faire ressortir
davantage le côté artistique de la programmation. C'est notamment le cas de l'IOCC, c'est l'International
Obfuscation C Code Contest et c'est donc une compétition composée de plusieurs thématiques
mais qui tourne toujours autour de l'obfuscation de programmes écrits en langage C. L'objectif,
c'est de produire un code C fonctionnel mais avec des contraintes de taille, de forme, des
contraintes artistiques etc. Si jamais ça vous intéresse dans l'article qui a l'origine de
cet épisode du podcast, vous avez un petit gif avec tout simplement un code C qui écrit sous
la forme d'un donuts, donc c'est vraiment un rond avec un trou au milieu, le code C à cette forme
là et en plus quand on l'exécute, ce qu'il produit, c'est qu'il produit une animation à ski d'un
donuts en 3D qui est en rotation. Donc ça fait beaucoup d'infos d'un coup, mais si jamais ça
vous intéresse, vous pouvez aller voir directement l'article, il y a le gif à l'intérieur et si vous
voulez l'explication de ce script là, vous avez aussi un lien dans l'article. Et enfin, la dernière
raison va dire de faire de l'obfuscation, c'est pour de la sécurité, c'est la raison la plus évidente,
c'est la tentative de brouiller un code source ou un code compilé pour empêcher d'autres développeurs
et développeuses d'en comprendre les secrets, de les réutiliser ou de le modifier.
Alors ce type d'obfuscation, on peut par exemple, ça peut consister à changer le nom de variable et de
fonction, ajouter des modules, des fonctions, des variables inutiles. Donc c'est là, on voit un petit
peu la différence avec la minification. La minification, on reste dans un domaine fonctionnel,
dans juste une optimisation dans les performances. Là, c'est vraiment essayer de tromper l'ennemi
entre gris et mai. On peut aussi avoir parfois pour le coup du chiffrement, des chiffrements,
de modules et avec un chargement à la volée. On peut ajouter des milliers de commentaires,
des sublignes, des tabulations, etc. Et on peut même, quand je disais changement de nom de variable
et de fonction, c'est pas seulement transformer nos nom de variable en A, B, C, etc. pour rendre
plus difficile la lecture. Ça peut être carrément de donner des noms qui sont des vrais mots en français,
en anglais peu importe, mais qui ne correspondent pas du tout à ce qui est censé faire la variable
ou la fonction. Ça, c'est un petit peu des genres d'obfuscation qu'on peut retrouver éventuellement.
Alors, il y a une des initiatives qui est assez connue et qui s'appelle le JsFuck, qui donne une
belle représentation d'obfuscation, puisque vous allez prendre un code JavaScript très simple.
Par exemple, on peut faire alerte et le chiffre 1. En fait, en JsFuck, qui est interprétable par
un interprèteur JavaScript complètement classique, ça va vous donner, je ne vais pas vous donner le
script complet parce qu'il est très long, mais ça va vous donner crochet ouvrant, crochet fermé,
crochet ouvrant, parenthèse ouvrante, point d'exclamations, crochet ouvrant, crochet fermant,
plus, etc. Et en fait, le JsFuck, c'est une espèce de sous-langage de JavaScript qui utilise
un nombre très restreint des caractères qui sont disponibles en JavaScript et grâce à ces
caractères, tout simplement, vous allez pouvoir écrire du JavaScript, ce qui sera beaucoup plus long,
le script sera beaucoup plus long, mais surtout complètement obfuscé. Alors si jamais vous les
comprendre comment ça fonctionne, je vous mets le lien du repository de JsFuck directement dans
les notes de l'épisode. Alors est-ce que c'est vraiment utile ? Bon, pour la minification et le
côté artistique, la question ne se pose pas trop parce qu'en réalité, pour le côté artistique,
évidemment, ça sert pas vraiment à grand chose, mais le but de l'art, c'est pas vraiment d'avoir
une utilité. Et pour la minification, en fait, on ne cherche pas l'obfuscation, c'est simplement un
effet de bord entre gros guillemets. Mais est-ce qu'il y a des bénéfices à obscurcir son code pour
la sécurité ? En réalité, pas vraiment. En tout cas, c'est pas une sécurité sur laquelle il faut
baser sa stratégie. Ça peut ralentir éventuellement les attaques entre grand guillemets ou décourager
les moins persévérants ou talentueux, mais tant que votre code se retrouve sur la machine de quelqu'un
qui soit compilé ou non, peu importe, il pourra toujours être utilisé des tournées. Parfois,
ça demandera des jours, des semaines, des mois d'analyse, mais ça pourrait être fait. Alors,
à moins d'avoir vraiment une couche d'obfuscation qui est absolument incroyable, ou passer effectivement
énormément de temps de votre côté à rajouter des fonctions inutiles, etc., etc., et de les
garder dans du code compilé simplement pour rendre plus difficile ce job-là, et bien en fait,
évidemment, ça pourra ralentir, mais j'ai envie de dire que ça ralentira aussi, et bien vous,
votre travail de votre côté. Après, c'est vraiment peser le pour et le contre, les avantages,
les inconvénients, encore à cette méthode. Mais en tout cas, on ne peut pas dire autant,
on peut dire que du chiffrement, il y a une sécurité réelle derrière. Autant l'obfuscation,
c'est quand c'est utilisé, on va dire comme un effet de bord, bon, c'est là et c'est pas grave.
Quand c'est artistique, c'est de là, il n'y a pas besoin d'utilité. Par contre, quand c'est pour
la sécurité plus réduire, on ne peut pas dire que ça soit un élément de sécurité réellement
solide. J'espère que cet épisode vous a été utile, que vous aurez appris peut-être ce que
l'obfuscation est, peut-être que vous ne connaissiez pas. Moi, je vous donne rendez-vous la semaine
prochaine pour un prochain épisode du podcast ou directement sur code-garage.fr où vous
retrouverez tous les articles, évidemment tous les épisodes du podcast, mais aussi notre newsletter
et plus important, tous les cours qui sont disponibles avec un abonnement de 19h99 et vous avez
accès à tous nos cours en illimité sur guide sur JavaScript, sur SQL et comment devenir freelance,
etc. Tout les cours que vous recherchez pour devenir développeur ou développeuse,
vous les trouverez sur code-garage.fr. Salut !

Les infos glanées

Je suis une fonctionnalité encore en dévelopement

Signaler une erreur

Code-Garage

Découvrons ensemble des sujets passionnants autour du métier de dev et de la programmation en général !
Tags
Card title

Lien du podcast

[{'term': 'Technology', 'label': None, 'scheme': 'http://www.itunes.com/'}]

Go somewhere