DroneTinder: Sistema de espionagem contínuo em redes sociais

quinta-feira, 23 de fevereiro de 2017

O que é Tinder?

“Tinder é uma nova forma de se conhecer. É como a vida real, mas melhor”. Esse é o slogan do popular aplicativo Tinder, uma rede social na qual usamos nosso perfil no Facebook (e nosso GPS) para conhecer pessoas sem sair de casa.

Seu uso, cada vez mais popular, está mudando a forma como nos relacionamos. Porém, do ponto de vista de um analista de cibersegurança, que perigos um aplicativo como esse representa à nossa privacidade?

Com o projeto DroneTinder, que faz parte do programa Universidades ElevenPaths em colaboração com o Mestrado em Cibersegurança da Universidade de Sevilla, Espanha, estudamos a aplicação durante os últimos meses.


Descobrindo a API do Tinder

Depois de instalar o app, iniciamos uma sessão com nossa conta do Facebook e imediatamente temos nosso perfil pronto para "paquerar" na Internet. Aparece uma menina. Essa eu gostei, essa não.. Opa, um match! Começamos a trocar mensagens para, finalmente, sair num encontro.

Se colocamos nosso gorro de hacker, podemos repetir o processo anterior perguntando-nos o que realmente aconteceu para conseguirmos esse encontro e, se em algum momento, colocamos em perigo nossa privacidade. Para isso, usaremos um proxy http, que estuda qual é a informação trocada entre nosso dispositivo móvel e o servidor do Tinder. Essa é uma técnica muito comum para auditar aplicativos móveis e serviços web. O tráfico vai cifrado (ainda bem!) e, além disso, necesitamos instalar um certificado no nosso dispositivo.

Começamos nosso estudo às cegas. Conhecendo um pouco do protocolo HTTP, rapidamente aparece em nosso proxy a primeira pista, uma solicitação ao endereço https://api.gotinder.com. Se filtramos as mensagens trocadas com esse servidor, vemos que existe uma API rest com a qual nosso telefone se comunica.


Estudando essas mensagens de formato JSON, vemos como poderíamos usar a API do Tinder para realizar, pelo menos, as seguintes ações:

  • Atualizar nosso perfil (biografia, idade, gênero, gênero de interesse e raio de busca).
  • Atualizar nossa coordenada GPS.
  • Obter perfis recomendados.
  • Obter detalhes de um perfil concreto.

Assim, poderíamos repetir nossa visita guiada pelo aplicativo da siguiente forma:

  • Instalamos o app.
  • Iniciamos a sessão no Facebook e conseguimos um token que enviamos ao servidor do Tinder, permitindo-o acceso ao nosso perfil, fotos, idade, etc. 
  • Em seguida, nosso telefone envia nossa localização GPS ao aplicativo. 
  • Solicitamos recomendações e o Tinder nos envia uma explosão de perfis em formato JSON.


Vamos fazer uma pausa aqui. A aplicação nos mostra fotos e uma breve biografia de cada usuário. Porém, que informação o Tinder nos está enviando realmente sobre esses usuários?

Prazer em te conhecer, usuário do Tinder.

O requerimento a https://api.gotinder.com/user/recs, devidamente assinada com nosso token de acesso, nos dá a resposta. Em seguida, podemos ver um exemplo da mesma, com alguns campos modificados, porque nós respeitamos a privacidade dos usuários do 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"
    },
    ...
  ]
}

Começamos a nos preocupar. Analizando essa resposta, obtida simplesmente ao abrir o aplicativo, podemos saber a seguinte informação de um usuário:

  • Dia de nascimento aproximado (birth_date)
  • Conta no Instagram
  • Distância que se encontra de nós (distance_mi)
  • Última vez que usou o aplicativo (ping_time)
  • Se está se movendo (is_traveling)
  • ID do usuário
  • E o mais surpreendente: Todas as fotos estão disponíveis em endereços 100% públicos na Internet!

Além disso, conhecendo o ID do usuário, descobrimos que podemos obter seu perfil atualizado a todo momento (incluindo a que distância está de nós) com uma solicitação a https://api.gotinder.com/user/id

Executando nosso plano

Agora que sabemos que informação o Tinder nos pode fornecer e como consegui-la, desenhamos uma ferramenta para atingir os objetivos desse projeto.

Geolocalizar um usuário do Tinder a qualquer momento
Para atingir esse objetivo, usamos algorítimos de triangulação. Apesar disso, o Tinder nos indica uma distância mínima de uma milha, mesmo que estivermos ao lado do nosso objetivo ou a 1,5 milhas, o que já significaria um erro.

Contudo, é verdade que poderíamos estar sempre a uma milha do nosso objetivo, se nos movêssemos em um certo sentido indicado pelo Tinder, sentido em que está o usuário, para nos aproximarmos dessa distância mínima.

Dessa forma, ainda que não alcancemos uma precisão de 100%, podemos conhecer em que zona se encontra nosso objetivo. Por exemplo, quando sai para trabalhar, o caminho que faz, se está pela cidade, etc.


Enriquecendo perfis
Graças aos nossos companheiros de ElevenPaths, Félix Brezo e Yaiza Rubio, podemos usar OSRFramework para obter mais informações sobre nossos objetivos. Essa ferramenta se baseia na premissa que um usuário costuma usar o mesmo pseudônimo em várias redes sociais e páginas da internet, e nós o utilizaremos para realizar uma pesquisa em mais de 200 plataformas usando a conta de Instagram que aparece em cada perfil do Tinder.


Estudar uma zona concreta
Com a API do Tinder, podemos ir a onde quisermos e saber quais usuários do Tinder estão por ali. Poderíamos monitorar uma superfície durante meses para depois estudar o que aconteceu nesta area, conhecer quais diretores da sua empresa estão no Tinder, suas fotos, quando chegam, quando vão embora...


Para isso, desenvolvemos um bot para automatizar os requerimentos ao Tinder, assim como um aplicativo Web para poder armazenar e analizar os dados obtidos.

Esse aplicativo nos permite filtrar usuários de Tinder em uma zona concreta, para então obter o ID do nosso objetivo e acessar sua geolocalização. Além disso, podemos adicionar coordenadas para monitorar os usuários que aparecem, realizar buscas em todos os perfis adicionados na nossa base de dados, etc.

No video a seguir, podemos ver a ferramenta DroneTinder em funcionamento. Ocultamos imagens e dados para proteger a privacidade dos usuários.



Julio García Pérez
ElevenPaths Software Developer

Nenhum comentário:

Postar um comentário