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.

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
  3. Hola, tengo un serio problema, porque google autenticator solo me genera un numero de seis dígitos pero KeePass me pide 18 dígitos.

    ResponderEliminar
  4. Hola tengo un problema serio porque mía Google Autenticator me genera una clave de séis dígitos pero KeePass me pide 18 dígitos.
    Muchas gracias.

    ResponderEliminar
    Respuestas
    1. tienes que poner tres claves generadas por Google Authenticator

      Eliminar
  5. En la aplicación de Google en Android me indica que "el valor de la clave es demasiado corto". Seguramente algo cambió en la aplicación desde que se hizo este articulo hasta ahora septiembre 2020. ¿Será la Base32?

    ResponderEliminar
    Respuestas
    1. No vale de 8 caracetres, pero sí de un múltiplo, como 16. Con 16 funciona perfectamente.

      Eliminar
  6. Funcionó perfectamente. El truco es que hay que registrar la clave en Google Authenticator como contador y no como basada en tiempo. Una vez hecho, hay que introducir 3 claves de 6 dígitos cada una que va proporcionandote el programa en secuencia cada vez que das a la flecha envolvente.

    ResponderEliminar
  7. En mi caso yo uso una extensión en el navegador para gestionar mis 2FA, su nombre es Autenticacion y está disponible para chrome, firefox, edge, brave, para no correr mayor riesgo manejo un contraseña compleja para acceder a esta extension la cual almaceno a su vez en el keypass, la base de datos de mi keypass la almaceno en la nube de una cuenta de google que cree para ese propósito especifico, la cual no abro nunca desde ningún dispositivo, dicha nube solo se sincroniza al keeypass en mi pc y en mi teléfono móvil, y la llave de acceso la manejo desde un usb conectado a mi pc, la misma llave también la tengo almacena en otra cuenta de drive pero encryptada por seguridad de sufrir daño la memoria usb, al final es un sistema complejo que uso para impedir que alguien acceda a mis claves.

    ResponderEliminar
  8. Se podría con Microsoft autenticathor

    ResponderEliminar

Publicar un comentario