Brevet FR2830635A1 — publié le 20030411

La présente invention concerne un procédé de sécurisation de la mise en oeuvre d'une application informatique et le produit programme correspondant. On sait que pour favoriser la diffusion contrôlée des applications informatiques, c'est-à-dire en diffusant les applications auprès de personnes autorisées et en empêchant les personnes non autorisées de les faire fonctionner, il est nécessaire de prévoir des mesures de sécurité associées aux applications. Ces mesures de sécurité doivent être efficaces contre les fraudeurs mais ne doivent pas présenter une contrainte trop importante pour l'utilisateur autorisé sinon celui-ci risque de se désintéresser de l'application. A ce propos, on connaît du document WO/0049483 un procédé d'établissement d'un lien entre un utilisateur et un éditeur, ce procédé assurant une sécurisation de la mise en oeuvre d'une application informatique et comportant à cet effet les étapes d'extraire une partie du code exécutable de l'application informatique et d'implanter cette partie sur un serveur distant, et de remplacer la partie extraite par une partie de liaison, dénommée Hook code dans le document précité, de sorte que lors du lancement de l'application informatique équipée de la partie de liaison, un lien est assuré automatiquement avec la partie extraite implantée dans le serveur afin de faire exécuter dans le serveur les instructions correspondantes de la partie extraite et renvoyer le résultat obtenu à l'ordinateur utilisateur dans lequel est implantée l'application informatique contenant la partie de liaison. Ainsi, en l'absence de liaison avec le serveur, il est impossible de faire fonctionner l'application et le lien fonctionnel établi entre l'ordinateur utilisateur et le serveur est personnalisé de sorte qu'il est possible lors de chaque établissement du lien entre l'ordinateur utilisateur et le serveur, de vérifier que l'utili- sateur a toujours le droit d'accéder à la partie extraite implantée dans le serveur. Le document précité ne donne aucune indication sur les parties du code exécutable de l'application informatique qu'il serait préférable d'extraire du code exécutable initial de cette application. Un but de l'invention est de proposer un perfectionnement au procédé décrit dans le document WO 00/49483 quant à la détermination de la partie extraite. En vue de la réalisation de ce but, on propose selon l'invention un procédé de sécurisation de mise en oeuvre d'une application informatique comprenant les étapes de définir des blocs élémentaires d'instructions exécutables, chaque bloc élémentaire comprenant une série d'instructions à transfert de contrôle exclusivement séquentiel ayant des limites adjacentes à des instructions à transfert de contrôle non séquentiel, d'extraire une partie de l'application comprenant au moins un bloc élémentaire de façon que la partie extraite comporte un nombre total de transferts de contrôle non séquentiels entrants au moins égal à deux, et de remplacer la partie extraite par une partie de liaison apte à assurer un lien avec la partie extraite. Le découpage en blocs élémentaires ainsi défini permet d'extraire un bloc élémentaire sans perturber le fonctionnement de l'application et la multiplication des transferts de contrôle non séquentiels entrants dans la partie extraite rend complexe l'établissement d'une relation entre un contexte transmis au serveur et le contexte en retour correspondant. Selon une version avantageuse de l'invention, la partie extraite comporte au moins deux blocs élémentaires comprenant chacun au moins un transfert de contrôle non séquentiel entrant. On réalise ainsi des fonctions multiples entre les contextes d'entrée et les contextes de sortie de la partie extraite, ce qui empêche un fraudeur d'établir une relation directe entre un contexte d'entrée et le contexte de sortie correspondant. Selon un autre aspect avantageux, le procédé comprend les étapes d'analyser le nombre de transferts de contrôle non séquentiels entrants dans chaque bloc élémentaire et d'inclure dans la partie extraite au moins un bloc élémentaire choisi parmi les blocs élémentaires comprenant un nombre élevé de transferts de contrôle non séquentiels entrants par comparaison les uns par rapport aux autres des différents blocs élémentaires. On s'assure ainsi qu'un nombre élevé de contextes différents est transmis sur le lien avec le serveur de sorte qu'il est très complexe pour un fraudeur de déterminer la corrélation entre les messages transmis au serveur et les résultats reçus de celui-ci après l'exécution de la partie de code exécutable contenu dans le serveur. La possibilité de supprimer le passage obligatoire par le lien avec le serveur est encore minimisée. L'invention concerne également un produit programme correspondant. D'autres caractéristiques et avantages de l'invention apparaîtront à la lecture de la description qui suit d'un mode de mise en oeuvre particulier non limitatif, en référence aux figures ci-jointes parmi lesquelles : - la figure 1 est une illustration schématique d'une application avant l'extraction d'une partie de code selon l'invention, - la figure 2 est un diagramme illustrant le nombre de transferts de contrôle non séquentiels entrants dans un bloc élémentaire en fonction de la position de ce bloc élémentaire dans l'application, - la figure 3 est une illustration schématique de l'application après extraction d'une partie de code. En référence aux figures, l'application informatique 1 est illustrée sous forme d'une série de rectangles représentant chacun une instruction. Le nombre d'instructions représentées a été considérablement réduit par rapport à la réalité pour ne pas surcharger la figure. Un programme exécuté par un processeur consiste en une liste séquentielle d'instructions stockées dans la mémoire d'un ordinateur. Typiquement l'ordinateur exécute les instructions du programme l'une après l'autre, c'est- à-dire que chaque instruction est rattachée à l'instruction précédente et à l'instruction suivante par un transfert de contrôle séquentiel. Cependant, certaines instructions ont la capacité potentielle de changer ce déroulement séquentiel en forçant le processeur à sauter et à exécuter des instructions de façon non séquentielle. De telles instructions sont par exemple des sauts, des sauts conditionnels, des boucles, des appels ou des dérivations qui renvoient à une instruction non adjacente. L'exécution de deux instructions non adjacentes est obtenue par un transfert de contrôle dit transfert de contrôle non séquentiel entrant ou un transfert de contrôle non séquentiel sortant selon le sens de la relation avec l'instruction non adjacente. A ce propos, une instructions qui provoque un transfert de contrôle non séquentiel pendant l'exécution du programme définit deux limites. La première limite est adjacente à l'instruction qui provoque le transfert de contrôle non séquentiel, et plus précisément entre cette instruction et l'instruction suivante. Il s'agit d'une instruction à transfert de contrôle non séquentiel sortant. La seconde limite est adjacente à l'instruction qui est l'objet du transfert de contrôle non séquentiel, et plus précisément entre cette instruction et l'instruction qui la précède séquentiellement. Il s'agit d'une instruc- tion à transfert de contrôle non séquentiel entrant. Selon l'invention on définit tout d'abord dans l'application des blocs élémentaires comprenant chacun une série d'instructions à transfert de contrôle exclusivement séquentiel ayant des limites adjacentes à des instructions à transfert de contrôle non séquentiel. En pratique, les instructions à transfert de contrôle non séquentiel définissent des blocs élémentaires ayant des structures variées. En particulier, une instruction à transfert de contrôle non séquentiel entrant définit la première instruction d'un bloc élémentaire et détermine alors le début d'un nouveau bloc élémentaire, une instruction à transfert de contrôle non séquentiel sortant définit la dernière instruction d'un bloc élémentaire et détermine alors la fin d'un bloc élémentaire. Sur la figure les blocs élémentaires portent la référence numérique générale 2 et les références numériques particulières 2.1, 2.2... 2.11 permettant de les distinguer. A ce propos on notera qu'un bloc élémentaire ne comprend pas nécessairement une instruction à transfert de contrôle non séquentiel entrant et une instruction à transfert de contrôle non séquentiel sortant, en particulier les blocs élémentaires 2.1 et 2.2 ne comportent qu'une instruction à transfert de contrôle non séquentiel sortant, le début de ces blocs élémentaires étant délimité soit par la première instruction de l'application (bloc 2.1) soit par une dernière instruction du bloc précédent (bloc 2.2). De même le bloc élémentaire 2.3 ne comporte aucune instruction à transfert de contrôle non séquentiel, le début de ce bloc élémentaire ayant une limite adjacente au transfert de contrôle non séquentiel sortant du bloc élémentaire 2.2 tandis que la fin de ce bloc élémentaire a une limite adjacente au transfert de contrôle non séquentiel entrant du bloc élémentaire 2.4. Le jeu de toutes les limites définies par des sauts po- tentiels crée ainsi une partition du programme en blocs élémentaires. Un bloc élémentaire peut comporter de multiples transferts de contrôle non séquentiels entrants comme illustré par le bloc élémentaire 2.5. Dans la plupart des cas un bloc élémentaire comprend plusieurs instructions mais il peut également comprendre une seule instruction comme illustré par le bloc élémentaire 2.6. Le nombre de transferts de contrôle non séquentiels entrants détermine le nombre de blocs élémentaires antérieurs à un bloc élémentaire considéré, et le nombre de transferts de contrôle non séquentiels sortants détermine le nombre de blocs élémentaires suivants. De façon connue en soi du document précité, une partie 3 du code exécutable de l'application informatique 1 est extraite pour être déportée sur un serveur 4 et remplacée dans l'application informatique 1 par une partie de liaison 5 avant l'implantation de l'application modifiée sur un ordinateur utilisateur 6. La mise en relation de la partie de liaison 5 avec la partie extraite 3 est effectuée par un organe de communication 7 qui gère la transmission des informations d'identification permettant de contrôler l'autorisation d'accès à la partie extraite 3. Comme symbolisé par les flèches en trait double sur la figure 3, l'organe de communication 7 gère la partie de liaison 5, les points d'entrée/sortie de la partie extraite 3 et le cas échéant les points de retour dans des blocs élémentaires en dehors de la partie de liaison, tel que le bloc élémentaire 2.10 dans l'exemple illustré. Selon l'invention, on procède à une analyse du nombre de transferts de contrôle non séquentiels entrants pour chaque bloc élémentaire. Le résultat de cette analyse pour une application réelle est illustré par la figure 2. On remarque sur cette figure que certains blocs peuvent posséder un nombre élevé de blocs antérieurs dif- férents alors que pour de nombreux blocs il existe seulement un transfert de contrôle non séquentiel entrant, voire même aucun transfert de contrôle non séquentiel entrant. Pour ne pas surcharger la figure, le nombre de blocs antérieurs a été limité à vingt sur le graphique même lorsque le nombre réel de blocs antérieurs est supérieur à vingt. Selon l'invention, la partie extraite 3 est choisie pour contenir de préférence plusieurs blocs élémentaires comprenant chacun un nombre élevé de transferts de contrôle non séquentiels entrants par comparaison les uns par rapport aux autres des différents blocs élémentaires. Dans l'exemple illustré sur la figure 1, la partie extraite 3 comprend en particulier le bloc élémentaire 2.5 qui comporte trois transferts de contrôle non séquentiels entrants. En outre, selon l'invention, le nombre total de transferts de contrôle non séquentiels entrants dans la partie extraite 3 est au moins égal à deux. On est ainsi assuré qu'un contexte transmis au serveur 4 peut avoir au moins deux origines, ce qui empêche un fraudeur de déterminer directement les antécédents précis d'un contexte en retour après exécution des instructions de la partie déportée 3. A ce propos on notera que le bloc élémentaire 2.4 comporte un transfert de contrôle non séquentiel entrant mais celui-ci provient d'un bloc inclus dans la partie extraite et ne participe donc pas à la sécurisation de l'application. il en est de même du transfert de contrôle non séquentiel formant une boucle sur le bloc élémentaire 2.5. En pratique il convient donc d'analyser l'origine d'un transfert de contrôle non séquentiel entrant et de choisir au moins un bloc élémentaire dont les blocs antérieurs sont en dehors de la partie extraite 3 et assurent donc une diversification des entrées dans la partie ex- traite. De préférence la partie extraite 3 comporte une combinaison de blocs élémentaires 2 réalisant différents cheminements dans l'application. Dans l'exemple illustré les transferts de contrôle non séquentiels sortants des blocs élémentaires 2.1 et 2.2 forment des transferts de contrôle non séquentiels entrants du bloc élémentaire 2.5 inclus dans la partie extraite tandis que le bloc élémentaire 2.10 comprend un transfert de contrôle externe entrant provenant du bloc 2.7 de la partie extraite et un transfert de contrôle externe sortant retournant dans le bloc 2.6 de la partie extraite, c'est-à-dire que lorsque la partie extraite 3 a été déportée et remplacée par la partie de liaison 5 ce dernier transfert de contrôle forme un transfert de contrôle non séquentiel entrant dans la partie de liaison 5. Ainsi, quel que soit le point de sortie de la partie extraite et le point de rentrée dans l'application informatique 1, le contexte associé à la sortie de la partie extraite 3 devient pratiquement imprévisible, de sorte qu'une analyse de l'ensemble des contextes entrants dans la partie extraite 3 et le positionnement des instructions par lesquelles ils sont introduits, ainsi que l'analyse correspondante des résultats en retour ne pourrait être effectuées qu'en mettant en oeuvre des moyens informatiques extrêmement importants dont le coût serait hors de proportion avec les droits à payer pour accéder à l'application informatique authentique. Le procédé selon l'invention constitue donc un obstacle efficace à la fraude. L'invention concerne également le produit programme obtenu après mise en place de la partie de liaison 5. Ce produit programme est stocké sur un moyen de stockage lisible par un ordinateur, qu'il s'agisse du disque dur de l'ordinateur utilisateur 6 ou d'un CD ROM pouvant être lu par cet ordinateur. Le produit programme comporte au moins une application informatique comprenant des blocs élémentaires d'instructions exécutables, chaque bloc élémentaire comprenant une série d'instructions à transfert de contrôle exclusivement séquentiel ayant des limites adjacentes à des instructions à transfert de contrôle non séquentiel, au moins un de ces blocs formant une partie de liaison comportant des moyens pour assurer un lien avec une partie déportée de l'application informatique, cette partie de liaison comprenant un nombre total de transferts de contrôle non séquentiels entrants dans la partie de liaison au moins égal à deux. Bien entendu, l'invention n'est pas limitée au mode de mise en oeuvre décrit et on peut y apporter des variantes de réalisation sans sortir du cadre de l'invention tel que défini par les revendications. En particulier, bien que l'invention ait été décrite en relation avec une partie extraite 3 comportant plusieurs blocs élémentaires réalisant de multiples points d'entrée séparés dans la partie extraite 3, on peut réaliser l'invention avec, dans la partie extraite 3, un seul bloc élémentaire comportant simplement un nombre élevé de transferts de contrôle non séquentiels entrants dans la partie extraite. A ce propos on notera que pour ne pas alourdir le fonctionnement de l'application par des échanges trop fréquents entre l'ordinateur utilisateur 6 et le serveur 4 il est préférable de ne pas choisir des blocs élémentaires comportant un nombre trop élevé de transferts de contrôle non séquentiels entrants. En pratique un nombre de transferts de contrôle non séquentiels entrants de l'ordre de cinq constitue un bon compromis bien que ce nombre soit en aucune façon limitatif. On peut également prévoir d'extraire plusieurs parties différentes, chacune remplacée par une partie de liaison, et effectuer une personnalisation de l'applica- tion implantée sur un ordinateur utilisateur en faisant varier d'un utilisateur à l'autre les parties extraites de l'application. Ainsi, même si un fraudeur réussit à déterminer le fonctionnement des parties extraites, l'information acquise n'est d'aucune utilité pour un autre utilisateur utilisant une version de l'application informatique dont les parties extraites sont différentes. REVENDICATIONS 1. Procédé de sécurisation de mise en oeuvre d'une application informatique comprenant les étapes d'extraire une partie (3) de l'application et de remplacer la partie extraite (3) par une partie de liaison (5) apte à réaliser un lien avec la partie extraite (3), caractérisé en ce qu'il comporte les étapes de définir des blocs élémentaires (2) d'instructions exécutables, chaque bloc élémentaire (2) comprenant une série d'instructions à transfert de contrôle exclusivement séquentiel ayant des limites adjacentes à des instructions à transfert de contrôle non séquentiel, et inclure dans la partie extraite (3) au moins un bloc élémentaire (2) de façon que la partie extraite comporte un nombre total de transferts de contrôle non séquentiels entrants au moins égal à deux. 2. Procédé de sécurisation selon la revendication 1, caractérisé en ce que la partie extraite comporte au moins deux blocs élémentaires comprenant chacun au moins un transfert de contrôle non séquentiel entrant. 3. Procédé de sécurisation selon la revendication 1, caractérisé en ce qu'il comporte les étapes d'analyser le nombre de transferts de contrôle non séquentiels entrants dans chaque bloc élémentaire (2) et d'inclure dans la partie extraite au moins un bloc élémentaire choisi parmi les blocs élémentaires comprenant un nombre élevé de transferts de contrôle non séquentiels entrants par comparaison les uns par rapport aux autres des différents blocs élémentaires. 4. Produit programme stocké sur un moyen de stockage lisible par un ordinateur, ce produit programme comportant au moins une application informatique caractérisé en ce que l'application comprend des blocs élémentaires (2) d'instructions exécutables, chaque bloc élé- mentaire comprenant une série d'instructions à transfert de contrôle exclusivement séquentiel ayant des limites adjacentes à des instructions à transfert de contrôle non séquentiel, au moins un de ces blocs formant une partie de liaison comportant des moyens pour assurer un lien avec une partie déportée (3) de l'application informatique, cette partie de liaison comprenant un nombre total de transferts de contrôle non séquentiels entrants dans la partie de liaison au moins égal à deux. 5. Produit programme selon la revendication 4, caractérisé en ce que la partie de liaison (5) comporte au moins un bloc élémentaire (2.5) ayant un nombre élevé de transferts de contrôle non séquentiels entrants par comparaison les uns par rapport aux autres des différents blocs élémentaires. 6. Produit programme selon la revendication 4, caractérisé en ce qu'il comporte au moins un bloc élémentaire (2.10) en dehors de la partie de liaison, ce bloc élémentaire ayant un transfert de contrôle non séquentiel entrant en provenance de la partie déportée (3). 7. Produit programme selon la revendication 6, caractérisé en ce que le bloc élémentaire (2.10) ayant un transfert de contrôle non séquentiel entrant en provenance de la partie déportée a en outre un transfert de contrôle non séquentiel sortant formant un transfert de contrôle non séquentiel entrant dans la partie de liaison (5).