Securizando un VPS con LATCH (I)

LATCH LOGO

Antes de empezar con el contenido técnico del post, hay que responder a una pregunta: Qué es LATCH?

LATCH

LATCH es un servicio ofrecido por la empresa de seguridad española Eleven Paths, el cual actúa a modo de pestillo de nuestras identidades digitales.

Esto nos permite que, por ejemplo, en el caso que alguien obtenga nuestro nombre de usuario y contraseña de algún servicio digital, poder evitar que esa persona se haga pasar por nosotros simplemente "cerrando el pestillo" desde nuestra cuenta de LATCH.
También podemos hacer que cuando no estemos usando una cuenta, su acceso esté deshabilitado, y solo se active cuando nosotros deseemos utilizarla.

Para más información:
WEB OFICIAL DE LATCH

Como se puede ver, ofrece una segunda capa de protección muy eficiente, y además resulta que es muy sencilla de implementar por el servidor.

Una vez hecha esta pequeña presentación, vamos a lo importante, como utilizar LATCH para securizar nuestro VPS.
En este caso, protegeremos el login por SSH, consiguiendo que solo se pueda acceder si tenemos el login habilitado desde LATCH.

Primero tenemos que registrarnos como desarrolladores de Latch. Para ello accederemos a la web habilitada para ello y nos registraremos.

Creando nuestra aplicación

Una vez hecho, en el apartado de My Applications crearemos una nueva aplicación:
LATCH
Dentro, seleccionaremos su nombre y le añadiremos una imagen si deseamos (podemos dejar la que viene por defecto perfectamente).
Además, guardaremos el contenido de los campos "Application ID" y "Secret", ya que los necesitaremos para hacer las peticiones.

Registrando nuestra cuenta

Bien, ya tenemos nuestra cuenta de desarrolladores de LATCH, nuestra aplicación creada... Ahora hay que emparejar nuestra cuenta de usuario de SSH con nuestra aplicación en LATCH.

Toda la interacción con LATCH está basada en unos scripts publicados por Alejandro Ramos en este post, aunque yo los volveré a postear, ya que he realizado alguna que otra modificación.

Vamos primero con el script para registrar el token.

NOTA: CUIDADO AL COPIAR LOS SCRIPTS, NO VAYA A SER QUE POR FALTA DE ESPACIO COPIÉIS UN SALTO DE LÍNEA DONDE NO LO HAY...
prettyprint-bash linenums nowrap
#!/bin/bash
if [ "$2" == "debug" ]; then set -x; fi
applicationId="PHKYXXXXXXXXXXXXX"
secretkey="TBKqEXXXXXXXXXXXXXXXXXXXXXXX"
URL="/api/0.6/pair/$1"
LATCH="/home/LATCH/latch.accounts"
 
if [ -z "$1" ]; then
 echo -e "\nUsage: SITE LATCH-REG <pair-key>\n"
 exit 0
fi
 
if [ `grep "^$USER:" $LATCH | wc -l` -ne 0 ]; then
 echo -e "\nAlready registered\n"
 exit 0
fi
 
requestSignature+="GET\n"
date=`date -u '+%Y-%m-%d %H:%M:%S'`
requestSignature+="$date\n\n$URL"
 
signed=`echo -en "$requestSignature" | openssl dgst -sha1 -hmac "$secretkey" -binary|sed -e 's|.*= \(.*\)|\1|g'`
b64signed=`echo -n "$signed"|base64`
auth_header="Authorization:11PATHS $applicationId $b64signed"
date_header="X-11Paths-Date: $date"
 
JSON=`wget -q --no-check-certificate -O - --header "$auth_header" --header "$date_header" "https://latch.elevenpaths.com$URL"`
accountid=`echo "$JSON" | sed -e 's|.*accountId":"\(.*\)"}.*|\1|'| sed -e 's|\(.*\)".*|\1|g'`
if [ -z $accountid ]; then
 echo "Error."
else
 echo "$USER:$accountid" >> $LATCH
 echo -e "\nDone.\n"
fi

No voy a entrar en la forma de crear las peticiones al servidor de LATCH, ya que eso está ampliamente documentado en su documentación oficial y en el SDK que ofrecen.

Nótese que en el script posteado los campos de ApplicationId y secretkey están modificados, tenéis que sustituirlos por los vuestros para que funcione correctamente.

Una vez tengamos el script creado, lo alojaremos en una ruta que recordemos. Yo en mi caso lo he alojado en /home/LATCH/reg.sh.
Como se puede apreciar en el código del script (linea 5), he puesto que el archivo en el cual se guardarán los pares usuario:token esté ubicado en /home/LATCH/latch.accounts

Además, el script está preparado para detectar el usuario que lo ejecuta (faltaría comprobar si esto serviría para VPS con mas de un usuario, aunque dudo que hubiera ningún problema) mediante el uso de $USER.

Una vez tengamos todo hecho hasta aquí, falta el paso definitivo: enlazar nuestra cuenta de usuario de ssh con nuestra aplicación en Latch.
Para ello deberemos descargar la aplicación de Latch para nuestro dispositivo:

Una vez descargada, deberemos iniciar sesión (con las mismas credenciales con las que registramos nuestra cuenta de desarrollador) y nos aparecerá nuestro panel de control de servicios emparejados con Latch.

Para añadir un nuevo servicio solo tendremos que darle al botón de "Add Service", y posteriormente al de "Generate a pairing code".
Esto nos generará un código de emparejamiento, el cual será válido durante los siguientes 60 segundos.

Para emparejar nuestra cuenta, mediante ssh ejecutaremos el script de la siguiente forma:

./reg.sh codigo

Ejemplo:
Script
En mi caso ha devuelto este mensaje ya que el usuario ya estaba registrado.

Y ya está, así de sencillo!

Además, en el móvil nos aparecerá un mensaje que confirmará el emparejamiento.

Ahora ya podemos activar y desactivar el servicio a nuestra voluntad... Solo falta configurar el servidor para que nos permita acceder o no a nuestra sesión en función del estado del servicio en Latch.

Eso lo veremos en el siguiente post: Securizando un VPS con LATCH (II). Configurando el acceso