Robert Graham a expliqué sur le blog Errata Security comment il a pu obtenir la clé privée du certificat Superfish. Je comprends que les attaquants peuvent désormais utiliser cette clé pour générer leurs propres certificats qui seront signés par l'autorité de certification Superfish.
La même attaque ne fonctionnera-t-elle pas sur d'autres certificats racine déjà sur un ordinateur? Pourquoi la clé privée se trouvait-elle sur l'ordinateur en premier lieu?
À moins que le logiciel malveillant Superfish n'ait été installé sur votre système (ce qui pourrait être le cas si vous avez acheté une machine Lenovo), vous n'avez pas à vous inquiéter. Cette attaque a fonctionné parce que le secret qu'elle a révélé était nécessaire pour que le logiciel malveillant détourne les données; cela ne fait pas partie de la façon dont les certificats légitimes sont authentifiés.
Il permet de comprendre les relations entre un certificat, une clé publique et une clé privée. Une clé privée est un numéro secret utilisé pour signer des messages avec des signatures numériques (ou pour crypter le trafic Web), et elle possède une clé publique correspondante qui peut être utilisée pour vérifier ces signatures. Un certificat est un document public qui contient une clé publique; les propriétaires de sites Web mettent leurs clés publiques sur les certificats et les envoient à des sociétés appelées autorités de certification (AC) qui les signent numériquement pour prouver que leurs certificats sont authentiques. Les signatures numériques garantissent que le document n'a pas été modifié, vous assurant que la clé publique qu'il contient est la véritable clé du site que vous visitez.
Les autorités de certification sont des entreprises auxquelles tout le monde accepte de faire confiance pour ne signer que des certificats provenant de sources légitimes. Ils ont également une paire de clés privée et publique. Ils gardent la clé privée très secrète, verrouillée dans un dispositif cryptographique sécurisé appelé HSM (Hardware Security Module) et en restreignent l'accès afin qu'elle ne puisse être utilisée que pour signer le certificat d'un client lorsque le client génère une nouvelle clé. Mais pour être utile, tout le monde sur le web doit connaître ses clés publiques. Ces autorités de certification mettent donc leur propre clé publique sur un certificat spécial et la signent avec leur propre clé privée ("auto-signature"). Ils envoient ensuite ces "certificats racine" auto-signés aux fournisseurs de navigateurs et aux fournisseurs de systèmes d'exploitation, qui les incluent avec leurs produits. Un vrai CA n'enverrait jamais, jamais, ses clés privées!
Les certificats racine d'autorité de confiance sont les documents qui valident tous les certificats de toutes les connexions effectuées par votre ordinateur. Ainsi, votre ordinateur doit leur faire confiance. Ce logiciel malveillant installe un certificat non fiable dans une position de confiance ultime, compromettant la sécurité de la machine en permettant à quiconque connaît cette clé de contrefaire un certificat pour n'importe quel site, cachant la preuve de leur altération.
Le malware abuse de sa position en générant de fausses clés publiques et privées pour chaque site que vous visitez; une fois connecté, il injecte sa charge utile dans la page du site Web. Afin que votre navigateur fasse confiance à ces fausses clés et ne vous avertisse pas, le logiciel malveillant génère un certificat falsifié qui incite votre navigateur à croire que les clés sont légitimes. Mais comme tout certificat, la contrefaçon doit être signée par une autorité de certification de confiance. Pour signer, le malware a besoin d'une clé publique et privée, comme une vraie CA. Étant donné que la fausse autorité de certification falsifie ces certificats directement à l'intérieur de votre ordinateur, la clé privée doit également se trouver à l'intérieur de votre ordinateur. Il est impossible de garder de telles choses secrètes pour le propriétaire de l'ordinateur, mais ils ont essayé en prenant quelques mesures rudimentaires pour le cacher. Le blog auquel vous avez lié décrit comment il a découvert le secret.
Aucune autorité de certification légitime ne permettrait jamais la fuite de leur clé privée, et encore moins de l'envoyer à un groupe de propriétaires d'ordinateurs aléatoires. Il y a eu un cas où une autorité de certification a eu sa clé secrète divulguée; sa réputation a été ruinée et elle a fait faillite en un mois. Puisque votre ordinateur ne contient pas les clés privées des autorités de certification légitimes, il y a n'est pas un secret pour un attaquant de se fissurer.
En raison du fonctionnement de Superfish, le certificat et sa clé privée doit être facilement extractible.
Superfish crée des certificats signés à la volée pour les connexions réseau qu'il intercepte, sans contacter un serveur central. Pour ce faire, la clé privée de la Superfish CA doit être intégrée au logiciel sous une forme facile à utiliser. Maintenant, ils n'avaient pas besoin d'en faire un fichier .pem en texte brut, mais même la meilleure sécurité n'aurait pas ralenti un effort de rétro-ingénierie sérieux de plus d'un jour ou deux.
Vous ne pouvez pas partager un secret avec le monde entier et ne vous attendre à ce que personne ne le trouve. Réel les autorités de certification protègent beaucoup mieux leur clé privée, en s'assurant qu'elle ne quitte jamais leur ordinateur de signature de certificat.
Superfish agit comme un homme au milieu. Il génère dynamiquement des clés auxquelles votre navigateur fait confiance pour les domaines que vous visitez. Pour générer ces clés, il a besoin du certificat privé, et bien que plus d'obscurcissement soit possible, il ne peut finalement pas cacher cette clé.
Ce qui pourrait être fait est de générer une paire de clés unique pour la paire de certificats sur chaque ordinateur sur lequel le logiciel est installé. Cela signifierait que l'extraction de la clé utilisée pour l'autorité de certification racine installée sur un ordinateur ne donnerait pas accès aux communications d'un autre ordinateur avec le logiciel installé. Ce n'est pas vraiment sorcier, et il est inexcusable que Komodia ne le fasse pas.
Je voudrais savoir si d'autres sociétés qui font ce genre de MITM émettent des clés uniques. Par exemple. localement, j'ai trouvé des certificats pour "Skype Click to Call" et "avast! WEb/Mail Shield", qui fonctionnent probablement de la même manière. J'ai vérifié que si je visite https://www.google.com/ mon navigateur voit un certificat signé par la clé avast.
Si vous suivez les meilleures pratiques en matière de protection des clés privées des certificats racine, cela n'aurait certainement pas été aussi simple.
Si je comprends bien le blog de Robert, le mot de passe qui protégeait la clé privée a été intégré sous forme de chaîne dans les fichiers binaires de l'adware livrés avec les ordinateurs portables. Cela revient à expédier votre coffre-fort avec votre clé scotchée au fond du coffre-fort. Pas une bonne idée! Le mot de passe n'était pas non plus très fort, ce qui signifie que même s'il n'était pas intégré dans le logiciel publicitaire pour que quiconque puisse le voir, une personne déterminée possédant des connaissances et des ressources pourrait être en mesure de le déchiffrer dans un délai raisonnable.
Le mot de passe pour extraire la clé privée était très probablement intégré dans l'adware pour permettre à l'adware de décrypter le trafic signé par le certificat racine Superfish à la volée pour injecter le balisage publicitaire que l'utilisateur verrait enfin sur la page Web.
Ce ne serait jamais le cas avec les autorités de certification responsables et je suis assez sûr qu'une autorité de certification doit se conformer à certaines normes, voire à des lois, qui leur interdiraient de faire une telle chose.
S'il était si facile d'obtenir les clés privées de tous les certificats racine, PKI n'aurait servi à rien et à protéger absolument.