• Aucun résultat trouvé

1.3 Techniques de vérification d’intégrité

1.3.2 Paradoxe des anniversaires

La taille du condensé est importante du point de vue de la sécurité à cause du problème de la résistance aux collisions, menacée par le paradoxe des anniversaires. En pratique, supposons une fonction h qui produit des condensés dans un ensemble de N éléments. Au bout de√N appels à la fonction h, la probabilité que deux condensés identiques aient été générés est de 1/2. Cela signifie que pour une fonction de hachage produisant un condensé de n bits, cette probabilité est obtenue après le calcul de 2n/2 condensés. Par exemple, une attaque basée sur le

paradoxe des anniversaires permettrait de trouver une collision sur le SHA-1 avec un nombre d’opérations de l’ordre de 280.

1.3.3

Conclusion

Dans ce chapitre nous avons présenté les différents algorithmes de base de la cryptogra- phie dont nous aurons besoin par la suite tout au long de ce manuscrit, et particulièrement les techniques de chiffrement et de vérification d’intégrité.

Chapitre 2

Panorama des techniques de protection

Sommaire

2.1 Modèle de menace . . . 38 2.2 Méthodes de protection . . . 40 2.2.1 Confidentialité . . . 40 2.2.2 Intégrité . . . 42 2.3 Les arbres de Merkle réguliers . . . 46 2.3.1 Opérations . . . 47 2.3.2 Évaluation des performances . . . 49 2.3.3 Variantes des arbres de Merkle . . . 57 2.3.4 Comparaison des différents arbres . . . 60 2.4 Plates-formes de calcul sécurisées . . . 61 2.4.1 Best . . . 61 2.4.2 Dallas DS5002FP . . . 62 2.4.3 XOM . . . 63 2.4.4 AEGIS . . . 65 2.4.5 CryptoPage . . . 66 2.4.6 MESA . . . 67 2.4.7 PE-ICE . . . 67 2.5 Conclusion . . . 68

La protection de données résidant dans un espace de stockage non fiable ou non digne de confiance est un problème critique du point de vue de la sécurité. Deux propriétés non fonctionnelles sont à assurer : la confidentialité et l’intégrité.

De nombreux systèmes (par exemple dans le domaine du cloud computing, les systèmes embarqués ou les bases de données) manipulent des informations sensibles qui sont stockées dans des espaces de stockage non nécessairement fiables, dignes de confiance ou inaltérables. Ces données peuvent alors y être altérées par un adversaire.

Par exemple, si un attaquant ayant physiquement accès à un système embarqué parvient à espionner le bus de communication entre le ou les composants de calcul (processeurs, SoC)

et les composants de stockage (la mémoire vive, le disque dur, etc.), il peut alors récupérer le code exécuté et les données manipulées, et obtenir ainsi de l’information potentiellement sensible (attaques passives). Il peut aussi modifier les informations qui transitent sur le bus ou le contenu des mémoires (attaques actives), ce qui peut perturber le bon fonctionnement du système.

Dans la section 2.1, nous introduirons les différentes attaques possibles sur ces types de sys- tèmes, puis nous présenterons dans la section 2.2 les mécanismes de protection proposés dans la littérature. Ensuite, dans la section 2.3, nous étudierons en profondeur une méthode particu- lière de protection de l’intégrité : les arbres de Merkle. Enfin, un panorama des plates-formes de calcul sécurisées intégrant ces techniques de protection est présenté dans la section 2.4.

2.1

Modèle de menace

La conception des solutions de sécurité repose principalement sur la définition des types d’attaques contre lesquelles le système doit être protégé. En effet, les mécanismes implémentés pour garantir les objectifs de sécurité peuvent être différents suivant les ressources (équipement, moyens financiers) et les compétences utilisables par un attaquant.

De nombreuses applications informatiques nécessitent un certain niveau de confidentialité (si les données manipulées ou les algorithmes utilisés sont sensibles) et d’intégrité (si le code exécuté, les données d’entrée et les résultats produits doivent être conformes à l’intention des concepteurs). Ces propriétés sont plus facilement obtenues lorsque les calculs sont effectués localement, mais sont plus difficiles à atteindre lorsque les applications sont exécutées à dis- tance, sur des machines appartenant à des tiers. Malheureusement, ce dernier cas est de plus en plus fréquent avec le développement du cloud computing.

Par exemple, une entreprise ayant besoin d’effectuer des calculs intensifs, peut utiliser la puissance de calcul d’un fournisseur de cloud computing. Cependant, comme ces calculs ne sont plus effectués localement, l’entreprise n’a plus le contrôle sur la confidentialité et l’inté- grité de ces calculs et doit faire confiance au fournisseur de cloud computing.

