Renforcer la sécurité de WebAssembly grâce à l'obfuscation
Un nouveau cadre améliore la protection des binaires WebAssembly contre l'ingénierie inverse.
― 8 min lire
Table des matières
WebAssembly (Wasm) est un nouveau format binaire qui prend de l'ampleur, surtout dans les applications web. Il permet aux développeurs d'exécuter du code à une vitesse proche de celle du natif sur différents appareils et plateformes, ce qui en fait une bonne alternative aux langages de programmation web traditionnels comme JavaScript. L'idée principale derrière Wasm est de compiler des langages de haut niveau comme C, C++, Rust, et d'autres en un format qui peut être exécuté sur le web, améliorant ainsi les performances pour des tâches nécessitant beaucoup de calcul, comme les jeux et le traitement graphique.
Malgré ses avantages, les binaires Wasm ne sont pas très bien protégés. Ils peuvent facilement être lus et modifiés par des attaquants qui peuvent utiliser des outils disponibles pour analyser les binaires compilés. Ça veut dire que des personnes malveillantes peuvent désassembler le code Wasm pour trouver des failles et les exploiter, ce qui représente un risque de sécurité important.
Pourquoi l'Obfuscation est Nécessaire
Vu les vulnérabilités de Wasm, il y a un besoin urgent de techniques d'obfuscation. L'obfuscation, c'est le fait de rendre le code difficile à comprendre tout en gardant sa fonctionnalité originale. C'est crucial pour protéger les informations sensibles et empêcher un accès non autorisé à la logique sous-jacente du logiciel.
Pour l’instant, il n'y a pas d'outils d'obfuscation spécialement conçus pour les binaires Wasm. Ce manque d'outils laisse les binaires exposés à des menaces potentielles venant d'attaquants qui cherchent à les analyser et à les exploiter.
Présentation d'un Nouveau Cadre d'Obfuscation
Pour remédier au manque de protection des binaires Wasm, on propose un nouveau cadre d'obfuscation qui fonctionne spécifiquement pour Wasm. Notre cadre se concentre sur deux domaines principaux de l'obfuscation : l'Obfuscation des données et l'obfuscation du code.
Obfuscation des Données
L'obfuscation des données vise à protéger les informations sensibles dans le code, comme les noms de fonctions et les chaînes littérales. En remplaçant les données lisibles par des chaînes aléatoires ou des valeurs chiffrées, il devient beaucoup plus difficile pour les attaquants de comprendre le fonctionnement du programme original.
Par exemple, les noms de fonctions peuvent être remplacés par des identifiants aléatoires, rendant difficile pour un attaquant de déterminer l'objectif de chaque fonction. De même, les chaînes littérales contenant des informations importantes peuvent être chiffrées et déchiffrées uniquement à l'exécution, minimisant les chances d'exposition.
Obfuscation du Code
L'obfuscation du code concerne la modification des instructions et du flux de contrôle du programme. Ce type d'obfuscation peut rendre beaucoup plus difficile pour un attaquant d'analyser le programme avec des outils courants de rétro-ingénierie.
Dans notre cadre, on introduit des techniques comme le "flattening" du flux de contrôle, qui réorganise l'ordre d'exécution d'une manière qui n'affecte pas la sortie mais rend le tout plus complexe pour quiconque essaie de comprendre la logique sous-jacente. En compliquant le flux d'instructions et en ajoutant des couches d'abstraction, on peut efficacement obscurcir l'intention originale du code.
Défis de la Mise en Œuvre de l'Obfuscation
Mettre en œuvre l'obfuscation pour les binaires Wasm vient avec son lot de défis :
Surcharge : Toute technique d'obfuscation ne doit pas ralentir significativement l'exécution des binaires ou augmenter leur taille. Les utilisateurs s'attendent à ce que les applications fonctionnent efficacement, donc toute surcharge supplémentaire pourrait entraîner de la frustration.
Flux de Contrôle Structuré : Wasm a une structure de flux de contrôle unique qui manque de déclarations de saut traditionnelles comme "goto". Ça veut dire que les techniques d'obfuscation doivent être conçues spécifiquement en tenant compte de la structure de Wasm.
Résistance à l'Analyse Statique : De nombreux outils peuvent analyser les binaires Wasm pour récupérer leur sémantique. Une obfuscation efficace doit s'assurer que ces outils ne peuvent pas facilement extraire des informations significatives du code obfusqué.
Techniques Proposées pour l'Obfuscation
Pour surmonter ces défis, notre cadre emploie plusieurs techniques qui ciblent à la fois l'obfuscation des données et du code :
1. Déchiffrement à la Demande
Quand on traite des données en mémoire, on propose une méthode de déchiffrement à la demande. Au lieu de déchiffrer toutes les données quand le programme démarre, ce qui peut consommer des ressources et du temps, le cadre déchiffre les informations uniquement quand elles sont nécessaires pendant l'exécution. Ça minimise la surcharge tout en protégeant les données sensibles.
2. Fractionnement des Blocs de Code
Le fractionnement des blocs de code nous permet de décomposer un bloc de code complexe en sections plus petites et gérables. Chaque section peut être réarrangée, contribuant à un flux de contrôle plus compliqué. Cette technique garde la sémantique du programme intacte tout en rendant le code plus difficile à suivre.
3. Flattening du Flux de Contrôle
Le flattening du flux de contrôle consiste à prendre une série d'instructions et à les structurer de manière à ce que leur ordre d'exécution devienne moins évident. Cela peut être réalisé grâce à des techniques comme des instructions switch-case enveloppées dans des boucles qui s'exécutent séquentiellement mais semblent aléatoires, rendant l’analyse rétro-ingénierie plus compliquée.
4. Perturbation des Alias
Cette technique remplace les appels de fonctions directs par des appels indirects, qui dépendent des données d'exécution pour déterminer quelle fonction appeler. Cela ajoute de l'incertitude pour les attaquants, qui ne peuvent pas facilement prédire le chemin d'exécution du programme, rendant l'analyse plus difficile.
5. Prédicats Opaques
Les prédicats opaques sont des expressions qui donnent toujours le même résultat, peu importe l'entrée. En intégrant ceux-ci dans le flux de contrôle, on peut obscurcir encore plus la sémantique du programme. Les attaquants auront du mal à déterminer la signification de ces prédicats, créant des obstacles supplémentaires pour l'analyse statique.
Évaluation du Cadre d'Obfuscation
Pour évaluer l'efficacité de notre cadre d'obfuscation, on a réalisé des tests approfondis en utilisant différentes séries de binaires Wasm. L'évaluation s'est concentrée sur trois critères principaux :
Cohérence Sémantique : On s'est assuré que les binaires obfusqués produisaient toujours la même sortie que leurs homologues originaux, confirmant que l'obfuscation ne cassait pas la fonctionnalité.
Résistance à la Rétro-ingénierie : On a évalué la difficulté pour les attaquants d'analyser les binaires obfusqués, en utilisant des analyses manuelles et des outils d'analyse statique.
Surcharge de Performance : On a mesuré l'impact de nos techniques d'obfuscation sur le temps d'exécution et la taille des binaires. Notre objectif était de garder la surcharge aussi basse que possible tout en assurant une protection adéquate.
Résultats des Tests
Les résultats de notre évaluation ont montré des résultats prometteurs :
Tous les binaires testés ont maintenu leur fonctionnalité originale, confirmant que nos méthodes d'obfuscation préservaient la cohérence sémantique.
Les techniques ont effectivement augmenté la difficulté de la rétro-ingénierie manuelle. Les attaquants ont trouvé difficile d'interpréter le code obfusqué, qui est devenu beaucoup moins lisible.
Bien que certaines techniques aient introduit une surcharge, on a réussi à la garder en dessous de 20% tant pour le temps d'exécution que pour la taille des binaires, assurant que les binaires obfusqués restent pratiques pour une utilisation dans le monde réel.
Conclusion
Notre cadre d'obfuscation proposé pour les binaires WebAssembly représente un pas important vers la sécurisation de cette technologie émergente. En abordant les vulnérabilités spécifiques rencontrées par Wasm, on offre une solution robuste qui protège les données sensibles et complique les efforts de rétro-ingénierie.
Avec ce cadre, les développeurs peuvent protéger leurs applications sans sacrifier la performance. Les techniques intégrées dans notre approche d'obfuscation non seulement cachent l'intention originale du code mais résistent également aux outils modernes d'analyse statique, assurant une protection continue dans un paysage de menaces en cybersécurité en évolution.
Alors que WebAssembly continue de gagner en popularité sur le web, le besoin d'une obfuscation efficace des binaires ne fera que croître. Notre recherche pave la voie pour une exploration et un développement supplémentaires dans ce domaine vital, encourageant les avancées continues dans les stratégies de protection des binaires Wasm.
Titre: WASMixer: Binary Obfuscation for WebAssembly
Résumé: WebAssembly (Wasm) is an emerging binary format that draws great attention from our community. However, Wasm binaries are weakly protected, as they can be read, edited, and manipulated by adversaries using either the officially provided readable text format (i.e., wat) or some advanced binary analysis tools. Reverse engineering of Wasm binaries is often used for nefarious intentions, e.g., identifying and exploiting both classic vulnerabilities and Wasm specific vulnerabilities exposed in the binaries. However, no Wasm-specific obfuscator is available in our community to secure the Wasm binaries. To fill the gap, in this paper, we present WASMixer, the first general-purpose Wasm binary obfuscator, enforcing data-level (string literals and function names) and code-level (control flow and instructions) obfuscation for Wasm binaries. We propose a series of key techniques to overcome challenges during Wasm binary rewriting, including an on-demand decryption method to minimize the impact brought by decrypting the data in memory area, and code splitting/reconstructing algorithms to handle structured control flow in Wasm. Extensive experiments demonstrate the correctness, effectiveness and efficiency of WASMixer. Our research has shed light on the promising direction of Wasm binary research, including Wasm code protection, Wasm binary diversification, and the attack-defense arm race of Wasm binaries.
Auteurs: Shangtong Cao, Ningyu He, Yao Guo, Haoyu Wang
Dernière mise à jour: 2023-08-06 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2308.03123
Source PDF: https://arxiv.org/pdf/2308.03123
Licence: https://creativecommons.org/licenses/by/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.