martes, enero 13, 2015

Un "hack" con Latch para controlar accesos a Facebook

Desde que lanzamos Latch hace ya un año, incontables han sido los comentarios de gente que nos ha preguntado si es posible utilizar Latch con los servicios de Internet más utilizados como Facebook, Gmail, Twitter, o para cuándo estaría Latch disponible en estos servicios. Es difícil de decir, cuando esas compañías integra cada una de ellas sus propias soluciones - y algunas de ellas no están disponibles ni tan siquiera en todos los países - como el OTP de Twitter en España y Latinoamérica. A nosotros nos encantaría que lo hicieran, pero mientras tanto, como también nos gusta jugar con la tecnología y aportar soluciones, yo me he hecho un hack para que si en algún momento alguien quiere ser avisado vía Latch en el momento en que alguien acceda a tu Facebook.

Figura 1: Un "hack" con Latch para controlar accessos a Facebook

Como sabéis Latch es sumamente fácil de integrar gracias a sus plugins y SDKs, por eso su variedad de usos y utilidades llegan tan lejos como las ideas de aquellos que decidan integrarlo. En este sentido ya hemos visto integraciones muy interesantes, desde para controlar cerrojos físicos a securizar un lector de DNI­e en el acceso a un recinto, pasando por integrar los routers OpenWRT, el uso de conexiones bluetooth, un servidor FTP, archivos con dos llaves, los propios sistemas OS X, el hot-plug de dispositivos USB o el login en Active Directory. Por eso decidimos premiar los mejores plugins en el concurso que termina esta semana.

Sesiones Activas en Facebook

Hoy vamos a ver cómo podemos añadir una protección extra en nuestra cuenta de Facebook sin necesidad de que este servicio haya realizado la integración con Latch, haciendo un hack para los amigos de hacer cosas curiosas con la tecnología. Para ello, vamos a hacer uso de la función “Dónde has iniciado sesión” que incorpora Facebook en su área de seguridad, dentro del perfil del usuario. En esta sección podemos ver información de que sesiones tenemos abiertas en cada momento, y desde qué dispositivos y plataformas se han abierto; pero sobre todo y lo más importante, incorpora unos enlaces que nos permite cerrar bien todas las sesiones abiertas o bien aquellas concretas que deseemos.

Figura 2: Sesiones abiertas en Facebook

Esto es lo que vamos a utilizar como comprobación y reacción a Latch. Es fácil caer en la cuenta que lo único que tenemos que hacer es monitorizar esta página y en el momento en que se detecte una nueva sesión, realizar una consulta a Latch para determinar si la mantenemos abierta o la invalidamos.

Paso 1: Creación de aplicación Latch para Facebook y el pareado

Por supuesto, lo primero que tenemos que hacer es crear nuestra aplicación en el área de desarrolladores de Latch para obtener tanto un Application Id como un Secreto, la configuraremos con OTP deshabilitado porque no vamos a hacer desafío respuesta con un código.

Figura 3: Creando la aplicación Latch en el Area de desarrolladores de Latch

Con la aplicación creada y, o bien mediante una llamada cURL o bien mediante cualquiera de los SDKs de Latch, realizaremos un pequeño script de pareado donde emparejaremos nuestra cuenta de Latch con esta nueva aplicación. Sirva de ejemplo el siguiente código PHP.

Figura 4: Código de PHP para obtener un pareado con un usuario de Latch

Tras ejecutar el script, obtendremos el AccountId de este usuario. Éste será el AccountId que debemos guardar ya que será sobre el que se deberán realizar las consultas de estado a los servidores de Latch posteriormente. 

Paso 2: Obteniendo las sesiones abiertas en Facebook

Configurada la cuenta de Latch, lo que tenemos que hacer es un servicio que constantemente consulte la siguiente URL, parsear su contenido y extraer en nuestro programa la información de las sesiones abiertas en Facebook:


Este trabajo también podemos realizarlo sobre la URL para la versión de móviles, cuyo contenido es menor y por tanto el proceso será mucho más eficiente en tiempo:


Para realizar esta tarea tenemos múltiples posibilidades, desde scripts que hagan llamadas curl a herramientas de automatización como por ejemplo el Web­driver de Selenium; lógicamente esta última opción ofrece peor performance puesto que estamos innecesariamente renderizando el contenido, pero ilustra mejor esta prueba de concepto. Hay que tener en cuenta que haciendo esto, estamos abriendo una nueva sesión que no deberemos cerrar, para mantener activo el servicio. En cada iteración y carga de dicha URL nuestro servicio deberá:
1. Comprobar las sesiones activas
2. Si aparece una sesión que no tuviéramos almacenada, realizar una llamada de status a la API de Latch.
3. Si la llamada devuelve status “off”, terminar la nueva sesión, en caso contrario almacenarla como sesión abierta.
4. Comprobar si alguna de nuestras sesiones abiertas ya no existe, para eliminarla.
5. Repetir el proceso volviendo a cargar el contenido.
Paso 3: Automatizando con Selenium

Como se ve a continuación podemos realizar en pocas lineas esta tarea con Selenium utilizando el WebDriver de Mozilla Firefox. El propio programa se encargara de lanzar el navegador, únicamente necesitamos tener instalado Firefox en nuestro equipo. El código completo de esta prueba de concepto puede consultarse aquí Hack de Latch para Facebook:

Figura 5: Automatización de Selnium para consultar Latch y bloquear sesiones Facebook
Con esto no estamos bloqueando el acceso a nuestra cuenta, pero si que nos servirá a modo de alertas para saber cuando se ha producido un acceso no autorizado y mitigar su efecto invalidando la sesión y dándonos prisa para cambiar todas las contraseñas.

El usuario será expulsado a los pocos segundos automáticamente o si intenta realizar cualquier acción como por ejemplo leer los mensajes se le redirigirá a la pantalla de login. En el siguiente vídeo podéis ver el funcionamiento de la monitorización con Selenium (parte izquierda) y de un intento de acceso teniendo Latch bloqueado (parte derecha).

Figura 6: Vídeo demostrativo de esta Prueba de Concepto de bloqueo de Facebook con Latch

Este hack se podría utilizar como sistema de alerta, no necesariamente con Selenium, sino con cualquier programa a medida que dejemos funcionando en un servidor en la cloud que nos sirva de "Vigilante" y que pueda usarse, por ejemplo, como forma de Control Parental del uso de Facebook en menores. Recuerda que en Facebook puedes activar el Generador de códigos de la app de Facebook para el terminal móvil, que protege contra conexiones infrecuentes.

Otros hacks posibles con Latch de forma similar

Adicionalmente podríamos utilizar todo el potencial de Latch, añadiendo operaciones para distintos tipos de sesiones dependiendo de dispositivos móviles, equipo de conexión, horas, ubicaciones o direcciones IP ya que toda esta información está disponible. Este mismo concepto, se puede aplicar también de forma análoga en cuentas de Google / Gmail, donde en la parte inferior de nuestra bandeja de entrada, encontraremos un enlace “Información detallada”.

Figura 7: Actividad de cuenta de Google (Gmail)

A través de este enlace podemos abrir una ventana con información de las sesiones activas. En este caso, no podemos cerrarlas individualmente, pero sí podremos invalidarlas todas, haciendo clic en el botón. Cómo veis las posibilidades de integración con Latch son múltiples. En una próxima entrada veremos cómo establecer un sistema de alertas en nuestra cuenta de Twitter con Latch, mientras tanto recordar que aún quedan algún tiempo para participar en el Concurso de plugins de Latch, donde se pueden ganar hasta 10.000$ con ideas - tal vez - como esta.

Autor: Javier Espinosa
Ingeniero "Latch" en Eleven Paths

Actualización: Como continuación de este trabajo se hizo una implementación similar para Controlar con Latch los accesos a Apple iCloud, para GitHub y también para Gmail.

9 comentarios:

  1. Congratulations Eleven Paths!
    Saludos Chema!

    ResponderEliminar
  2. Tambien lo pense como propuesta para el concurso, pero tener que tener una tercera maquina en constante execucion hace poco util el plugin para el publico en general, pense en usar el propio smartphone para ello, pero entonces Latch seria del todo inecesario ya que todo el trabajo lo podria realiazar la propia app. Ademas tener que poner tus credeciales de fb en otro proceso creo que romperia con la filosofia de Latch.
    De todas formas muy buen trabajo

    ResponderEliminar
  3. Genial aporte Javier, siempre quise usar LATCH en Facebook.
    En verdad un gran aporte!!!

    Saludos desde Puno-Peru!

    ResponderEliminar
  4. Perdonaa chema la molestia pero no soy un experto en computadoras y quisiera vincular Latch con mi cuenta de Facebook pero no lo e logrado con exito.. porfavor podrias ayudarme..

    Saludos.

    ResponderEliminar
  5. Muy bien, podrían hacer un vídeo tutorial de como hacerlo, sería de gran ayuda.Gracias.

    ResponderEliminar
  6. Un video tutorial seria interesante para los k no entendemos mucho . Un saludo

    ResponderEliminar
  7. Podrias hacer un video tutorial de como usar latch con Facebook, Gmail y Hotmail, porque no se como usar los comandos que pones.

    Gracias.

    ResponderEliminar
  8. Por favor podrías poner algunas imágenes de como se haría con python, porque siempre que intento conseguir el account id me falla y luego ya no se que hacer.

    ResponderEliminar
  9. IItheshadowII31/1/16 1:54 a. m.

    Chema debes estar con mucho laburo , pero si logras que la integración a gmail,face y hotmail sea sencilla aun que sea por hack para gente que no sabe programar latch se usaría en miles de usuarios mas. Saludos

    ResponderEliminar