Attaques DMA et par manipulation malicieuse
du DVFS
Attaques par canal dérobé basé sur l’utilisation malicieuse du système DFS
Aujourd’hui, l’une des menaces auxquelles sont confrontésles SoCs complexes hétérogènes est la transmission secrète de données sensibles par canal dérobé. Cette attaque permet à un attaquant de transférer des données sensibles entre des processus qui ne sont pas autorisés à communiquer par les politiques de sécurité du système. En général, une transmission par canal dérobé utilise un processus espion qui infiltre le système et transfère les données sensibles à un processus récepteur qui les décode et les utilise à des fins malveillantes. Dans la littérature, il existe plusieurs méthodes pour créer un canal dérobé, mais la majorité des méthodes utilisent les ressources partagées telles que la mémoire partagée. Dans [58], Lipp et al. ont utilisé une bibliothèque partagée (une mémoire partagée) et les attaques de mémoire de cache pour échanger des données sensibles entre deux processus non privilégiés. Le moyen de communication secrète entre les deux processus, espion et récepteur, se base sur l’utilisation soit de l’attaque de la mémoire cache Flush+Reload soit l’attaque de la mémoire cache Flush+Flush (détaillées dans la section chap1-4.3.1.2). Dans le cas de l’utilisation de l’attaque de cache Flush+Reload, leur processus espion envoie un 1 logique en accédant à une adresse de la bibliothèque partagée et envoie un 0 logique en renvoyant l’adresse de la mémoire cache. Leur processus récepteur mesure seulement le temps d’accès à l’adresse accédée par le processus espion pour décoder les états logiques 0 et 1. Dans [68], Masti et al. ont démontré la faisabilité d’un canal dérobé thermique. Ils ont utilisé le capteur thermique inclus dans un cœur du processeur pour faire communiquer deux processus qui sont exécutés sur deux cœurs différents du même processeur. Pour envoyer un 1 logique, leur processus espion stresse le cœur qu’il utilise pour chauffer le processeur. Pour envoyer un 0 Chapitre 3 : Attaques DMA et par manipulation malicieuse du DVFS 53 logique, le processus espion diminue la charge de travail du cœur. Pour décoder les données, leur processus récepteur effectue seulement des lectures de la température du cœur appartenant au même processeur. Dans [69], Alagappan et al. ont démontré la faisabilité d’un canal dérobé en utilisant la modulation de fréquence. Ils ont utilisé la technique DFS pour transférer des données sensibles entre le processus espion et le processus récepteur. Pour envoyer un 1 logique, leur processus espion stresse le processeur comme dans [68], cela pousse le système à changer sa fréquence pour répondre à la charge de travail exécuté par leur processus espion. La fréquence choisie dépend du mode de gouverneur de fréquence utilisé par le système (performances, économie d’énergie, espace utilisateur, en demande, conservateur). Pour envoyer un 0 logique, leur processus espion diminue la charge de travail appliquée au processeur. Le processus récepteur effectue une simple lecture de la fréquence pour décoder les 0 et les 1 logiques. Comme dans [69], les preuves de concepts présentées dans la suite de ce chapitre utilisent également la modulation de fréquence pour envoyer des données sensibles entre un processus espion et un processus récepteur. Mais contrairement à [69], les deux processus ont des statuts de sécurité différents dans un SoC FPGA embarquant la technologie ARM TrustZone. De plus, les quatre preuves de concept utilisent une modification directe du registre lié au régulateur de fréquence. Ce chapitre introduit également pour la première fois une communication secrète dans un SoC FPGA, qui est la communication secrète entre une IP matérielle embarquée dans la partie reconfigurable et un cœur ARM de la partie processeur.
Preuve de concept #1
Transfert de données sensibles du cœur ARM sécurisé vers l’extérieur du SoC La figure 31 présente le chemin d’attaque de la première preuve de concept (chemin d’attaque n° 1, figure 31), les données sensibles exécutées par le cœur ARM sécurisé sont transférées vers l’extérieur du SoC FPGA par émission électromagnétique. En 2015, Bossuet et al. [70] ont démontré que le canal électromagnétique est un canal dérobé puissant pour la transmission discrète de donnée sensible vers l’extérieur d’un SoC. Ils ont utilisé un circuit malveillant exploitant un oscillateur en anneau configurable (processus espion) pour faire de la modulation de fréquence, et un analyseur de spectre en temps réel (processus récepteur) pour démoduler les données fuitées. Dans nos travaux [71], contrairement à [70], la preuve de concept ne se base pas sur une modification malveillante introduite dans le SoC durant sa conception. La preuve de concept utilise la technique DFS comme dans [69] pour faire de la modulation de fréquence et fuiter les données par émission électromagnétique. Par contre, le processus récepteur est le même que celui utilisé dans [70]. La figure 32 présente le dispositif pour le décodage de l’information fuitée, une sonde électromagnétique pour capter les émissions électromagnétiques du SoC et un analyseur de spectre en temps réel pour décoder le flux de données. Dans la majorité des attaques basées sur les émissions électromagnétiques, les attaquants ont besoin d’effectuer une cartographie électromagnétique pour localiser l’emplacement de la modification malicieuse au niveau du SoC, et du prétraitement du flux de donnée pour réduire le bruit et extraire l’information utile. Dans la preuve de concept #1, l’attaquant a besoin d’un simple balayage manuel pour révéler la position de la fuite et capter un signal puissant sur l’analyseur de spectre. La puissance du signal permet de décoder directement le flux de données sur l’écran de l’analyseur de spectre en temps réel sans prétraitement. Ce gain de temps est dû au fait que la technique DFS manipule une horloge qui alimente la majorité des composants de la partie processeur, les files de l’horloge sont enracinés dans la partie processeur. Dans une cartographie électromagnétique, la cible sous test est positionnée sur une table XY (XYZ parfois) qui la fait bouger par rapport à une sonde qui capture à chaque pas ses émissions électromagnétique. Le pas est de quelque micromètre. Pour le processus espion, le pilote de la technique DFS du système d’exploitation de confiance inclus le code malveillant présenté dans l’algorithme 1. Le code malveillant utilise la modulation de fréquence pour transférer les données sensibles. Pour transférer un 1 logique, l’algorithme 1 force le système DFS à garder une fréquence freq_1 (freq_actuelle = freq_1) pour une temporisation tempo_1. Pour transférer un 0 logique, l’algorithme 1 force le système DFS à garder la même fréquence mais cette fois ci pour une temporisation tempo_2. Entre l’envoie de deux bits successifs, l’algorithme 1 force le système DFS à grader une fréquence freq_2 (freq_actuelle = freq_2) pour une courte temporisation (Tempo_3). Après l’envoie de toute la trame de donnée, l’algorithme 1 remets la fréquence normale de fonctionnement du système (freq_actuelle = freq_normal). Algorithme 1: Modulation de fréquence Input: donnée_à_transférer For i = donnée_à_transférer_size To 0 Do If (donnée_à_transférer[i] = 1) Then freq_actuelle = freq_1 loop for Tempo_1 Else freq_actuelle = freq_1 loop for Tempo_2 End If freq_actuelle = freq_2 loop for Tempo_3 End For freq_actuelle = freq_normal L’utilisation d’une même fréquence (freq_1) pour transférer les 1 et les 0 logiques permet de centrer l’analyseur de spectre en temps réel sur une seule fréquence pour la réception de la Chapitre 3 : Attaques DMA et par manipulation malicieuse du DVFS 56 totalité des données fuitées. La différentiation entre un 1 et un 0 logique se fait par les deux temporisation tempo_1 et tempo_2 qui permettent d’avoir deux motifs distingués par leurs longueurs comme illustrée dans la figure 33-a. La figure montre aussi l’importance des paramètres Tempo_3 et la freq_2 pour différencier entre deux bits successifs de la même valeur et pour décoder directement les données à l’écran de l’analyseur de spectre en temps réel. La figure 33-a montre le décodage à l’écran de la trame 0x7B5A, si le décodage du motif large est pour un 1 logique et le court pour un 0 logique. a: freq_1 = 325MHz, freq_2 = 433MHz, Tempo_1 = 400, Tempo_2 = 200, Tempo_3 = 200 b: freq_1 = 325 MHz, freq_2 = 433 MHz, Tempo_1 = 200, Tempo_2 = 100, Tempo_3 = 25 Figure 32: Décodage des données sur l’écran de l’analyseur de spectre en temps réel, a – bande passante = 1,42.105 bps, b – bande passante = 3,33.105 bps Le choix des temporisations (Tempo_1, Tempo_2 et Tempo_3) dans l’algorithme 1 joue un rôle important sur la taille de la bande passante du canal dérobé. Si les temporisations choisies sont trop élevées (figure 33-a), il est simple de décoder les données reçues directement à l’écran mais la bande passante est plus petite. Si les temporisations choisies sont trop petites (figure 33- b), le signal devient très bruité ce qui rend difficile le décodage direct de l’information transmise. La figure 33-b montre la limite inférieure des trois temporisations pour la freq_1. En dessous de cette limite l’analyseur de spectre n’affiche que du bruit. Le choix de la fréquence freq_1 joue aussi sur la taille de la bande passante du canal dérobé. Si elle est élevée avec des temporisations petites, la bande passante est grande. Dans le cas contraire la bande passante est petite. Le choix de la fréquence freq_1 peut être aussi limité par la cible attaquée car certain SoC ont une plage de fonctionnement fixée par les concepteurs. En dehors de cette plage de fonctionnement le SoC ne fonctionne pas correctement.
Preuve de concept #2
Transfert de données sensibles du cœur sécurisé vers le cœur non-sécurisé La preuve de concept #2 est un transfert de données sensibles du cœur ARM sécurisé vers le cœur non-sécurisé (Chemin d’attaque n° 2, figure 34). Les deux cœurs Cortex-A9 du SoC Xilinx Zynq-7000 ne sont pas bien isolés au niveau de la gestion d’énergie, les deux cœurs partagent la même source d’horloge, si l’un des cœurs modifie la fréquence (les paramètres de la PLL), la fréquence change pour les deux cœurs. Figure 33: Transfert des données sensibles du cœur ARM sécurisé vers le cœur ARM non-sécurisé dans SoC FPGA La preuve de concept #2 démontre qu’une horloge partagée entre deux éléments d’un SoC peut être utilisée comme support de communication pour une attaque par canal dérobé. Pour cela, la preuve de concept #2 utilise un processus espion inclus dans le pilote du système DFS du système d’exploitation de confiance et un processus récepteur inclus dans le système d’exploitation du monde non-sécurisé. Les deux processus interagissent directement (écriture/lecture) avec les registres de configuration liés à la PLL (la fréquence), source de l’horloge qui alimente les deux processeurs. Chapitre 3 : Attaques DMA et par manipulation malicieuse du DVFS 58 Dans cette preuve de concept, le processus récepteur n’a pas accès aux régions sécurisées de la mémoire externe et le processus espion (monde sécurisé) n’a aucune information sur l’adressage du système d’exploitation du monde sécurisé pour choisir une adresse et communiquer directement avec le processus récepteur. Le processus espion utilise l’algorithme 2 pour faire de la modulation de fréquence. Pour envoyer un 1 logique, l’algorithme change la fréquence actuelle (freq_actuelle) de la fréquence freq_1 à freq_2. Pour l’envoi d’un 0 logique, l’algorithme fait l’inverse, il change la fréquence actuelle de freq_2 à freq_1. A chaque changement de fréquence l’algorithme conserve les deux fréquences pendant une période de temps, pour que le processus récepteur détecte le changement de fréquence et l’interprète. Après l’envoie de toute la trame de donnée, l’algorithme 2 remets la fréquence normale de fonctionnement du système (freq_actuelle = freq_normal) comme dans l’algorithme 1. Algorithme 2: Modulation de fréquence Input: donnée_à_transférer For i = donnée_à_transférer_size To 0 Do If (donnée_à_transférer[i] = 1) Then freq_actuelle = écriture_reg(freq_1); loop for Tempo_1; freq_actuelle = écriture_reg(freq_2); loop for Tempo_1; Else freq_actuelle = écriture_reg(freq_2); loop for Tempo_1; freq_actuelle = écriture_reg(freq_1); loop for Tempo_1; End If; freq_actuelle = écriture_reg(freq_3); End For; freq_actuelle = freq_normal; La méthode de modulation de fréquence utilisée dans la section précédente fonctionne également. Mais si la trame de données à transférer est trop longue, la méthode a un taux d’erreur trop élevé et il est difficile de synchroniser les deux cœurs ARM. La méthode de l’algorithme 2 permet d’atteindre une bande passante de 6.104bps et un taux d’erreur nul.