lunes, enero 16, 2017

El BUG de WhatsApp que permite que te espíen mensajes... y te roben las llamadas de WhatsApp Call

Tras ver todos los casos de espionaje publicados tras los documentos filtrados por Edward Snowden, no hace falta decir que la sensibilidad de todo el mundo con el tema de la privacidad es alta. Por eso, los sistemas de mensajería cifrada extremo a extremo (e2e encryption) aparecieron por muchos rincones de Internet. WhatsApp fue uno de los que añadió esta capacidad - a pesar de que en iPhone la base de datos permanece sin cifrar en el dispositivo - a sus sistemas de comunicación, haciendo uso del protocolo que implementa Signal, la herramienta de mensajería con e2e encryption diseñada por Moxie Marlinspike.

Figura 1: El BUG de WhatsApp que permite que te espíen mensajes

Ahora, la polémica ha venido cuando el investigador de seguridad Tobias Boelter ha publicado un bug en WhatsApp que, por motivos de usabilidad, permite a un atacante acceder a los mensajes que no han llegado aún a su destinatario por la forma en la que la implementación de WhatsApp permite hacer regeneración de claves de cifrado automáticamente para usuarios offline. Esto es fácil de entender, vamos a verlo paso a paso, y nada complicado de implementar para aquellos que quieran espiar WhatsApp.

El bug de reenvío de mensajes en WhatsApp

A día de hoy WhatsApp usa cifrado e2e, por lo que cada conversación entre dos personas va cifrada con las claves públicas del destinatario. Es decir, cada mensaje que se cifre con la clave pública del destinatario solo podrá descifrarse si se posee la clave privada asociada, que es generada por cada usuario en el dispositivo. Esto quiere decir que, cuando una persona instala y configura WhatsApp en su teléfono, automáticamente se genera un par de claves pública y privada nuevas. La pública será enviada a todos los contactos y la privada permanece en el dispositivo. 

Cualquier contacto puede verificar, vía WhatsApp, que las claves de cifrado públicas que se están utilizando en la conversación son las correctas tal y como se explica en este artículo [Verificar claves de cifrado de contactos de WhatsApp] y además, cada usuario podrá activar en las opciones de WhatsApp->Seguridad la posibilidad de recibir un mensaje cada vez que se cambien las claves. Esta opción hay que ponerla siempre, como parte de las recomendaciones que existen para Proteger WhatsApp a prueba de balas, pero como vamos a ver aquí, no es suficiente.

Figura 2: Opciones de Seguridad de WhatsApp para recibir alertas

Ahora bien, ¿qué pasa si tú envías un mensaje a un terminal y este está apagado? Pues aquí viene el fallo en la implementación de WhatsApp. Supongamos el siguiente escenario. Yo soy un objetivo de un ataque porque soy un presidente de una empresa que está sufriendo un APT o un objetivo político de un gobierno que va a tomar un avión que le va a llevar de Madrid a Washington D.C. para una reunión. Mi teléfono va a estar en modo avión durante 7 u 8 horas, por lo que ningún mensaje que me envíen por WhatsApp me va a llegar.

Todos los mensajes que me envíen durante el tiempo que estoy en modo vuelo aparecerán en el terminal de los emisores con un solo tic, y en los servidores de WhatsApp cifrados con la clave pública de mi teléfono. Algo que por seguridad, podría haber verificado con todos mis contactos.

Figura 3: Verificación del código de cifrado con mis contactos

Ahora pongamos por un momento que los atacantes han conseguido una copia de la tarjeta SIM o han hecho un SIM Swapping, o si es el gobierno del país, ha solicitado un duplicado de la misma con una orden judicial. En ese momento la NSA - suponiendo que fuera ese gobierno USA y los tiempos de los que hablaban los documentos de Edward Snowden - podría registrar mientas el objetivo está volando, la cuenta de WhatsApp en un nuevo dispositivo. Ahí viene el fallo.

