Archive for C.A.

SSL Inspector

Encore un matin difficile, j’ouvre un oeil pour entrevoir et le monde et force est de constater qu’il n’est pas mieux qu’hier.

Je vais parler d’un truc que j’ai découvert seulement cette semaine mais ça fait au moins un an que ça existe, voire plus…

Je suis tombé sur ce petit article du Wall Street Journal :

 http://projects.wsj.com/surveillance-catalog/#/

Ce petit article parle des outils développés par le secteur privé pour faciliter, automatiser l’espionnage. L’espionnage de qui ? L’espionnage de toute la planète.
On sait déjà que facebook et la CIA sont liés, on sait aussi que vos tweet se retrouvent dans des bases de données pour être analysées… On sait moins que les blog wordpress (comme celui-ci) font aussi partie de ce qui est analysé, mais y’a aussi linkedin, flickr, youtube… Bref.

Lorsque ce matin donc, chaussé de mes deux yeux de campagnards naïf, je découvris avec désespoir ce que l’homme est en train de faire de ce que l’on croyait tous être un terrain de liberté, j’ai vraiment eu envie de me recoucher.

MAIS NON ! Captain Posix ne peut sauver le monde mais il doit vous expliquer pourquoi il est pourri. Heureusement il existe une parade à cette mise en place crapuleuse d’espionnage.

Je dresse le pavillon et j’attaque les explications

à l'attaque

D’abord, sachez que les communications qui voyagent sur le net, via le protocole http, sont en clair. N’importe qui se trouvant entre vous et le site que vous souhaitez contacter peut voir ce que vous faites avec internet.

La chose n’était plus possible avec le https, car votre browser crypte vos communications jusqu’au serveur avec lequel vous communiquez. Ce qu’un espion peut alors découvrir c’est simplement que vous allez sur le site. Après il ne peut pas lire ce que vous faites dessus.

La sécurité du https est assurée par le SSL.

Si vous êtes un webmaster et que vous voulez implémenter le SSL vous devez mettre un certificat sur votre site internet avec la clé privée associée. Dans ce certificat se trouve la clé publique. ce certificat (et donc cette clé publique) est envoyé au client et le client crypte une clé de session (et donc symétrique) grâce à cette clé publique et l’envoie au serveur. Le serveur est le seul a pouvoir voir cette clé symétrique car il possède la clé privée qui correspond à la clé publique.

Le serveur et le client commencent à parler de manière cryptée avec une clé sur laquelle ils sont d’accord.

Ca tout le monde peut le faire. Mais si tout le monde le fait sans passer par un CA que votre OS connait, alors vous avez des gros avertissements dans votre browser du style

Faut se casser... ou pas ???

Du coup, il faut d’abord générer un certificat et puis le faire signer par un CA que votre OS connait, style Verisign (qui se sont déjà fait hacké), Commodo (qui se sont déjà fait hacké). diginotar (alors eux, tellement hacké qu’ils en ont fait faillite…) Bref, le monde des CA est une vaste connerie qui ne tient plus la route depuis l’attaque du comodo hacker mais tant que les browsers suivent les trusts des platformes et que les platformes trustent les CA, on est pas sorti de la merde c’est moi qui vous le dit.

Voilà donc si le certificat qui est présenté par le site que vous tentez de contacter en https, et que ce certificat est signé par un CA que votre browser reconnait, alors vous n’avez pas de méchant avertissement et vous vous sentez protégé comme une colombe dans un bunker.

Maintenant présentation de la machine, voici la bête:

La belle bête

L’idée est d’espionner ce que vous faites sur des sites protégés par la couche SSL. Comment faire ? C’est relativement simple. ils implémentent l’attaque du milieu, donc ils se mettent entre vous et le serveur.

En HTTP c’est très très facile, même si on était pas là au début de la communication, il suffit de se mettre au milieu et de prendre tous les paquets qui arrivent d’un côté , de les analyser, puis de les balancer de l’autre côté. Impossible de constater qu’on est écouté.

En HTTPS on ne peut pas faire ça, si on se met au milieu quand la conversation a commencé, on ne sait rien lire car c’est crypté, on a pas eu la clé symétrique d’encryption, donc il faut être là au moment de l’établissement de la connexion.

