08 septiembre 2015

Compartiendo credenciales con Syspass




Siempre he dicho que el buen profesor es el que enseña, pero que a la vez se deja enseñar y aprende sus alumnos.

Fue en el curso de Hardening de sistemas Windows, Linux e Infraestructuras, en el que un grupo de alumnos de una empresa, me comentó si recomendaba algún gestor de contraseñas corporativo. Con la cantidad de servicios en la nube que existen hoy en día, y precisamente habiendo sido Lastpass comprometido hacía poco, mencioné que utilizaba KeePassX como herramienta para gestionar las inmanejables identidades digitales que utilizo diariamente.

Sin embargo, cuando de lo que se habla es de compartir contraseñas para acceso a diferentes sistemas entre un equipo de personas, se hace necesario alguna herramienta que permita acceso concurrente por varios usuarios. KeePassX funciona muy bien, pero cuando el fichero está abierto no permite interacción por múltiples usuarios a la vez. Aparte que sólo hay una contraseña que protege todo el contenedor cifrado y se tiene acceso a todas las credenciales.

Parece necesario entonces un sistema que permita garantizar la confidencialidad de los datos, el acceso concurrente, así como la granularidad suficiente para permitir sólo determinadas credenciales. Importante también que se pueda acceder a categorías y separar por clientes. Pues eso es SysPass

Se trata de una aplicación PHP, que almacena los datos en una base de datos MySQL. Como se puede ver en la Wiki es bastante sencilla la instalación, y muy intuitiva la configuración. 

El orden recomendado si pretendes crear contraseñas de uso compartido sería: Crear usuarios, crear clientes/categorías y luego crear cuentas. 

Tiene un interfaz muy intuitiva y agradable de usar, permitiendo generar contraseñas al propio sistema o introducir manualmente lo que queramos, así como dejar notas en un campo comentarios o incluso subir ficheros. Esto es útil para aquellas autenticaciones que requieran un keyfile o simplemente como repositorio de documentación sobre el servicio al que se va a acceder.  




Para crear la cuenta, hay que asignar un cliente al menos, y da la oportunidad de dar acceso a usuarios sueltos o a grupos. Por defecto, cuando un usuario pertenece a un grupo, tiene una serie de propiedades como poder crear nuevas cuentas, poder hacer cambios o que sea de sólo lectura, etc,... 

Al crear una cuenta se puede habilitar la edición a usuarios sueltos o grupos únicamente para esa credencial en concreto.

Tiene una variedad de opciones bastante rica, permitiéndote integrar la aplicación con un directorio de usuarios LDAP, para que los usuarios sean los que extraiga de un grupo por ejemplo.  

Trasteando por el código fuente, dí con una función que permitía importar credenciales desde KeePassX.

Para esto, hay que exportar el contenedor desde KeePassX a XML. Puede ser un engorro si sólo se quiere una categoría en concreto, porque la opción exportar, no he encontrado forma de hacer que sólo sea de un grupo.

Limpiando el XML a mano, para dejar únicamente lo que necesitas (en el XML todas las credenciales están en claro), la aplicación permite importarlas correctamente.


Lo que no me ha gustado 

Hasta aquí, la herramienta funciona muy bien. Hace lo que tiene que hacer con soltura y permite compartir las credenciales según se necesite. Sin embargo, ha habido un par de cosas que se pueden mejorar.

1.-) Las credenciales se almacenan en un MySQL. Si se analiza la tabla accounts, se pueden ver los diferentes campos. Obviamente, las mismas están cifradas y llevan un salt que se guarda en un fichero de configuración. Sin embargo, SOLO se cifra la contraseña, estando el resto de los datos, en claro. Esto es que el nombre de usuario, URL/IP, están en claro. Si alguien se hiciese con el acceso a esta tabla, tendría acceso a información que, aunque no sea completa, ya le da pistas de usuarios válidos en un sistema, y le permitiría hacer ataques de fuerza bruta o de diccionario.

2.-) La herramienta te permite hacer backups, generando un fichero .sql o .tar.gz, que contiene un mysqldump de la base de datos completa y los ficheros que conforman la aplicación web entera. Esto estaría bien, si el directorio desde el que se almacena esta información, y se guarda, no estuviese hardcodeado, y fuese $syspass_path/backup/sysPass_db.sql y sysPass.tar.gz porque cualquier atacante con acceso al servidor, podría llevarse la base de datos completa (con las contraseñas cifradas) y los ficheros de configuración. Para mi gusto, el directorio de backups, en caso que sea imprescindible, debería dejar ser personalizable, y el nombre de fichero aleatorio.

Esto se arregla rápidamente, a nivel servidor web, con un fichero .htaccess en el directorio backup, que permita requerir autenticación previa para poder acceder a esos ficheros.



En resumen...  


  • Me ha parecido fácil de usar, potente y que cumple con su objetivo
  • Integración con otras apps, tanto para importar como para administrar los usuarios con un servidor centralizado
  • Se pueden mejorar la seguridad de la aplicación, cifrando en base de datos, el nombre de usuario y la URL/IP... o ya puestos, todos los campos sensibles a nivel usuario.
  • Ya que está montada, le daremos una oportunidad en Securízame, para ver si la usabilidad es tan buena como me lo parece.