viernes, marzo 14, 2014

Espiar WhatsApp en Android

Estos días ha habido mucho revuelo en torno a la seguridad de WhtasApp en terminales Android y está todo el mundo revuelto sobre el tema. Espiar WhatsApp es algo que parece ser de máximo interés en Internet para los usuarios, así que han empezado a proliferar el número de aplicaciones maliciosas que han intentando robar las bases de datos de WhatsApp de los usuarios de diferentes formas.

Robar la base de datos de la SDCard de Android remotamente sin ser root

Hace mucho tiempo que se conoce que en la SDCard de los dispositivos Android se guarda una copia de la base de datos de WhatsApp en la ruta /sdcard/WhatsApp/Databases/msgstore.db.crypt que cualquier app instalada en el dispositivo con los permisos de READ_EXTERNAL_STORAGE

Esto ha permitido que haya muchas apps maliciosas que estén dirigidas únicamente a robar esta base de datos de WhatsApp. Cualquiera que sepa desarrollar para Android puede obtener el código necesario para hacer una app para Android que robe esta base de datos y la suba a un sitio web en el artículo que ha publicado HackPlayers al respecto. 

Figura 1: Código para robar y subir base de datos de WhatsApp para Android con una app maliciosa

Esa estructura de funcionamiento es la misma que utilizaba el juego para Android hecho por una empresa de Barcelona que decía "hacer una copia de seguridad" de tu base de datos de WhatsApp al mismo tiempo que la exponía públicamente para que cualquiera que pagara por ella pudiera ver los mensajes que hubiera.


Figura 2: Mensajes de WhatsApp robados con troyano profesional para Android

La diferencia entre este método y el de usar un troyano profesional para Android que robe todas las conversaciones de WhatsApp es que no es necesario ser root. En la mayoría de los casos en los que se usa un software de espionaje para Android, esto es un requisito indispensable.

El (des)cifrado del fichero mgstore.db.crypt

La base de datos de WhatsApp que se guarda en la SDCard de Android está cifrada, pero no con demasiada fortuna. En el caso de las versiones anteriores de WhatsApp este cifrado se hace con una clave única y conocida lo que permite descifrarla con un comando OpenSSL o haciendo uso directamente del servicio de Recover Messages.

Figura 3: Opciones de cifrado de WhatsApp en diferentes versiones (Android antiguos)

En las nuevas versiones, este cifrado ha cambiado y se ha hecho único, haciendo que la base de datos esté cifrada usando como clave la dirección de correo de gmail de la cuenta, así que además de tener la base de datos es necesario conocer la cuenta de correo electrónico - no parece demasiado complicado -. Alejandro Ramos ya ha publicado un script en Python para descifrarla y en XDA han publicado un código en Java que realiza el mismo proceso de descifrado. Nosotros lo hemos pasado a .NET para que esté también disponible en Recover Messages este descifrado.

#!/usr/bin/python
import sys
import hashlib
import StringIO
from M2Crypto import EVP

key = bytearray([141, 75, 21, 92, 201, 255, 129, 229, 203, 246, 250, 120, 25, 54, 106, 62, 198, 33, 166, 86, 65, 108, 215, 147])
iv = bytearray([0x1E,0x39,0xF3,0x69,0xE9,0xD,0xB3,0x3A,0xA7,0x3B,0x44,0x2B,0xBB,0xB6,0xB0,0xB9])

def decrypt(db,acc):
    fh = file(db,'rb')
    edb = fh.read()
    fh.close()
    m = hashlib.md5()
    m.update(acc)
    md5 = bytearray(m.digest())
    for i in xrange(24): key[i] ^= md5[i&0xF]
    cipher = EVP.Cipher('aes_192_cbc', key=key, iv=iv, op=0)
    sys.stdout.write(cipher.update(edb))
    sys.stdout.write(cipher.final())

if __name__ == '__main__':
   if len(sys.argv) != 3:
       print 'usage %s > decrypted.db' % sys.argv[0]
    else:
       decrypt(sys.argv[1],sys.argv[2])



Obtención de los mensajes borrados

En el caso de que se quiera hacer un análisis forense de la base de datos de WhatsApp, no solo habría que descifrar el fichero msgstore.db.crypt, sino que sería necesario analizar qué mensajes han sido borrados mirando las páginas perdidas de la base de dato SQLite del fichero resultante mgstore.db. El proceso de descifrado de msgstore.db.crypt y análisis de mensajes borrados en msgstore.db se puede hacer con Recover Messages o manualmente con un script.

Más opciones de privacidad en WhatsApp para Android

Con estos cambios en el cifrado de la base de datos de WhatsApp de la SDCard se ha añadido un poco más de privacidad y seguridad al hacer que sea necesario conocer la dirección de correo electrónico, pero no demasiado bajo mi opinión. Sin embargo, sí que se han añadido unas opciones de privacidad para poder decidir quién quieres que pueda ver la información de tu contacto.

Figura 4: Nuevas Opciones de Privacidad en WhatsApp para Android

No son exactamente iguales, pero ya existían en WhatsApp para iPhone opciones de privacidad similares que se echaban de menos en Android.

Conclusión

Con los últimos cambios en WhatsApp para Android no parecen que hayan cambiado demasiado las opciones que tiene un atacante para espiar WhatsApp, ya que lo único que necesitaría extra de ti es conocer tu dirección de e-mail configurada en el teléfono. Eso sí, si sabes quién es puedes hacer que no vea cuando te conectaste la última vez - pobre consuelo -.

Saludos Malignos!

23 comentarios:

Alister Amo dijo...

esta noche me lo he pasado teta rajando sobre el tema con fanboys varios.

Seguro que nadie mencionará el desmentido de Bas Bosschert sobre la manera en que las masas han querido entender su PoC sobre whatsapp.

Yo tambien he rajado de whatsapp, y lo hago, pero esta vez es una interpretacion deforme y una vision de tunel horrible sobre algo que es casi lógico cuando se entiende la arquitectura android. Tambien puedes robar la DB de cuentas de K9 mail y encima es MUCHO mas sencillo porque es puro base64 lo que hay ahí.

Pero a la gente le va el morbo y whatsapp es ... whatsapp! En fin...

he decidido suavizar algunos rollos sobre todo esto en un storify

http://storify.com/AlisterWhitehat/existe-agravio-comparativo-al-comparar-la-segurid

Alister Amo dijo...
Este comentario ha sido eliminado por el autor.
Anónimo dijo...

Para usar el script hay que saber la direccion de correo electronico, pero en recover messages no?

Daniel dijo...

Buenas,
Y si la memoria interna como la externa estan encriptadas con las opciones de encriptacion del propio sistema Android, si se llevan los ficheros de las bbdd de WhatsApp podrian abrirlos ?

Mario dijo...

creo q ya todo o bueno casi todo se puede vigilar por medio de otros programas... ya no existe lo que es personal o la intimidad... todos saben de todo.

Anónimo dijo...

Lo de las conversaciones del Whatsapp es "lo de menos".

Puede ser mas grave que acceda a la SD y robe documentos confidenciales y simplemente que robe las imágenes del móvil

Alister Amo dijo...

suscribo el comentario de arriba. menos mal que hay algueinq ue deja de pensar con el culo en espiar a la novia y empieza a pensar seriamente en las consecuencias a nivel general para la seguridad y privacidad de todo y de todos

Daniel dijo...

Buenas,
Es totalmente cierto lo que estais diciendo, la bbdd de datos de WhatsApp o line o otra aplicación de chateo... es lo de menos. Lo que realmente importa todos los demas datos, de documentos sensibles, correo,etc...

Ahora pregunto, el encriptado de todo el storage (Interno y externo) es factible?
Yo personalmente con todo encriptado, si saco los datos del teléfono al ordenador los archivos no he podido desencriptarlos, a no ser que quite de desencriptado desde el teléfono
primero y despues extraigas los datos.

Daniel dijo...

Buenas,
Es totalmente cierto lo que estais diciendo, la bbdd de datos de WhatsApp o line o otra aplicación de chateo... es lo de menos. Lo que realmente importa todos los demas datos, de documentos sensibles, correo,etc...

Ahora pregunto, el encriptado de todo el storage (Interno y externo) es factible?
Yo personalmente con todo encriptado, si saco los datos del teléfono al ordenador los archivos no he podido desencriptarlos, a no ser que quite de desencriptado desde el teléfono
primero y despues extraigas los datos.

Servando Pestano dijo...

Interesante lo que planteas Daniel. En mi opinión, si se accede a la base de datos (DB) desde una sesión ya iniciada, vía copiándola manualmente desde tu terminal, vía troyano web, tal como se explica en este artículo, el único obstáculo que queda por salvar es el propio cifrado de la DB, cosa que se explica y se enlaza también en este post. El cifrado del almacenamiento en Android solo te protege de un acceso remoto al termina; intuyo el mecanismo de cómo saltarse este aunque imagino que algún lector lo podrá explicar mejor que yo.

Unknown dijo...

HOLA, REALMENTE NO SE DE QUE HABLAN PERO SERIA GENIAL QUE LE EXPLICARAN A LOS NOVATOS, AYUDENOS REVISAR INFIDELIDADES POR FAVOR

Unknown dijo...

Me hace gracia, está encriptado en Base64?

Anónimo dijo...

hola podrian ayudarme quiero averiguar si mi novia es infiel.. como lo hago?? para ver las conver de whassap?¿

Unknown dijo...

Tema muy interesante, por experiencia propia opino que expiar a la novia es encontrar lo que no se quiere saber. Cada vez que le espio el What app encuentro cantidad de motivos para dejarla. Hola mi amor.. mi amor ya llegue. besos . buenas noches amorcito. Eso es lo que van a encontrar. les ahorro la molestia

ks dijo...

no entendi nada de lo escrito disculpen, quien escribio este articulo podria porfavor decirme como le hago para ver conversaciones de whatssapp desde mi pc si no tengo acceso directo al telefono porfavor! gracias, pero explicado de una manera mas sencilla porque sus terminos son muy confusos para mi pues no se nada de eso :( gracias!

flaviohdp dijo...

Chema, el tema complicado con la recuperación forense de los chats es - en caso de kos nuevos crypt7 - cómo generar la key si tenemos la base y los bckps, pero ya no está la carpeta \data\data\com.whastapp ? Esto pasa cuando instalan Whtspp sobre el SD, por ejemplo, y luego lo desinstalan sin el SD.. te quedan las bases descolgadas.
No podés generar el key con la herramienta de extract que simula un backup, porque también usa la carpeta \data\data...
No te alcanza con saber la cuenta google asociada, como en crypt5...
A ver si alguien logró la forma de generar el archivo key a partir de otra info del System de Android, para poder desencriptar luego con python o con el mismo Viewer para Win...
Gracias !
Flavio el HdP...

flaviohdp dijo...

También me ha pasado con SD sueltos, sin cel, de los cuales hemos recuperados bckps de bases de whtspp borradas, todas con crypt7..
En este caso es peor, porque no tenemos el cel, por lo que no hay acceso a la info del user para tratar de generar la key...

Anónimo dijo...

Buenos días, quissiera desencriptar varios archivos de historial de whatsapp (crypt7) pero no dispongo del archivo key. ¿es esto posible?

Muchas gracias!

Anónimo dijo...

Hola a todos..se puede obtener algun tipo de informacion o la key en este caso con el programa Androidlost?ya que con el se tiene acceso al telefono y al mail..habria alguna manera de sacar la key?

MAYA GUERRERO dijo...

Alguien me puede apoyar me llegó un mensage a mi whAtsapp q alguien me intento espiar de cm... El problema es q es de un chip mio q casi no uso pero sigue activo

jocker dijo...

EL CÓDIGO QUE SE A GENERADO ESTA EN JAVA
O SE PUEDE GENERAR EN JAVA O EN OTROS LENGUAJES COMO EN "C"
SALUDOS DESDE VERACRUZ

Server dijo...

Buenas tardes para todos, si tengo la base de datos de whatsapp y tengo acceso al correo electronico, cuales son las pasos a seguir para desencriptar la misma y poder desde el pc tener acceso a la conversaciones. Gracias

Server dijo...

Buenas, teniendo la base de datos y acceso al correo, cuales son los pasos para desencriptar la base de datos en el pc y tener acceso a los chats. Gracias

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