Comment ça se passe ?

Comme je vous l’ai expliqué il faut avoir un complice, l’employeur, qui a accepté d’installer sur toutes les machines des employés le certificat du CA de la machine SSL Inspector (relativement facile via des updates automatiques windows…)

L’employé va vouloir alors se connecter sur le site https://mail.google.com (l’adresse gmail)

Le SSL Inspector, va recevoir cette demande vu qu’il est au milieu et intercepte TOUT le traffic des employés.

Le SSL Inspector va LUI-MEME contacter le site gmail pour obtenir le certificat. Ce certificat il va le REFABRIQUER complètement. Un certificat est consititué de données telles :

- Le site à qui il appartient

- La date de validité du certificat

- Les références de la société

- …

Tout ça va être recopié dans un nouveau certificat. ce certificat va être signé par le CA du SSL Inspector, ce CA qui a été installé par l’employeur sur toutes les machines des employés.

Le SSL va envoyer ce certificat à l’employé qui veut se connecter et le client va l’accepté puisqu’il truste ce CA. La vraie communication avec gmail est en réalité établie avec le SSL Inspector uniquement.

Le flux pirate

Le moyen de voir que c’est une écoute illégale c’est d’ouvrir le certificat de gmail et de constater que c’est bien le CA Thawte qui l’a certifié, et de remonter la chaine de certification vous même…mais personne ne fait ça…

Alors maintenant cet exemple il est “basique” parce que c’est un espionnage d’une société avec un complice etc…

Mais il y a plus simple… Et SI le gouvernement achetait simplement un sous-CA à verisign par exemple… Et qu’il foutait cette putain de boite chez un ISP ? Hein ? Au hasard là, comme ça… Et SI un groupe mal intentionné achetait les clés privées qu’un hacker aurait dérobé chez un CA trusté par les plateformes ? Faut pas aller chercher loin, le cas du comodo hacker est un exemple d’un gars qui a fait des tas de trucs dans le dos des CA et qui s’en est vanté.

…Mais combien sont restés discrets ???

Heureusement, il y a encore un moyen d’échapper à ce contrôle. C’est Convergence. Je vous renvoie à ce post pour plus d’info

 

 

Convergence peut-il remplacer les CA

Comme je l’ai expliqué dans un post précédent, on est dans la merde.

Au niveau des CA, la confiance n’est plus là. On sait qu’une solution SSL est une bonne solution (malgré ce post, sachez que l’attaque est très difficile à mettre en oeuvre), on sait que le SSL (maintenant appelé TLS) est évolutif, qu’il est patché, que les browsers suivent (relativement) bien ses évolutions.

Le problème c’est cette notion d’identité du site, comment savoir qu’un site est bien le site qu’il prétend être. Les CA devaient résoudre ce problème. Les CA signent les certificats des sites qui sont dits “de confiance”, lorsque l’on s’adresse à un site et que l’on reçoit son certificat, on vérifie la signature grâce aux CA référencés dans ce certificat. Maintenant les CA sont hackés, alors on fait comment nous pour savoir que la personne qui se prétend être amazon.fr est bien amazon.fr ?

Imaginons l’attaque type du mec qui veut vous voler de l’argent via votre site bancaire préféré : https://www.mabanque.com

Ce qu’il devrait se passer, dans un monde bisounours:

Un monde plein de bisous

1- Je me connecte sur le site de ma banque https://www.mabanque.com.

2- Ma banque reçoit ma demande de connexion sécurisée et m’envoie son certificat.

3- Je reçoit le certificat, je constate qu’il est signé par une entité en qui j’ai confiance, Verisign par exemple, je vérifie la signature, elle est ok.

4- Je crée une clé symétrique de session qui va être utilisée comme clé pour crypter toutes les informations que nous allons nous échanger.

5- Je crypte cette clé avec la clé publique qui se trouve dans le certificat de ma banque. Cette clé ne peut donc être décryptée qu’avec la clé privée du certificat que seule ma banque connaît.

6- J’envoie la clé cryptée à ma banque et on commence la transaction cryptée avec ma clé de session qu’à présent seuls ma banque et moi connaissons.

