Pourquoi les systèmes cryptographiques échouent-ils?
En collaboration avec Paul Dés
Se reposer sur la puissance des algorithmes de cryptographie pour garantir sa sécurité en ignorant les autres aspects, c’est protéger sa maison en investissant dans une porte indestructible mais sans entourer le terrain d’un grillage.
L a cryptographie apporte une solution à un problème simple: communiquer de manière sûre sur un canal qui ne l’est pas. Si le problème est simple, la solution ne l’est pas, et son efficacité ne se laisse pas facilement mesurer.
Depuis que la cryptographie est utilisée dans nos systèmes d’informations, des attaquants trouvent encore et toujours des moyens de la dépasser. Sont-ils plus doués en mathématiques que les chercheurs qui mettent au point les nouveaux protocoles de chiffrement ? Ont-ils de meilleurs ordinateurs ? Une machine quantique capable de calculer l’inverse d’une fonction de chiffrement ? Rien de tout cela. Les attaquants sont comme n’importe quel cambrioleur de rue: ils ne se procurent pas les 10.000 clés possibles correspondant à la serrure, ne passent pas non plus des mois à apprendre à les crocheter. Non, ils cassent un carreau à la main et entrent par la fenêtre. La meilleure serrure, tout comme le meilleur algorithme de chiffrement, ne peuvent empêcher ce genre d’attaque.
Alors l’attaquant virtuel fait de même. Il trouve des erreurs dans la conception, l’implémentation ou le matériel. Parfois il fait preuve de créativité en exploitant des failles jamais vues auparavant. Mais souvent, il n’a qu’à utiliser les mêmes erreurs répétées à chaque nouveau système construit.
Cet article en donne un aperçu en s’appuyant sur des données récentes.
Attaque contre la conception
La sécurité d’un système cryptographique est au mieux aussi forte que les algorithmes qu’il utilise pour le chiffrement, la signature, le hachage, les nombres aléatoires et ses codes ou messages renvoyés. Casser une de ces composants entraîne donc le cassage de tout le système.
Rien qu’en octobre cette année deux vulnérabilités entraînés par des générateurs de nombres pseudo-aléatoires ont été découverts. Il s’agit de ROCA (Return of Coppersmith’s Attack) et DUHK (Don’t Use Hardcoded Keys). Les deux attaques sont spécifiques à une certaine implémentation, avec des matériels spécifiques qui sont déjà considérés obsolètes.
De manière générale, un simple ordinateur aura du mal à générer des nombres purement aléatoires sans une vrai source aléatoire. Beaucoup de machines utilisent donc des générateurs pseudo-aléatoires, qui sont basés sur des algorithmes déterministes qui essayent d’approcher un espace aléatoire en partant d’une clé (seed). Cela donne un bon compromis entre la sécurité et le temps de calcul, mais ce processus peut générer aussi des vulnérabilités surtout s’il est mal implémenté (utiliser des clés statiques ou des sources prévisibles comme la date et l’heure par exemple).
Ainsi, la faille exploitée par DUHK était que le générateur ANSI X.931 utilisée dans d’anciennes versions du VPN FortiOS et quelques pare-feux utilisait des clés statiques. La solution d’un tel problème? Concevoir (et déployer) un nouveau standard. ANSI X9.31 est considéré obsolète par NIST depuis 2011.
Attaque contre l’implémentation
Beaucoup de systèmes échouent à cause des erreurs d’implémentation: ne pas effacer le texte en clair après le chiffrement, ne pas bien gérer le buffer overflow, laisser des données en clair par accident, permettre l’utilisation des vieilles clés, et la liste continue.
Toujours en octobre dernier, la vulnérabilité KRACK (Key Reinstallation AttaCKs) a fait du bruit, car elle menace la confidentialité du trafic sur les réseaux Wi-Fi utilisant WPA2, protocole considéré incassable auparavant. L’attaque exploite le “4-way handshake” du WPA2, un mécanisme exécuté quand un client souhaite joindre un réseau Wi-Fi protégé et qui est utilisé pour confirmer le fait que le client et le point d’accès possèdent les identifiants corrects (mot de passe du réseau par exemple). En même temps, ce handshake négocie une nouvelle clé de chiffrement qui sera utilisée pour protéger le trafic.
Dans un attaque KRACK, le hackeur manipule une victime pour qu’elle réinstalle une clé déjà utilisée. Cela est fait en rejouant des messages du “4-way handshake”. Quand la victime réinstalle la clé, les paramètres associés comme le “nonce” par exemple sont remis à leur valeurs initiales. En cryptographie, un “nonce” est un nombre arbitraire destiné à être utilisé une seule fois dans des différents protocoles, surtout lors de l’authentification. Son unicité renforce la sécurité d’un protocole, et le réutiliser ouvre forcément des portes aux attaques.
Essentiellement, pour garantir la sécurité, une clé devrait être installée et utilisée une seule fois. Malheureusement, WPA2 ne garantissait pas cela. Après la découverte de la vulnérabilité, les constructeurs et fournisseurs ont déployé des mises à jours rapidement. Mais réussir à les faire installer sur les systèmes d’entreprises ne dépend hélas pas d’eux.
Attaque contre le modèle de confiance
L’exploitation KRACK nous prouve encore une fois que la sécurité d’un système ne devrait de toute façon pas dépendre de la sécurité du canal utilisé, ici WPA2. Ce serait équivalent à dépendre du fait qu’un attaquant branche sa machine à une prise Ethernet de l’entreprise.
Trop de systèmes font ainsi des assomptions sans les vérifier. Les logiciels s’exécutent sur des machines potentiellement infectées par des virus, les certificats ne sont pas vérifiés en temps réel, et les utilisateurs ne sont pas toujours ceux que l’on croit : l’attaquant peut acheter le produit pour pratiquer du reverse-engineering, l’employé peut désactiver un système de protection car il provoque une erreur, le licencié peut utiliser ses accès pour se venger en corrompant le système…
Le modèle de confiance prévu au moment de la conception doit être celui présent à l’implémentation. Et par dessus tout, il doit fonctionner même si les assomptions initiales se révèlent fausses.
Attaque contre le matériel
En 1995, la “timing attack” a fait grand bruit en permettant de retrouver une clé privée RSA en mesurant précisément le temps requis par un processeur pour chiffrer les données. Les recherches suivantes ont étendu ces mesures à la consommation d’énergie, et même à la quantité de radiation émise.
Aujourd’hui, de nouvelles approches comme l’apprentissage profond s’appliquent sur des mesures physique des machines et permettent dans une certaine mesure de se défaire de AES, l’algorithme standard de chiffrement.
Attaque contre le rétablissement
Un système bien conçu devrait empêcher les petites brèches de sécurité de s’agrandir. La récupération de la clé privée d’un fichier sur un disque dur chiffré ne devrait pas permettre à l’attaquant de lire tous les fichiers sur le disque. De même, un hackeur qui arrive à faire du “reverse engineering” sur une smart card ne devrait pas avoir accès à d’autres informations sur le système et les autres cartes. Trouver le PIN d’une carte bancaire ne doit pas permettre de deviner celui de toutes les autres.
Plusieurs fois dans l’Histoire de la cryptographie, des algorithmes réputés inviolables ont été attaqué avec succès. Ces changements soudains du coût de cassage remettent en question des dogmes sur lesquels sont massivement basés des systèmes sécurisés. La sécurité doit être rétablie le plus rapidement possible en adaptant les protocoles utilisés, mais il ne faut pas oublier de gérer ce qui reste stocké chiffré avec les anciens algorithmes, que ce soit sur nos serveurs ou sur ceux d’une organisation adverse. Pour les premiers, on peut re-calculer de nouveaux hashs pour toutes les données, mais pour les seconds, le moins que l’on puisse faire est régénérer régulièrement de nouvelles paires de clés pour limiter la portée d’un futur déchiffrement.
Attaque par erreur humaine
Même quand un système est correctement sécurisé, les utilisateurs peuvent toujours le saboter par accident, surtout si le système n’est pas trop bien pensé: devoir donner son mot de passe à un collègue pour régler un problème par exemple. Les attaques de “social-engineering” peuvent souvent donner des meilleures résultats que des mois de cryptanalyse.
Beaucoup de systèmes sont cassés parce qu’ils dépendent des mots de passe fixés par l’utilisateur, et ceux-ci sont souvent faibles. Les utilisateurs ont aussi tendance à utiliser le même mot de passe dans plusieurs endroits, ne pas vérifier les certificats, ne pas signaler la perte d’une smart card tout de suite, etc.
L’entreprise de consultance Deloitte, qui ironiquement est reconnue pour son expertise en cybersécurité, s’est fait attaquer en septembre par des hackeurs qui ont réussi à prendre le contrôle d’un compte d’administrateur. Cela n’a pas été confirmé, mais nous pouvons imaginer qu’ils sont arrivé à faire cela à cause d’une erreure humaine comme celles énumérés, surtout étant donné le fait que le compte était protégé par un seul mot de passe et ne faisait pas de vérifications à double facteur.
Attaque mathématique
Enfin, la sécurité des systèmes cryptographiques est censée être garantie par des théorèmes mathématiques. Le principe est de réduire la réussite d’une attaque à la résolution d’un problème mathématique extrêmement difficile. Il s’agit d’une garantie conditionnelle : tant que le problème mathématique n’a pas de solution accessible en pratique, le système ne peut être cassé.
Le problème de ce type de preuve est que la difficulté de ces problèmes n’a jamais été vraiment prouvé. Bien sûr, la multiplication des grands nombres premiers utilisée dans RSA apparaît aujourd’hui comme une fonction à sens unique, car la multiplication a une complexité polynomiale, alors que les meilleurs algorithmes connus pour factoriser un produit ont une complexité strictement supérieure. Mais personne ne sait si demain un algorithme efficace sera trouvé. À ce jour, ni l’existence, ni l’inexistence d’un tel algorithme n’ont été démontrées.
Avec l’évolution de la technologie, le temps de calcul se réduit et il devient nécessaire de renforcer les paramètres des algorithmes de cryptographie en conséquence. La vulnérabilité FREAK (Factoring RSA Export Keys), découverte en 2015, permettait aux hackers de casser des protocoles utilisés par les navigateurs en utilisant pour 100 euros de services de calcul dans le Cloud. Cela était dû à une longueur trop petite de la clé RSA, alors limitée à 512 bits maximum par la NSA dans les années 1990 pour que cela soit difficile pour les autres organisations de la casser mais possible pour elle (en considérant qu’ils ont une puissance de calcul nettement supérieure).
Aujourd’hui, avec les longueurs des clés utilisés dans nos algorithmes RSA (3072 bits minimum) et AES (128 bits minimum), la sécurité est garantie par l’inexistence d’une méthode pour factoriser les nombres pour grands que 768 bits dans le cas de RSA et la durée trop grande pour calculer une clé AES (plus de deux milliards d’années pour récupérer une clé de 128 bits, d’après les chercheurs).
Attaque d’influence
Au-delà de toutes ces attaques “traditionnelles”, la NSA nous apporte quelques nouvelles pistes. Le programme Bullrun, révélé par Edward Snowden en 2013, comporte différentes stratégies pour s’assurer la capacité à déchiffrer le trafic Web sous SSL.
La première consiste à prendre le contrôle sur l’établissement qui définit les normes internationales de chiffrement (NIST, ISO), comme en 1990 avec la limitation des clés RSA à 512 bits.
La seconde consiste à intégrer des portes dérobées dans les algorithmes de chiffrement, dès leur conception. Dual_EC_DRBG est par exemple un algorithme présenté comme sécurisé et intégré à la norme internationale, puis retiré lorsque la porte a été identifiée par la communauté.
La troisième consiste à attaquer ou espionner des sociétés à fort trafic (Google, Facebook…) pour leur dérober leur clés privées. L’investissement dans des ordinateurs à haute performance pour casser les algorithmes est finalement la piste la moins privilégiée.
Conclusion
Alors, comme concevoir un bon système de sécurité ? Comment réussir à se défendre non seulement de toutes les attaques existantes mais également de toutes celles pas encore inventées? Quand la plupart des systèmes de sécurité sont basés sur la prévention comme seul moyen de défense, alors qu’un jour ou l’autre le système sera forcément attaqué d’une manière inattendue, il ne faut pas oublier la détection qui nous permet de se rendre compte d’une telle attaque, l’isolement, et la régénération des clés.
Au contraire, l’attaquant n’a qu’une seule faille à trouver pour corrompre le système entier. Et il peut tricher : il peut attaquer le système par des façons de faire auxquelles le concepteur n’a jamais même pensé.
Il est difficile de construire un bon système qui s’appuie sur la cryptographie, mais très facile d’en construire un mauvais. Je pense que beaucoup de gens ne sauraient distinguer les deux. La science de la sécurité se distingue de domaines où la performance est facilement mesurable: un bon processeur sera plus rapide, un bon algorithme sera de complexité moindre. La cryptographie est différente, malgré ce que clament certains éditeurs de solutions de sécurité : elle ne se mesure pas en chiffres, en nombre de bits ou en pourcentage de menaces écartées. Le plus grand nombre de tests possibles ne suffira pas à révéler toutes les failles. Chaque système est unique, et par là même chaque système est vulnérable à sa manière. Trop utilisent une cryptographie sécurisée, mais ne le sont pas.
Pour en savoir plus sur AES, un excellent cartoon explicatif