167 views
# Side channel : l'attaquant est pas sur le réseau mais chez Alice !!! Raison des side channels : - Cloud - Logiciel malveillant ![](https://notes.ar-lacroix.fr/uploads/c0f9339d-4b11-4a59-9689-1d1b5f6774fb.png) **Architecture** : ce qu'un utilisateur peut voir facilement : un attaquant utilise les informations connues du système 👉️ Ex d'attaques : buffer overflow, ROP ... **Microarchitecture** : ce qui n'est pas connu du systeme (son fonctionnement) 👉️ Ex d'attaques : Spectre, zenbleed, rowhammer... **physique** : le comportement physique 👉️ injection de faute **Side channel** : Canal non prévu à la conception, qui permet de casser les algo de crypto par ailleurs safe. Ex: consommation énergétique, champ elecmag, temps d'accès aux caches ... (ça n'était pas souhaité que ça donne de l'info) ## Attaques sur les caches Principe de base : temps d'accès très différent selon la localisation de la donnée (cache L1, mémoire...). Cache hit : la donnée est en cache => on l'a vite Cache miss : la donnée n'est pas en cache => on l'a lentement ### Flush + Reload ![](https://notes.ar-lacroix.fr/uploads/44b16223-b74a-4e9c-94be-b48435dba004.png =400x) --> besoin d'une bibliothèque partagée avec la victime Fonctionnement : - L'attaquant choisit une information - L'attaquant `clflush` l'information (la renvoie en RAM) et attend - La victime accède ou non à l'information - L'attaquant regarde s'il a un cache hit ou miss ### Prime and probe ![](https://notes.ar-lacroix.fr/uploads/56018fda-96c6-454f-a4bb-41db4ea79693.png =400x) --> pas besoin d'une bibliothèque partagée avec la victime Fonctionnement : - L'attaquant remplis un set de données - La victime accède ou non à l'information (et si c'est le cas écrase celles de l'attaquant) - L'attaquant récupère des informations sur les addresses accédées #### Pourquoi AES est-il faible \o/ **Dans Mix-column** : Optimisation de T tables (plutôt que de faire une multiplication matricielle on fait une addition de look-up table). Un peu comme subbyte. ![](https://notes.ar-lacroix.fr/uploads/7a4ae62b-4c78-46fa-a08d-28850411bda7.png) Dans ce cas vu qu'on va connaître les addresses accédées on va pouvoir en déduire les $C_i$ (l'état interne d'AES. :::info Conclusion : ne jamais faire d'accès mémoire dont l'addresse dépend d'un secret (tableau par ex) ::: ### Contre-mesures #### Page coloring chaque partie du cache a un processus associé. ![](https://notes.ar-lacroix.fr/uploads/ec9db568-1c48-4850-a5b7-42aa3066f06c.png =400x) #### Oblivious RAM Tranformer l'algo en rendant les accès mémoire indépendant du secret (randomizer les accès mémoire). #### Track and mitigate Retirer/patcher les point spécifiques où un accès est sensible. ### Limitations des attaques sur les caches - l'accès à une valeur proche en mémoire risque de fausser - pre-fetch : accès anticipé à une addresse suivante (qui peut contenir le secret sans qu'on l'utilise) Autre side channel : regarder combien de temps dure telle execution (on peut en déduire la valeur du `d` d'un RSA) ==> Mais plus pratique de regarder la consommation énergétique ## Attaque sur la consommation (Power-based) Principe : on capture la consommation énergétique sur la machine (physiquement) ou dans un compteur de l'OS. Avantages : - peu détectable - beaucoup de possibilités (ex: casser AES) - difficile à mitiger (issu du matériel) Désavantage : - il faut avoir accès à la conso - composants complexes $\Rightarrow$ traitement complexe (et donc bruité) 🎯 Cible principale : objets connectés / IOT (notamment les cartes banquaires) ### Simple power analysis : Méthode d'attaque qui examine les profils de consommation différents pour en déduire quelle fonction est appellée. Ex : trouver l'exposant de RSA ![](https://notes.ar-lacroix.fr/uploads/36e6fd91-229c-4b2e-9dd1-fd63a2c01f44.png) :::info Tout algo dont le temps dépend du secret est attaquable. $\rightarrow$ ce qui dépend des secret doit être en temps constant. ::: ### Méthodes plus poussées *Pourquoi ça marche ?* Car $PT = C_{pd} × V_{CC}^2 × f_I × N_{SW}$ Tout est constant sauf le nombre de bitflips donc ça dépend du poids de hamming. **Poids de hamming** : nombre de bits à 1 dans une variable (on s'abstrait de la position de la variable) **Distance de Hamming** : nombre de différences de bits entre 2 variables (dans le cas actuel entre la variable avant et après) Comment estimer la consommation à un cycle d'horloge : On somme les distances de Hamming sur tous les registres. $\large L(c_{j+1}) = \sum_i^n HD(R_i(c_j), R_i(c_{j+1}))$ Autres fuites : variation de vitesse de propagation : glitches. Ex : Si la seule chose qui change est `R1 = R1 & R0` avec R0 = (01001100) et R1 = (00111010) : R0 & R1 = (01110110) ==> 5 ### Méthode Différentielle (DPA) - on mesure beaucoup de traces de consommation - On fait une hypothèse sur la clef et estimer la consommation (vu qu'on connaît la valeur résultante (le chiffré)). - On trie les traces en 2 populations : une pour laquelle c'est élevé une pour laquelle c'est faible - on fait une différence des moyennes et si c'est le cas il y a une forte différence au moment où la manipulation du secret a lieu ![](https://notes.ar-lacroix.fr/uploads/ac788541-fde2-468e-8b9d-b695330d0202.png) ### Correlation Power Analysis (CPA) Attack Utilisation d'un autre modèle du composant vierge pour faire un template et l'utiliser pour faire une comparaison de corrélation $\a$ 10 fois moins de traces à obtenir par raport au DPA ### Comment se protéger? techniques "bidouille" non prouvées : - Réduire la consommation énergétique pour se rapprocher du bruit. - calculer à la fois le calcul et son inverse pour avoir une consommation parfaitement constante - désynchroniser pour que les comparaisons entre 2 traces ne marchent pas - rajouter des calculs inutiles pour bruiter Techniques prouvées de masquage : Idée : mélanger les secrets à des valeurs aléatoires et uniformes - Masquage booléen : - $\begin{cases} s_0 = s \oplus r\\ s_1 = r \end{cases}$ - Masquage arithmétique : - $\begin{cases} s_0 = s + r\\ s_1 = r \end{cases}$ Exemple : faire le \oplus de $m$ et $k$ : $m$ => $(r1, r1 \oplus m)$ $k$ => $(r2, r2 \oplus k)$ $C1$ = $r1 \oplus r2$ $C2$ = $(r1 \oplus m)) \oplus (r2 \oplus k)$ C_final = $C1 \oplus C2$ = $r1 \oplus r2 \oplus (r1 \oplus m) \oplus (r2 \oplus k)$ = $m \oplus k$ ::: info on enleve le masque que sur une donnée qui peut être publique :::