Différentes attaques peuvent compromettre ces propriétés, que se soit des attaques logi- cielles ou matérielles. Les attaques logicielles peuvent être le fait d’une application malveillante qui s’exécute en même temps que l’application victime dans le serveur de calcul, et à laquelle une faille dans le système d’exploitation ou l’environnement de virtualisation, permet d’es- pionner ou même de perturber l’application victime. Elles peuvent également être le fait du système d’exploitation ou de l’environnement de virtualisation eux-mêmes, s’ils sont aux mains d’administrateurs malveillants. Les attaques matérielles peuvent être menées par une personne physique (administrateur, technicien, intrus) disposant d’un accès physique aux serveurs sur lesquels l’application est exécutée, et qui peut récupérer physiquement le code et les données manipulées par l’application.

Cette situation ne concerne pas seulement les plates-formes de cloud computing, mais aussi les systèmes embarqués qui manipulent des données sensibles qui n’appartiennent pas à l’uti- lisateur final. Ceci est le cas, par exemple, des consoles de jeux vidéos manipulant des flux

vidéos et des informations concernant la gestion des droits numériques qui ne devraient pas être accessibles par l’utilisateur.

De nombreuses menaces visent les systèmes embarqués à plusieurs niveaux. Premièrement, les composants de calcul eux-mêmes peuvent être visés. On peut citer, par exemple, les attaques par canaux auxiliaires (SCA [18, 19]), les injections de faute [20], la rétro-conception, etc. Les attaques peuvent aussi concerner d’autres composants matériels du système complet : espion- nage ou injections sur les bus de communication ou les contenus de mémoires [2], etc. Enfin, les composants logiciels peuvent également être la cible des attaques : exploitation de failles dans le système d’exploitation ou les applications [21], etc. L’objectif commun de ces attaques est généralement d’extraire des informations sensibles ou de perturber le bon fonctionnement du système embarqué.

Nous considérerons par la suite le modèle de menace suivant. Le système considéré est schématiquement composé d’un composant de calcul principal (System-on-Chip, SoC) et d’une mémoire externe, dans laquelle sont stockés le code et les données des applications. Nous supposons que le composant de calcul est inattaquable (ce qui exclut donc les attaques par canaux auxiliaires, la rétro-conception, etc.). Par contre, nous supposons que la mémoire et le bus mémoire sont sous le contrôle de l’attaquant (figure 2.1).

Mémoire

(non-fiable) (fiable) externe

SoC

FIGURE 2.1 – Zones d’attaques considérées.

L’attaquant peut donc avoir accès aux données contenues dans la mémoire externe (pro- blème de confidentialité) et peut également les modifier (problème d’intégrité).

L’intégrité consiste à s’assurer de la propriété suivante : lors d’une lecture à une adresse donnée, la donnée reçue par le processeur depuis la mémoire doit être la dernière donnée stockée par le processeur à cette même adresse. De manière générale, les attaques actives qui menacent l’intégrité de la mémoire externe non fiable peuvent être réparties en trois catégories : — Injection : l’attaquant remplace une donnée par une autre donnée de son choix. Dans la figure 2.2, l’attaquant remplace la donnée 0x152AAB32 de l’adresse 3 par la donnée forgée 0xFFFFFFFF.

— Permutation spatiale : l’attaquant remplace la donnée d’une adresse par la donnée d’une adresse différente. Dans la figure 2.3, l’attaquant remplace la donnée 0x152AAB32 de l’adresse 3 par la donnée 0x0001AE22 de l’adresse 0.

— Permutation temporelle ou Rejeu : l’attaquant remplace la donnée la plus à jour d’une adresse par une ancienne donnée de la même adresse. Dans la figure 2.4, l’attaquant remplace la donnée 0x152AAB32 de l’adresse 3, écrite au temps T2 par l’ancienne

0X0001AE22 @2 @1 @0 0X152AAB32 0XF14A5522 0XBC56A1AC 0X152AAB32@3 0XFFFFFFFF lire @3 CPU C M

SoC Zone fiable Zone non-fiable

externe Mémoire

FIGURE2.2 – Attaque par injection

0X0001AE22 @3 @2 @1 @0 0X152AAB32 0X152AAB32 0XF14A5522 0X0001AE22 0XBC56A1AC lire @3 SoC CPU

Zone fiable Zone non-fiable

externe Mémoire

C M

FIGURE2.3 – Attaque par permutation spatiale

donnée 0xA67A11FF de la même adresse mais écrite au temps T1, où T1 < T2. Au

moment de la réponse, la donnée retournée n’est donc pas la dernière donnée stockée à l’adresse demandée. 0X0001AE22 @3 @2 @1 @0 0X152AAB32 0XF14A5522 0XA67A11FF 0XBC56A1AC 0X152AAB32 Zone non−fiable lire @3 SoC CPU M T2 C T1< T2 Zone fiable Mémoire externe T2

FIGURE 2.4 – Attaque par rejeu