Et voilà le travail !

 Ce qu’il se passe quand les CA sont corrompus comme dans le monde réel – Attaque 1.

un monde réel

Dans cette première attaque, on fait du phishing (hameçonnage). C’est à dire qu’on va vous envoyer un mail en disant que vous devez vous connecter sur le site de votre banque pour contrôler vos dernières transactions, et dans ce mail, l’adresse de la banque https://www.mabamque.com.

Oh mon Dieu, ma baMque.com et non ma baNque.com, évidemment on a pas fait gaffe, on clique sur le lien, et là vous êtes sur un site qui est un site de hacker qui ressemble comme deux gouttes d’eau à votre site bancaire.

Comme vous vous connectez en https, vous recevez le certificat de mabaMque.com. Il passe la validation, bien entendu puisque les CA sont corrompus et que n’importe qui a fait signer ce certificat. Vous entamez votre transactions avec le hacker qui n’a plus qu’à se baisser pour ramasser …

Est-ce que la nouvelle solution Convergence va vous aider dans ce cas précis ? la réponse est NON.

 Ce qu’il se passe quand les CA sont corrompus comme dans le monde réel – Attaque 2.

Un monde pourri

Et bien une autre attaque, plus vicieuse celle là, va vous hacker votre DNS. En gros, il va vous faire croire que https://www.mabanque.com est à l’adresse IP XX.XX.XX.XX et cette adresse est contrôlée par le hacker.

Pour hacker la DNS, plusieurs solutions. On empoisonne le cache de votre machine, car on ne demande pas tout le temps les ip des sites, on garde cette info en mémoire. Pour savoir ce que vous avez en cache sous windows, faites

ipconfig /displaydns

Sous Linux, c’est plus compliqué car par défaut, y’a pas de cache DNS en local.

On peut empoisonner le cache DNS plus haut dans la chaîne, soit aller sur votre modem qui cache aussi du DNS, soit sur votre ISP, soit encore plus haut …

Une fois que le DNS est corrompu (où que ce soit), vous allez vous connecter sur le site https://www.mabanque.com (sans faute) mais vous allez être redirigé sur un site pirate. Vous allez demander le certificat du mauvais site, mais comme le CA est corrompu et que le pirate a fait signer son certificat de manière frauduleuse, votre browser va confirmer que vous êtes sur un site de confiance. Le pire dans tout ça, c’est que vous êtes innocent, vous n’avez pas fait d’erreur, vous ne vous êtes pas fait infecté (sauf si le cache DNS a été empoisonné seulement localement) et pourtant, vous voilà en train de faire des versements vers la mafia russe.

Est-ce que la nouvelle solution Convergence va vous aider dans ce cas précis ? la réponse est OUI.

Ce que Convergence peut faire pour vous

Convergence vient à votre secours

Convergence vient à votre secours

Convergence est un petit outil, pour l’instant présenté uniquement sous la forme d’un add-on mozilla firefox, qui vous permet, lorsque vous surfez, de demander à des tiers si ils voient les mêmes certificats que vous.

En gros, si je vais sur le site https://www.mabanque.com, je reçois le certificat. Ce certificat, au lieu de l’utiliser ou de vérifier sa signature (donc la signature du CA qui l’a émis), je vais envoyer le fingerprint du certificat ainsi que le lien qui va avec à plusieurs “notaires” autour de la planète. Ces “notaires” vont faire la même chose que moi, c’est à dire qu’ils vont se connecter sur le site https://www.mabanque.com et recevoir le certificat. Si le certificat (le fingerprint, l’empreinte) que eux reçoivent est le même que celui que je leur ai transmis, alors ils me réponde “Ok”. Sinon, ils me renvoient un code d’erreur. Ca peut être site injoignable, impossible de processer la demande, il me manque des infos dans votre demande ou bien l’erreur grave : Les certificats ne correspondent pas.

Ces notaires peuvent être configurés par n’importe quel site web. Il s’uffit d’installer le programme et de configurer un port d’écoute. Une fois que c’est fait, le potentiel notaire doit générer une paire de clé, et publier sa clé PGP.

En gros, ça donne un fichier avec l’extension notary. Il suffit de cliquer dessus pour ajouter ce notaire à votre liste de notaire

