DroneTinder: Sistema de Espionaje Continuo en Redes Sociales

lunes, 20 de febrero de 2017

¿Qué es Tinder?

“Tinder es la nueva forma de conocerse. Es como la vida real, pero mejor”. Este es el eslogan de la popular aplicación Tinder. Una red social en la que utilizamos nuestro perfil de Facebook (y nuestro GPS) para conocer gente sin necesidad de movernos de casa.

Su uso, cada vez más extendido, está cambiando la forma de relacionarnos. Sin embargo, desde el punto de vista de un analista de ciberseguridad, ¿qué peligros puede tener una aplicación como esta para nuestra privacidad?

Con el proyecto DroneTinder, como parte del programa Universidades de ElevenPaths, en colaboración con el Máster en Ciberseguridad de la Universidad de Sevilla, hemos estudiado esta aplicación durante los últimos meses.


Descubriendo la API de Tinder

Después de instalar la app, iniciamos sesión con nuestra cuenta de Facebook e inmediatamente tenemos nuestro perfil listo para ligar en internet. Aparece una chica. Esta me gusta. Esta no… ¡Vaya! ¡Un match! Podemos empezar a intercambiar mensajes para finalmente conseguir una cita.

Si nos ponemos nuestro gorro de hacker, podemos repetir el proceso anterior preguntándonos qué está sucediendo realmente para que hayamos conseguido una cita y si en algún momento hemos puesto en peligro nuestra privacidad. Para ello, usaremos un proxy http con el que estudiar qué información intercambia nuestro dispositivo móvil y el servidor de Tinder. Esta es una técnica muy común para auditar aplicaciones móviles y servicios web. El tráfico va cifrado (menos mal), por lo que además necesitaremos instalar un certificado en nuestro dispositivo para hacernos un ataque man in the middle en toda regla.

Empezamos nuestro estudio a ciegas. Con algo de conocimiento sobre el protocolo HTTP, rápidamente aparece en nuestro proxy la primera pista, peticiones a la dirección https://api.gotinder.com. Si filtramos los mensajes intercambiados con este servidor, vemos que existe una API rest con la que nuestro teléfono se comunica.


Estudiando estos mensajes en formato JSON, vemos cómo podríamos utilizar la API de Tinder para realizar al menos las siguientes acciones:

  • Actualizar nuestro perfil (biografía, edad, género, género de interés y radio de búsqueda).
  • Actualizar nuestra coordenada GPS.
  • Obtener perfiles recomendados.
  • Obtener detalles de un perfil concreto.

Así, podríamos repetir nuestra visita guiada por la aplicación de la siguiente forma:

  • Instalamos la App.
  • Iniciamos sesión en Facebook y conseguimos un token que enviamos al servidor de Tinder, dándole acceso a nuestro perfil, fotos, edad, etc. 
  • A continuación el teléfono envía nuestra posición GPS. 
  • Solicitamos recomendaciones y Tinder nos envía una ráfaga de perfiles en formato JSON.


Hagamos una pausa aquí. En la aplicación se nos muestran fotos y una breve biografía de cada usuario. Sin embargo, ¿qué información nos está enviando Tinder realmente de esos usuarios?

Encantado de conocerte, usuario de Tinder.

La petición a https://api.gotinder.com/user/recs, debidamente firmada con nuestro token de acceso, nos da la respuesta. A continuación podemos ver un ejemplo de la misma, con algunos campos modificados, porque nosotros sí respetamos la privacidad de los usuarios de Tinder.

{
  "status": 200,
  "results": [
    {
      "distance_mi": 12,
      "common_connections": [],
      "connection_count": 12,
      "common_likes": [],
      "common_interests": [],
      “Instagram”: “XXX”,
      "uncommon_interests": [],
      "common_friends": [],
      "content_hash": "2o4igQta6H37C7jtgu1jIQasl1HMlI1riYNFr4FPptRpcX1",
      "_id": “XXX”,
      "badges": [],
      "bio": "",
      "birth_date": "1993-01-29T19:04:05.660Z",
      "name": “XXX”,
      "ping_time": "2017-01-26T17:19:50.017Z",
      "photos": [
        {
          "id": “XXX”,
          "url": "http://images.gotinder.com/XXX.jpg",
          "processedFiles": [
            {
              "width": 640,
              "height": 640,
              "url": "http://images.gotinder.com/XXX.jpg"
            },
            {
              "width": 320,
              "height": 320,
              "url": “XXX.jpg"
            },
            {
              "width": 172,
              "height": 172,
              "url": "http://images.gotinder.com/XXX.jpg"
            },
            {
              "width": 84,
              "height": 84,
              "url": "http://images.gotinder.com/XXX.jpg"
            }
          ]
        }
      ],
      "is_traveling": false,
      "jobs": [],
      "schools": [
        {
          "id": "1087351381344781",
          "name": "Yildiz Technical University"
        }
      ]
      "hide_age": false,
      "hide_distance": false,
      "s_number": 60819127,
      "gender": 0,
      "birth_date_info": "fuzzy birthdate active, not displaying real birth_date"
    },
    ...
  ]
}

Pero empezamos a preocuparnos. Analizando esta respuesta, conseguida con tan solo abrir la aplicación, podemos saber la siguiente información de un usuario:

  • Fecha de nacimiento aproximada (birth_date)
  • Cuenta de Instagram
  • Distancia a la que se encuentra de nosotros (distance_mi)
  • La última vez que usó la aplicación (ping_time)
  • Si está moviéndose (is_traveling)
  • ID de usuario
  • Y lo más sorprendente. ¡Todas las fotos están accesible desde direcciones 100% públicas en Internet!

Además, conociendo el ID de usuario, descubrimos que podemos obtener su perfil actualizado en todo momento (incluida la distancia a la que está de nosotros) con una petición a https://api.gotinder.com/user/id

Llevando a cabo nuestro plan

Una vez que sabemos qué información nos puede dar Tinder y cómo conseguirla, podemos diseñar una herramienta con la que conseguir los objetivos de este proyecto.

Geolocalizar a un usuario de Tinder en todo momento
Para conseguir este objetivo, nos planteamos usar algoritmos de triangulación. Sin embargo, Tinder nos indica una distancia mínima de una milla, ya estemos al lado de nuestro objetivo o a 1.5 millas, por lo que existiría demasiado error.

No obstante, sí podríamos mantenernos siempre a una milla de nuestro objetivo, moviéndonos con cierto sentido en el radio al que Tinder nos indica que está el usuario para acercarnos hasta esa distancia mínima.

De esta forma, aunque no consigamos una precisión del 100%, sí podemos conocer en qué zona se encuentra nuestro objetivo, por ejemplo, cuándo va a trabajar, qué ruta sigue, si se encuentra en la ciudad, etc.


Enriquecer perfiles
Gracias a los compañeros de ElevenPaths, Félix Brezo y Yaiza Rubio, podemos utilizar OSRFramework para obtener más información de nuestros objetivos. Esta herramienta se apoya en la idea de que un usuario suele utilizar un mismo seudónimo en múltiples redes sociales y sitios de Internet, por lo que lo utilizaremos para realizar una búsqueda en más de 200 plataformas usando la cuenta de Instagram que aparece en cada perfil de Tinder.


Estudiar una zona concreta
Con la API de Tinder podemos movernos a donde queramos y saber qué usuarios están allí. Podríamos plantearnos monitorizar una superficie durante meses para después estudiar qué usuarios pasaron por allí, conocer qué directivos de tu compañía están en Tinder, sus fotos, cuándo vienen, cuándo se van, etc.


Para ello hemos desarrollado un bot con el que automatizar las peticiones a Tinder, así como una aplicación Web sobre la que poder almacenar y estudiar los datos obtenidos.

Esta aplicación nos permite filtrar usuarios de Tinder en una zona concreta, para así obtener el ID de nuestro objetivo y comenzar su geolocalización continua. Además, podemos añadir coordenadas para monitorizar los usuarios que aparecen, realizar búsquedas en todos los perfiles añadidos a nuestra Base de Datos, etc.

En el siguiente vídeo podemos ver la herramienta DroneTinder en funcionamiento. Hemos ocultado imágenes y datos personales para proteger la privacidad de los usuarios.



Julio García Pérez
ElevenPaths Software Developer

3 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. Muy bueno el articulo, lo único que he probado https://api.gotinder.com/user/miusuario y me devuelve un 403. Supongo que desde el momento en el que fue detectado hasta ahora, ya se ha solucionado el "data leakage".

    ResponderEliminar
    Respuestas
    1. Has firmado la petición con el token de acceso de la app? No lo he probado, pero puede ser el motivo por el cual te saca un 403.

      Un saludo!

      Eliminar