SYSTÈME ÉLECTRONIQUE ET PROCÉDÉS D'ACTIVATION DYNAMIQUE DE
CONTRE-MESURES
DOMAINE DE L'INVENTION
La présente invention concerne le domaine de la sécurisation de l'exécution d'un logiciel sur un dispositif électronique contre des attaques, et plus particulièrement un procédé d'activation dynamique de contre-mesures.
CONTEXTE DE L'INVENTION
L'exécution logicielle sur un appareil électronique peut faire l'objet de diverses attaques, permettant à un attaquant de modifier de manière malveillante l'exécution du code logiciel sur l'appareil électronique ou de prendre connaissance de données sensibles mémorisées sur l'appareil sécurisé, telles que des clés cryptographiques secrètes ou des informations bancaires.
Diverses contre-mesures ont été conçues, afin de prévenir de telles attaques ou d'y résister. Un inconvénient majeur de ces contre-mesures est généralement leur coût élevé, qui ralentit le code d'exécution sur un dispositif électronique protégé lorsque de telles contre-mesures sont activées.
Afin d'éviter une activation permanente de multiples contre-mesures, chacune étant conçue contre un différent type d'attaques, à un coût très élevé, des procédés ont été proposés afin d'activer de telles contre-mesures uniquement lorsque des parties spécifiques de code, qui nécessitent un niveau élevé de protection, sont exécutées. De tels procédés nécessitent généralement de modifier manuellement le code logiciel à protéger, afin d'ajouter des commandes d'activation et de désactivation de chaque contre-mesure nécessaire, au début et à la fin de chaque partie de code à protéger par une contre-mesure.
De tels procédés sont très lourds pour les concepteurs de codes. Ils peuvent également avoir un impact notable sur la taille du code. De plus, même si leur coût en temps d'exécution est inférieur à celui des procédés impliquant une activation permanente de la contre-mesure, ils induisent toujours un surcoût qui ne prend pas en compte l'environnement d'exécution du dispositif électronique protégé et qui restera le même, même si l'appareil n'est la cible d'aucune attaque.
Par conséquent, il existe un besoin de procédé sécurisé d'exécution logicielle sur un dispositif électronique, qui permette de ne protéger que les parties de code qui souffrent d'attaques, avec un impact sur le code et un temps d'exécution minimaux.
RÉSUMÉ DE L'INVENTION
À cet effet et selon un premier aspect, la présente invention concerne donc un procédé de configuration d'un système électronique pour une exécution sécurisée d'un code comprenant une pluralité de fonctions, ledit système électronique étant configuré pour appliquer, pendant une exécution d'une fonction, une configuration de contre-mesure de sécurité parmi une pluralité de configurations de contre-mesure de sécurité, ledit procédé étant exécuté par ledit système électronique comprenant un processeur matériel, des registres matériels de sécurité configurés pour mémoriser des adresses de début de fonctions parmi ladite pluralité de fonctions et des configurations de contre-mesures de sécurité associées à appliquer pendant une exécution desdites fonctions, un système de détection configuré pour détecter une attaque sur ledit système électronique lors d'une exécution d'une fonction parmi ladite pluralité de fonctions et comprenant :
- la détection, par ledit système de détection, d'une attaque sur ledit système électronique lors de l'exécution d'une première fonction,
- la sélection, en fonction de ladite attaque détectée, d'une configuration de contre-mesure de sécurité à appliquer lors d'une exécution de ladite première fonction,
- la mémorisation, dans un registre matériel de sécurité, d’une adresse de début de ladite première fonction et de ladite configuration de contre-mesure de
sécurité sélectionnée, à appliquer pendant une exécution de ladite première fonction.
Ceci permet de mémoriser les fonctions à protéger, car elles ont déjà subi des attaques, et les contre-mesures à appliquer lors d'une future exécution de la fonction, afin de la protéger d'attaques similaires.
Selon un mode de réalisation, ledit système électronique comprend en outre une mémoire de sauvegarde tandis que l'adresse de début de ladite première fonction et ladite configuration de contre-mesure de sécurité sélectionnée, mémorisées dans ledit registre matériel de sécurité, sont copiées dudit registre matériel de sécurité à ladite mémoire de sauvegarde après ladite détection d'une attaque et, au démarrage du système électronique, les adresses de départ et les configurations de contre-mesures de sécurité associées, mémorisées dans ladite mémoire de sauvegarde, sont copiées de ladite mémoire de sauvegarde auxdits registres matériels de sécurité.
Ceci permet d'éviter toute perte des informations mémorisées dans les registres matériels de sécurité, du fait d'un arrêt ou d'une coupure de courant, et de les restaurer lors du redémarrage du système électronique.
Selon un deuxième aspect, la présente invention concerne un procédé d'exécution d'un code comprenant une pluralité de fonctions, par un système électronique configuré pour une exécution sécurisée dudit code selon le procédé selon le premier aspect, et pour application, lors d'une exécution d'une fonction, d'une configuration de contre-mesures de sécurité parmi une pluralité de configurations de contre-mesures de sécurité et comprenant un processeur matériel et des registres matériels de sécurité mémorisant, pour au moins une fonction parmi ladite pluralité de fonctions, une adresse de début de fonction et une configuration associée de contre-mesures de sécurité, à appliquer pendant une exécution de ladite au moins une fonction, ledit procédé étant exécuté par ledit système électronique et comprenant, lorsque l'exécution de code passe d'une première fonction à une seconde fonction :
- le fait de déterminer si l'un des registres matériels de sécurité mémorise l’adresse de début de la seconde fonction,
- lorsque l'un des registres matériels de sécurité mémorise l’adresse de début de la seconde fonction et une configuration de contre-mesure de sécurité associée, l'application de ladite configuration de contre-mesure de sécurité mémorisée avant d'exécuter ladite seconde fonction,
- lorsqu'aucun registre matériel de sécurité ne mémorise l’adresse de début de la seconde fonction, l'application d'une configuration de contre-mesure de sécurité prédéfinie avant d'exécuter ladite seconde fonction.
Un tel procédé permet de protéger efficacement des parties du code en activant, lors de leur exécution, les contre-mesures nécessaires pour les protéger du type d'attaques qui ont déjà été détectées lors d'une précédente exécution du code.
L'application de ladite configuration prédéfinie de contre-mesures de sécurité peut comprendre la désactivation de toutes les contre-mesures activées.
Lorsqu'une fonction ne nécessite aucune protection, ceci permet d'éviter toute augmentation du temps d'exécution qui serait provoquée par des contre-mesures activées inutilement.
Selon un mode de réalisation, ledit système électronique comprend un registre matériel d'état sécurisé de processeur (psr_sec) mémorisant une adresse de début d'une fonction en cours d'exécution et une configuration courante de contre-mesure de sécurité, ainsi que :
- le fait de déterminer si l'un des registres matériels de sécurité mémorise une adresse de début de la seconde fonction comprend la comparaison de l’adresse de début de la seconde fonction mémorisée dans ledit registre matériel d'état sécurisé de processeur (psr_sec) aux adresses de début de fonction mémorisées dans les registres matériels de sécurité (break(i)_sec),
- l'application d'une configuration de contre-mesure de sécurité associée à l’adresse de début de la seconde fonction avant d'exécuter ladite seconde fonction comprend l'activation des contre-mesures de sécurité requises dans la configuration de contre-mesure de sécurité associée à l’adresse de début de la
seconde fonction et inactivée dans la configuration courante de contre-mesure de sécurité.
Le procédé selon le deuxième aspect peut comprendre : lorsque l'exécution du code passe d'une première fonction à une seconde fonction, la sauvegarde du contenu du registre matériel d'état sécurisé de processeur mémorisant l'adresse de début de la première fonction en cours d'exécution et la mise à jour du registre matériel d'état sécurisé de processeur avec l'adresse de début de la seconde fonction, et à la fin de l'exécution de la seconde fonction et lorsque l'exécution revient à la première fonction, le rechargement du contenu sauvegardé.
L'étape consistant à déterminer si l'un des registres matériels de sécurité mémorise une adresse de début de la seconde fonction et/ou l'étape de sauvegarde du contenu et de rechargement du contenu sauvegardé peuvent être exécutées par un circuit matériel dédié.
Selon un troisième aspect, cette invention concerne un produit programme d’ordinateur directement chargeable dans la mémoire d’au moins un ordinateur, comprenant des instructions de code logiciel permettant d'exécuter les étapes des procédés selon les premier et deuxième aspects de l'invention lorsque ledit produit est exécuté sur l’ordinateur.
Selon un quatrième aspect, la présente invention concerne un système électronique comprenant un processeur matériel, des registres matériels de sécurité et un système de détection, configuré pour exécuter les étapes des procédés selon le premier et le deuxième aspects de l'invention.
Pour l'accomplissement des fins précédentes et apparentées, un ou plusieurs modes de réalisation comprennent les caractéristiques ci-après, entièrement décrites et particulièrement soulignées dans les revendications.
BRÈVE DESCRIPTION DES DESSINS
La description suivante et les dessins annexés présentent en détail certains aspects illustratifs et ne sont indicatifs que de quelques-unes des diverses manières dont les principes des modes de réalisation peuvent être employés. D'autres avantages et caractéristiques nouvelles apparaîtront à la lecture de la description détaillée suivante, prise conjointement avec les dessins, et les modes de réalisation décrits sont destinés à inclure tous ces aspects et leurs équivalents.
• La figure 1 est une illustration schématique d'un système électronique selon la présente invention.
• La figure 2 est une illustration schématique d'un procédé selon un mode de réalisation de la présente invention.
• La figure 3 est un exemple de configuration d'un dispositif électronique selon la présente invention.
• Les figures 4 et 5 sont des illustrations schématiques d'un exemple d'exécution sécurisée d'un code selon la présente invention.
DESCRIPTION DETAILLEE DES MODES DE RÉALISATION DE L'INVENTION
Selon un premier aspect, l'invention concerne un procédé de configuration d'un système électronique 1 pour une exécution sécurisée d'un code comprenant une pluralité de fonctions. Afin de protéger l'exécution de ces fonctions contre des attaques, le système électronique est apte à appliquer, lors de l'exécution d'une fonction, une configuration de contre-mesures de sécurité parmi une pluralité de configurations de contre-mesures de sécurité.
Chaque configuration de contre-mesures de sécurité est définie par une ou par plusieurs contre-mesures, dont l'activation protège le système électronique contre un ou contre plusieurs types d'attaques. De telles contre-mesures peuvent comprendre une désynchronisation temporelle telle que la jigue d'horloge, un lissage de puissance, l’activation d’un mécanisme anti-reroutage de code et une redondance d'accès à la mémoire.
Un tel système électronique comprend, comme représenté sur la figure 1 , un processeur matériel 101 destiné à l'exécution du code à protéger et au moins une mémoire 102, telle qu'une mémoire non volatile, une mémoire RAM et/ou une mémoire ROM dans laquelle est mémorisé le code. Le système électronique peut également comprendre une mémoire de sauvegarde 105 telle qu'une mémoire non volatile, une mémoire morte programmable, un disque dur... Un tel système électronique peut par exemple être une carte à puce ou un ordinateur inviolable.
L'idée principale de l'invention est d'activer des contre-mesures lors de l'exécution de fonctions ayant subi des attaques lors d'une précédente exécution. Pour ce faire, des attaques sont détectées lors du fonctionnement du système électronique. À cet effet, le système électronique comprend un système de détection 103 configuré pour détecter une attaque sur le système électronique lors de l'exécution d'une fonction parmi la pluralité de fonctions du code à protéger. Lorsqu'une attaque est détectée, des contre-mesures, à activer pour les prochaines exécutions de la fonction, sont définies. Une configuration de contre-mesures de sécurité associée à la fonction qui était en cours d'exécution au moment de l'attaque est définie. Afin de mémoriser la configuration de contre-mesures de sécurité définie, le système électronique comprend des registres matériels de sécurité 104 configurés pour mémoriser des adresses de début de fonctions parmi la pluralité de fonctions du code, et des configurations de contre-mesure de sécurité associées, à appliquer lors d'une exécution de ces fonctions. Dans les paragraphes suivants et parmi les figures, de tels registres matériels de sécurité peuvent être nommés break, _sec, où i représente un nombre entier.
Afin d'activer des contre-mesures appropriées lors de l'exécution de chaque fonction du code, le système électronique vérifie, au début de l'exécution d'une fonction, si son adresse de départ est mémorisée dans l'un quelconque des registres matériels de sécurité break, _sec. Si une adresse de début de fonction est trouvée, la configuration associée est appliquée par activation des contre-mesures requises, de sorte que ces contre-mesures restent actives tout au long de l'exécution de la fonction qui leur est associée.
Les paragraphes suivants décrivent en détail les étapes, représentées sur la figure 2, du procédé de configuration du système électronique pour une exécution sécurisée d'un code selon l'invention.
Lors d'une première étape S1 , le système de détection du système électronique détecte une attaque sur ledit système électronique lors de l'exécution d'une première fonction. Cette étape peut être réalisée en continu pendant le fonctionnement du système électronique, jusqu'à la détection d'une attaque.
Lors d'une deuxième étape S2, le système électronique sélectionne, en fonction de l'attaque détectée à la première étape, une configuration de contre-mesure de sécurité à appliquer lors d'une exécution de la première fonction. Cette configuration de contre-mesure de sécurité comprend de préférence une ou plusieurs contre- mesures contre l'attaque détectée à la première étape, de sorte que cette configuration de contre-mesure, lorsqu'elle est appliquée, déclenche les contre-mesures nécessaires pour protéger le système électronique contre une autre exécution de l'attaque détectée.
Lors d'une troisième étape S3, le système électronique mémorise, dans un registre matériel de sécurité break, _sec, l’adresse de début de la première fonction et la configuration sélectionnée de contre-mesure de sécurité à appliquer lors d'une exécution de la première fonction.
Selon un deuxième aspect, les paragraphes suivants décrivent en détail les étapes, représentées à la figure 2, du procédé permettant d'exécuter en toute sécurité le code à protéger une fois que le système électronique a été configuré par application, au moins une fois, de la première, de la deuxième et de la troisième étape.
Lors d'une quatrième étape S4, lorsque le code d'exécution passe d'une première fonction à une seconde fonction, le système électronique détermine si l'un des registres matériels de sécurité break, _sec mémorise l’adresse de début de la seconde fonction. Cette étape peut être réalisée par un circuit matériel dédié.
Lorsque l'un des registres matériels de sécurité break, _sec mémorise l’adresse de début de la seconde fonction lors d'une étape S41 , le système électronique applique la configuration de contre-mesure de sécurité mémorisée avant d'exécuter la seconde fonction. Ainsi, l'exécution de la seconde fonction est efficacement protégée par les contre-mesures activées contre le type d'attaques qu'elle a subies lors d'une exécution précédente.
Lorsqu'aucun registre matériel de sécurité ne mémorise l’adresse de début de la seconde fonction, la seconde fonction ne nécessite pas de contre-mesures particulières à activer. Dans ce cas, lors d'une étape S42, le système électronique peut appliquer une configuration de contre-mesure de sécurité prédéfinie avant d'exécuter la seconde fonction.
Cette configuration de contre-mesure de sécurité prédéfinie peut simplement indiquer qu'aucune contre-mesure n'est nécessaire. Dans ce cas, l'application de la configuration prédéfinie de contre-mesures de sécurité peut comprendre la désactivation de toutes les contre-mesures activées, afin d'accélérer l'exécution de la seconde fonction.
La quatrième étape décrite ci-dessus peut être exécutée de manière répétée à chaque appel d'une nouvelle fonction, afin d'adapter la configuration des contre- mesures à la fonction suivante à exécuter.
Le système électronique peut en même temps effectuer d'une part les trois premières étapes S1 à S3, afin de détecter en continu de nouvelles attaques et d'adapter les configurations de contre-mesures de sécurité mémorisées dans les registres matériels de sécurité ; et d'autre part, effectuer la quatrième étape S4 à chaque changement de fonction, afin d'adapter les contre-mesures appliquées à la fonction en cours d'exécution.
Afin de mémoriser le contenu des registres matériels de sécurité break, _sec lorsque le système électronique est mis hors tension et de le restaurer au démarrage, le système électronique peut comprendre une mémoire de sauvegarde 105, telle
qu'une NVM ou une mémoire morte programmable et après détection d'une attaque lors de l'exécution d'une première fonction, l'adresse de début de ladite première fonction et ladite configuration de contre-mesure de sécurité sélectionnée, mémorisée dans ledit registre matériel de sécurité, sont copiées dudit registre matériel de sécurité à ladite mémoire de sauvegarde. Au démarrage du système électronique, les adresses de départ et les configurations de contre-mesures de sécurité associées, mémorisées dans ladite mémoire de sauvegarde, sont copiées de ladite mémoire de sauvegarde auxdits registres matériels de sécurité.
Afin de garder facilement une trace de l'état courant du système électronique, celui-ci peut comprendre un registre matériel d'état sécurisé de processeur psr_sec, configuré pour mémoriser l'adresse de début de la fonction en cours d'exécution et la configuration courante de contre-mesure de sécurité appliquée. Dans un tel cas, afin de maintenir ce registre à jour, une adresse de début de la première fonction et la configuration courante de contre-mesure de sécurité peuvent être mémorisées, au début de l'exécution d'une première fonction, dans le registre matériel d'état sécurisé de processeur psr_sec.
Puis, lors la quatrième étape S4, lorsque l'exécution du code passe d'une première fonction à une seconde fonction, le contenu du registre matériel d'état sécurisé de processeur psr_sec relatif à la première fonction peut être sauvegardé, par exemple en RAM ou dans des registres matériels dédiés, et le registre matériel d'état sécurisé de processeur psr_sec peut être mis à jour avec l'adresse de début de la seconde fonction. Lors de cette quatrième étape S4, le fait de déterminer si l'un des registres matériels de sécurité break, _sec mémorise adresse de début de la seconde fonction peut comprendre la comparaison de l’adresse de début de la seconde fonction mémorisée dans le registre matériel d'état sécurisé de processeur psr_sec aux adresses de début de fonction mémorisées dans les registres matériels de sécurité break, _sec. Cette étape de comparaison peut être réalisée par un circuit matériel dédié, par exemple par des comparateurs matériels entre chaque registres matériels de sécurité break, _sec et le registre matériel d'état sécurisé de processeur psr_sec.
Lorsque l'un des registres matériels de sécurité mémorise l’adresse de début de la seconde fonction, l'application d'une configuration de contre-mesure de sécurité associée à l’adresse de début de la seconde fonction avant l'exécution de ladite seconde fonction peut alors comprendre l'activation des contre-mesures de sécurité, requises dans la configuration de contre-mesure de sécurité associée à l’adresse de début de la seconde fonction et désactivées dans la configuration courante de contre- mesure de sécurité, appliquée lors de l'exécution de la première fonction.
En fin d'exécution de la seconde fonction, l'exécution revient à la première fonction tandis que l'état précédent du registre matériel d'état sécurisé de processeur psr_sec, sauvegardé lors du passage de l'exécution à la seconde fonction, peut être rechargé, par exemple à partir de la RAM ou de registres matériels dédiés. Cette étape peut être réalisée par un circuit matériel dédié.
Un exemple de configuration du système électronique est représenté à la figure 3, qui montre les opérations effectuées lors de la détection d'une attaque lors de l'exécution d'une fonction B appelée par une fonction A. La fonction A est exécutée d'abord. À ce moment, le registre matériel d'état sécurisé de processeur psr_sec mémorise l'adresse de début de la fonction A 0x200 et une configuration de contre- mesure de sécurité 0x0, indiquant qu'aucune contre-mesure n'est requise. Ensuite, la fonction B est appelée. Le registre matériel d'état de sécurité de processeur psr_sec est mis à jour avec l'adresse de début de la fonction B 0x2000. La détection d'une attaque déclenche une alarme de sécurité qui conduit à écrire l'adresse de départ de la fonction B 0x2000 dans l'un des registres matériels de sécurité breakr_sec. Le système électronique détermine que trois contre-mesures sont nécessaires pour empêcher cette attaque et associe donc, à l'adresse de départ de la fonction B 0x2000, une configuration de contre-mesure de sécurité 0x3 nécessitant l'activation de ces trois contre-mesures. Le contenu du registre matériel de sécurité breakr_sec peut être copié dans la mémoire de sauvegarde, afin de pouvoir le restaurer au redémarrage.
Suite à cette configuration, un exemple d'exécution sécurisée d'un code selon l'invention est donné sur les figures 4 et 5. Cet exemple montre un état initial du système électronique, dans lequel une première fonction A est exécutée et appelle
une seconde fonction B. On suppose que trois registres matériels de sécurité, breakr_sec, break2_sec et break/v_sec, mémorisent les adresses de début de fonctions B (0x2000), D (0x4000) et F (0x6000) et les configurations de contre- mesures de sécurité associées - qui ne sont pas représentées à la figure 4 - mais l'adresse de début de la fonction A 0x200 n'est mémorisée dans aucun des registres matériels de sécurité. En conséquence, la fonction A est exécutée sans l'activation d'aucune contre-mesure. Lors de l'exécution de la fonction A, le registre matériel d'état sécurisé de processeur psr_sec mémorise l'adresse de départ (A@ ou 0x200) de la fonction A et la configuration de contre-mesure de sécurité 0x0, indiquant qu'aucune contre-mesure n'est requise dans cette configuration. La fonction B est ensuite appelée. L'adresse de début B@ 0x2000 de la fonction B est copiée dans le registre matériel d'état sécurisé de processeur psr_sec et cette adresse de début est recherchée dans les registres matériels de sécurité. Le registre matériel de sécurité breakr_sec mémorise l'adresse de début B@ 0x2000 associée à la configuration de contre-mesure de sécurité 0x3 nécessitant l'activation de trois contre-mesures. Comme cette configuration de contre-mesure de sécurité 0x3 diffère de la précédente 0x0 appliquée à l'exécution de la fonction A, les trois contre-mesures, requises dans la configuration de contre-mesure de sécurité 0x3 et maintenues inactivées pendant l'exécution de la fonction A, sont activées par un appel à la fonction d'activation à l'adresse 0x1100. Après le démarrage de l'exécution de la fonction B, le registre matériel d'état sécurisé de processeur psr_sec mémorise alors l'adresse de début de la fonction B@ 0x2000 et la configuration de contre-mesure de sécurité associée 0x3.
Les figures 4 et 5 montrent également ce qui se passe lorsque l'exécution de la fonction B est terminée et que l'exécution de la fonction A reprend. À ce moment, le registre matériel d'état sécurisé de processeur psr_sec mémorise toujours l'adresse de début de la fonction B@ 0x2000 et la configuration de contre-mesure de sécurité associée 0x3. L'adresse de début de fonction A 0x200 est introuvable dans les registres matériels de sécurité. On applique donc la configuration prédéfinie de sécurité 0x0, qui désactive les trois contre-mesures activées lors de l'exécution de la fonction B, par un appel à la fonction de désactivation à l'adresse 0x1100. Après le démarrage de l'exécution de la fonction B, le registre matériel d'état de sécurité de
processeur psr_sec mémorise à nouveau l'adresse de début de la fonction A@ 0x200 et la configuration de contre-mesure de sécurité associée 0x0.
Selon un troisième aspect, l'invention concerne un produit programme d'ordinateur directement chargeable dans la mémoire d'au moins un ordinateur, comprenant des instructions de code logiciel permettant d'exécuter, lorsque ledit produit est exécuté sur l'ordinateur, les étapes des procédés décrits précédemment.
En plus de ces caractéristiques, le procédé et le programme d'ordinateur selon les deuxième et troisième aspects de l'invention peuvent être configurés pour exécuter ou peuvent comprendre toute autre caractéristique décrite précédemment.
Le système électronique et le procédé présentés ici permettent donc de déclencher efficacement l'exécution de contre-mesures supplémentaires sur des parties spécifiques du code à protéger, quasiment sans aucune empreinte sur ce code et avec un impact limité sur le temps d'exécution, puisqu'aucune contre-mesure n'est activée pendant le l'exécution de fonctions pour lesquelles aucune protection n'est nécessaire.