Critique du Chiffrement Whatsapp

Depuis quelques semaines/mois, whatsapp a annoncé avoir déployé le support de la End2End Encryption, qui est le moyen de sécuriser par cryptage les communications entre les abonnées Whatsapp, de telle façon à ce que seuls les destinataires du messages puisse le décrypter et le lire, et ceci grâce au partenariat avec Open Whispers Systems à travers leurs librairie TextSecure (déjà déployée sur plusieurs solutions de messagerie sécurisée). Je vais reprendre ici les travaux de chercheurs allemands de HEISE.de qui ont regardé en détail ce nouveau chiffrement et sa façon de fonctionner ainsi que ces limitations et vulnérabilités. En fin d’article, un lien vers le droit de réponse du créateur de TextSecure.

Ce travail a été effectué par des chercheurs allemands de HEISE, (http://www.heise.de/security/), je vais essayer de simplifier, traduire et vulgariser leurs travaux et montrer les limites de l’implémentation actuelle de textsecure dans whatsapp.
Whatsapp n’étant pas ouvert, ces chercheurs ont utilisé intensivement la librairie python Yowsup (pour rappel, la même librairie utilisée dans mes précedents articles sur whatsapp). Pour celà, le problème a été abordé sur deux fronts : Ils ont analysé le flux qui va du smartphone vers les serveurs de whatsapp, et le flux reçu des serveurs whatsapp vers un terminal avec Yowsup. et Puisque Yowsup est très bien documenté et ouvert, ils ont pu adapté certaines lignes pour montrer le cryptage et le décryptage.

Mise en place de l’environnement de test

L’idée est ancienne : « Man In The Middle » Attack. A travers de l’arp spoofing, l’équipe de chercheurs a fait croire au smartphone qu’ils agissent en « routeur » afin de capturer le traffic en entier. A travers un plugin pour whatsapp, un dissector dans le jargon, qui simplifie la lecture des packets whatsapp (https://github.com/davidgfnet/wireshark-whatsapp), les chercheurs ont pu regarder ce qui se passe entre whatsapp et les serveurs. Cependant, seuls les messages de « management » étaient clairs, dans une sorte de protocol « Jabber-like ». J’ai pu vérifier il s’agit d’une autre implémentation open, FunXMPP, très documentée sur whatsapp et sur le GIT du dissector. Le contenu des messages était, comme prévu, du binaire illisible (probablement crypté par TextSecure).
NB : N’hésitez pas à me contacter si vous avez besoin de faire fonctionner yowsup, ou wireshark-whatsapp dissector for wireshark. La compilation de ces projets est une prise de tête phénomènale, mais on y arrive au bout de quelques jours.
Voici le schéma de l’installation :
Our lab setup: The smartphone sends messages to yowsup running on a desktop PC. On its way to the WhatsApp server, the data gets intercepted by a laptop using Wireshark. The laptop then sends the traffic on to the server.
A noter que dans ce lab, le whatsapp client sur le smartphone, discute avec un client virtuel sur yowsup.D’autres recherches montrent que whatsapp utilise un cryptage propriétaire, basé sur un algorithme RC4 connu pour ces failles. En plus, l’application utilise une clé, dérivée du mot de passe utilisateur, pour les messages entrants et sortant ce qui agrandit l’ampleur de l’attaque et de l’impact en cas de clé craquée. Cependant ce cryptage est là, d’après le discours, pour prévenir la collection massive d’information sur les réseaux.Ceci permetterait donc à whatsapp d’être la seule entitée capable d’offrir ce service de collecte de donnée, puisque jusqu’a très récemment, il n’y avait pas de cryptage E2E. Whatsapp n’a jamais officiellement documenté ce nouveau cryptage, ni comment est implémenté ce cryptage en addition au cryptage RC4. D’après le créateur de TextSecure, les messages seraient sécurisés si les deux parties supportent le E2E Encryption.

Yowsup peut être utilisé pour envoyer et recevoir des messages whatsapp entre un PC et les serveurs Whatsapp. La version actuelle de yowsup supporte un mode expérimental –moxie qui permet de démarrer le client whatsapp avec un support de la E2E Encryption. Ensuite, Yowsup comporte un bout de code « Axolotl Encryption » qui est un port de TextSecure. A travers le code ouvert de yowsup, ceci permetterait de mieux comprendre ce qui se passe.

This patch is used to keep tabs on yowsup during the encryption process of an incoming message.

Pour cette expérience, le code yowsup a été patché et modifié afin de montrer sur le output du terminal, le texte codé et décodé à la reception ( lien du patch ) . Ce patch permet, à la reception de montrer le contenu chiffré recu par yowsup, ce contenu est en effet converti, depuis le mode binaire en mémoire, en Hex Dump sur l’écran. Une comparaison avec le traffic intercepté par wireshark montre qu’en effet, c’est le même contenu chiffré envoyé par le téléphone.

Le schéma ci dessous explique le flux de décryptage de Yowsup.

Codeflow: This is how yowsup processes an incoming message that has been encrypted with TextSecure's encryption. The python-axolotl library is called to decrypt the ciphertext.

Le code de yowsup appelle ensuite axolotl library afin de décrypter le message, un autre changement dans le patch permet de montrer sur l’écran le message clair recu après décryptage par axolotl.
Les chercheurs ont conclu que les smartphones android envoient exclusivement du E2E Encryption aux recepteurs capables de cette même Encryption. Et ceci à travers TextSecure. Cependant, lorsque le test a été fait avec les clients iOS (iphone), les messages recus n’etaient pas protégés ainsi.
Our patched yowsup echo client shows the encrypted message coming in and then prints out the plaintext resulting from the decryption by the axolotl library.
Cette simple expérience montre que la E2E encryption n’est pas totale, et est désactivée lorsque certains critères sont atteints. La plus évidente est lorsque le B Number est un iphone, la E2E encryption est désactivée. La fonctionnalité est hardcoded sur whatsapp, nous ne savons pas à ce stade quels sont les critères exhaustifs qui l’activent ou la désactivent.Aussi nous ne savons pas si les clés générés par le client WhatsApp pour coder les messages, sont effectivement variables comme le suggère TextSecure, et Si ils sont supprimés du handset sous certaines conditions. MAis du moment que whatsapp peut forcer n’importe quel client à désactiver l’encryption, sans que l’utilisateur ne s’en rende compte (icone verrou activé sur l’écran par exemple), alors avoir la clé n’est pas si important. Le contrôle reste toujours chez Whatsapp.

Les chercheurs ont conclu que le réel problème avec la « endtoend encryption » de whatsapp, c’est que l’on ne sait jamais quand est ce qu’elle est activée et utilisée. Rajoutée à celà, le non engagement de Whatsapp à garantir cette fonctionnalité pour tout le monde, cette fonctionnalitée reste du « best effort ».
 

Dans un passionant échange REDDIT (https://www.reddit.com/r/Android/comments/34ecja/the_heise_security_team_investigated_whatsapps/cqtygha), Le créateur de TextSecure s’est défendu en disant que l’implémentation n’est pas encore finalisée et que whatsapp n’a pas encore sécurisé l’ensemble des communications dans l’ensemble des situations.
« We announced a partnership, not a finished deployment. »
A suivre ….
 

Pour reproduire le labo :

Wireshark : https://www.wireshark.org/
Yowsup : https://github.com/tgalal/yowsup
Wireshark-whatsapp dissector : https://github.com/davidgfnet/wireshark-whatsapp (plus simple a compiler en .so sur linux que en .dll sur windows …)


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *