Autenticación de dos factores de Yubikey Cifrado de disco completo a través de LUKS


27

Recientemente adquirí un Yubikey Neo, un ingenioso y pequeño dispositivo de autenticación de segundo factor de hardware. Está destinado principalmente para su uso con contraseñas de un solo uso y el protocolo U2F emergente, pero desde la versión 2 de Yubikey también es compatible con la autenticación de desafío-respuesta HMAC-SHA1. HMAC-SHA1 combina una clave secreta (almacenada dentro del Yubikey) y combina esto con una frase de contraseña para generar una respuesta.

¿Cómo puedo combinar el Yubikey con mi configuración FDE de Ubuntu para usar 2FA con mi disco duro cifrado?

Respuestas:


30

Un grupo llamado PrivacyIdea ha creado un pequeño paquete para agregar una rutina de desafío-respuesta HMAC-SHA1 a initramfs, lo que significa que Ubuntu puede solicitarle un desafío para pasar al Yubikey y luego usar la respuesta para desbloquear el volumen LUKS. En su mayor parte, estoy siguiendo estas instrucciones , con algunos comentarios adicionales. El proceso es realmente muy fácil de hacer.

He probado esto en Ubuntu 14.04, 16.04 y 18.04; usando un Yubikey Neo. Debería funcionar con cualquier Yubikey reciente, con firmware 2.0+ y con cualquier versión de Ubuntu después de 14.04. También probé Ubuntu 19.04 con un Yubikey 5C, se necesitaba un trabajo adicional pero se puede hacer que funcione. También podría haber otros dispositivos de respuesta de desafío HMAC-SHA1 de hardware con los que esto funciona, pero no conozco ninguno que exista. Como siempre, asegúrese de tener una copia de seguridad de sus datos antes de continuar: no debería haber ningún problema aquí, pero siempre existe la posibilidad de que esto destruya todo en su computadora. Estas instrucciones vienen sin garantía.

Actualización: desde Ubuntu 16.04, los paquetes necesarios están en los repositorios principales y no se necesita PPA.

¡Agregue un comentario si tiene preguntas!


0. Prerrequisitos

Para que esto funcione, ya tendrá que tener el cifrado de disco completo LUKS configurado y funcionando. Puede hacerlo seleccionando la opción adecuada al instalar Ubuntu. Para obtener la máxima seguridad, debe elegir una frase de contraseña muy fuerte durante la instalación. Si su frase de contraseña no está a la altura, debe cambiarla por una mejor antes de continuar ( instrucciones más detalladas aquí ).

El siguiente método no reemplazará ninguna frase de contraseña existente, sino que agregará otra frase de contraseña a una de las ranuras LUKS. Por lo tanto, si pierde su Yubikey, aún puede desbloquear su computadora usando cualquier frase de contraseña existente; le sugiero que tome nota de ello y lo oculte en un lugar seguro; también lo necesitará varias veces durante este procedimiento. Su nueva frase de contraseña de desafío Yubikey aún debe ser razonablemente fuerte, pero no tiene que ser tan larga como la frase de contraseña que usó al instalar Ubuntu.


1. Agregue PrivacyIdea PPA e instale el paquete

En Ubuntu 14.04

Abra una terminal y ejecute el siguiente comando:

sudo add-apt-repository ppa:privacyidea/privacyidea 

Presione Entrar cuando se le solicite, luego ejecute:

sudo apt-get update

Luego instale el paquete con:

sudo apt-get install yubikey-luks

En Ubuntu 16.04, 18.04

No hay necesidad de un PPA, puede instalar el paquete con:

sudo apt-get install yubikey-luks

En Ubuntu 19.04

Vea esta respuesta para saber cómo construir el yubikey-lukspaquete desde la fuente para Ubuntu 19.04.


2. Instalar el software Yubikey

Si está utilizando la funcionalidad HMAC-SHA1 del Yubikey para otra cosa, puede omitir esta sección. Borrará cualquier configuración en la segunda ranura de Yubikey, así que no realice este paso si usa HMAC-SHA1 para otros fines con este Yubikey.

Deberá configurar su Yubikey para que funcione con Ubuntu instalando el software requerido, ya sea desde el Pub de Yubico en Ubuntu 14.04 o desde el repositorio principal de Ubuntu en 16.04 y posterior.

En Ubuntu 14.04

Si no lo ha hecho antes, agregue el PPA e instale el paquete con:

sudo add-apt-repository ppa:yubico/stable
sudo apt-get update
sudo apt-get install yubikey-personalization

En Ubuntu 16.04, 18.04 (y posterior)

sudo apt-get install yubikey-personalization

3. Inicialice la ranura Yubikey para HMAC-SHA1

Ahora necesitamos programar la segunda ranura del Yubikey con una configuración HMAC-SHA1. Esto borrará su configuración de ranura anterior, que está vacía por defecto. Nuevamente, si está utilizando HMAC-SHA1 para algo más , no emita este comando: borrará su configuración. Puede usar con seguridad la misma clave secreta dentro del Yubikey para esta configuración LUKS como para sus otros usos. (Por ejemplo, con otra computadora usando LUKS + Yubikey).

ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

El terminal mostrará cierta información sobre los cambios realizados. No necesita anotar esto, pero mostrará la clave secreta utilizada por Yubikey en el algoritmo HMAC-SHA1 para calcular la respuesta cuando se le presenta un desafío.


4. Inscriba Yubikey en la ranura LUKS

Ahora editaremos la configuración de LUKS para agregar la respuesta del Yubikey como una de las claves de descifrado.

La partición que necesitamos especificar depende de si está utilizando BIOS o UEFI para arrancar su máquina. Para BIOS, el volumen encriptado está /dev/sda5por defecto, para UEFI está en /dev/sda3. Puede verificar esto abriendo la disksutilidad y confirmando la ruta de la partición: debería ser sda3o sda5. NOTA: En las computadoras más nuevas con discos NVMe, la ruta será algo así /dev/nvme0n1p3.

Ejecuta esto en una terminal:

sudo yubikey-luks-enroll -d /dev/sda3 -s 7

Esto escribirá en la ranura 7 de la configuración de LUKS, siga las instrucciones en el instalador (varían ligeramente según la versión que esté ejecutando).

¡Entonces estás listo! Debería poder reiniciar su computadora, y si su Yubikey está insertado, entonces puede escribir su contraseña de desafío y usar el Yubikey como un segundo factor para desbloquear la partición LUKS e iniciar el sistema. Una vez que haya descifrado el disco duro, puede eliminar el Yubikey.

Si pierde su Yubikey, aún puede ingresar su frase de contraseña original (con suerte muy larga) para descifrar el disco duro, y luego puede seguir este procedimiento nuevamente para registrar un nuevo Yubikey.


Cambiar la frase de contraseña de desafío de cifrado

Cambiar la contraseña en una fecha posterior es bastante simple, solo use este comando para restablecer la clave secreta. No es del todo necesario restablecer la clave secreta, pero no hará daño. Tenga en cuenta que esto destruirá la clave secreta anterior, no haga esto si usa HMAC-SHA1 para otra cosa con este Yubikey. (Por ejemplo, con otra computadora usando LUKS + Yubikey).

 ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

Luego, de manera similar al Paso 4 anterior, para inscribir una nueva contraseña en la ranura de la clave LUKS, excepto optar por borrar la Ranura 7 con este comando:

sudo yubikey-luks-enroll -d /dev/sda3 -s 7 -c

Cuando se le solicite Enter any remaining passphrase, use su frase de contraseña de respaldo, no la frase de contraseña de desafío Yubikey. Luego ingrese una nueva frase de contraseña de desafío de Yubikey, dos veces, luego finalmente deberá ingresar la frase de contraseña de respaldo por última vez.

Ahora su antigua frase de contraseña de desafío Yubikey se ha eliminado y solo la nueva descifrará el disco duro. Su frase de contraseña de respaldo anterior seguirá siendo la misma. Puede cambiar esa frase de contraseña siguiendo los enlaces en el Paso 0 .


Nota sobre implicaciones de seguridad