Pues bien, la característica implementada por Facebook hace que, automáticamente los servidores de WhatsApp recibirán una notificación de cambio de clave pública del destinatario de los mensajes y, para que la experiencia de usabilidad sea mejor, pide a todas las apps de WhatsApp de los emisores de los mensajes que cifren y envíen - automáticamente y sin capacidad de pararlo - otra vez todos los mensajes que aún no han sido entregados, pero cifrados con la nueva clave pública del destinatario.

Si el usuario ha activado la opción de recibir alertas de seguridad, entonces DESPUÉS de haber enviado los mensajes, el emisor recibirá una alerta que explica que se han cambiado las claves - probablemente por un cambio de dispositivo - y que puede verificarlas otra vez.

Figura 4: El emisor recibe la alerta después, pero el mensaje se envía antes

Esto es un bug que permite a un atacante interceptar mensajes de sus víctimas en ciertas circunstancias, pero la queja de los expertos en criptografía no es solo referida a este fallo - que WhatsApp puede cambiar simplemente pidiendo confirmación de que quiere enviar los mensajes al destinatario con la nueva clave ANTES de enviarlos, sino que al ser una app de código cerrado, es difícil verificar todo el proceso. 

No es el caso, pero una app de cifrado e2e en mensajería podría decir en su interfaz que está usando unas claves, y luego estar usando otras o, directamente, enviar el mismo mensaje varias veces y cada vez cifrado con una clave distinta. Por eso, muchas organizaciones activistas recomiendan no usar bajo ningún concepto software criptográfico que no sea OpenSource para que pueda ser revisado completamente el proceso.

Figura 5: Recomendación de The Guardian para dejar de usar WhatsApp

Como se puede ver online, el periódico The Guardian recomienda directamente NO utilizar WhatsApp si te preocupa de verdad el cifrado e2e en los mensajes y dejar de usarlo, ya que esta forma de funcionar no garantiza que el mensaje que has enviado con una clave de cifrado vaya a ser el que se utilice al final para ello. No hay que olvidar que The Guardian fue el primer medio que publicó los documentos filtrados por Edward Snowden, y que Facebook aparecía como parte de los participantes del programa PRISM para espiar de forma automática perfiles en Internet.

Figura 6: Diapositiva del programa PRISM filtrada por The Guardian

En el vídeo de la demostración puede verse cómo funciona el proceso completo, y además es muy fácil de probar. Puedes además acceder a las diapositivas de Tobias Boelter que explica paso a paso el bug y al blogpost [WhatsApp Retransmission Vulnerability] que lo detalla.

Figura 7: Vídeo de la demostración del bug por Tobias Boelter

Internamente hemos probado el bug, y hemos hecho este vídeo que explica exactamente lo mismo pero en Español, para que no se quede nada sin entender de lo que está sucediendo.


Figura 8: Demostración del bug explicada en Español

Este comportamiento explica muchas de las preguntas que yo hacía en el caso de la desaparición de una joven en la que los cuerpos de seguridad del estado podrían haber accedido a los mensajes no recibidos de la chica desaparecida, y por lo tanto podrían llegar a conseguirse los logs de los envíos y reenvíos - direcciones IPs, ubicaciones, y horas  - de los terminales usados por las personas que enviaron los mensajes mientras el terminal estaba apagado.

Figura 9: Mensaje de Signal antes de re-enviar los mensajes

Como nota final, hay que decir que Signal, la herramienta original de cifrado de mensajes e2e no tiene este bug en la implementación y avisa de esta circunstancia antes de que se envíe el mensaje al destinatario con las nuevas claves recibidas.


Figura 10: Demostración del bug con WhatsApp Call

Actualización: Como se puede ver, el bug también afecta al servicio de WhatsApp Call, por lo que es posible recibir las llamadas que se envían cuando el terminal está offline. En el vídeo, el investigador Tobias Bolter hace la demostración

Saludos Malignos!

15 comentarios:

Erick Villalobos aleman dijo...

Increíble fallo, gracias por Aserlo más entendible chema. Un saludo y un fuerte abrazo desde México.

Antonio Calderon dijo...

Muy buenas noticias xd

David dijo...

Esto se mitigaría sí la persona utiliza doble factor de autenticación en Whatsapp, qué aparte de pedirle la confirmación por SMS o SIM, le pida un código que sólo el sepa, así los ataques de clonación de SIM se podrían evitar

