WhatsApp es la aplicación de
mensajería instantánea más utilizada del mundo. Más de setecientos
millones de usuarios en todo el planeta (la décima parte de toda la Humanidad),
la utiliza para intercambiar mensajes de texto y de voz, ficheros de
audio y de vídeo, etc. El hecho de que sea una aplicación universalmente
utilizada, implica también que muchas personas, involucradas en
procesos judiciales, presenten los mensajes de WhatsApp como prueba si
quieren demostrar que una conversación, en unos términos concretos, ha
tenido lugar entre determinados interlocutores.
Existe ya jurisprudencia en España en la admisión como prueba de mensajes de WhatsApp, como por ejemplo en la Sentencia de la Audiencia Provincial de Alicante Número 4/2014, de 9 de enero, en el ámbito civil, o la Sentencia de la Audiencia Provincial de Madrid Número 533/2014, de 24 de julio, en el ámbito penal. También han sido rechazados, como por ejemplo en la Sentencia de la Audiencia Provincial de Madrid Número 51/2013 de 23 de septiembre,
por entenderse que, según transcripción textual de la sentencia, los
“contenidos no han sido reconocidos por el acusado, ni se ha practicado
sobre los mismos prueba pericial informática que acredite su
autenticidad y su envío”, lo cual quiere decir que, si la otra parte no
reconoce el envío de los mensajes, se deberá presentar un peritaje informático que avale la autenticidad de los mismos.
Además, recientemente se ha fallado por el Tribunal Supremo en la STS
2047/2015 que, en general, para la admisión como prueba de cualquier
conversación mantenida a través de una red social, es necesaria la presentación de un informe pericial informático por parte de un perito informático.
Que actualmente ya se estén admitiendo
como pruebas los mensajes enviados y recibidos a través de WhatsApp,
otorga una dimensión extraordinaria a esta aplicación, de tal forma que
debe tenerse en cuenta la posibilidad de que los mensajes puedan ser
manipulados, no sólo a la hora de realizar el envío del propio mensaje,
como ya fue demostrado por dos ingenieros informáticos españoles,
sino también una vez los mensajes han sido enviados o recibidos, es
decir, directamente sobre la base de datos en la que se almacenan los
mismos. Éste es el archivo sobre el que debe practicarse la prueba
pericial informática cuando se presentan los mensajes de WhatsApp en un
procedimiento judicial, por lo que es de vital importancia que dicho
fichero permanezca íntegro o, al menos que, si se manipula
maliciosamente, esta alteración pueda ser advertida tras un análisis
forense por parte de un perito informático. Lo que se pretende demostrar
en el presente artículo, es que dicho archivo de base de datos puede
ser manipulado, alterando las conversaciones de tal forma que la
manipulación podría perfectamente pasar inadvertida para un perito
informático que realizase una investigación forense sobre el terminal
móvil.
En primer lugar, se procederá a un
intercambio de mensajes de WhatsApp (los que luego serán manipulados),
entre dos terminales móviles cuya versión de WhatsApp instalada es la
2.12.250 en ambos. Estos terminales son un Samsung Galaxy S6 y un Wiko
Goa, cuyo sistema operativo en ambos casos es Android, versión 5.1.1 y
4.4.2, respectivamente. Así pues, a continuación, se muestran los
mensajes enviados y recibidos a modo de ejemplo entre ambos terminales.
Seguidamente, se ha de indicar que la base de datos interna de WhatsApp utiliza SQLite como Sistema Gestor de Base de Datos, por lo que se trata, por tanto, de un sistema relacional.
Asimismo, una copia de esta base de datos, se encuentra fácilmente
accesible conectando el terminal móvil al ordenador, estando ésta
cifrada mediante criptografía simétrica utilizando el algoritmo AES, cuyo funcionamiento puede observarse en el siguiente diagrama.
Como se puede apreciar, la clave de
cifrado y descifrado es la misma. Esto equivale a decir que la misma
clave se utiliza para cifrar y para descifrar la base de datos, estando
ésta almacenada y accesible en el directorio que utiliza WhatsApp. Sin
embargo, la base de datos original, es decir, la que es utilizada por la
aplicación para almacenar los mensajes inmediatamente después de ser
enviados o recibidos, no está cifrada, sino que se encuentra almacenada
en texto claro en uno de los directorios que la aplicación
tiene en el sistema operativo. Esta base de datos no es accesible
conectando directamente el terminal al ordenador, pero sí lo es una vez
el terminal Android ha sido rooteado,
es decir, configurado para ser accedido en modo súper-usuario, lo cual
es algo muy sencillo de realizar incluso para usuarios no expertos.
Así pues, una vez el móvil ha sido rooteado
(para este ejemplo, se usará el Wiko Goa), tener acceso a la base de
datos original es una operación muy sencilla. Para ello, usando la
utilidad ADB para Windows de las herramientas de desarrollo de Android,
es necesario ejecutar los siguientes comandos al objeto de abrir una
sesión con el terminal (primeramente es necesario haber instalado
correctamente las herramientas de desarrollo de Android y los drivers
del dispositivo móvil del cual se desea obtener su base de datos de
WhatsApp, así como haber activado el “modo de depuración USB” en el
citado terminal Android):
C:\android-sdk-windows\platform-tools>adb shell
Una vez se han ejecutado estos dos comandos, la utilidad ADB abre una sesión con el terminal móvil, tal y como se observa en la siguiente imagen.
Es necesario indicar que, como servidor
de ADB en el dispositivo móvil, es posible que sea necesario instalar y
ejecutar una aplicación como ADB Insecure,
más conocido como ADBD, al objeto de que se pueda transferir
información entre el móvil y Windows y viceversa. Esto es así debido a
que ciertas características de la utilidad ADB de serie no pueden ser
utilizadas en versiones estables, es decir, finales, de Android, sino
únicamente en versiones de desarrollo.
A continuación, es necesario acceder en
modo súper-usuario al terminal, ya que la base de datos original de
WhatsApp se encuentra en un directorio que sólo puede ser visualizado
con privilegios de administrador. Para ello, es necesario ejecutar el
comando “su”, tal y como se aprecia en la siguiente imagen.
Siendo ya súper-usuario, es necesario
moverse al directorio en el que se encuentra la base de datos original
de WhatsApp, ejecutando el siguiente comando:
Al ejecutar un listado de los ficheros presentes en dicho directorio, mediante el comando “ls -la”, se aprecian los siguientes archivos:
Como se puede observar, el fichero que
interesa es el remarcado en rojo. Ésta es la base de datos original de
WhatsApp en la que se almacenan los mensajes inmediatamente después de
ser enviados o recibidos. Una vez se ha visualizado el archivo que
interesa, es necesario ejecutar el comando “exit” dos veces para volver a
Windows, ya que será desde allí desde donde se tomará el archivo de
base de datos de WhatsApp.
Ya en Windows, es necesario ejecutar el
siguiente comando, al objeto de traer a Windows la base de datos (aunque
es necesario, previamente, para disponer de todos los mensajes,
incluyendo los enviados y recibidos en último lugar, haber realizado una
copia de seguridad de los mensajes desde la propia aplicación WhatsApp,
en el menú Ajustes -> Chats y llamadas -> Guardar chats):
La ejecución exitosa del comando presenta la siguiente información en la consola:
La siguiente captura de pantalla del
directorio de Windows en el que se encuentra la utilidad ADB, muestra
que en dicha carpeta ha sido depositado el fichero “msgstore.db”
(seleccionado en la imagen):
Para abrir el mencionado fichero de base
de datos, será necesario un cliente de SQLite, habiendo sido
seleccionado para este ejemplo el cliente de código abierto SQLiteStudio. Así pues, es necesario abrir el programa y, posteriormente, navegar hasta el menú Database -> Add a database,
al objeto de añadir una nueva base de datos, por lo que se deberá
buscar y seleccionar el archivo de base de datos que se desea alterar,
en este caso “msgstore.db”, localizado en el directorio en el que se
encuentra la utilidad ADB. Una vez añadida la base de datos, ésta
aparece en SQLiteStudio como se aprecia en la siguiente imagen
(remarcada en rojo).
Seguidamente, es necesario conectarse a
la base de datos. Para ello, con la base de datos seleccionada, hay que
navegar hasta el menú Database -> Connect to the database,
de tal forma que el cliente se conecta inmediatamente a la base de
datos. Desplegando la base de datos, se puede observar que ésta está
conformada por once tablas, tal y como se observa en la siguiente
imagen.
De todas estas tablas, las que interesan son las siguientes:
- messages, que almacena los mensajes enviados y recibidos, así como varias propiedades de los mismos.
- messages_fts_content, que almacena los mensajes enviados y recibidos sin ninguna propiedad, únicamente con la misma clave primaria que en la tabla messages.
Para modificar un mensaje enviado o recibido es tan sencillo como realizar los siguientes pasos:
- En primer lugar, es necesario conocer la clave primaria del mensaje
que se desea modificar. Para ello, lo más óptimo es ejecutar una
consulta de búsqueda por el patrón del mensaje en el propio cliente de
SQLite. Así pues, para modificar el mensaje del ejemplo, se ejecutará la
siguiente consulta, que proporcionará todos aquellos mensajes donde
aparece la palabra “whatsapp”, de tal forma que pueda tomarse el
identificador del mensaje que se desea modificar:
Ampliando la imagen sobre los mensajes, remarcados en rojo, se ve claramente que se trata de los mensajes recibidos desde el Samsung Galaxy S6 en el Wiko Goa: - El mensaje que se va a modificar va a ser el que tiene como clave
7934. Por tanto, es necesario anotar dicha clave y, acto seguido, editar
el campo data de la tabla messages, directamente
desde el propio resultado devuelto por la consulta, escribiendo lo que
interese, para inmediatamente después pulsar en el botón commit
al objeto de persistir los cambios realizados. En la siguiente imagen
se muestra el registro ya modificado y persistido tras haber pulsado el
botón commit (el cual se halla remarcado en rojo).
La nueva frase, como se puede observar, es “WhatsApp es una aplicación segura. No hay nada que temer sobre ella.” Nótese que la anterior frase era “WhatsApp es una aplicación insegura.”
- Posteriormente, es necesario editar la tabla messages_fts_content, para lo cual hay que dirigirse al árbol de tablas, pinchar con el botón derecho en la misma y seleccionar la opción Edit the table.
Una vez en el editor, es necesario aplicar un filtro (remarcado en rojo
y usando la clave, 7934), al objeto de encontrar el registro deseado,
tal y como se aprecia en la siguiente imagen.
Una vez se ha localizado al registro, es necesario proceder a cambiar el texto. A continuación, se muestra una imagen con el registro modificado y persistido, procurando mantener el estilo de la citada tabla (todo el texto en minúsculas, las palabras separadas por tres espacios y los signos de puntuación separados de la palabra anterior por un espacio):En realidad, la modificación de esta tabla no sería estrictamente necesaria para que en la aplicación se viesen los mensajes alterados como si fuesen auténticos, pero sí es necesario si se quiere dificultar el trabajo del perito informático que vaya a analizar los mensajes y dictaminar si realmente fueron enviados y/o recibidos, es decir, si son auténticos.
Una vez realizados todos los pasos
anteriores, es necesario seleccionar con el botón derecho del ratón la
base de datos en SQLiteStudio y ejecutar la opción Disconnect from the database,
para acto seguido salir del programa. Posteriormente, se debe copiar la
base de datos alterada en el teléfono, sustituyendo la original. Para
ello, es necesario ejecutar el siguiente comando en la consola de
Windows (como se mencionó anteriormente, la aplicación ADB Insecure debe
encontrarse en ejecución en el móvil):
Para dejar el menor rastro posible de la
manipulación, es necesario modificar tanto el propietario como el grupo
del fichero de base de datos, que al haberlo copiado como root,
es decir, como súper-usuario, tendrá tanto este propietario como este
grupo. Para apreciarlo, se debe navegar hasta el directorio en el que se
encuentra la base de datos, ejecutando los siguientes comandos:
# su
# cd /data/data/com.whatsapp/databases
# ls –la
Como se puede apreciar dentro del
rectángulo remarcado en rojo, el nuevo propietario del fichero
“msgstore.db”, es el súper-usuario, así como también el nuevo grupo del
fichero es el grupo del súper-usuario. Para revertir esta situación, es
necesario ejecutar el siguiente comando:
Posteriormente, ejecutando el comando “ls –la”, se puede observar que tanto el propietario como el grupo ya han cambiado, tal y como se observa en la siguiente imagen:
Como se puede apreciar, el nuevo propietario y el nuevo grupo del fichero “msgstore.db” es u0_a88,
que es el mismo que tienen todos los demás ficheros. Para abandonar el
modo de depuración, es necesario ejecutar dos veces el comando “exit” y,
posteriormente, ya desde Windows, es necesario ejecutar el comando
“exit” para cerrar la consola.
Una vez realizado todo el proceso, debe
reiniciarse el teléfono móvil y acceder, mediante la utilidad ADB, al
directorio en el que se encuentra la base de datos, al objeto de
comprobar que las fechas de último acceso de la misma se han actualizado
y que no es posible determinar si la base de datos ha sido sustituida
por una alterada. Para ello, es necesario ejecutar los siguientes
comandos:
C:\android-sdk-windows\platform-tools>adb shell
# su
# cd /data/data/com.whatsapp/databases
# ls -la
Como se puede observar, la fecha de
última modificación de la base de datos es muy similar al resto de
fechas de los otros archivos utilzados por WhatsApp, por lo que sería
muy difícil dictaminar que la base de datos ha sido manipulada. Para
ello, serían necesarias técnicas de file carving, es decir, recuperación de ficheros borrados, las cuales son muy costosas debido a las herramientas hardware y software
necesarias y, además, no garantizan el éxito porque las áreas del
sistema de ficheros ocupadas por ficheros borrados, son sobrescritas por
el sistema operativo en función de las necesidades de éste.
A continuación, se muestra el resultado
del proceso visualizado en el WhatsApp del teléfono Wiko Goa, junto a la
imagen original de los mensajes enviados por el Samsung Galaxy S6:
Como se puede observar, el último mensaje ha sido alterado, de tal forma que ha pasado de aparecer “WhatsApp es una aplicación insegura.”, a “WhatsApp es una aplicación segura. No hay nada que temer.”
Seguidamente, se adjunta una captura de pantalla en la que aparecen
tanto la versión original como la modificada, para apreciar las
diferencias.
Como se puede apreciar, la manipulación
es sencillamente indetectable a simple vista y, aún realizando un examen
pericial informático, resultaría muy difícil de detectar si se han
tomado todas las precauciones indicadas en este artículo. También es
necesario indicar que muchas más precauciones pueden ser tomadas para
evitar que un perito informático detecte una manipulación en el envío y
la recepción de mensajes de WhatsApp, puesto que la tecnología y la
informática evolucionan cada día.
Cabe añadir que, de la misma forma que
se han manipulado los mensajes ya enviados y/o recibidos, también es
posible y relativamente sencillo generar mensajes que no existían,
aparentemente procedentes de cualquier teléfono del mundo, incluso de
números inexistentes, haciéndose pasar por auténticos y siendo también
muy difícil determinar si lo son o no. Para ello es necesario, además de
manipular las tablas en las que se almacenan los mensajes, alterar
también la tabla que almacena los contactos, es decir, la denominada chat_list.
Como conclusión, se extrae que WhatsApp es una aplicación muy poco segura y fácilmente manipulable,
por lo que la aceptación de conversaciones mantenidas a través de la
misma como prueba en un juicio, debe realizarse con cautela y, por
supuesto, siempre con el aval de un perito informático colegiado.
Por tanto, cuando un perito informático se enfrente a la realización de
un peritaje informático sobre la autenticidad de determinadas
conversaciones mantenidas a través de WhatsApp, deberá realizar un
profundo análisis forense de todos los elementos a su alcance para
dictaminar si las conversaciones son o no auténticas.
________________________________________________________
Se Respetan Derechos de Autor.