Agregar un Yubikey agregará un cierto nivel de seguridad a su sistema: alguien debe conocer la frase de contraseña de desafío y tener su Yubikey para poder desbloquear su disco duro (o encontrar su frase de contraseña inicial, que ahora está utilizando como copia de seguridad) . Sin embargo, es técnicamente factible que un atacante descifre el disco duro si conoce su frase de contraseña de desafío (por ejemplo, "navegando por el hombro" mientras lo escribe) y puede obtener acceso a su Yubikey solo por un corto tiempo. Usando la frase de contraseña de desafío, podrían obtener la respuesta del Yubikey y almacenarla, y luego usarla para descifrar el disco duro en cualquier momento sin el Yubikey. O, de nuevo, si un atacante o una pieza de malware conocía su frase de contraseña y pudo ejecutar el código en una máquina conectada a su Yubikey, también podrían emitir el desafío y almacenar la respuesta. Por lo tanto, sigue siendo extremadamente importante estar atento al ingresar su frase de contraseña de desafío y asegurarse de tener siempre el Yubikey en un lugar seguro. También solo debe conectarlo a una máquina en la que confíe. Si pierde el rastro de su Yubikey y sospecha que alguien lo ha estado usando para tratar de aprender la clave de descifrado, realice los pasos 2 y 3 nuevamente para restablecer la clave secreta dentro del Yubikey y elija una nueva frase de contraseña de desafío. Tenga en cuenta que si un adversario ha logrado aprender una de sus frases de contraseña (ya sea la respuesta HMAC-SHA1 del Yubikey o su copia de seguridad), podrían hacer una copia de seguridad de la clave maestra LUKS y luego usarla para descifrar su disco duro, incluso si cambia la frase de contraseña en el futuro. y para asegurarse de que siempre tenga el Yubikey en un lugar seguro. También solo debe conectarlo a una máquina en la que confíe. Si pierde el rastro de su Yubikey y sospecha que alguien lo ha estado usando para tratar de aprender la clave de descifrado, realice los pasos 2 y 3 nuevamente para restablecer la clave secreta dentro del Yubikey y elija una nueva frase de contraseña de desafío. Tenga en cuenta que si un adversario ha logrado aprender una de sus frases de contraseña (ya sea la respuesta HMAC-SHA1 del Yubikey o su copia de seguridad), podrían hacer una copia de seguridad de la clave maestra LUKS y luego usarla para descifrar su disco duro, incluso si cambia la frase de contraseña en el futuro. y para asegurarse de que siempre tenga el Yubikey en un lugar seguro. También solo debe conectarlo a una máquina en la que confíe. Si pierde el rastro de su Yubikey y sospecha que alguien lo ha estado usando para tratar de aprender la clave de descifrado, realice los pasos 2 y 3 nuevamente para restablecer la clave secreta dentro del Yubikey y elija una nueva frase de contraseña de desafío. Tenga en cuenta que si un adversario ha logrado aprender una de sus frases de contraseña (ya sea la respuesta HMAC-SHA1 del Yubikey o su copia de seguridad), podrían hacer una copia de seguridad de la clave maestra LUKS y luego usarla para descifrar su disco duro, incluso si cambia la frase de contraseña en el futuro. realice los pasos 2 y 3 nuevamente para restablecer la clave secreta dentro del Yubikey y elija una nueva frase de contraseña de desafío. Tenga en cuenta que si un adversario ha logrado aprender una de sus frases de contraseña (ya sea la respuesta HMAC-SHA1 del Yubikey o su copia de seguridad), podrían hacer una copia de seguridad de la clave maestra LUKS y luego usarla para descifrar su disco duro, incluso si cambia la frase de contraseña en el futuro. realice los pasos 2 y 3 nuevamente para restablecer la clave secreta dentro del Yubikey y elija una nueva frase de contraseña de desafío. Tenga en cuenta que si un adversario ha logrado aprender una de sus frases de contraseña (ya sea la respuesta HMAC-SHA1 del Yubikey o su copia de seguridad), podrían hacer una copia de seguridad de la clave maestra LUKS y luego usarla para descifrar su disco duro, incluso si cambia la frase de contraseña en el futuro.La página de manual de cryptsetup explica esto, mira la sección luksHeaderBackup . Si sospecha que esto ha sucedido, debe crear un volumen LUKS completamente nuevo para proteger sus datos.


Actualización: también he intentado esto con 15.04, parece que el PPA no tiene una compilación del paquete requerido, por lo que tengo que cambiar la línea DEB en las fuentes de software para usar el repositorio "confiable" en lugar de "vívido" ". Después de hacer este cambio, mi configuración LUKS + Yubikey ahora funciona en 15.04.
seanlano

44
¡Ya no use el repositorio de privacyidea! ¡El paquete ahora está contenido en debian upstream!
cornelinux el

1
Hay una manera de evitar el inicio de sesión sin yubikey: cambie la frase de contraseña de luks cada vez que el usuario inicie sesión. Aquí hay una implementación para Gentoo: github.com/flowolf/initramfs_ykfde Se puede adaptar para Ubuntu en poco tiempo.
nombre_1

1
Supongo que el mismo procedimiento funciona para la nueva versión 18.04 LTS?
Mark Veenstra

2
He intentado con Ubuntu 18.04 y funciona bien.
jetole

0

Actualización para Ubuntu 19.04:

Parece que a partir de Ubuntu 19.04 (y tal vez 18.10, no probé esa versión), cryptsetupha cambiado lo suficiente como para romper la forma en que yubikey-lukssolía funcionar. Esta confirmación del repositorio ascendente parece implementar una solución, pero el repositorio original no parece haberse actualizado desde octubre de 2018. Encontré esta bifurcación del repositorio que tiene la solución, así como algunos otros fragmentos de limpieza. arriba, y logró construir un paquete que funciona en 19.04.

Como no pude encontrar una compilación existente de la bifurcación actualizada, el método para yubikey-lukstrabajar implica obtener el código fuente y construir el paquete DEB localmente, luego instalarlo.

Siga los pasos en mi respuesta anterior , excepto reemplazar el paso 1 con el siguiente:


1. Obtenga la fuente yubikey-luks, compile e instale el paquete

Instalar dependencias de compilación con:

sudo apt install dh-exec devscripts expect yubikey-personalization

Luego descargue y extraiga el archivo fuente:

mkdir ~/tmp
cd ~/tmp
wget -O yubikey-luks.zip https://github.com/thuandt/yubikey-luks/archive/master.zip
unzip yubikey-luks.zip
cd yubikey-luks-*

Construye el paquete con:

make builddeb NO_SIGN=1

Luego instálalo:

sudo dpkg -i DEBUILD/yubikey-luks_*.deb

Luego continúe siguiendo el resto de los pasos en mi primera respuesta.

Afortunadamente, para la versión 19.10, la versión del yubikey-luksarchivo principal de Ubuntu se puede actualizar para que no sea necesaria la creación manual.

Como beneficio adicional, la versión más nueva tiene un archivo de configuración, que se puede encontrar en /etc/ykluks.cfg. El mensaje que se muestra en el arranque se puede configurar en este archivo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.