Una interesante entrada en el blog del maligno:
Una de las más frases que más habremos oído o leído a lo largo de la historia en diversas fuentes, es esa de
“La información es poder”, atribuida a
Sir Francis Bacon, filósofo inglés del
Siglo XVI.
Si ya por aquel entonces, nuestros antepasados eran conscientes del
valor que la información supone desde el punto de vista del dominio,
imaginemos lo que tendrían que decir si pudiesen contemplar el
escenario actual en el que nos movemos, donde precisamente lo que abunda
es la ingente cantidad de información que los usuarios subimos
libremente a la red.
 |
| Figura 1: WhatsApp Intelligence - WhatsApp como fuente OSINT |
Fuentes OSINT y Whatsapp
Los que nos movemos en el mundo de la seguridad, estamos familiarizados con el concepto de fuentes
OSINT (Open Source Intelligence),
término acuñado para hacer referencia al conocimiento recopilado a
partir de fuentes de acceso público. Entre la cantidad de fuentes
abiertas disponibles que existen a día de hoy en la actualidad, podemos
destacar los medios de comunicación, redes sociales, blogs, foros,
papers académicos, wikis, bibliotecas online, así como un sinfín de
orígenes de información accesibles en
Internet que nos permiten extraer conocimiento valioso sobre organizaciones, entidades o individuos concretos.

 |
| Figura 2: Proceso OSINT |
Este conocimiento se puede utilizar para diferentes fines, desde conocer
la reputación online de una organización o realizar estudios
sociológicos, hasta planificar una
APT o lanzar ataques de
Spear Phishing desde el punto de vista de los
cibercriminales. Herramientas que se suelen utilizar para recopilar, analizar y procesar fuentes
OSINT existen muchas, desde el tradicional
Hacking con Buscadores, el uso de buscadores especializados tipo
Shodan para buscar servidores o
NameCHK y similares para localizar nombres de usuarios, herramientas de recolección de metadatos como
FOCA,
API’s de servicios como
Facebook,
Twitter, o
Youtube, servicios para extraer información de dominios, así como las famosas
Cree.py u
OsintStalker, y cómo no,
Palantir o
Maltego, por destacar algunas. Si deseas conocer más información acerca de todo esto, es recomendable leer este
post sobre fuentes OSINT que publicamos hace unos meses desde el blog de INCIBE.
Reflexionando un poco acerca de esto, y a colación del trabajo que publiqué hace casi un año acerca de
Whatsapp Discover, se me ocurrió que sería interesante pensar en utilizar la información que los usuarios vuelcan a diario en sus perfiles de
Whatsapp como fuente
OSINT, por aquello de que estamos hablando del sistema de mensajería móvil líder en la actualidad.
Todo aquel que utilice
Whatsapp, sabe que gran parte de
sus contactos modifican a menudo su foto de perfil, o la información de
su estado, así como no ocultan la hora en línea. De hecho, conozco a
gente que a menudo invierte un rato en cotillear las fotos de perfil de
sus amigos para ver si las han cambiado, o leer esas citas célebres que
incluyen en sus estados. Por no hablar de los que monitorizan
constantemente también la última hora en línea de sus contactos para
tenerlos controlados con herramientas tipo
WhatsSpy Public.
Utilizar Whatsapi para generar conocimiento
La idea era realizar un pequeño script que dada una serie de números
de teléfono de usuarios que se le pasan como fuente de entrada, se
conectase a los servidores de
Whatsapp de manera
periódica para almacenar la foto de perfil, el estado y la última hora
en línea de dichos usuarios en una estructura de directorios, así
como también en base de datos, de cara a evaluar si a partir de
explotar esta información era posible extraer conocimiento y generar
inteligencia.
Para acometer esto, existen varias alternativas. A día de hoy, existen dos
API’s disponibles para poder conectarse a
Whatsapp:
WhatsAPI en PHP y
Yowsup en Python. En mi caso, decidí usar
WhatsAPI-Official, que está en la actualidad mantenida por
mgp25, quien ha recogido el legado de la famosa
WhatsAPI original que en su día mantenía
shirioko. Hay que tener en cuenta que estas
API’s no tienen ningún tipo de soporte oficial por parte de
Whatsapp (es más, en su día
Whatsapp coaccionó a los creadores de
WhatsAPI
y consiguió cerrar el repositorio durante unos meses), sino que son
mantenidas por la comunidad y están continuamente actualizándose para
poder mantener su funcionalidad a medida que los desarrolladores de
Whatsapp van introduciendo cambios en su protocolo de comunicación.

 |
| Figura 3: WhatsApp-Official actualiza hace doras |
Obteniendo credenciales de Whatsapp
El primer paso antes de comenzar a programar, es disponer de una cuenta legítima de
Whatsapp, así como las credenciales de acceso a la misma, que se transmiten utilizando
SSL desde los servidores de
Whatsapp
al instalar la aplicación por primera vez en nuestro dispositivo. El
año pasado cuando me dispuse a hacer esto en su día para
Whatsapp Discover, utilicé el
proxy Burp instalando el certificado
PortSwigger en el móvil para poder inspeccionar el tráfico
SSL con los servidores de
Whatsapp, pero a día de hoy esto ya no es posible, pues en la actualidad la aplicación hace uso de
Certificate Pinning.
 |
| Figura 4: Script registerTool.php que viene con Whatsapi para registrar un nuevo usuario de Whatsapp |
No obstante, existen alternativas para obtener estas credenciales, así
como también es posible volver a registrar un número para obtener
nuevas credenciales utilizando el
script registerTool.php que viene con
WhatsAPI,
teniendo en cuenta que esto invalidará la cuenta que tengamos en
nuestro dispositivo. Por ello, es mejor utilizar un número diferente
que el que tengamos habitualmente como usuarios para trastear con
WhatsAPI, ya que si usamos nuestra cuenta desde el móvil y también desde el
script, en determinados momentos perderemos conectividad desde alguna de las ubicaciones.
Es por ello que decidí adquirir una tarjeta
SIM con un nuevo número, insertarla en mi antiguo
iPhone 4S, e instalar
Whatsapp.
Una vez que la cuenta está correctamente registrada, es posible
obtener la información necesaria accediendo a la base de datos
sqlite “Cache.db”, que se encuentra en la ruta
“Library/Caches/net.whatsapp.Whatsapp” dentro de la carpeta de la aplicación en el dispositivo. Dicha base de datos, contiene las siguientes tablas:
cfurl_cache_blob_data
cfurl_cache_receiver_data
cfurl_cache_response
cfurl_cache_schema_version
sqlite_sequence
 |
| Figura 5: Base de datos "Cache.db" en la carpeta Whatsapp de un iPhone 4S |
La tabla
cfurl_cache_response contiene la información de las peticiones que la aplicación hace a los servidores de
Whatsapp, y la tabla
cfurl_cache_receiver_data almacena la información que se obtiene en la respuesta. La información que se necesita para poder utilizar
WhatsAPI, está compuesta principalmente por 3 campos:
username, identity y
password.
El nombre de usuario viene dado por nuestro número de teléfono con el
prefijo incluido. Los otros dos valores se obtienen al registrar la
aplicación y pueden obtenerse de estas dos tablas.
 |
| Figura 6: Extrayendo las credenciales de Whatsapp de la base de datos Sqlite |
Programando script con Whatsapi
Una vez que se dispone de los valores necesarios, sólo queda definir lo
que se quiere hacer, y ponerse a programar. Para ello, es posible
consultar la información que viene en la
wiki de WhatsAPI, donde se documenta detalladamente el proceso para conectarse a los servidores de
Whatsapp utilizando las credenciales obtenidas, así como las diferentes funciones disponibles o el
sistema de eventos que se han de definir para procesar la información que se recibe.
El
script, que decidí llamar,
“whatsapp_intelligence.php”,
toma un fichero como fuente de entrada que contiene la información de
los contactos a monitorizar (número de teléfono, dispositivo, versión
de la aplicación), que en mi caso proviene de la salida de
Whatsapp Discover, pues para realizar este estudio he utilizado los números de usuarios que he ido recopilando en diferentes redes
WiFi
públicas donde he utilizado esta herramienta, además de diferentes
países en los que he estado este último año. Evidentemente cualquiera
puede utilizarlo para analizar la información de los contactos de su
agenda, o determinados objetivos que le sean de interés, que ya sabemos
el interés que existe por
espiar WhatsApp.
En este caso particular, me ha parecido interesante recopilar
información de personas desconocidas para ver qué se puede obtener de
ellas, que además no me han facilitado su número de motu propio, sino a
raíz de una mala praxis en materia de seguridad. Así pues, lo que
pretende W
hatsapp Intelligence es extender la funcionalidad de
Whatsapp Discover para intentar extraer conocimiento de manera automatizada.
 |
