Shared Preferences y SQLite en Android ¿Seguridad? (III de III)

Tal y como comenté en la primera entrada de esta serie, en ningún momento se debería usar esta información para realizar ninguna acción ilegal, como modificar fechas de expiración de aplicaciones, leer datos privados ni obtener claves de seguridad privadas de terceros.

Publico estas entradas sólo con el ánimo de enseñar los problemas de seguridad que nos pueden traer asociados el desarrollar nuestras aplicaciones con un método de almacenamiento de datos determinado y el poco cuidado que ponen ciertos desarrolladores de aplicaciones a la hora de tratar datos tan sensibles como las claves públicas y privadas de nuestro servicio de almacenamiento en la nube “supuestamente” seguro, o el crear un sistema de licenciamiento de aplicaciones basado en almacenar la fecha de expiración en el propio dispositivo en lugar de hacerlo en servidores en la nube del propio desarrollador o con algún método más eficaz, como encriptando de algún modo dichos datos.

Hecha esta aclaración, insisto en que cada uno es responsable de la aplicación que le dé a esta información y que quede constancia de que puede estar incurriendo en acciones ilegales.

Volvemos al tema de la seguridad o inseguridad que obtenemos al guardar según qué datos sensibles de aplicaciones en las Shared Preferences de Android o en bases de datos SQLite.

En esta última entrada de la serie, hablaremos de WhatsApp y su base de datos.

El post lo dividiré en dos partes.

La primera, tal y como he venido haciendo en las dos últimas entradas, será investigar un poco en las opciones y bases de datos de WhatsApp con la aplicación Hack App Data.

En una segunda parte, os daré unos datos sobre la base de datos de WhatsApp y sus últimas actualizaciones y os incluiré unos link al fantástico blog de “Security By Default” de Alejandro Ramos. Ahí encontraréis las explicaciones pertinentes así como el código necesario para desencriptar la nueva base de datos de WhatssApp (incluido el código fuente del script necesario para hacerlo).

Empecemos pues.

Si accedemos con nuestra ya “trillada” aplicación Hack App Data a la aplicación de WhatsApp, encontramos las 3 pantallas tan conocidas a estas alturas:

imagen1 imagen2 imagen3

Esta vez, encontramos datos tanto en las Shared Preferences, como en las bases de datos SQLite.

Vamos a ir viendo poco a poco que podemos encontrar (recordar que en las Shared Preferences sí se pueden editar los registros, mientras que en la base de datos SQLite no, al menos desde esta aplicación).

imagen4

Como podemos ver, podemos ver el teléfono que está registrado en la aplicación.

También podemos ver todas las preferencias almacenadas por la aplicación (color del led de notificación, ruta de almacenamiento de los contenidos recibidos, estado del registro, incluso el precio de la renovación.

imagen5

 

imagen6 imagen7 imagen8

Dentro de la base de datos msgstore.db, encontramos las tablas donde podremos recuperar todos los mensajes de la aplicación, así como las URL de las rutas de los servidores de WhatsApp donde están los elementos adjuntos (imágenes, vídeos), sus hashes, etc.

imagen9

Podemos ver los contactos que tenemos en la aplicación, así como sus mensajes de estado, número de teléfono, nombre para mostrar, etc…

imagen10 imagen11 imagen12

Tenemos a nuestra disposición una tabla con todos los chats que tenemos abiertos actualmente en la aplicación, ya sean contra un único usuario, o contra un grupo de usuarios.

imagen14

Los chat contra un único usuario, se identifican por el número de teléfono @ s.whatsapp.net, mientras que los grupos se identifican por el número de teléfono del creador – timestamp @ g.us.

En la columna subject podemos encontrar el título del Grupo (en los chat individuales no aparece) así como la fecha de creación de cada uno de los chat.

Y aquí llegamos a la parte más interesante de la entrada. La tabla de mensajes donde podemos encontrar todos y cada uno de los mensajes que se han ido enviando y recibiendo, timestamp, datos adjuntos, URL de WhatsApp, tamaño de los adjuntos, y cualquier cosa que hayamos enviado o recibido, con el peligro de revelar datos sensibles y confidenciales que ello supone.

imagen15

En la columna “Data” aparece el mensaje que hemos enviado o recibido.

imagen16

En la siguiente imagen vemos la fecha y hora (timestamp) así como la ruta al archivo adjunto en los servidores de WhatsApp (media_url).

imagen17

Tipo de archivo enviado o recibido (media_mime_type), tamaño, y el hash del archivo.

imagen18

Si tenemos la opción de geolocalización, también podríamos ver la longitud y latitud.

imagen19

Podemos ver la fecha y hora a la que llegó el mensaje al servidor de WhatsApp, así como la fecha y hora a la que se entregó en el propio dispositivo.

imagen20

Como podemos comprobar, datos muy sensibles a los que podemos acceder.

Hasta aquí la primera parte del post.

A continuación, os incluyo como segunda parte unos links donde podréis encontrar información sobre cómo se encriptaba anteriormente la base de datos de WhatsApp (las copias de la base de datos que se hacían en la tarjeta SD siempre se encriptaban con la misma clave PARA TODOS LOS CLIENTES, entonces era posible leer los datos de las bases de datos de backup de cualquier dispositivo con la misma clave).

Aunque WhatsApp ha cambiado la encriptación para las últimas versiones de la aplicación, gracias al trabajo de gente como Alejandro Ramos, de Security By Default, ya está disponible tanto el código del script necesario para desencriptar la nueva versión, así como una página web donde poder subir las copias de las bases de datos y extraer los mensajes automáticamente.

Los link a las entradas de su blog son los siguientes:

http://www.securitybydefault.com/2012/05/descifrando-el-fichero-msgstoredbcrypt.html

http://www.securitybydefault.com/2014/03/descifrando-msgstoredbcrypt5-la-nueva.html

El link de su página web donde poder subir la copia de la base de datos para desencriptarla es:

http://www.recovermessages.com

Hasta la próxima, saludos.

Deja un comentario