Vulnerabilidades del arranque seguro UEFI con GRUB2 - 2021

Desde el conjunto de fallos "BootHole" en GRUB2 anunciado en julio de 2020, investigadores de seguridad y desarrolladores de Debian y de otros proyectos han seguido buscando problemas que pudieran permitir la elusión del arranque seguro UEFI. Se han encontrado varios. Vea el aviso de seguridad de Debian 4867-1 para más detalles. El propósito de este documento es explicar las consecuencias de esta vulnerabilidad de seguridad y los pasos que se han seguido para abordarla.

Contexto: ¿qué es el arranque seguro UEFI?

El arranque seguro (SB, por sus siglas en inglés) UEFI es un mecanismo de verificación para asegurar que el código lanzado por el firmware UEFI de una computadora es de confianza. Está diseñado para proteger al sistema frente a la carga y ejecución de código malicioso en las fases tempranas del proceso de arranque, cuando todavía no se ha cargado el sistema operativo.

El funcionamiento del SB se basa en sumas de verificación («checksums») y en firmas criptográficas. Cada programa cargado por el firmware incluye una firma y una suma de verificación y, antes de permitir su ejecución, el firmware comprueba que el programa es de confianza validando la suma de verificación y la firma. Cuando el SB está habilitado en un sistema, no se permite la ejecución de ningún programa que no sea de confianza. Esto impide la ejecución en el entorno UEFI de código inesperado o no autorizado.

La mayoría del hardware x86 viene de fábrica con las claves de Microsoft precargadas, lo que significa que el firmware instalado en estos sistemas confía en los binarios que están firmados por Microsoft. La mayoría de los sistemas modernos se venden con el SB habilitado por lo que, por omisión, no ejecutan código sin firmar. Pero es posible modificar la configuración del firmware para, o bien inhabilitar el SB, o bien instalar claves de firma adicionales.

Debian, como muchos otros sistemas operativos basados en Linux, utiliza un programa llamado shim para extender esta confianza desde el firmware hacia otros programas que necesitamos que estén protegidos en las fases tempranas del arranque: el gestor de arranque GRUB2, el núcleo Linux y las herramientas de actualización del firmware (fwupd y fwupdate).

Encontrados varios fallos en GRUB2

Se ha encontrado un fallo en el módulo acpi de GRUB2. Este módulo está diseñado para proporcionar una interfaz de controlador a la ACPI (siglas en inglés de la Interfaz avanzada de configuración y energía), una pieza muy habitual del hardware de computación moderno. Desafortunadamente, en la actualidad el módulo ACPI también permite que un usuario con privilegios cargue tablas ACPI modificadas bajo el arranque seguro y haga cambios arbitrarios en el estado del sistema, lo que permite romper de forma sencilla la cadena del arranque seguro. Este agujero de seguridad ya ha sido corregido.

Igual que con BootHole, en lugar de limitarse a corregir este fallo, los desarrolladores han llevado a cabo un análisis y una auditoría en profundidad del código fuente de GRUB2. ¡Habría sido irresponsable corregir un defecto importante sin aprovechar la ocasión para buscar otros! Hemos encontrado unos pocos lugares más en los que asignaciones internas de memoria podrían desbordarse ante entradas inesperadas y unos pocos lugares en los que se podría usar la memoria después de liberarla. Se han compartido con la comunidad y probado con su ayuda correcciones para todos estos fallos.

De nuevo, consulte el aviso de seguridad de Debian 4867-1 para una lista completa de los problemas encontrados.

Revocación de claves necesaria para corregir la cadena de arranque seguro

Naturalmente, Debian y otros proveedores de sistemas operativos publicarán versiones corregidas de GRUB2. Sin embargo, esto no constituye una solución completa para estos problemas. Actores maliciosos todavía podrían utilizar versiones de GRUB2 más antiguas, y vulnerables, para eludir el arranque seguro.

Para evitarlo, el siguiente paso será que Microsoft bloquee esos binarios inseguros de forma que dejen de ejecutarse bajo el SB. Esto se consigue utilizando la lista DBX, una característica de diseño del arranque seguro UEFI. Se ha pedido a todas las distribuciones de Linux que incluyen copias de shim firmadas por Microsoft que proporcionen detalles de los binarios o de las claves involucradas para facilitar este proceso. El fichero con la lista de revocación de UEFI será actualizado para incluir esta información. En algún momento futuro, los sistemas empezarán a utilizar la lista actualizada y rehusarán la ejecución de los binarios vulnerables bajo el arranque seguro.

El calendario exacto para el despliegue de este cambio no está claro aún. Los vendedores de BIOS/UEFI incluirán en algún momento la nueva lista de revocación en las compilaciones del firmware para hardware nuevo. Microsoft también puede publicar actualizaciones para sistemas existentes a través de las actualizaciones de Windows («Windows Update»). Algunas distribuciones de Linux pueden publicar actualizaciones por medio de sus propios procesos de actualizaciones de seguridad. Debian no hace esto todavía, pero lo estamos evaluando para el futuro.

¿Qué efectos tiene la revocación de claves?

La mayoría de los vendedores son recelosos en cuanto a la aplicación automática de actualizaciones que revoquen claves utilizadas por el arranque seguro. Instalaciones de software con el SB habilitado pueden dejar de arrancar repentinamente, salvo que el usuario tenga cuidado de instalar también todas las actualizaciones de software necesarias. En los sistemas con arranque dual Windows/Linux puede dejar de arrancar Linux. Los medios de instalación antiguos y «en vivo» («live media»), por supuesto, tampoco arrancarán, haciendo, potencialmente, que sea más trabajoso recuperar sistemas.

Hay dos maneras obvias de restablecer un sistema que no arranque por este motivo:

