viernes, julio 29, 2016

Tu impresora 3D con OctoPrint protegida con Latch @OctoPrint3D #OctoPrint #Latch

Tras haber estado trabajando en el proyecto de montar un servicio VPN personal integrando OpenVPN + Latch + Virus Total, decidí embarcarme en un nuevo proyecto de verano como patte de mi carta de presentación para la Fábrica de Caramelos. La idea era implementar Latch en OctoPrint, un software de servidor creado para controlar nuestra impresora 3D a través de la red. Este ha sido el resultado.

Figura 1: Tu impresora 3D OctoPrint protegida con Latch

OctoPrint es un proyecto OpenSource escrito en Python que está pensado para funcionar sobre Raspberry Pi en una distribución de Raspbian - una imagen para SD - , aunque se puede instalar en cualquier plataforma teniendo las dependencias correctas. Se puede obtener más información sobre OctoPrint en el sitio web oficial, pero aquí tienes un vídeo tutorial que explica las principales características del proyecto y su puesta en marcha en tu casa.


Figura 2: Getting Started with OctoPrint


Una vez visto, vamos a comenzar a integrar Latch en Octoprint, que como veremos no es muy complicado.

Parcheando OctoPrint para integrarlo con Latch

Para empezar con OctoPrint debemos descargar el software desde el repositorio oficial del proyecto en GitHub oficial [OctoPrint] o simplememte con el siguiente comando:
# git clone https://github.com/foosel/OctoPrint.git
Ahora descargaremos Latch for OctoPrint, que es el código que he tenido que desarrollar para integrarlo y que contiene las librerías del SDK de Latch para Python y los ficheros parcheados para que Latch funcione en OctoPrint.

Figura 3: Sección de código de OctoPrint parcheado para usar Latch

Una vez hecho esto, copiaremos la carpeta "octoprint" de LatchForOctoPrint en  la carpeta "src" de OctoPrint, dónde veremos que ya hay una carpeta con el mismo nombre para reemplazar los ficheros originales por los ficheros parcheados así como las librerías de Latch. Podemos usar los comandos:
# git clone https://github.com/toolsprods/LatchForOctoPrint
# cp -r LatchForOctoPrint/octoprint OctoPrint/src/
Emparejando la OctoPrint con Latch

Ahora pasamos a configurar Latch. Antes de empezar hay que crear una aplicación desde el panel de desarrolladores de Latch. Generamos una nueva, y apuntamos el ID de aplicación y el Secreto que lo necesitamos más adelante.

Figura 4: Creando la app de Latch en la web de desarrolladores de Latch

Hay que emparejar la nueva app que hemos creado con nuestro dispositivo móvil que contiene la aplicación de Latch. Para ello, primero tenemos que editar el archivo de configuración "config.py" que se encuentra dentro del directorio "src/octoprint/server/latch". Para generar el emparejamiento correctamente es necesario escribir las variables del ID de aplicación y el secreto para generar el ID de la cuenta de la que posteriormente se comprobará el estado del pestillo digital.

Figura 5: Configuración de Application ID y Secret en Latch for OctoPrint

Desde el dispositivo móvil con la aplicación de Latch que queremos emparejar generamos un nuevo Token Temporal de Paredado para realizar el proceso de creación del pestillo.

Figura 6: Petición de Token Temporal de Pareado en app de Latch

Después, desde el servidor con Raspbian donde está instalado OctoPrint ejecutamos "python latch -p PAIRING_CODE_HERE" desde la ruta "src/octoprint/server" tal y como se ve en la imagen siguiente. Es decir, ejecutamos el comando Python sobre el directorio "latch". Este paso debe hacerse antes de que expire el Token Temporal de Pareado generado por el dispositivo, esto son 2 minutos.

Figura 7: Pareando OctoPrint con Latch

Si todo ha salido correctamente nos debe aparece la nueva aplicación emparejada en nuestro dispositivo con Latch y la terminal nos devolverá el valor del ID de la cuenta que tenemos que copiar en su variable correspondiente en el archivo de configuración "config.py" en "src/octoprint/server/latch".

Figura 8: OctoPrint pareado con Latch

Si en algún momento deseamos desemparejar la cuenta basta con ejecutar "python latch -u" en el mismo directorio que hemos utilizado anteriormente para emparejarlo, es decir, "src/octoprint/server/".

Instalación final de OctoPrint "Parcheado y Pareado"

Para finalizar se realiza la instalación de OctoPrint en un directorio virtual tal y como se detalla en su GitHub y se ejecuta el servidor OctoPrint:

Figura 9: Instalación de OctoPrint
# virtualenv venv
# ./venv/bin/python setup.py install
# ./venv/bin/octoprint

Y ya se puede disfrutar de nuestro servidor OctoPrint con la seguridad de estar bien protegidos por Latch, nuestro pestillo digital. En el siguiente vídeo se puede ver su funcionamiento, aunque para hacer este vídeo reutilicé un Application ID en Latch con un logo distinto al que vienen en el artículo.


Figura 10: Vídeo de Latch para OctoPrint funcionando

Como veis, su funcionamiento es igual que en el resto de plugins de Latch y si revisáis el código es una implementación estándar similar a la que se muestra en el artículo de "Cómo cocinar una aplicación PHP con Lath".

Autor: Álvaro Núñez

Entrada destacada

Infraestructuras Críticas y Sistemas Industriales: Auditorías de Seguridad y Fortificación de @0xWord

Desde hoy está disponible a la venta un nuevo libro de 0xWord centrado en la seguridad de los Sistemas Industriales y las Infraestructuras...

Entradas populares