Terminaux Android et puces Qualcomm : le chiffrement intégral peut être cassé

Terminaux Android et puces Qualcomm : le chiffrement intégral peut être cassé

Et voici les outils pour le faire

Avatar de l'auteur
Vincent Hermann

Publié dans

Société numérique

05/07/2016 7 minutes
12

Terminaux Android et puces Qualcomm : le chiffrement intégral peut être cassé

Il y a plus d’un mois, une faille de sécurité pouvait permettre différentes actions néfastes dans Android. Bien qu'ayant été corrigée, la mise à jour n'est pas encore assez diffusée et la brèche peut permettre une cassure dans le chiffrement intégral d'Android. Le chercheur à l'origine de la découverte a même publié les outils nécessaires.

Fin mai, le chercheur indépendant Gal Beniamini publiait le résultat de ses travaux : la sécurité d’Android était mise à mal à cause d’une faille (en fait une série de failles pouvant se suivre) dans les extensions de Qualcomm. Ces vulnérabilités ont été corrigées en deux temps par Google, qui avait été averti. Une première fois en janvier, puis à nouveau en juin. Le problème était alors que seules les versions 5.1.1 et 6.0 d’Android recevraient les correctifs (70 % des utilisateurs n'en sont pas équipés), Samsung ayant d’ailleurs réagi rapidement.

De l'intégration dans le matériel...

Mais l’histoire ne s’arrête pas là. La faille principale n’a en fait pas été complètement bouchée, et il sera complexe d’y remédier complètement, à moins d’intervenir directement sur le matériel, ce qui pose d’évidents problèmes. Pour expliquer le problème, Beniamini est revenu sur l’affaire Apple/FBI, dont selon lui on peut tirer les comparaisons et conséquences qui s’imposent.

On rappellera donc que depuis iOS 8, le chiffrement intégral est devenu automatique et obligatoire (Full Disk Encryption, ou FDE). Pour éviter que ce chiffrement ne soit trop facilement cassé, Apple n’a pas utilisé directement le code PIN de l’utilisateur. À la place, un code 256 bits est généré en usine et intégré au matériel, dont il dépend : l’UID. C’est seulement ensuite que cette longue clé est en plus chiffrée par le code PIN, ajoutant une protection supplémentaire.

... au stockage sous forme de variable logicielle

Du côté d’Android, le chiffrement est assuré par dm-crypt, que le chercheur décrit comme largement éprouvé par de très nombreux tests. L’utiliser pour assurer le chiffrement intégral de l’espace de stockage est donc un bon choix, avec une limite toutefois, inhérente finalement à toute solution de chiffrement : sa force dépend directement de la clé.

Cette dernière est créée de la façon suivante : une clé maitresse de 128 bits générée aléatoirement, accompagnée d’un salage de 128 bits (insertion de bits aléatoires) puis elle-même chiffrée via le mot de passe de l’utilisateur, qui peut être un code PIN ou un « pattern », c’est-à-dire le dessin que l’on trace en reliant les points. La clé maitresse, appelée DEK (pour Device Encryption Key), est alors stockée dans une zone spécifique, le « crypto footer ».

android chiffrement

Matériel contre logiciel

Les clés sont globalement générées de la même manière pour les deux environnements, le matériel influençant directement le processus de création. Il existe pourtant une différence conséquente : dans le cas des puces Qualcomm, l’espace sécurisé où sont stockées les clés – appelé TrustZone – est manipulable par voie logicielle, ce qui est impossible chez Apple.

Pour le chercheur, cela pose un certain nombre de problèmes, le plus évident étant que le chiffrement intégral d’Android peut être cassé via une attaque par force brute (en testant toutes les combinaisons). En effet, si la clé maitresse peut être récupérée directement dans la TrustZone, la seule barrière restante est alors le code PIN de l’utilisateur. Et on sait à quel point il peut être parfois faible.

Des correctifs diffusés, mais pas installés partout

Dans son billet de blog expliquant l’ensemble de ses travaux, Gal Beniamini indique qu’il a utilisé les deux failles de la TrustZone pour extraire la fameuse DEK. Tout ce qu’il avait à faire, c’est accéder à cet espace. Des scripts dédiés en Python ont fait le reste du travail en automatisant les opérations d’attaque par force brute sur le chiffrement. Il est sûr de sa découverte, au point d’avoir publié sur GitHub non seulement les fameux scripts, mais également le code permettant d’extraire la clé maitresse. Ce qui rend d’autant plus dangereuse la découverte.

Pourtant, Beniamini n’a-t-il pas utilisé des failles qui ont déjà été corrigées ? Si, mais ce n’est malheureusement pas suffisant, plusieurs paramètres entrant en ligne de compte. D’une part, les correctifs n’ont pas encore été installés partout. Ars Technica, qui a également abordé la situation, indique que d’après les chiffres de la société de sécurité Duo, 37 % des appareils Android utilisant ses produits sont encore vulnérables.

L'implication d'un tiers complique la donne

D’autre part, les correctifs installés peuvent être retirés d’un smartphone ou d’une table. Selon le chercheur, il suffit que le bootloader de l’appareil ait été débloqué. Les outils ne manquent pas, et faire revenir un smartphone à son état non protégé entrainera mathématiquement le reste de l’attaque par un pirate connaissant la méthode.

Enfin – et c’est selon le chercheur l’un des gros points noirs – les pirates ne seront peut-être pas les seuls intéressés par cette découverte. Les agences d’espionnage et de renseignement n’auraient a priori que peu de démarches à effectuer : demander essentiellement auprès d’un OEM l’image chiffrée d’une TrustZone. Le processus de création de clé sur Android réclame en effet le constructeur lui-même du smartphone, ce qui peut paraître logique, mais implique finalement trois entreprises à chaque fois : Google, Qualcomm et l’OEM.

Non, le chiffrement intégral n'est pas inutile

Pour Beniamini, la différence d’approche d’Android sur le chiffrement intégral et l’implication d’une entreprise tierce créent tout le problème. La correction de ce problème ne sera pas simple, car elle ne peut pas être logicielle. Le chercheur indique pourtant que la solution est à portée de main : la SHK. Il s’agit d’une clé particulière, cette fois intégrée dans le matériel, que les puces Qualcomm utilisent pour certaines fonctions cryptographiques. Malheureusement, elle ne sert qu’indirectement pour le chiffrement intégral du stockage : une clé dérivée est créée et stockée dans la TrustZone sous la forme d’une variable logicielle.

La solution est donc « simple » : ne plus faire de dérivations de clés et se servir du matériel directement. Selon le chercheur, l’efficacité de la méthode est manifeste, comme l’a prouvé le choc entre Apple et le FBI. Bien entendu, cela n’empêche pas les failles de sécurité, comme dans n’importe quelle solution. L’agence américaine a d’ailleurs acheté une telle vulnérabilité pour en finir avec un iPhone 5c récalcitrant.

En attendant, Gal Beniamini indique que le chiffrement intégral d’Android rajoute une évidente couche de protection, mais à une condition : que le mot de passe soit fort, quelle que soit sa forme.

Écrit par Vincent Hermann

Tiens, en parlant de ça :

Sommaire de l'article

Introduction

De l'intégration dans le matériel...

... au stockage sous forme de variable logicielle

Matériel contre logiciel

Des correctifs diffusés, mais pas installés partout

L'implication d'un tiers complique la donne

Non, le chiffrement intégral n'est pas inutile

Fermer

Commentaires (12)


Ça explique pourquoi on entend pas trop parler d’Android auprès des autorités américaines alors même que iOS est bien sous les feux des projecteurs.


mais non, c’est juste que l’iPhone est massivement utilisé par les pédophiles, trafiquants de drogue et terroristes.<img data-src=" />


Les autorités américaines en parlent moins parce que par défaut les appareils android ne sont pas chiffrés. Donc peu d’appareils le sont.



Après il faut voir avec quelle facilité ces vulnérabilités sont exploitables. Quelles sont les conditions de base ?



Et moi je retourne avec mon android sans Snapdragon…








La Mangouste a écrit :



Les autorités américaines en parlent moins parce que par défaut les appareils android ne sont pas chiffrés. Donc peu d’appareils le sont.



En mars c’était environ 10% des terminaux sous Android qui étaient chiffrés. 10% de 1.4Milliard de terminaux ça fait quand même 140 millions de chiffrés.

&nbsp;C’est en gros 100 millions d’iPhone en circulation aux US. Il faut voir la proportion qui sont chiffrés.

Donc en terme de nombre d’appareils qui le sont (et donc dont les autorités américaines ressentes le besoin d’y mettre leur tête) on doit pas mal être dans le comparable entre Android et iOS.



Et vive BlackBerry 10 hein


“servir du matériel directement”

&nbsp;alors que le materiel utilise des firmwares non-libre ?.


Contrairement à Apple, Google n’avait jamais réélement été clair sur le fonctionnement de la trustzone, autre qu’avec des milliers de page de pdf inconpréhensible pour le commun des mortels. On sait maitenant pourquoi…



C’est que la Secure Enclave d’ARM, utilisé dans Android, est logiciel… superrrrr


si tu vas par là, de toute manière le matériel est non libre, donc rien n’est de confiance, donc on est tous foutus.


matériel non libre donc possibilité d’intégrer un backdoor: c’est techniquement facile de générer une seconde clé qui marche aussi bien que la clé normale, mais que seul l’OEM constructeur du matériel connait à la fabrication (en théorie) mais que la NSA (ou une agence chinoise… vu que le matériel est fabriqué en Chine) peut aussi obtenir… y compris pour espionner sa population ou ses opposants politiques, ou voler des secrets à l’étranger.



Les algos à clé publique, même avec beaucup de bits (et surtout ces clés là, supposées fortes) peuvent très bien utiliser 3 clés différentes et pas seulement deux; avec l’algo RSA, les deux clés normales sont deux nombres: la clé publique est le produit des deux, une clé est détenue par le propriétaire qui peut décrypter le message encodé par la clé publique; mais avec 3 nombres ça marche aussi (tout dépend de la façon dont on crée la fonction “produit”: la clé privée peut être en fait le produit de deux nombres, dont un est détenu par le fabriquant… résultat un backdoor.



Il y a d’autres techniques encore dans la génération des clés privées qui ne sont pas si aléatoires qu’on le voudrait. L’algo RSA d’ailleurs (dans sa forme publiée) ne cherche même pas à assurer que les deux nombres sont premiers, juste qu’ils ont une FORTE probabilité de l’être. Produire une paire de nombres premiers très longs est très couteux en calcul et factoriser la clé privée l’est tout autant: les clés privées de 1024 bits ne sont pas réellement aléatoires et ce ne sont pas les matériels qui les génère directement: ils créent eux aussi des clés dérivées.



Apple ne veut pas le dire mais son algo doit certainement ne pas utiliser les clés au hasard (et Apple s’en sert pour arriver à bloquer des iPhones volés même quand ils ont été “complètement” effacés logiciellement).



Les appareils militaires en revanche utilisent leurs propres générateurs de clés aléatoire avec des matériels bien plus sophistiqués (au résultat réellement imprédictibles) tels que des mesures d’effets quantiques. On n’a pas ça dans nos matériels grand public, même si on en a des versions limitées tels que les capteurs de température ou de bruit électronique (mais à la résolution très limitée). Pour faire des clés privées avec nos matériels ils faut combiner un très grand nombre de sources matérielles aléatoire, un nombre tellement grand que cela demanderait un temps énorme à les obtenir en nombre suffisant, peut-être même plsu que la dure de vie du matériel.



On attend encore sur le marché une puce de génération de nombres quantiques permettant d’alimenter le fameux “/dev/random” ou similaire utilisé dans les OS et les bibliothèques de sécurité pour générer les clés à la demande en un temps raisonnable. Mais nos générateurs de clés sont très rapides, trop rapides (donc pas fiables: ils se contentent que d’un nombre limité de mesures, pas réellement totalement indépendantes entre elles). Il n’y a pas d’appareil grand public disposant de réels générateurs aléatoires forts: on fait tous confiance aux constructeurs et éditeurs de logiciels, même quand on utilise un noyau Linux libre.



Si on voulait sécuriser les OS libres, ce serait bien de développer une petite puce de mesure de bruit quantique (avec une grande précision des mesures), et pas seulement mesurer des varaibles faibles comme la rotation d’un disque, le nombre de “memory page faults” dans un kernel, les mouvements d’une souris, la vitesse de frappe ou même un périphérique de capture audio (bruit de fond, vent), ou le bruit électrique de charge ou de décharge d’une batterie (les capteurs de batterie ont une fréquence de capture et une résolution très faible: Un noyau Linux peut mettre des années avant que le contenu de ses variables d’état pour /dev/random soit réellement aléatoire et il n’est pas dit qu’il ne produit pas des “boucles” d’états identiques.



&nbsp;De plus on sollicite beaucoup trop souvent ce générateur “faible”: les clés successives obtenues sont trop liées entre elles: si on arrive à obtenir une clé générée peut de temps après celle qu’on cherche à casser, on peut déduire de cette clé des propriétés que la clé recherchée peut vérifier, en nombre suffisant pour que l’attaque en force brute soit techniquement facile à peu de frais (sans solliciter votre appareil: la clé sera cassée à distance sur une autre machine, il n’y aura pas d’activité suspecte que celle de demander à votre appareil quelques clés aléatoires “nouvelles”: c’est facile à faire avec une application commune qui utilise un protocole SSL: il suffit que cette application se connecte assez souvent: genre appli Facebook, ou Google ou un jeu en ligne: ces nombres pseuo-aléatoires peuvent être diffusés en grand nombre par votre appareil, assez pour permettre de casser une autre clé privé qui aurait été générée longtemps avant et que votre appareil n’a pas révélée et qu’un craqueur n’a meêm pas tenté de demander ou d’utiliser indirectement).



Bref un truc à développer: une petite clé USB ou une puce MicroSD qui génère de vrais nombres aléatoires pour alimenter le jeu de données du générateur aléatoire du système, et aussi souvent que les applications demandent de nouvelles clés aléatoires via une API de l’OS. Là nos systèmes auront une vraie sécurité nous mettant à l’abri des intrusions par les constructeurs (et indirectement via eux, par les agences d’espionnage américaines ou chinoises). Mais est-ce que ce type de matériel sera autorisé à l’exportation par les agences de sécurité nationales, qui les réserve pour leur usage militaire?



En attendant il doit y avoir moyen de bricoler ça avec des appareils de mesure à haute fréquence (genre oscilloscope), et un peu de matériel générateur de bruit quantique mesurable (par exemple certains transistors en limite de stabilité sur leur jonction, ou une zimple diode zéner, ou même la cellule CCD d’une caméra). Un bon bricoleur pourrait installer ça dans une alim et sortir le résultat sur une prise USB et un minicontroleur avec un tout petit peu de mémoire pour stocker des mesures inutilisées ou les raffraichir en quantité suffisante pour l’usage par un OS, et un tout petit pilote pour lire les données de ce port USB et raffraichir le générateur aléatoire de l’OS, puis quelques tweaks poru que ce générateur demande des mesures plus souvent à ce petit appareil.



Autre paliatif en attendant: quand on ne prend pas de photo sur un smartphone, régler l’appareil photo &nbsp;à la limtie de la saturation pour lui faire observer les zones “noires” avec une forte amplification. Le résultat c’est du bruit comparable à ce qu’on voit dans les trames d’une photo numérique non traitée (on en voit moins dans les photos JPEG, là on parle de photos en mode “RAW”). Idem en utilisant le micro en suramplification (ça marchera dans une atmospère sonore pas trop bruyante), ou en mettant le micro devant un ventilo de refroidissement sur les PC de bureau et notebooks.



Mais sans ça nos PC et smartphones ont des générateurs aléatoires très faibles. Générer des clés RSA sur ces appareils produit des clés cassables si on dispose d’autres clés générées de la même façon (et faciles à obtenir par des tiers pas tellement de confiance).



Toute la sécurité des algos à clé publiques (SSL, HTTPS…) tient à la qualité du générateur aléatoire de votre machine. Mais elle est très médiocre.

&nbsp;


Un article Wikipédia à lire sur la question des CSPRNG:



Cryptographically_secure_pseudorandom_number_generator



(sur la wikipédie anglophone).


C’est bel et bien beau, tout ça, mais quel rapport avec la choucroute ? Le chiffrement intégral d’iOS ou d’Android se font par clés symétriques.


Rooter / jailbreaker un téléphone comporte ses parts de risque aussi, à ne pas oublier.