Un "hack" con Latch para controlar accesos a GitHub

martes, 10 de febrero de 2015

En esta entrada mostraremos un ejemplo de cómo podemos usar Latch en servicios que no han realizado aún la integración. En este caso con una cuenta de Github. Aun tratándose de un "hack" (puesto que la integración no es oficial), esta entrada pretende despertar la imaginación sobre fórmulas curiosas que se pueden utilizar para integrar Latch con otros sistemas y, de paso, conocer cómo funcionan detalladamente algunos servicios como el mencionado GitHub.

Lo que vamos a hacer es un hack, de forma análoga al que se utilizó para proteger una cuenta de Facebook, o Apple iCloud. GitHub también permite visualizar y cerrar sesiones abiertas en nuestra cuenta, por lo que es susceptible de ser utilizado con la misma filosofía.

Información sobre las sesiones que muestra GitHub

En este panel se puede ver información de que sesiones tenemos abiertas en ese momento, localización, dispositivos, plataformas, fecha de último acceso, etc. y mediante el botón "Revoke" cerrar aquellas que se deseen. Para la integración, lo único que tenemos que hacer entonces, 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.

Por supuesto, anteriormente, habremos creado nuestra aplicación en el área de desarrolladores de Latch para obtener tanto un Application Id como un Secreto.

Configuración de Latch para GitHub

Con la aplicación creada o bien mediante una llamada cURL o bien mediante cualquiera de los SDKs es posible realizar un pequeño script de pareado donde se debe emparejar nuestra cuenta de Latch con esta nueva aplicación. Sirva de ejemplo el siguiente código PHP.

Código PHP para emperejar

Tras ejecutar el script, se obtendrá el accountId de este usuario. Este será el accountId que debe guardarse, sobre el que realizar las consultas posteriormente.

Configurada la cuenta de Latch, lo que se debe hacer es un servicio que constantemente consulte la siguiente URL, interprete su contenido y extraiga en nuestro programa la información de las sesiones abiertas en GitHub: https://github.com/settings/security

Para realizar esta tarea y para ilustrar esta prueba de concepto (de forma similar al hack realizado para Facebook y iCloud), usaremos el web-driver de Selenium. Hay que tener en cuenta que haciendo esto, estamos abriendo a su vez una nueva sesión que no deberemos cerrar, para mantener activo el servicio.

Una vez cargada esta URL, se realizará el siguiente ciclo:

  • Extraer las sesiones activas.
  • En caso de existir una sesión nueva, consultaremos a Latch para comprobar su estado.
  • Con el Latch cerrado, cerramos la nueva sesión, si estuviese abierto almacenaríamos la nueva sesión.
  • Eliminar aquellas sesiones abiertas que puedan no existir ya.
  • Volver a cargar el contenido y repetir el ciclo.


En el siguiente vídeo se puede ver el funcionamiento de la monitorización con Selenium (ventana al fondo) y de un intento de acceso teniendo el Latch bloqueado.




Como se puede apreciar, con esto no estamos bloqueando el acceso a la cuenta, pero sí que servirá como alerta para saber cuándo se ha producido un acceso (no autorizado) y mitigar su efecto invalidando la sesión. El usuario será expulsado automáticamente si intenta realizar cualquier acción, como por ejemplo (y así se aprecia en el vídeo), al intentar acceder a la configuración de la cuenta.

Adicionalmente, podríamos utilizar todo el potencial de Latch para añadir operaciones para distintos tipos de sesiones (dispositivos móviles, ordenador…), así como incluso filtrar por ubicaciones o direcciones IP, puesto que toda esta información está disponible.


Javier Espinosa
javier.espinosa@11paths.com

No hay comentarios:

Publicar un comentario