Blog sobre seguridad informática, privacidad, anonimato, hacking ético, programación y sistemas operativos en general.

lunes, 16 de enero de 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.

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.





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.





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.





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.





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.





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.





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.





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.




0 comentarios:

Publicar un comentario