• Aucun résultat trouvé

CHAPITRE 2 – LES AGENTS MOBILES ET LA SECURITE

2.5. Protection des agents mobiles

2.5.4. Techniques d’obscurcissement

Les approches utilisant les techniques d’obscurcissement sont explorées afin de protéger, durant un temps minimal, le code d’un agent mobile contre la décompilation (reverse engineering). L’obscurcissement transforme un programme en un autre programme ayant un comportement équivalent mais qui est plus difficile à comprendre. L’obscurcissement du code est basé sur l'application de transformations du code. Ces transformations sont évaluées selon leur puissance de confusion (le degré de confusion d’un lecteur humain), leur résilience (la capacité de résister à des attaques automatiques de « dé-obscurcissement »), et leur coût [Collberg 1997]. En se basant sur la génération de nombres aléatoires, un obscurcisseur peut

réaliser habituellement plusieurs transformations différentes. Collberg [Collberg 1997] fournit un aperçu détaillé sur cette question.

Hohl [Hohl 1998] propose une approche logicielle qui représente une solution de sécurisation de l’agent par son propre code. L’approche consiste à convertir l’agent d’origine en une boîte noire (black box) en utilisant des algorithmes d’obscurcissement appelés aussi algorithmes de confusion (obfuscating, mess-up algorithms). Hohl décrit les caractéristiques que devront avoir ces algorithmes : l'algorithme doit être paramétrable avec un grand nombre de valeurs possibles et il ne doit pas être possible de casser la protection avant l'exécution. Il existe divers algorithmes de confusion tels que la recomposition de variable ou la conversion des éléments de flux de contrôle dans des branchements dépendants de valeurs [Hohl 1998]. Le calcul avec des fonctions cryptographiques pourrait aussi être utilisé avec leur restriction (cf. Section 2.4.3.1). L’agent masqué n'est pas difficile à réaliser et les capacités de protection peuvent être ajustées par le choix de différents algorithmes de masquage. Cependant, des attaques existent contre ces algorithmes. Elles peuvent être efficaces si l'algorithme de masquage est connu.

Fig.2.8. Approche Black box à temps limité

Puisque cette technique ne permet pas la protection absolue du code [Barak 2001, D’Anna 2003], on suppose l’existence d’un intervalle de temps durant lequel l’agent est protégé, i.e. jusqu’à ce que la boîte noire ne soit plus fonctionnelle. Une date d’expiration est donc attachée à celle-ci. Dans ce cas, le code de l'agent change à chaque début de l'intervalle de protection. Cette technique peut être utilisée pour protéger le code et les données durant une certaine période de validité, à titre d’exemple, dans le cas de monnaie électronique. Elle ne peut cependant pas être utilisée pour des données qui ont une longue durée de vie, comme les numéros de cartes de crédit. De plus, cette technique est difficile à appliquer en pratique, car il n’y a pas d’approche générale garantie par un algorithme pour quantifier l’intervalle de protection.

Il s’agit, en fait, de produire à partir d’un agent A, un autre agent B (cf. Figure 2.8) analogue au premier sur le plan fonctionnalités mais ayant un code difficile à analyser [Wilhelm 1997]. Ceci peut être assuré par le fait d’introduire un désordre au niveau du code de l’agent. Hohl propose la violation totale des règles du génie logiciel afin de produire un code non lisible. Parmi ces règles nous citons :

• Attribuer des noms significatifs aux variables. • Ecrire un code modulaire.

• Utiliser des structures de contrôle qui simplifient le programme.

Ces règles seront respectées au niveau de l’agent source A. Pour passer à l’agent sécurisé B, on crée tout d’abord à partir des variables originelles un nombre différent de nouvelles variables portant des noms non significatifs. Comme indiqué dans la Figure 2.9, chaque nouvelle variable est composée de fragments de quelques variables originelles.

