terça-feira, 10 de janeiro de 2017

iFood + Python + Gephi == Food Stalker

Pessoal,

Nesta postagem eu vou estar falando um pouco sobre uma pequena ideia que eu tive durante o final de semana: analisar as avaliações de restaurantes/lanchonetes presentes no aplicativo do iFood para retirar informações de preferências de usuários sobre uma determinada região (latitude e longitude). A abordagem apresentada pode ser utilizada como um vetor de pesquisas durante uma atividade de levantamento de informações (OSINT).

Ambiente de Teste

O ambiente de testes foi composto por 3 elementos:
  1. iPhone 5S com aplicativo instalado
  2. VM Android (Genymotion) com aplicativo instalado. 
  3. Kali Linux com Burp Proxy (interceptação e análise das requisições HTTP).
Requisições HTTP

O aplicativo realiza 3 requisições importantes para a pesquisa de locais.
  • /ifood-ws-v3/address/locationsByLatLon: define a localização do usuário a partir de suas coordenadas (latitude e longitude). Este método do Web Service retorna uma variável "locationId" que será utilizada nas demais requisições (demonstrado na figura 01).
Figura 01: Obtendo a localização do usuário
  • /ifood-ws-v3/restaurant/list: utiliza o parâmetro "locationId" para obter uma lista dos restaurantes/lanchonetes próximos ao usuário. Cada restaurante identificado na região do usuário apresenta um identificador único: "restaurantId" (demonstrado na figura 02).
Figura 02: Obtendo lista de restaurantes
  • /ifood-ws-v3/restaurant/evaluations: retorna uma lista com as avaliações realizadas pelos usuários da aplicação para um determinado restaurante/lanchonete (demonstrado na figura 03).
Figura 03: Obtendo lista de avaliações

Prova de conceito (PoC)

Eu criei um script em Python para gerar as requisições HTTP e obter as avaliações de usuários sobre os restaurantes próximos a uma determinada localização (latitude e longitude). Estou utilizando a biblioteca NetworkX para gerar um grafo direcionado com todas as relações entre usuários e locais. A ferramenta Gephi esta sendo utilizada para visualizar o grafo gerado pelo script. O vídeo abaixo demonstra a execução do script.