| Figura 7: Fragmento de código del script "WhatsApp_intelligence.php" |
El funcionamiento del
script es bastante sencillo. Se
configura la ruta donde se creará la estructura de directorios que
almacenará para cada número de teléfono de un usuario, las diferentes
fotos de perfil que se vayan recolectando, así como un
log
de su última hora en línea cada vez que se ejecute, y otro con la
información del estado. Por otro lado se facilitan a su vez las
credenciales de conexión a una base de datos
MySQL donde también se almacenará toda esta información (salvo las fotos de perfil) en tres tablas (
info, lastseen y status) de cara a poder explotarla mediante consultas.
Posteriormente se define el comportamiento para los eventos que se van a utilizar (
onGetProfilePicture,
onGetRequestLastSeen y
onGetStatus), se recorre el fichero de entrada con la información de usuarios para generar un array de “
targets” y mediante un bucle se va solicitando toda esta información a los servidores de
Whatsapp para posteriormente ir volcándola tanto en los directorios como en la base de datos.
 |
| Figura 8: Creando la estructura de directorios de un servidor Apache |
Para poder visualizar esta información de manera cómoda, creé esta estructura de directorios dentro de un servidor
Apache con
Directory Listing activado (poco seguro pero no expuesto a
Internet) . En dicha estructura para cada número de móvil que corresponde a un usuario de
Whatsapp,
se crea un directorio donde se almacenan las fotos de perfil que se van
obteniendo, siempre y cuando sean diferentes, así como el registro de
la última hora en línea y el estado en respectivos ficheros de
log, para tener el registro de todas las ejecuciones del
script.

 |
| Figura 9: Fotos de perfil, logs de lastseen y estados para un usuario concreto |
En la base de datos, no se almacenan los estados repetidos, pero sí que
se registra toda la información que se tiene acerca de la última hora
en línea de un usuario, pues además de tener el dato absoluto (que
podría ser igual en varios registros), permite calcular la diferencia
de días, horas, minutos y segundos respecto de la hora que solicitó de
cara a establecer patrones de dependencia o adicción de un usuario a
Whatsapp.
Una vez creado el sistema descrito en la primera parte de este artículo,
la siguiente fase consistía en capturar información de manera periódica
que pudiera alimentar el sistema creado. Estos datos pueden permitir
después, analizar en detalle la información obtenida. El objetivo es
fácil de entender, si de una organización alguien es capaz de recoger
todos los números de teléfono de todos los empleados y hacer una base de
datos con toda la información que vierten en
WhatsApp, tendríamos una base de datos
OSINT que puede resultar muy útil en un esquema de
APT.
 |
| Figura 10: WhatsApp Intelligence como fuente OSINT en un APT (estados y fotos) |
De cara a alimentar el sistema con información constante que permitiera
obtener conocimiento, el siguiente paso fue programar la ejecución
periódica del
script mediante un
cron.
Dependiendo del objetivo que se tuviese en cada caso, se podría optar
por ejecutarlo con mayor o menor frecuencia, pero para este estudio
decidí evaluar qué resultado obtenía registrando diariamente la
información una única vez, todos los días a la
14:00 de la tarde.
Fotografías y estados para conocer la vida de una persona
Mi objetivo era contar por primera vez este trabajo en la
2ª edición de Hackron, nuestro congreso de
ciberseguridad en
Canarias, los días
13 y 14 de Febrero de este año (
aquí puedes ver el vídeo resumen de la conferencia), por lo que desde el momento en que tuve todo listo y empecé a registrar datos, el
19 de Enero, hasta el día de la ponencia transcurrieron
26 días, casi un mes.