Es posible que ambas parezcan opciones sencillas, pero pueden consumir mucho tiempo para usuarios con varios sistemas. Además, tenga en cuenta que la habilitación e inhabilitación del arranque seguro requiere, por diseño, acceso directo a la máquina. Normalmente no es posible hacer estos cambios por otros medios que no sean la configuración del firmware de la computadora. Los servidores remotos pueden precisar de un cuidado especial por esta razón.

Por estos motivos, se recomienda encarecidamente que todos los usuarios y usuarias de Debian presten atención a la instalación de todas las actualizaciones recomendadas para sus sistemas tan pronto como sea posible, para reducir la probabilidad de encontrarse con problemas en el futuro.

Paquetes y claves actualizados

Nota: los sistemas con Debian 9 (stretch) y anteriores no recibirán necesariamente actualizaciones para este problema, ya que Debian 10 (buster) fue la primera versión de Debian con soporte para el arranque seguro de UEFI.

Hay cinco paquetes fuente en Debian que se van a actualizar debido a los cambios en el arranque seguro UEFI descritos aquí:

1. GRUB2

Para la distribución «estable» Debian 10 (buster), hay disponibles versiones actualizadas de los paquetes Debian de GRUB2 a través del archivo debian-security. Muy pronto habrá versiones corregidas en el archivo para distribuciones en desarrollo de Debian («inestable» y «en pruebas»).

2. Linux

Para la distribución «estable» Debian 10 (buster), pronto habrá disponibles versiones actualizadas de los paquetes Debian de linux a través de buster-proposed-updates y se incluirán en la próxima versión 10.10. Pronto habrá paquetes nuevos en el archivo para distribuciones en desarrollo de Debian («inestable» y «en pruebas»). Esperamos tener también paquetes actualizados subidos a buster-backports pronto.

3. Shim y SBAT

La corrección de la serie de fallos "BootHole" trajo consigo la necesidad, por primera vez, de la revocación de claves a gran escala en el ecosistema del arranque seguro UEFI. Mostró un desafortunado defecto de diseño de la revocación SB: con muchas distribuciones de Linux distintas y muchos binarios UEFI, el tamaño de la lista de revocación crece rápidamente. Muchos sistemas disponen de un espacio limitado para almacenar los datos de revocación de claves, espacio que se podría llenar fácilmente y hacer que el sistema quede roto de varias maneras.

Para combatir este problema, los desarrolladores y desarrolladoras de shim han ideado un método que utiliza el espacio de forma mucho más eficiente para bloquear en el futuro los binarios UEFI inseguros. Se llama SBAT (Secure Boot Advanced Targeting o «Selección avanzada de objetivos del arranque seguro»). Funciona haciendo un seguimiento de los números de generación de los programas firmados. En lugar de revocar individualmente las firmas según se van encontrando problemas, se utilizan contadores para indicar que las versiones más antiguas de los programas ya no se consideran seguras. Revocar una serie antigua de binarios de GRUB2 (por ejemplo) ahora se reduce a actualizar una variable UEFI que contiene el número de generación de GRUB2; cualquier versión de GRUB2 anterior a ese número ya no se considerará segura. Para más información sobre SBAT, consulte la documentación de shim sobre SBAT.

Lamentablemente, todavía no está listo este nuevo desarrollo de shim SBAT. Los desarrolladores esperaban publicar ahora una nueva versión de shim con esta nueva e importante funcionalidad, pero se han encontrado problemas inesperados. El desarrollo sigue avanzando. La comunidad Linux al completo esperamos actualizar a esta nueva versión de shim muy pronto. Hasta que esté lista, seguiremos utilizando los binarios firmados de shim existentes.

Tan pronto como esté terminado este trabajo se pondrán a disposición versiones actualizadas de los paquetes Debian de shim. Se anunciarán aquí y en otros lugares. Publicaremos una nueva versión 10.10 en ese momento y también publicaremos nuevos paquetes de shim para distribuciones en desarrollo de Debian («inestable» y «en pruebas»).

4. Fwupdate

Para la distribución «estable» Debian 10 (buster), pronto habrá disponibles versiones actualizadas de los paquetes Debian de fwupdate a través de buster-proposed-updates y se incluirán en la próxima versión 10.10. fwupdate ya había sido eliminado de «inestable» y de «en pruebas» hace un tiempo, en favor de fwupd.

5. Fwupd

Para la distribución «estable» Debian 10 (buster), pronto habrá disponibles versiones actualizadas de los paquetes Debian de fwupd a través de buster-proposed-updates y se incluirán en la próxima versión 10.10. También hay paquetes nuevos en el archivo para distribuciones en desarrollo de Debian («inestable» y «en pruebas»).

6. Claves

Debian ha generado nuevos certificados y claves de firma para sus paquetes de arranque seguro. Solíamos utilizar un certificado para todos nuestros paquetes:

Ahora hemos pasado a usar claves y certificados diferentes para cada uno de los cinco paquetes fuente implicados, para tener más flexibilidad en el futuro:

Debian 10.10 (buster), instalación actualizada y medios «en vivo» («live media»)

Todas las correcciones descritas aquí se incluirán en la versión Debian 10.10 (buster), que se publicará en breve. Por lo tanto, la 10.10 será una buena opción para los usuarios y usuarias que esperen medios de instalación y «en vivo» de Debian. Las imágenes anteriores pueden dejar de funcionar con arranque seguro en el futuro, a medida que las revocaciones se vayan propagando.

Más información

En la wiki de Debian hay mucha más información sobre la configuración del arranque seguro UEFI, consulte https://wiki.debian.org/SecureBoot.

Otros recursos sobre este tema incluyen: