KeePass con segundo factor de autenticación OTP

Keepass es en la actualidad uno de los gestores de contraseñas más utilizados y, como tal, han surgido varias técnicas y herramientas para poder evadir la protección de las bases de datos y obtener las preciadas contraseñas de una víctima. Desde scripts que buscan e intentan identificar ficheros .kbdx en el filesystem, hasta herramientas como mod0keecrack que realizan fuerza bruta u otras como KeeFarce que obtienen la contraseña maestra directamente desde la memoria. Está claro que por su naturaleza y lo extendido que está su uso, Keepass está continuamente en el punto de mira... y por esa razón, parece buena idea utilizar un segundo factor de autenticación (2FA) para abrir nuestras bases de datos de contraseñas de Keepass.

Dentro de las opciones disponibles para 2FA, quizás la opción más cómoda es utilizar passwords de un sólo uso desde el smartphone mediante Google Authenticator, de tal manera que cada vez que queramos abrir un fichero Keepass además de la contraseña de la base de datos tengamos que meter una serie de códigos únicos generados desde el móvil. Para ello hay varios plugins disponibles, pero el que he probado y funciona realmente bien es OtpKeyProv de Dominik Reichl.

OtpKeyProv es un proveedor de claves basado en passwords de un sólo uso u OTP. Soporta todos los tokens que siguen el estándar OATH HOTP (RFC 4226).

Para usarlo simplemente tenemos que descargar el zip del plugin, descomprimir el archivo OtpKeyProv.plgx y dejarlo en el directorio de plugins de Keepass (%programfiles%\KeePass Password Safe 2\Plugins en Windows o /usr/lib/keepass2/Plugins en Linux).

Podemos comprobar que está presente yendo a 'Herramientas' y 'Plugins':


Posteriormente, a la hora de crear una base de datos nueva o ir a la opción de cambiar la clave maestra, además de introducir la contraseña maestra tendremos disponible la opción de usar un Key provider 'One-Time Password (OATH HOTP)':


Después, al marcar la opción y pulsar el botón de OK, el plugin nos mostrará una pantalla para configurar el token OTP. Para que sea compatible con Google Authenticator tendremos que obligatoriamente utilizar las siguientes opciones:
  • Length: 6
  • Secret key: ClaveSec (base32) Al estar en base32 y mantener la compatibilidad de Google Authenticator la clave debe ser múltiplo de 8 caracteres y se deben utilizar caracteres del rango a-z, 2-7.
  • Counter: 0 (Dec)
  • Number of OTPs: 3
  • Look ahead count: 9



El siguiente paso será irnos a la aplicación Google Authenticator en nuestro dispositivo Android y añadir un nuevo cliente seleccionando la opción 'Ingresar la clave proporcionada'. Simplemente pondremos el nombre que queramos, la clave y, sobretodo, marcaremos la opción 'Basada en contador':


Y ya lo tenemos. Para probarlo, sólo tenemos que abrir la base de datos Keepass que hemos configurado para usar este key provider como 2FA e introducir los tres códigos generados:




Por último, remarcar que en la misma ruta del fichero .kbdx de la base de datos se generará un fichero xml tipo NewDatabase.otp.xml. Este debe estar presente para que los tokens funcionen.

Esto es debido a que el plugin utiliza OATH HOTP (Key,Count) y, si no me equivoco, cifra cada OTP con el hash anterior hasta obtener la "segunda clave maestra". Para almacenar esta sucesión de hashes utiliza este archivo xml, que es actualizado cada vez que se abre la base de datos.

Lo malo es que al sincronizarlo en la nube para poder utilizarlo desde distintos dispositivos (ej. Dropbox) en muchos casos se guarda un historial de archivos xml y se especula que si un atacante los obtiene podría llegar a obtener la clave secreta. Se agradecen comentarios y consideraciones al respecto.

2 comentarios :

  1. A a mí personalmente me gustaba más usar un archivito de llave aparte de la contraseña. Es muy fácil de camuflar y de llevar encima.
    Lo de los servicios de "seguridad de Google" me suena a tongo. No me siento cómodo gon Google de por medio, y considero que las nubes son para las palomas. Prefiero sincronizar las cosas a mano, al viejo estilo de "Mi maletín" en Win95 o tener un servidor controlado para manejarme por sftp.
    WinSCP es el nuevo FlashFXP. Soy un poco pureta con los sistemas, pero si funciona ¿por qué cambiarlo?

    ResponderEliminar
  2. El OTP es muy útil en servicios en red, pero en local no lo entiendo. El OTP, que yo sepa, no se usa para cifrar la información, no puede funcionar así, lo que se hace es aplicar una función a la OTP que facilitas y eso contesta OK o NO_OK, por tanto el plugin lo que hace es decidir si puedes abrir el archivo o no. A lo mejor me equivoco pero pienso que al estar trabajando con un software en local con los ficheros en local puedes hackear el plugin y que diga siempre que el OTP es correcto.

    ResponderEliminar