¡Yo no he enviado ese Whatsapp!

Una mañana cualquiera, de un día cualquiera, un amigo, un familiar, un ser querido, te llama pidiendo explicaciones de a ver por qué le has dicho a su esposa que la semana pasada él había estado con otra mujer, tú no entiendes lo que ocurre pero ya te imaginas que nada bueno puede ser. Después de la discusión inicial, de haberte insultado con insultos que ni tan siquiera conocías, llegas a la conclusión de que su mujer recibió un mensaje de Whatsapp tuyo diciéndole que  su marido había sido infiel con otra mujer, pero claro, tú ese mensaje no lo has enviado, ¿o quizás si?.

Fig 1. Logo Whatsapp

Así comienza esta historia: un ciudadano cualquiera que está viendo como en su propio teléfono móvil existe un mensaje de Whatsapp enviado a la esposa de un amigo, el cual no ha enviado pero que le acusan de haberlo hecho. Creo que ha llegado el momento de llamar a un forense, pero no de los que hacen autopsias, si no de los que recuperan fotos eliminadas de la tarjeta SD de la cámara de fotos de tus vacaciones realizan, a través de técnicas científicas, un análisis informático sobre cualquier tipo de dispositivo electrónico, utilizando un protocolo que garantice la integridad de los datos obtenidos y que estos sean válidos para el fin que se han obtenido.

Llegados a este punto, la única esperanza que le queda al protagonista de esta historia (al acusado, no al aventurero) es que alguien puede determinar lo que realmente ha ocurrido, o lo que es lo mismo, alguien cuyo objetivo sea la obtención de la verdad, y ese es un analista forense. Como comentaba al principio, esta historia versa sobre un mensaje de Whatsapp que nadie dice haber enviado, pero que en el teléfono del emisor si consta como enviado. Así que en primer lugar, lo primero que tiene que hacer un analista forense es analizar ese teléfono móvil con la finalidad de buscar una explicación de lo que ha ocurrido. Aunque se nos puedan dar varias hipótesis de trabajo, tenemos que tratar siempre de comenzar por la más probable (la explicación más sencilla es probablemente la correcta), y lógicamente la explicación más sencilla no es que el móvil tenga un malware de control remoto, o que alguien le hubiera cogido el teléfono sin que nuestro protagonista se hubiera enterado, la explicación más sencilla es que hubiera sido el propio usuario del teléfono quien hubiera enviado esos mensajes. Descartada esa opción, más que nada porque si no este articulo ya no tendría sentido, la segunda opción desde mi punto de vista es la del Whatsapp Web, es decir, que alguien se aprovechara de que nuestro protagonista dejó su Whatsapp Web abierto en un PC ajeno, lo que le permitiría a cualquier persona enviar mensajes a través del Whatsapp sin que este se diera cuenta.

Fig 2. Whatsapp Web

Whatsapp Web tiene una serie de características técnicas que pueden ser interesantes para el caso que nos ocupa. La primera de ellas es que realmente se puede utilizar desde cualquier parte del mundo, no es necesario ni que el PC con Whatsapp Web esté cerca del teléfono, ni que ambos estén conectados a la misma red WiFi. Otro dato importante es que Whatsapp Web no funciona si el teléfono no tiene cobertura de datos, aunque nuestro PC tenga Internet, si nuestro teléfono no tiene Internet, Whatsapp web dejará de funcionar y esta es una de las claves del funcionamiento de esta APP, ya que realmente Whatsapp Web no envía ningún tipo de mensaje al destinatario, si no que al enviar un mensaje desde Whatsapp Web, este lo envíe a nuestro teléfono y es nuestro teléfono quien ya lo envía al destinatario del mensaje. Esto quiere decir que Whatsapp Web es una especie de prolongación del Whatsapp que tenemos instalado en nuestro teléfono, ya que por sí solo, no puede funcionar.

Una vez explicado el funcionamiento de Whatsapp Web, ya podemos continuar tratando de explicar lo ocurrido. En este caso el teléfono de nuestro protagonista es un móvil con un sistema operativo Android 7 Nougat y con la versión 2.17.146 de Whatsapp instalada, un teléfono relativamente nuevo y actualizado. En primer lugar, decir que la aplicación Whatsapp en sistemas Android, crea una carpeta en la ruta “/data/data/com.whatsapp/databases/” en la que irá almacenando las distintas bases de datos para su funcionamiento, o lo que es lo mismo, el lugar en el que almacena todas las conversaciones que se han mantenido a través de Whatsapp en ese teléfono (entre otras cosas). Estas conversaciones se almacenan en un fichero de base de datos tipo SQLite llamado “msgstore.db”. Un pequeño problema es que esta carpeta se encuentra en una parte “restringida” del teléfono, a la cual si no tenemos los permisos necesarios, no podremos acceder aunque seamos el propietario del teléfono. En esta ruta también se almacena un fichero muy interesante para el análisis forense, un fichero llamado KEY, el cual permite en ciertas versiones de Whatsapp descifrar la base de datos de conversaciones que se almacenan periódicamente en forma de BackUp en la memoria accesible (a la que sí podemos acceder como usuario normal) de los teléfonos Android.

Fig 3. Directorio Whatsapp

Ahora estamos en el punto en el que logramos extraer la base de datos “msgstore.db”, de nuestro teléfono móvil, pero nos encontramos con un fichero que si intentamos abrir obtendremos algo tal que así:

Fig 4. msgstore.db

Esto ocurre por abrir un fichero con el programa erróneo, al tratarse de un fichero tipo base de datos SQLite, necesitaremos abrirlo con un programa que sea capaz de parsear (interpretar) la información que almacena este fichero. Por suerte, hoy en día no existe ninguna complicación para abrir este tipo de fichero, con un simple programa llamado “DB Browser for SQLite” podremos abrir esta base de datos.

Fig 5. Visor SQLite

Bien, ya hemos superado otro escollo, que es el de lograr abrir la base de datos, pero ahora nos encontramos con unas estructuras de tablas, columnas y celdas que hay que saber entender. Su funcionamiento es muy sencillo: existirá una tabla llamada “messages en la que se almacena el contenido de todos los mensajes enviados y recibidos. Pero claro, como ya era de esperar, al abrir está tabla vemos que, efectivamente, está el mensaje que nuestro protagonista dice que no ha enviado. ¿Y ahora qué?, pues no queda otra que realizar técnicas muy complejas de ingeniería inversa que permitan revertir el proceso de funcionamiento de Whatsapp para tratar de determinar si ese mensaje ha sido enviado desde Whatsapp Web o no. ¿Cuáles son estas técnicas tan complejas? Pues ni más ni menos que coger unos cuantos teléfonos móviles, instalarles a todos la misma versión de Whatsapp que la del teléfono que estamos analizando y comenzar a enviar Whatsapps (mensajes) con marcas o balizas entre los teléfonos (tanto desde la versión móvil como desde la versión Web) y luego buscar en la base de datos SQLite una seña que tengan en común todos los mensajes enviados desde Whatsapp Web, pero que no la tengan los mensajes enviados desde Whatsapp normal. Un problema importante es que nadie nos garantiza que Whatsapp Web deje una señal en la base de datos, ya que perfectamente puede funcionar sin dejar ningún tipo de marca.

FOUR HOURS LATER…

Como ya os imaginareis, si estoy escribiendo este artículo es porque Whatsapp Web si deja esa marca inequívoca, o al menos de momento la deja. Os ahorraré las horas de análisis y os diré dónde se encuentra esta señal: al abrir la tabla “messages”, veremos una columna llamada “key_id”, esta columna contendrá una serie de strings alfanuméricos que a priorí no tienen sentido, pero si los analizamos con más calma, veremos que todos los mensajes enviados desde Whatsapp Web, comienzan con el valor “3EB0” y estos cuatro caracteres son los que nos permitirán determinar que ese mensaje efectivamente se ha enviado desde Whatsapp Web y no escribiéndolo desde el propio teléfono. Si alguien pensaba que íbamos a encontrar en la base de datos un campo que pusiera: “Este es un mensaje enviado desde Whatsapp Web”, lo siento, no ha sido así 😉 Este resultado, aunque no sea esclarecedor, ya nos permite orientar nuestra hipótesis de trabajo en la dirección correcta.

Fig 6. Identificador Whatsapp Web

Todo este trabajo de horas y horas, sólo para llegar a cuatro míseros caracteres dentro de una simple columna de una base de datos. Pero este es el trabajo forense: determinar el cómo y el por qué de las cosas. Como podéis ver, en este articulo no me he centrado en el uso de ciertas aplicaciones que pueden analizar de forma automatizada teléfonos móviles. Creo firmemente que para entender cómo funciona una cosa, primero hay dedicarle horas y ver de forma manual, casi artesanal como funciona. Luego, una vez tengamos claros estos conceptos, ya podemos utilizar software forense que nos automatice las tareas de extracción y parseo de la información. Probablemente, ese software no ha tenido en cuenta el detalle que hoy os he contado aquí, y si no lo ha tenido en cuenta, por mucho que le deis al botón “Analizar Todo” nunca os sacará este tipo de información si no ha sido pensado para ello. No quiero decir con ello que este tipo de software no sirva para nada, al contrario, son una gran herramienta en el trabajo de cualquier forense, que ayudan mucho y hacen el día a día de cualquier análisis más sencillo. Pero no hay que acomodarse en la facilidad de siempre: pulsar el botón gordo de “Analizar”. De vez en cuando, hay que bajar a la consola y batallar con este tipo de problemas, si no seremos meros autómatas que pulsan botones que hacen cosas.

Salu2.

Manuel Guerra

Manuel Guerra

Mi nombre es Manuel Guerra. Investigador especializado en: [eCrime] | [Forensic] && [Hacking]. Editor de GLIDER.es

Navegación de la entrada


Comentarios

  • LuisMi Kali

    Gran artículo, muy interesante. Felicidades.

  • Andreu

    Gran primer artículo

    ¿Sabes que te has puesto el listón muy alto para empezar? 😉

  • Rubén

    Muy bueno el análisis. Un 10/10

  • Aprendiz

    Buen articulo. Una pregunta .
    ¿Existe la posibilidad de que una aplicación que no fuese whatsapp pudiera modificar el contenido de esa base de datos?.

    • Manuel Guerra

      Manuel Guerra

      La posibilidad existe, pero no es para nada sencillo, ya que la modificación de un simple “hola” por un “adiós” en un chat puede hacer corromper la base de datos y dejar totalmente inoperativo el Whatsapp.

  • Luis

    Gran aporte

  • Leandro Pavon

    Gracias por el artículo, muy interesante.

  • raul

    Muy interesante Manu. Vaya comienzo más bueno !!!!

    Un Saludo.

  • Claudio

    Gracias por el aporte, muy buen articulo!,

    Saludos,

  • Jesús García

    Articulo impresionante. Ahora bien, tengo el mismo android (7) y la misma versión del WhatsApp (2.17.146), pero la estructura de carpetas no es la misma, aunque he encontrado varias bd con el nombre msgstore.db.dcript12. Lo que me hace pensar que están encriptadas (¿como los mensajes de WhatsApp?)

    • Manuel Guerra

      Manuel Guerra

      Hola, los ficheros “msgstore.db.dcript12” que comentas, posiblemente sean las copias de seguridad diarias que Whatsapp realiza de forma diaria sobre la base de datos. Tendrá que seguir buscando la otra base de datos descifrada o bien, descifrar esa mediante el uso de una KEY, que también debería estar almacenada en la parte reservada de tu teléfono.

      Salu2

  • Angel

    Hola Manuel!! Si no es a través d wassap web, se puede enviar mensajes? Desde mi móvil pasó y no venía como q estaba espiado en wassap web

    • Manuel Guerra

      Manuel Guerra

      Buenas tardes Ángel, si no es a través de Whatsapp web, puede ser a través del propio teléfono móvil.

      Un saludo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puede usar las siguientes etiquetas y atributos HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>