En este período
Whatsaspp Intelligence estuvo registrando diariamente la información de 54 usuarios de
Whatsapp “
cazados” con
Whatsapp Discover, entre los que además de haber usuarios españoles, los había procedentes de otros países diferentes como
México, Turquía o Estados Unidos. En lo que a imágenes de perfil se refiere, el comportamiento de los usuarios varía. Los hay como el
Maligno o yo que siempre tenemos la misma foto de perfil, los hay que durante este período la modificaron
3 o 4 veces, y los hay que llegaron a tener hasta
9 imágenes distintas en estos 26 días, lo que da una media de
1 imagen de perfil nueva cada 3 días.
Figura 11: Vídeo de bug en Whatsapp web que permite capturar la foto de un contacto
El analizar constantemente el estado, la foto y los horarios de conexión
de una persona, puede generar mucha información. A día de hoy, debido a
los
bugs explotados recientemente con la versión de Whatsapp Web es posible siempre obtener la fotografía, tal y como se explica en el vídeo de de la
Figura 11 .
Con el asunto del estado hay un tema muy curioso. Mientras que un
usuario puede elegir si le deja ver el estado a todo el mundo o solo a
sus contactos, si la respuesta que se obtiene es un estado en blanco,
entonces eso implica obligatoriamente que ha seleccionado la opción de
"solo a mis contactos" y eso implica que no estamos entre ellos, ya que
ningún usuario puede configurar un mensaje de estado vacío en Whatsapp.
Explotando la información para generar conocimiento
Si analizamos las imágenes en conjunto, sin discriminar por usuario,
podemos apreciar algunas tendencias comunes a bote pronto. En primer
lugar, no pueden faltar las famosas frases de autoayuda, que a veces los
usuarios utilizan como fuente de motivación o para lanzar mensajes
“cifrados” a sus allegados.
 |
| Figura 12: Citas célebres en fotos de perfil de usuarios con WhatsApp |
Hay citas célebres de todo tipo, sin duda alguna una de las mejores es esa de
“A los hombres de mentira les queda grande una mujer de verdad”.
Si no tuviésemos más información de ese usuario, al menos ya
podríamos saber que es una mujer, y que probablemente esté
desilusionada con respecto a su vida sentimental o que está celebrando
el día de la mujer trabajadora.
Por otro lado, a pesar de que esto se aconseje por activa y por pasiva en l
as recomendaciones que damos siempre acerca de seguridad y privacidad en redes sociales,
sorprende ver también fotos de menores, no en cuentas de usuario de
los propios menores (lo cual es inevitable) sino en la de sus padres,
como en este ejemplo que se puede observar.
 |
| Figura 13: Fotos de menos de un usuario de Whatsapp |
Si analizamos el resto de la información que tenemos de este usuario
podemos averiguar muchísimos datos importantes sobre su vida. Así,
podemos saber el nombre de la empresa en la que trabaja (la primera
palabra que está ofuscada en la imagen a continuación), a qué se
dedica, y también los nombres de sus hijos, los menores que aparecen en
las fotos que hemos visto anteriormente echando un vistazo a la
información de sus diferentes estados:
 |
| Figura 14: Estados que revelan información profesional y nombres de menores |
Otros usuarios muestran en sus fotos de perfil información lugares o
ubicaciones geográficas así como fotos de sus mascotas o vehículos,
como podemos ver en esta imagen.
 |
| Figura 15: Imágenes de perfil que revelan lugares, mascotas o aficiones |
Sin duda, analizar la información de las fotos de perfil manera global
permite obtener conclusiones generales acerca de las costumbres de los
usuarios, pero lo realmente interesante es analizar de manera
individualizada para cada usuario la información que nos proporciona a
través de la conjunción de sus fotos de perfil junto con sus estados,
sobretodo para aquellos que modifican estos valores de su perfil con
asiduidad.
 |
| Figura 16: Usuario con múltiples fotos que incluye su nombre en una de ellas |
En la imagen que vemos sobre estas líneas, podemos ver uno de estos
usuarios que entre la multitud de fotos de perfil que ha ido subiendo a
lo largo de estos días, nos deja su nombre en la primera de ellas.
 |
| Figura 17: Usuario revelando sus sentimientos a base de alternar estados |
Si vemos luego la información que vuelca en sus estado del perfil,
podemos ver cómo alterna diferentes estados de ánimo. Frases como
“I'm in love” o
“Ya sé que es amor lo que siento hoy”, se suceden con otras tales como
“Pues que todos coman tierra”,
“voy a colgar”, o
“Ahorita no me hablen”. Esta última, de hecho está sincronizada en tiempo y fecha con la siguiente imagen de perfil.
 |
| Figura 18: Imagen de perfil que coincide con estado "Ahorita no me hablen" |
Por si no quedase del todo claro, este usuario ha querido mostrar por
doble vía al mundo o a esa persona que le tiene el alma en vilo que en
este momento no está para fiestas. Si es que ya se sabe que esto del
amor y las relaciones es como una montaña rusa de emociones, así que
sólo nos queda desearle suerte a nuestro amigo.
Hay muchísimos más ejemplos, de usuarios que revelan información
sensible acerca de su vida privada, que no he querido incluir en este
artículo por motivos evidentes. Usuarios que mencionan en sus estados
nombres de personas importantes en su vida, usuarios menores cuya
sucesión de fotos de perfil podría dar para un álbum fotográfico
completo, así como otros que revelan a través de sus fotos ubicaciones
de sus domicilios, aficiones o costumbres. Es muchísima la
información valiosa que se puede extraer analizando las fotos de perfil
y los estados de cada usuario.
Si sumamos la información que un empleado vierte en su
WhatsApp con fotos y mensajes de estados, al final podemos analizar el estado de ánimo de una empresa en un posible esquema de
APT
analizando las emociones que tiene su personal. Pero no solo eso, antes
de un posible ataque o de una intrusión física por medio de técnicas de
ingeniería social se podría saber cómo se encuentran hoy los guardias
de seguridad y las personas de la recepción.
¿Cuántas veces has
ido a una recepción de una empresa o la garita de seguridad y has visto a
los empleados que allí trabajan enviando mensajes con el Whtasapp?
 |
| Figura 19: Preparar el ataque a una empresa con el WhatsApp de sus empleados |
Realizando consultas sobre la base de datos que hubiéramos construido de
una empresa, podrían buscarse usuarios que transmitan sentimientos
como el amor, algo que se repite como ya hemos visto en algunos
ejemplos, la tristeza, la pena, el cansancio, el desencanto con su
trabajo, con los jefes o directamente con la empresa donde están.
¿No sería fácil elegir el turno de seguridad adecuado para hacer la
intrusión basándonos solo en el estado de ánimo de las personas que en
él trabajan?
 |
| Figura 20: usuarios que expresan amor en sus estados |
Respecto a las posibilidades para explotar la información de la última
hora en línea para cada usuario, además de mantener un registro
constante y periódico de sus conexiones, me pareció interesante
analizar también el nivel de dependencia que los usuarios tienen de
Whatsapp. Para esto existen muchas aproximaciones.
Una de ellas, bastante simple es realizar una consulta que obtenga los
números de teléfono para aquellos usuarios, que de todas las veces que
la herramienta haya registrado esta información, nunca hayan dejado de
estar en línea más de 2 horas - este umbral es evidentemente
adaptable - respecto de la hora que se hace la consulta, dejando un
margen de error de X días para no perder usuarios que un determinado
día puedan dejar de conectarse por circunstancias excepcionales.
SELECT number,count(*) FROM `lastseen` where days = 0 and hours
< '02:00:00' group by number having count(*) > (SELECT
floor(count(*)/count(distinct number))-5 from lastseen)
 |
| Figura 21: Usuarios que tiene excesiva dependencia de WhatsApp |
Realizando esa consulta, se obtienen por ejemplo una serie de números
de teléfono, entre los que se encuentra el mío que también incluí
entre la lista de targets. Si observamos el detalle de todas las veces
que yo mismo he estado en línea, vemos que en todas las ocasiones me he
conectado alguna vez en las dos horas anteriores a la hora de la
ejecución de
Whatsapp Intelligence salvo un día que
transcurrieron casi 3 horas, que casualmente coincidió con un día que
estaba viajando en avión. Por ejemplos como este es interesante
considerar ajustar los parámetros de la consulta y el margen de error
en función del objetivo que se persiga en cada caso.
Opciones de privacidad en WhatsApp
Es necesario aclarar que para para aquellos usuarios que hagan uso de
las funcionalidades que Whatsapp pone a su disposición para bloquear el
acceso a la foto de perfil solo para contactos conocidos, así como
restringir la visualización del estado o la última hora en línea, algo
se puede saltar. Es posible averiguar la última hora en línea
comprobando constantemente si un usuario está en línea hasta que
aparezca con el evento
onGetPresence, como también hacen las herramientas
Whatsapp Tracker o
WhatSpy-Public, aunque si se abusa de este método se corre el peligro de que nuestra cuenta sea baneada.
 |
| Figura 22: Opciones de privacidad de WhatsApp |
Para acceder a la fotografía, como ya se contó en la parte anterior, se puede utilizar el
bug de las fotos en la versión de WhatsApp Web. Por último, con el estado no hay mucho que hacer. Si se obtiene
un estado nulo, es que el número que usamos no está entre sus contactos, así que habría que buscar otra estrategia.
Posibles casos de ataque potenciales
Como se puede ver por todos los ejemplos que he ido exponiendo a lo largo de este artículo,
a día de hoy con un sencillo
script que haga uso de
API's como
Whatsapi o
Yowsup, alguien que quiera obtener información sensible de una empresa podría utilizar
Whatsapp como fuente
OSINT
con tan sólo disponer de nuestro número de teléfono. Este número,
que a pesar de que es un dato privado, es posible de obtener con
herramientas como
Whatsapp Discover en las redes
WiFi de las cafeterías cercanas a la empresa o en los lugares habituales de los empleados. Ya explicaba el
Maligno hace tiempo que para hacer un buen
pentesting a una empresa antes
había que hacer un Wardriving por la zona, en este caso para obtener de las redes
WiFi los números de
WhatsApp a meter en tu monitor de
WhatsApp Intelligence.
También es muy fácil obtener números de teléfono de usuarios de
Whatsapp en la red, haciendo un poco de hacking con buscadores, pues a día de hoy son muchos los usuarios que ofrecen
Whatsapp como vía de contacto en portales de anuncios, alquileres, o similares, y no digamos ya
si al final acaban en los programas de contactos.
 |
| Figura 23: Usuarios que facilitan su número de Whatsapp en milanuncios |
Por otro lado, existe todo un horizonte de posibilidades para continuar
explotando de manera automatizada la información que se obtiene con
Whatsapp Intelligence.
Desde intentar correlar las fotos de perfil de los usuarios con
posibles perfiles en redes sociales buscando estas imágenes con la
API de Google, hasta procesar la información de los
emoticonos Emoji que los usuarios incluyen en sus estados, que se corresponden con caracteres
Unicode.
Figura 24: Demo de WhatsApp Discover en Mundo Hacker
Todo esto sin olvidar que además de lo que hemos visto en este
artículo, analizando el resto del tráfico presente en una captura de
paquetes donde se haya obtenido el número de un usuario con
Whatsapp Discover también se puede obtener más información interesante, como este ejemplo que enseñé en la demo que hice en
Mundo Hacker donde se puede ver el caso de un usuario que en una red
WiFi pública de un hotel, que además de chatear por
Whatsapp estaba consultando perfiles de
Tinder (la famosa aplicación móvil para ligar), teniendo la posibilidad de obtener tanto su foto de perfil de
Whatsapp e identificarlo, así como las fotos de los perfiles de
Tinder que estaba visualizando.
 |
| Figura 25: Herramienta de Eleven Paths para monitorizar Telegram |
El volumen de información que se puede sacar de
WhatsApp
es grande, ya que se puede monitorizar hasta cuando un empleado llega
tarde al trabajo o está viviendo en otra franja horaria - está de viaje
-, pero si completamos esta base de datos con otros servicios como
Telegram que también permite monitorizar los mismos datos, u otras redes sociales como
Twitter, al final se tiene mucha información de una empresa por lo que sus empleados emiten por ellas.
Autor: Deepak Daswani
Sitio web: http://deepakdaswani.es
Twitter: @dipudaswani
Fuente: http://www.elladodelmal.com/