viernes, 14 de marzo de 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!

Entrada obtenida del blog http://www.elladodelmal.com/