Le filigranage du code source

Correspondances approchées et obfuscation

Si les clones exacts sont les plus aisés à mettre en évidence, dans la pratique des opérations d’édition sont généralement réalisées entre plusieurs exemplaires de clones. Ces éditions inter- viennent aussi bien dans un cadre de copie légitime afin d’adapter le code copié à son nouveau contexte que dans un cadre de copie illégitime où les modifications sont potentiellement plus importantes afin de limiter l’efficacité d’outils de détection de similarité. Nous nous intéressons ici principalement aux modifications liées à une volonté d’obfuscation. Nous présentons les opérations de modification de code source les plus fréquentes accompagnées de quelques idées et pistes pouvant les contrecarrer. Un tableau récapitulatif de ces différentes opérations et leurs caractéristiques principales est présenté en figure 4.3 ; des exemples de code obfusqué sont réunis en figure 4.4 en fin de chapitre.Obfuscation et… obfuscation Il existe deux types principaux de processus obfuscatoire selon l’objectif recherché. Le premier consiste à introduire des transformations dans le code source afin de rendre celui-ci inintelligible pour un humain : il s’agit de rendre les opérations de rétro-ingénierie plus difficiles. Ce type d’obfuscation peut également aller de pair avec une volonté d’optimiser le code. Il peut se caractériser notamment par la suppression des commentaires, le renommage de variables en noms non signifiants, un usage spécifique d’opérations de préprocesseur (pour les langages en disposant) ou le développement de fonctions ou structures de contrôle permettant une optimisation [107, 109, 113]. La détection d’une telle obfuscation est triviale pour un juge humain ; à première vue l’utilisation de certaines métriques [111] pourrait permettre une détection automatisée. Le second type d’obfuscation, auquel nous nous intéressons, concerne le camouflage d’une opération de copie illégitime de code. L’objectif est alors non pas de rendre le code inintelligible, mais de limiter l’efficacité d’une recherche de similitudes par un humain ou un outil automatisé.

Filigranage de code

Le filigranage du code (en anglais watermarking) est un procédé de modification du code source afin d’y introduire des marqueurs témoignant de l’origine de celui- ci. Le filigranage permet ainsi de retrouver un morceau de code copié suffisamment significatif sans avoir à disposer d’une base de codes de référence. Un procédé de filigranage idéal devrait permettre la reconnaissance de ces marqueurs malgré des opérations d’obfuscation ultérieure sur le code ne dénaturant pas sa sémantique, avec la connaissance publique de l’algorithme de filigranage et un couple clé privé/clé publique permettant respectivement d’ajouter le filigra- nage et de vérifier son existence. De nombreux travaux ont été réalisés pour le filigranage de fichiers multimédias [126, 133]. Cependant ces fichiers sont finalement destinés à une interpré- tation humaine et supportent ainsi des procédés destructifs. Dans le cadre de code sources, la sémantique doit être conservée afin que l’exécution du programme ne soit pas affectée. Ainsi, un filigranage automatisé ne peut être réalisé que par des modifications de formatage ou par des modifications structurelles sémantiquement neutres. Une méthode envisageable serait alors le camouflage d’une chaîne de caractères indiquant l’origine par un procédé stéganographique. Un copieur de code attentif peut toutefois systématiser des opérations de normalisation de code afin d’effacer tout filigranage.

L’édition de commentaires accompagne généralement des copies illégitimes. Il s’agit soit d’ajouter de nouveaux commentaires, soit (pratique plus fréquente) de supprimer des commen- taires ou de les modifier. La suppression peut être réalisée systématiquement ou partiellement à l’aide d’une analyse lexicale. La réécriture de commentaires peut être réalisée manuellement par un humain ou alors automatiquement, par exemple en remplaçant certains termes par des synonymes à l’aide d’un corpus approprié. Aucun outil de recherche de similitudes intègre à notre connaissance une recherche de similarité en langue naturelle sur des commentaires : seul le code source utile pour la compilation est considéré. La suppression de commentaires étant une opération simple, il est possible d’attendre d’un plagiaire qu’elle soit réalisée : cependant si celle-ci n’est pas menée, une similarité sur un commentaire est un indice important sur la similarité du code environnant.

 

Cours gratuitTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *