Mostrando entradas con la etiqueta latch. Mostrar todas las entradas
Mostrando entradas con la etiqueta latch. Mostrar todas las entradas

17 marzo 2014

Integrando Latch con Django


La verdad es que llevo mucho tiempo queriendo contribuir a la excelente labor que hacen los chicos de SbD y por falta de tiempo nunca he llegado hacerlo pero durante su charla en RootedCON, Chema me lanzó el guante diciéndome que publicara la integración de Django con Latch y esta vez, no puedo escaquearme.

¿Qué es Latch?

A estas alturas, ya todos debéis conocer que es Latch, pero por si hay algún despistado por aquí, Latch es un sistema de pestillos digitales desarrollado por ElevenPaths. Con este sistema puedes bloquear las cuentas de los servicios siempre que no los utilices, fácil y sencillo, pero muy útil.

De Latch ya escribió mi gran amigo Alejandro, podéis verlo aquí: 
http://www.securitybydefault.com/2013/12/configurar-latch-para-proteger-un.html

Django y Latch

Para los que no quieran leerse todo el rollo, el código del módulo de Latch para Django podéis descargarlo de https://github.com/rootedcon/django-latch e instalarlo y añadirlo directamente a vuestro proyecto.

$ git clone https://github.com/rootedcon/django-latch.git
$ cd django-latch
$ python setup.py install

Configurando el módulo en la aplicación Django

Con el módulo instalado, tenemos que configurar nuestra aplicación Django para utilizarlo.

1. Configurar la aplicación, editando settings.py

# Añadir la app en las INSTALLED_APPS
INSTALLED_APPS = (
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'latch',
)
# Añadir el modelo de usuario en settings.py
AUTH_PROFILE_MODULE='latch.UserProfile'
# Establecer el backend de autenticación
AUTHENTICATION_BACKENDS = (
'latch.auth_backend.LatchAuthBackend',
)

2. Añadir la URL, editando urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin

admin.autodiscover()
admin_url = 'admin'
urlpatterns = patterns('',
     url(r'^%s/' % admin_url, include(admin.site.urls)),
     url(r'^latch/', include ('latch.urls')),
)

3. Sincronizar la base de datos: 
$ ./manage.py syncdb

Ya tenemos nuestra aplicación lista para empezar a emparejar cuentas!

Configuración de Latch

El primer paso, una vez configurada la aplicación Django, es crearse una cuenta de desarrollador para la aplicación. Esto es necesario para poder realizar peticiones al API y de esta forma emparejar y desemparejar las cuentas de usuario.


Con estos datos, podemos ir a http://URL/admin/latch/latchsetup/ y configurar el Application ID y el secreto:



Con esto, los usuarios ya pueden empezar a emparejar sus cuentas con Latch!

Gestión de cuentas

Para emparejar una cuenta, es necesario haber iniciado sesión con el usuario que queremos emparejar. Con la sesión iniciada, navegamos a http://URL/latch/pair y generamos un token de emparejado en la aplicación móvil:


Introducimos el código en la aplicación y si no hay ningún error, tendremos la aplicación emparejada con Latch.


Una vez emparejado, podemos comprobar el estado en http://URL/latch/status


Ahora ya podemos utilizar Latch para abrir o cerrar el acceso a la aplicación con este usuario.

Si queremos desemparejar la cuenta, podemos ir a http://URL/latch/unpair, marcamos el tick de confirmación y clickeamos ‘Unpair’


¡Fin!

Pues nada… ahora ya puedes disfrutar de tu aplicación Django protegida con Latch y evitar usos no deseados de tus cuentas.

El proyecto está recién salido del horno y seguramente pueda mejorarse, siéntete libre de realizar modificaciones y si quieres, puedes enviar una petición y lo añadiremos a la rama maestra.

Espero que os sea útil y no dudéis en enviar cualquier comentario!

Gracias a SbD por dejarme un hueco para publicar esto y compartirlo con vosotros. ¡Espero veros por RootedCON algún día! :D


 Javier Olascoaga - Founder @ RootedCON 



Leer más...

23 diciembre 2013

Configurar Latch para proteger un servidor FTP

La empresa 11Paths ha presentado Latch, una servicio que hace las funciones de lo que han denominado pestillo digital, por el paralelismo al proteger al usuario incluso aunque le hayan robado sus llaves.

El sistema es brillantemente sencillo, se basa en minimizar el tiempo de exposición para lo que permite habilitar y deshabilitar el acceso a una cuenta, sea del tipo que sea, mediante una aplicación móvil.

Imaginamos que yo soy usuario de una página web que requiere usuario y contraseña. Si alguien obtiene esos datos podrá conectar sin problemas haciéndose pasar por mi. Me robará mi información. Latch es un interruptor que deja inactiva la cuenta cuando yo no la uso, además me avisará con una notificación en mi móvil si alguien trata de identificarse con mis credenciales y el acceso esta bloqueado.

Funciona de tal forma que a los sistemas en la nube de Latch nunca le llegarán datos del usuario, ni el nombre de usuario, ni la contraseña. Nada. Tan solo ordenes de activar y desactivar una aplicación.

Si eres un usuario es tan sencillo como descargar la aplicación móvil para iPhone, Android o Windows Phone y registrarte con un usuario y contraseña de Latch. Las webs o servicios que añadan soporte te pedirán que introduzcas un código que se genera desde el móvil para emparejarlos. Una vez hecho, en el móvil se mostrará un interruptor para abrir o cerrar el acceso.

En el caso de que quieras integrarlo en tu pagína web es tan sencillo como llevar a cabo un par de peticiones REST a su API, que está perfectamente documentada en la web desarrolladores de Latch. También hay SDKs para los lenguajes más populares como python, php, java, .NET, ruby o C. Si quieres usarlo en algún blog es aun más fácil, ya que tienen plugins para  los gestores de contenidos más conocidos, como Joomla, Wordpress, Drupal o incluso tiendas online como Prestashop. Tres clicks y está funcionando.

Para probarlo a fondo lo he integrado en el servicio GLFTPD, creando un par de scripts en bash. Los pasos han sido sencillos.

Lo primero fue darme de alta como desarrollador y crear un ApplicationID y Secretkey para mi aplicación. Estos datos son necesarios para hacer llamadas a la API, que tan solo permite tres funciones: emparejar/desemparejar dispositivos y comprobar el estado de un usuario.

Añadir una nueva aplicación.

Para activar el servicio los usuarios deben emparejar sus móviles y mi FTP, para luego poder comprobar si está habilitado o deshabilitado el acceso. Así que para registrarlos cree un script que pide el código que genera el móvil. Con este código del móvil, junto al ApplicationID y el Secret genero una petición HTTP contra el servicio de Latch que devuelve un hash de usuario denominado AccountID y que guardaré en un nuevo fichero con una relación de usuario:hashAccountID



El script de registrar se llamará mediante un comando FTP del tipo "SITE", que más tarde configuraré en el GLFTPD.

El funcionamiento del registro funcionaría tal y como muestra las siguientes imagenes:

Fase de registro en Latch 1.

Fase de registro en Latch completada.

El siguiente paso es comprobar mediante otra petición HTTP si el usuario está habilitado o no justo después de que introduzca la contraseña. Para ello GLFTPD ejecutará un script (status.sh) en el que verificar el AccountID justo después de recibir el comando FTP "PASS". Si el usuario no se ha dado de alta (o no es usuario de Latch) se le deja pasar. Si es usuario y está a "off", se le bloquea el acceso mediante un "sleep" hasta que de timeout. Si está en "on" pues se le deja pasar.



Cuando un usuario tiene desactivado el servicio y trata de conectar, en el móvil se muestra la alerta y se prohíbe el acceso:

Aplicación Latch con bloqueo activado.


MEEEC! El servicio está protegido.

También hay que habilitar un comando "SITE" para aquellos que quieran dejar de usar el servicio (¡seguro que ninguno!). Para ello, otro script.

Y por último, configurar el servidor GLFTPD (glftpd.conf) para que use los scripts. Por supuesto, hará falta hacer que 'wget' funcione dentro del chroot del servidor ftp.




Leer más...