La liste des notaires

 

Toutes les infos sur ce projet ici :

Pour créer son notaire:

https://github.com/moxie0/Convergence/wiki/Running-a-Notary

Pour comprendre le project de la voix de son créateur:

 

Les CA en fin de vie…

Pourquoi, un jour, avons nous créé les Certification Authorities ?

Et bien parce que nous souhaitions rendre le traffic SSL inviolable. Nous souhaitions faire d’une connexion SSL, du HTTPS en gros, une transaction authentifiée, sécurisée et intègre.

Sans le https, les attaques Man in the middle étaient extrèmement faciles.

Attaque man in the middle

Parce qu’en réalité, si vous ne faites pas de HTTPS, mais que vous restez dans le classique HTTP, rien de plus facile que de pirater la DNS, vous faites donc croire à votre victime que l’adresse www.amazon.fr est à l’IP XX.XX.XX.XX (évidemment cette IP c’est la votre) et la victime vient sur votre adresse, pensant être sur amazon. Vous, vous recevez les paquets et vous les transmettez à amazon.fr (le vrai), mais en attendant vous obtenez toutes les informations sensibles de la victime comme ses mots de passes,…et après tout, pourquoi ne pas acheter un petit album sur le dos de sa victime ???

Ca c’est dans le mode HTTP. Dans le schéma HTTPS et donc d’une connexion avec Certificat et donc CA, que se passe-t-il ?

En réalité, vous vous addressez par exemple à Amazon.fr, vous demandez le certificat d’amazon.fr, Amazon vous l’envoie, vous regardez qui l’a signé, vous constatez que c’est par exemple Verisign (c’est notre fameux CA), vous faites contrôler la signature, ensuite vous vérifiez la validité du certificat, si tout est en ordre, vous cryptez la clé de session avec la clé publique de ce certificat qu’Amazon vous a envoyé.

Là, le Man In The Middle il ne peut plus rien faire. Parce que même si il a bien joué son coup, il ne va pas pouvoir décrypter la clé de session utilisée pour encrypter tout le traffic car seule la clé privée correspondant au certificat en aura le pouvoir. Ce certificat a été signé par Vérisign qui avant de le signer a vérifié les données administratives et légales d’Amazon, par exemple en lui envoyant des lettres postales, en vérifiant son numéro de TVA, etc…

Pourtant sans faille en apparence, ce modèle est en fin de vie…pourquoi ?

Un pirate va tout changer

Le comodo Hacker est passé par là. Ce pirate va altérer la confiance que nous avions tous dans ce domaine parce qu’il a décidé de hacker des CA.

Il a commencé par Comodo (d’où son surnom de Comodo hacker) et il a fait signer des certificats au nom de Comodo.

Le mauvais certificat, maintenant révoqué

Du coup, la chaine de confiance est rompue. Si le comodo hacker vous emmène sur un site foireux ou bien vous pollue avec un addon firefox, vous pensez que le certificat est valide.

Après, le comodo hacker, il fait pire que ça, il corrompu plusieurs CA. Il vole carrément les clés privées des CA de diginotar, le CA utilisé par la hollande pour signer les certificats des cartes d’identités électroniques…

Diginotar Révoqué

 

Donc bon, vous l’avez bien compris, l’idée de protéger la connexion “end to end” du client au serveur, était assurée par le petit côté “tiens, je reçois ce certificat d’amazon qui me prétend etre signé par toi, toi qui es une entité en qui j’ai confiance, peux tu vérifier la signature ?” ne tiens plus la route si tout le monde peut se faire passer pour “l’entité en qui j’ai confiance”

le comodo hacker prétend avoir corrompu trois autres CA dont on ne connait pas l’identité, on est donc probablement en train de se faire infecter de tous les côtés. Le pire est bien entendu de corrompre le CA qui signe les requêtes des microsoft updates. Si vous vous faites hacker votre DNS et que votre Windows contacte un faux service d’update, le certificat présenté à windows va passer la validation de signature et là c’est la cata, au lieu de vous installer les updates sur votre machine, le microsoft update vous installe des virus et pourquoi pas d’autres CA que votre plate-forme va truster.

On est dans la merde…