{"id":162,"date":"2016-05-07T11:54:12","date_gmt":"2016-05-07T10:54:12","guid":{"rendered":"http:\/\/www.erroussafi.com\/blog\/?p=162"},"modified":"2020-05-18T01:20:15","modified_gmt":"2020-05-18T01:20:15","slug":"critique-du-chiffrement-whatsapp","status":"publish","type":"post","link":"https:\/\/www.erroussafi.com\/index.php\/2016\/05\/07\/critique-du-chiffrement-whatsapp\/","title":{"rendered":"Critique du Chiffrement Whatsapp"},"content":{"rendered":"<p>Depuis quelques semaines\/mois, whatsapp a annonc\u00e9 avoir d\u00e9ploy\u00e9 le support de la End2End Encryption, qui est le moyen de s\u00e9curiser par cryptage les communications entre les abonn\u00e9es Whatsapp, de telle fa\u00e7on \u00e0 ce que seuls les destinataires du messages puisse le d\u00e9crypter et le lire, et ceci gr\u00e2ce au partenariat avec Open Whispers Systems \u00e0 travers leurs librairie TextSecure (d\u00e9j\u00e0 d\u00e9ploy\u00e9e sur plusieurs solutions de messagerie s\u00e9curis\u00e9e). Je vais reprendre ici les travaux de chercheurs allemands de <a href=\"http:\/\/heise.de\">HEISE.de<\/a> qui ont regard\u00e9 en d\u00e9tail ce nouveau chiffrement et sa fa\u00e7on de fonctionner ainsi que ces limitations et vuln\u00e9rabilit\u00e9s. En fin d&#8217;article, un lien vers le droit de r\u00e9ponse du cr\u00e9ateur de TextSecure.<br \/>\n<!--more--><br \/>\nCe travail a \u00e9t\u00e9 effectu\u00e9 par des chercheurs allemands de HEISE, (<a href=\"http:\/\/www.heise.de\/security\/\">http:\/\/www.heise.de\/security\/<\/a>), je vais essayer de simplifier, traduire et vulgariser leurs travaux et montrer les limites de l&#8217;impl\u00e9mentation actuelle de textsecure dans whatsapp.<br \/>\nWhatsapp n&#8217;\u00e9tant pas ouvert, ces chercheurs ont utilis\u00e9 intensivement la librairie python <a href=\"https:\/\/github.com\/tgalal\/yowsup\">Yowsup <\/a>(pour rappel, la m\u00eame librairie utilis\u00e9e dans mes pr\u00e9cedents articles sur whatsapp). Pour cel\u00e0, le probl\u00e8me a \u00e9t\u00e9 abord\u00e9 sur deux fronts : Ils ont analys\u00e9 le flux qui va du smartphone vers les serveurs de whatsapp, et le flux re\u00e7u des serveurs whatsapp vers un terminal avec Yowsup. et Puisque Yowsup est tr\u00e8s bien document\u00e9 et ouvert, ils ont pu adapt\u00e9 certaines lignes pour montrer le cryptage et le d\u00e9cryptage.<\/p>\n<h4>Mise en place de l&#8217;environnement de test<\/h4>\n<section>\n<div class=\"article_page_text\">L&#8217;id\u00e9e est ancienne : &#8220;Man In The Middle&#8221; Attack. A travers de l&#8217;arp spoofing, l&#8217;\u00e9quipe de chercheurs a fait croire au smartphone qu&#8217;ils agissent en &#8220;routeur&#8221; 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\u00a0(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 &#8220;management&#8221; \u00e9taient clairs, dans une sorte de protocol &#8220;Jabber-like&#8221;. J&#8217;ai pu v\u00e9rifier il s&#8217;agit d&#8217;une autre impl\u00e9mentation open, FunXMPP, tr\u00e8s document\u00e9e sur whatsapp et sur le GIT du dissector. Le contenu des messages \u00e9tait, comme pr\u00e9vu, du binaire illisible (probablement crypt\u00e9 par TextSecure).<br \/>\nNB : N&#8217;h\u00e9sitez pas \u00e0 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\u00eate ph\u00e9nom\u00e8nale, mais on y arrive au bout de quelques jours.<br \/>\nVoici le sch\u00e9ma de l&#8217;installation :<br \/>\n<a class=\"grossbild cbox_gallery cboxElement\" href=\"http:\/\/www.heise.de\/ct\/artikel\/Keeping-Tabs-on-WhatsApp-s-Encryption-2630361.html?view=zoom;zoom=1\" data-grossbildsrc=\"\/ct\/imgs\/04\/1\/4\/8\/1\/3\/1\/0\/mitm-en-e7cb3403e9f35f66.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.heise.de\/ct\/imgs\/04\/1\/4\/8\/1\/3\/1\/0\/mitm-en-deb2e0c80bd3483e.png\" alt=\"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.\" width=\"400\" height=\"300\" data-zoom-src=\"\/ct\/imgs\/04\/1\/4\/8\/1\/3\/1\/0\/mitm-en-e7cb3403e9f35f66.png\" \/><\/a><br \/>\nA noter que dans ce lab, le whatsapp client sur le smartphone, discute avec un client virtuel sur yowsup.D&#8217;autres recherches montrent que whatsapp utilise un cryptage propri\u00e9taire, bas\u00e9 sur un algorithme RC4 connu pour ces failles. En plus, l&#8217;application utilise une cl\u00e9, d\u00e9riv\u00e9e du mot de passe utilisateur, pour les messages entrants et sortant ce qui agrandit l&#8217;ampleur de l&#8217;attaque et de l&#8217;impact en cas de cl\u00e9 craqu\u00e9e. Cependant ce cryptage est l\u00e0, d&#8217;apr\u00e8s le discours, pour pr\u00e9venir la collection massive d&#8217;information sur les r\u00e9seaux.Ceci permetterait donc \u00e0 whatsapp d&#8217;\u00eatre la seule entit\u00e9e capable d&#8217;offrir ce service de collecte de donn\u00e9e, puisque jusqu&#8217;a tr\u00e8s r\u00e9cemment, il n&#8217;y avait pas de cryptage E2E. Whatsapp n&#8217;a jamais officiellement document\u00e9 ce nouveau cryptage, ni comment est impl\u00e9ment\u00e9 ce cryptage en addition au cryptage RC4. D&#8217;apr\u00e8s le cr\u00e9ateur de TextSecure, les messages seraient s\u00e9curis\u00e9s si les deux parties supportent le E2E Encryption.<\/p>\n<h3 id=\"nav_open_source_to__2\" class=\"subheading\">Comprendre \u00e0 travers l&#8217;OpenSource<\/h3>\n<p>Yowsup peut \u00eatre utilis\u00e9 pour envoyer et recevoir des messages whatsapp entre un PC et les serveurs Whatsapp. La version actuelle de yowsup supporte un mode exp\u00e9rimental\u00a0&#8211;moxie qui permet de d\u00e9marrer le client whatsapp avec un support de la E2E Encryption. Ensuite, Yowsup comporte un bout de code &#8220;Axolotl Encryption&#8221; qui est un port de TextSecure. A travers le code ouvert de yowsup, ceci permetterait de mieux comprendre ce qui se passe.<\/p>\n<figure class=\"bild_zentriert bild_var2\"><a class=\"grossbild cbox_gallery cboxElement\" href=\"http:\/\/www.heise.de\/ct\/artikel\/Keeping-Tabs-on-WhatsApp-s-Encryption-2630361.html?view=zoom;zoom=2\" data-grossbildsrc=\"\/ct\/imgs\/04\/1\/4\/8\/1\/3\/1\/0\/yowsup-logging-patch-8f43f3b26df0bd70.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.heise.de\/ct\/imgs\/04\/1\/4\/8\/1\/3\/1\/0\/yowsup-logging-patch-7d304c71c1a2eb8d.png\" alt=\"This patch is used to keep tabs on yowsup during the encryption process of an incoming message.\" width=\"400\" height=\"265\" data-zoom-src=\"\/ct\/imgs\/04\/1\/4\/8\/1\/3\/1\/0\/yowsup-logging-patch-8f43f3b26df0bd70.png\" \/><\/a><figcaption><\/figcaption><\/figure>\n<p>Pour cette exp\u00e9rience, le code yowsup a \u00e9t\u00e9 patch\u00e9 et modifi\u00e9 afin de montrer sur le output du terminal, le texte cod\u00e9 et d\u00e9cod\u00e9 \u00e0 la reception ( lien du\u00a0<a href=\"https:\/\/gist.github.com\/fabsh\/723240acce6916367865\" target=\"_blank\" rel=\"external noopener noreferrer\">patch<\/a>\u00a0)\u00a0. Ce patch permet, \u00e0 la reception de montrer le contenu chiffr\u00e9 recu par yowsup, ce contenu est en effet converti, depuis le mode binaire en m\u00e9moire, en Hex Dump sur l&#8217;\u00e9cran. Une comparaison avec le traffic intercept\u00e9 par wireshark montre qu&#8217;en effet, c&#8217;est le m\u00eame contenu chiffr\u00e9 envoy\u00e9 par le t\u00e9l\u00e9phone.<\/p>\n<\/div>\n<p>Le sch\u00e9ma ci dessous explique le flux de d\u00e9cryptage de Yowsup.<\/p>\n<div class=\"article_page_text\">\n<figure class=\"bild_zentriert bild_var2\"><a class=\"grossbild cbox_gallery cboxElement\" href=\"http:\/\/www.heise.de\/ct\/artikel\/Keeping-Tabs-on-WhatsApp-s-Encryption-2630361.html?view=zoom;zoom=4\" data-grossbildsrc=\"\/ct\/imgs\/04\/1\/4\/8\/1\/3\/1\/0\/codeflow-en-706b0c108f0eee2e.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.heise.de\/ct\/imgs\/04\/1\/4\/8\/1\/3\/1\/0\/codeflow-en-8350ff66925aefe8.png\" alt=\"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.\" width=\"400\" height=\"250\" data-zoom-src=\"\/ct\/imgs\/04\/1\/4\/8\/1\/3\/1\/0\/codeflow-en-706b0c108f0eee2e.png\" \/><\/a><\/figure>\n<p>Le code de yowsup appelle ensuite axolotl library afin de d\u00e9crypter le message, un autre changement dans le patch permet de montrer sur l&#8217;\u00e9cran le message clair recu apr\u00e8s d\u00e9cryptage par axolotl.<br \/>\nLes chercheurs ont conclu que les smartphones android envoient exclusivement du E2E Encryption aux recepteurs capables de cette m\u00eame Encryption. Et ceci \u00e0 travers TextSecure. Cependant, lorsque le test a \u00e9t\u00e9 fait avec les clients iOS (iphone), les messages recus n&#8217;etaient pas prot\u00e9g\u00e9s ainsi.<br \/>\n<a class=\"grossbild cbox_gallery cboxElement\" href=\"http:\/\/www.heise.de\/ct\/artikel\/Keeping-Tabs-on-WhatsApp-s-Encryption-2630361.html?view=zoom;zoom=3\" data-grossbildsrc=\"\/ct\/imgs\/04\/1\/4\/8\/1\/3\/1\/0\/echoclient-encryption-logging-56a23c87aef4cdbf.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.heise.de\/ct\/imgs\/04\/1\/4\/8\/1\/3\/1\/0\/echoclient-encryption-logging-9ccbce057a1f9d26.png\" alt=\"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.\" width=\"400\" height=\"262\" data-zoom-src=\"\/ct\/imgs\/04\/1\/4\/8\/1\/3\/1\/0\/echoclient-encryption-logging-56a23c87aef4cdbf.png\" \/><\/a><br \/>\nCette simple exp\u00e9rience montre que la E2E encryption n&#8217;est pas totale, et est d\u00e9sactiv\u00e9e lorsque certains crit\u00e8res sont atteints. La plus \u00e9vidente est\u00a0lorsque le B Number est un iphone, la E2E encryption est d\u00e9sactiv\u00e9e.\u00a0La fonctionnalit\u00e9 est hardcoded sur whatsapp, nous ne savons pas \u00e0 ce stade quels sont les crit\u00e8res exhaustifs qui l&#8217;activent ou la d\u00e9sactivent.Aussi nous ne savons pas si les cl\u00e9s g\u00e9n\u00e9r\u00e9s par le client WhatsApp pour coder les messages, sont effectivement variables comme le sugg\u00e8re TextSecure, et Si ils sont supprim\u00e9s du handset sous certaines conditions. MAis du moment que whatsapp peut forcer n&#8217;importe quel client \u00e0 d\u00e9sactiver l&#8217;encryption, sans que l&#8217;utilisateur ne s&#8217;en rende compte (icone verrou activ\u00e9 sur l&#8217;\u00e9cran par exemple), alors avoir la cl\u00e9 n&#8217;est pas si important. Le contr\u00f4le reste toujours chez Whatsapp.<\/p>\n<\/div>\n<\/section>\n<section>\n<div class=\"article_page_text\">\n<h3 id=\"nav_uncertainty__3\" class=\"subheading\">Conclusion<\/h3>\n<p>Les chercheurs ont conclu que le r\u00e9el probl\u00e8me avec la &#8220;endtoend encryption&#8221; de whatsapp, c&#8217;est que l&#8217;on ne sait jamais quand est ce qu&#8217;elle est activ\u00e9e et utilis\u00e9e. Rajout\u00e9e \u00e0 cel\u00e0, le non engagement de Whatsapp \u00e0 garantir cette fonctionnalit\u00e9 pour tout le monde, cette fonctionnalit\u00e9e reste du &#8220;best effort&#8221;.\n<\/p><\/div>\n<\/section>\n<h3 id=\"nav_uncertainty__3\" class=\"subheading\">Droit de r\u00e9ponse<\/h3>\n<p>Dans un passionant \u00e9change REDDIT (<a href=\"https:\/\/www.reddit.com\/r\/Android\/comments\/34ecja\/the_heise_security_team_investigated_whatsapps\/cqtygha\">https:\/\/www.reddit.com\/r\/Android\/comments\/34ecja\/the_heise_security_team_investigated_whatsapps\/cqtygha<\/a>), Le cr\u00e9ateur de TextSecure s&#8217;est d\u00e9fendu en disant que l&#8217;impl\u00e9mentation n&#8217;est pas encore finalis\u00e9e et que whatsapp n&#8217;a pas encore s\u00e9curis\u00e9 l&#8217;ensemble des communications dans l&#8217;ensemble des situations.<br \/>\n&#8220;We announced a partnership, not a finished deployment.&#8221;<br \/>\nA suivre &#8230;.<\/p>\n<h4>Pour reproduire le labo :<\/h4>\n<p>Wireshark :\u00a0https:\/\/www.wireshark.org\/<br \/>\nYowsup :\u00a0https:\/\/github.com\/tgalal\/yowsup<br \/>\nWireshark-whatsapp dissector :\u00a0https:\/\/github.com\/davidgfnet\/wireshark-whatsapp (plus simple a compiler en .so sur linux que en .dll sur windows &#8230;)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Depuis quelques semaines\/mois, whatsapp a annonc\u00e9 avoir d\u00e9ploy\u00e9 le support de la End2End Encryption, qui est le moyen de s\u00e9curiser par cryptage les communications entre les abonn\u00e9es Whatsapp, de telle fa\u00e7on \u00e0 ce que seuls les destinataires du messages puisse le d\u00e9crypter et le lire, et ceci gr\u00e2ce au partenariat avec Open Whispers Systems \u00e0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6817,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[9],"tags":[],"class_list":["post-162","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technique"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/www.erroussafi.com\/wp-content\/uploads\/2016\/03\/whatsapp-deconstruction-31.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/posts\/162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/comments?post=162"}],"version-history":[{"count":0,"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/posts\/162\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/media\/6817"}],"wp:attachment":[{"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/media?parent=162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/categories?post=162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.erroussafi.com\/index.php\/wp-json\/wp\/v2\/tags?post=162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}