Antonio Alarcón Izquierdo dijo...

Como siempre Chema una genial explicación. Gracias por la información y la buena exposición de la misma.
(A las 6:19 a.m. vaya madrugón)
Que tengas buen día.

JOSTC dijo...

Interesante esta noticia, gracias Chema!!!

Adan Condori C. dijo...

Gracias bro, mientrad unos duermen otros investigan.

Juan P B dijo...

Interesante artículo Chema Saludos desde México

Miguel Martin dijo...

Gracias por explicarlo de forma que los no entendidos consigamos entenderlo.
Es una suerte contar con blogs como el tuyo.

Brazzini Ogosi Cahuana dijo...

Como Chema dice... cuando una vulnerabilidad se publica es para que se corrija, supongo que WhatsApp lo arreglará en su próxima update no ?.

Rubén dijo...

No sé si lo he entendido bien, pero según la descripción del problema lo que se hace es suplantar totalmente al terminal destinatario sin que lo sepan los emisores... Pero en el momento que el terminal destinatario se conecte de nuevo a la red, ¿qué ocurre? Porque la clave pública que tendrán los emisores no se corresponderá con la clave privada del destinatario legítimo, ¿no?
Por lo pronto entiendo que los mensajes interceptados no le llegarán jamás al destinatario legítimo ¿verdad?

Luis Fernandez dijo...

igual como dice Ruben me deja con la duda de que pasa cuando el telefono suplantado vuelve a estar en linea y ya hay llaves diferentes en ambos dispositivos, volveran a generarse llaves del telefono real ? y si fuese asi el clonado entonces dejaria de recibir y solo valdria el rato que estuvo apagado el real ? de pronto me falta algo pero si fuese algo asi pues no lo veo tan util

Luis Palacios dijo...

No es un bug, es una decisión de diseño en la que se dió más prioridad a la usabilidad que a la seguridad. Tanto Whatsapp como Whisper Systems eran conscientes de que esta característica había sido introducida.

Whatsapp lo utilizan personas de todo tipo, tamaño y condición, incluídas personas mayores con conocimientos básicos de informática a los que un pop-up alarmista como el de Signal puede significar que desinstalen la aplicación. Personas que pasarían a enviar SMS en claro porque "El propio Whatsapp me ha dicho que no era seguro enviar el mensaje".

Las conclusiones son las mismas que las de hace un año: Signal sigue siendo la aplicación de mensajería más segura. Whatsapp implementa el protocolo Signal, pero reduciendo la seguridad en ciertos casos extremos para que sea intuitiva y fácil de usar. Y, para el común de los mortales, eso es algo bueno.

Armando Freire dijo...

Es para Chema.. oye Chema x lo que e visto.. y resumí .. me gustaría aprender para saber contraatacar al ULIN. el pinche Facebook ,Whatsapp. Twitter, esos valen madre..X si aprendes como usar ULIN .. creo ke es más fácil .. kiero defenderme .. porque si me attaca una persona pues la mayoría usamos un cel. Y esa persona se hacer pasar x mi ,puede checar mi cuenta banco, mi perfil Facebook y más mi correo.. x todos lo ke tenemos una cuenta bancaria .Tenemos un correo electrónico.. así ke .. creo ke ya es difícil protegerse..

Ten Leal dijo...

Excelente bien explicado.

Angel Blanco Loureiro dijo...

Buenas tardes Chema! Ha salido hoy en los medios que se ha descubierto una vulnerabilidad en whatsapp web y que te pueden espíar facilmente las conversaciones. Bueno, como en las noticias que he visto no explican en que consiste no sé hasta que punto es una información fiable.Corremos peligro utilizando Whatsapp web en una LAN que no nos pertenece? Un salúdo y Felicidades por la labor en este blog.

Entrada destacada

El creador de WannaCry es fan de Messi, no es muy ambicioso y usa Microsoft Word habitualmente en coreano

Esta semana, nuestros compañeros del laboratorio de ElevenPaths terminaban por publicar su análisis de WannaCry desde el punto de vista d...

Entradas populares