
Atestación remota de TPM ligera y fácil de usar a través de Bluetooth
Ultrablue (User-friendly Lightweight TPM Remote Attestation over Bluetooth) es una solución que permite a usuarios individuales realizar la atestación del estado de arranque con su teléfono. Consiste en un servidor, que se ejecuta en un ordenador, que actúa como atestador, y una aplicación cliente gráfica, que se ejecuta en un teléfono de confianza, que actúa como verificador.
Un caso de uso típico es verificar la integridad de la cadena de arranque antes de desbloquear el ordenador, para prevenir ataques offline contra un portátil desatendido. También puede servir como herramienta de depuración para problemas de arranque seguro después de actualizaciones de firmware o como segundo factor para el cifrado de disco.
Una vez instalado, el flujo de control clásico de Ultrablue consta de varios pasos:
Usar Ultrablue requiere un ordenador Linux del que quieras atestar el estado de arranque, que tenga un TPM y una interfaz Bluetooth (normalmente un portátil), así como un teléfono móvil.
Para registrar un teléfono como verificador, inicia el servidor en modo registro:
sudo ultrablue-server -enroll -pcr-extend
Esto mostrará un código QR en la terminal. Desde el teléfono, ejecuta la aplicación cliente y pulsa el icono + en la esquina superior derecha para mostrar un escáner de códigos QR. Al escanear, se establecerá un canal Bluetooth Low Energy y el registro se ejecutará automáticamente. Si tiene éxito, aparecerá una tarjeta de dispositivo en la página de inicio de la aplicación cliente.
Ultrablue puede extender tu TPM2 PCR9 usando un valor generado aleatoriamente en el momento del registro. Esto es útil si quieres, por ejemplo, vincular tu cifrado de disco al sellado TPM2. En ese caso, ultrablue extenderá de nuevo el registro PCR9 durante el arranque si la atestación es exitosa y de confianza. La extensión de PCR se configura en el momento del registro (la opción no tiene efecto en modo atestación):
sudo ultrablue-server -enroll -pcr-extend
Si quieres que ultrablue se ejecute como parte de tu flujo de arranque, tienes que regenerar tu initramfs para incluirlo. Esto lo facilitamos proporcionando integración con Dracut y systemd. Consulta también los scripts de VM proporcionados, que ofrecen una forma aún más fácil de probar esto.
Primero, instala server/dracut/90ultrablue en el directorio de módulos /usr/lib/dracut/modules.d/,
Después puedes ejecutar el siguiente comando dracut:
dracut --add ultrablue /path/to/initrd --force
Si usaste la opción --pcr-extend durante la fase de registro, necesitarás
añadir el módulo dracut crypt y copiar server/dracut/90crypttab.conf en /etc/dracut.conf.d (para solucionar el bug #751640 de dracut):
cp server/dracut/90crypttab.conf /etc/dracut.conf.d
dracut --add "crypt ultrablue" /path/to/initrd --force
Ten en cuenta que estas opciones no son persistentes y ultrablue se eliminará de tu initramfs en su próxima generación. Consulta la página de manual dracut.conf(5) para una configuración persistente.
Si hiciste el paso de configuración del initramfs, el servidor Ultrablue se ejecutará automáticamente durante el arranque. De lo contrario, inicia manualmente el servidor en modo atestación:
sudo ultrablue-server
Una vez iniciado, el servidor esperará a que un verificador (teléfono) se conecte. Desde el teléfono, pulsa el icono ▶️ de la tarjeta del dispositivo. Esto ejecutará la atestación. Cuando termine, la aplicación cliente mostrará el resultado de la atestación.
El principal objetivo de ejecutar ultrablue en el arranque es usarlo para el descifrado de disco. En el testbed del servidor se proporciona y documenta un ejemplo de cómo hacerlo.
El proyecto Ultrablue ha sido desarrollado en ANSSI (ssi.gouv.fr) por Loïc Buckwell, bajo la supervisión de Nicolas Bouchinet y Gabriel Kerneis.
Si tienes alguna pregunta, contacta mediante un issue en Github, o directamente con Gabriel Kerneis [email protected].