Après l’étape de génération des variables, on procède à la déstructuration du code. Pour cela on élimine les variables locales et on les remplace par des variables globales. Ensuite, on remplace l’appel procédural par le corps des procédures et on utilise la structure de contrôle "GOTO" pour remplacer les autres structures [hohl 1997]. Enfin, on pourra insérer des fragments de code mort pour améliorer la protection. Seulement il faut se méfier des mécanismes de détection de codes morts.

Les techniques d’obscurcissement assurent la protection de la confidentialité des agents. Pour assurer l'intégrité de ces derniers, Hohl propose l'utilisation de la signature électronique de l'agent en totalité et en association avec sa date de validité après laquelle l'agent ne sera plus accepté par aucun site et ses actions ne seront plus valides [hohl 1997].

Cette approche prévient toute tentative d’analyse sophistiquée du code [Beaucamps 2007] et toute re-exécution de l’agent mobile. A l’inverse de l’approche des fonctions cachées, celle-ci permet l’utilisation de fonctions compliquées. Toutefois, on peut lui reprocher le manque de fondement théorique. De plus, elle ne garantit la protection de l’agent mobile que durant un certain intervalle de temps. Ce qui concerne uniquement les agents mobiles qui transportent du code ou des données à courte durée de validité. Autrement, l'agent sera enregistré et analysé lentement afin de déduire les données qu'il transporte. En outre, un inconvénient sérieux à cette technique réside dans l’absence d'une approche pour la mesure de l'intervalle de protection fourni par l'algorithme d'obscurcissement. Cette lacune constitue un frein à son application dans la pratique. Il manque, en effet, un modèle qui donne le degré de masquage d'une variable et la complexité pour la retrouver. De plus, il faut déterminer à partir de quel intervalle cette protection est utile pour l'agent : les agents ont besoin de plus ou moins de temps pour effectuer leur tâche. Donc, si l'intervalle est trop faible, le nombre d'agents où cette protection pourra être utilisée sera réduit. Par ailleurs, aucune technique n'est actuellement connue pour établir les limites inférieures sur la complexité pour un attaquant pour arriver à réaliser la décompilation du code d'un agent. De plus, comparer la date d'expiration avec la date courante, nécessite des horloges synchronisées. Par ailleurs, l'agent doit subir encore un obscurcissement après une certaine période parce qu'un hôte peut obtenir les spécifications originales de l'agent blackbox après le temps d'expiration, et envoyer des informations à d'autres hôtes complices. Enfin, Luo [Luo 2002] note que l'élimination de l'appel procédural entraîne la perte de l'utilisation des bibliothèques sur site d'exécution. Barak et al. [Barak 2001] ont étudié les limites théoriques des techniques d’obscurcissement et ont prouvé qu’en général il était impossible de réaliser un obscurcissement complètement sécurisé. Larry D’Anna [D’Anna 2003] indique que l’obscurcissement peut empêcher un hôte malicieux d’observer ou de fouiller le code ou les données, particulièrement si des algorithmes de confusion différents sont employés pour assurer une protection plus forte. Cependant, il ne peut empêcher la décompilation du programme. La technique d’obscurcissement pourrait être utilisée afin d’obtenir différentes versions d’une même tâche. Elle permet donc de fournir à l’agent mobile la possibilité d’avoir plusieurs comportements équivalents qui génèrent le même résultat.

Fig.2.9. Génération de variables à noms non significatifs

Dans le même ordre d’idée, Bazzi [Bazzi 1998] a proposé une définition pour le masquage du code et pour la résistance aux modifications. Il décrit sa méthode qui consiste à rajouter du code de manière systématique et automatique en gardant la même fonction. Une proposition de solution pour les fonctions polynomiales est faite, le masquage et la résistance aux modifications sont prouvés. Il reste à mieux spécifier le problème du masquage du code en tenant compte notamment de la quantité de connaissances que l'hôte détient sur le code. Il est aussi important de définir une évaluation des algorithmes de masquage.

2.5.5. Approches basées sur les nœuds de