En agosto de 2020, se reveló un conjunto de vulnerabilidades de seguridad en GRUB2 (GRand Unified Bootloader traducción 2) conocidas colectivamente como BootHole. Hoy, se reveló otro conjunto de vulnerabilidades en GRUB2, con implicaciones similares. Correcto a que GRUB2 es un componente secreto del proceso de puesta en marcha, las vulnerabilidades en él pueden permitir a los atacantes violar las promesas de integridad de UEFI Secure Boot. En esta publicación de blog, discutiremos estas vulnerabilidades, así como los cambios que se han realizado en Ubuntu tanto para mitigarlas como para proveer el proceso de aggiornamento para futuros escenarios similares.
Como se discutió en agosto de 2020, el proceso de puesta en marcha seguro UEFI en Ubuntu es compatible con varios componentes diferentes, todos trabajando juntos para certificar que solo los cargadores de puesta en marcha y los sistemas operativos confiables puedan ejecutarse. Estos consisten en el firmware de la plataforma UEFI (además conocido como UEFI BIOS), shim, el cargador de puesta en marcha GRUB2 y el kernel de Linux. Los últimos 3 de estos son componentes de Ubuntu, mientras que el primero lo proporciona el OEM del dispositivo. En este caso, tanto shim como GRUB2 tienen (o pronto recibirán actualizaciones) para mitigar estas vulnerabilidades y para ayudar a certificar que el proceso de puesta en marcha seguro no confíe en las versiones vulnerables anteriores de GRUB2 y no se puedan usar para cargar código taimado.
A raíz de la divulgación llamativo de BootHole, Chris Coulson del equipo de seguridad de Ubuntu y los investigadores externos descubrieron vulnerabilidades adicionales en GRUB2 que podrían estilarse para eludir el puesta en marcha seguro. Al revelar esto a los desarrolladores de GRUB2, se estableció un esfuerzo renovado para tratar de identificar cualquier vulnerabilidad adicional que aún estuviera al acecho en GRUB2. A través de una combinación de pruebas de fuzz, exploración quieto e inspección manual de código, un equipo de ingenieros de seguridad de varias organizaciones de la industria descubrió en total 8 vulnerabilidades en GRUB2 (6 de las cuales afectan a Ubuntu) para esta aggiornamento, y a cada una se le asignó un CVE como se detalla. debajo:
- CVE-2020-14372: grub2: el comando acpi permite al favorecido privilegiado cargar tablas ACPI diseñadas cuando el puesta en marcha seguro está preparado
- CVE-2021-20233: grub2: escritura fuera del techo del montón correcto a un cálculo incorrecto del espacio requerido para la cotización
- CVE-2020-25632: grub2: use-after-free en el comando rmmod
- CVE-2020-27779: grub2: el comando cutmem permite al favorecido privilegiado deshabilitar ciertas regiones de memoria, deshabilitando así las protecciones de puesta en marcha seguro
- CVE-2021-20225: grub2: escritura fuera de límites del montón en el analizador de opciones de formato corto
- CVE-2020-27749: grub2: desbordamiento del búfer de pila en grub_parser_split_cmdline
La séptima vulnerabilidad fue identificada por Dimitri John Ledkov del equipo de Ubuntu Foundations; esto solo afectó a GRUB2 ascendiente pero no a Ubuntu (que se había abordado previamente durante la aggiornamento de BootHole):
- CVE-2021-3418 – grub2: GRUB 2.05 reintrodujo CVE-2020-15705, GRUB2 no valida las firmas del kernel cuando se inicia directamente sin shim, lo que permite silenciar el inicio seguro.
La octava vulnerabilidad afectó al módulo USB GRUB2, que no está incluido en los módulos incluidos en la imagen EFI firmada de Ubuntu y, por lo tanto, no afecta a Ubuntu:
- CVE-2020-25647: grub2: la corrupción de la memoria de los descriptores de dispositivos USB diseñados permite que un favorecido nave ejecute código infundado cuando el puesta en marcha seguro está preparado
Tabla de Contenidos
Un GRUB2 para gobernarlos a todos
Para certificar un enfoque unificado, la traducción de GRUB2 para sistemas UEFI utilizada en versiones anteriores de Ubuntu se actualiza para que se pueda usar una única traducción de GRUB2 para todos; esto asegura que tanto las últimas correcciones de seguridad como las funciones de mitigación se puedan adoptar más fácilmente en estos lanzamientos anteriores. Como esto tiene el potencial de causar problemas en lo que es un componente fundamental del proceso de puesta en marcha (correcto a la gran cantidad de cambios tanto en GRUB2 como en la forma en que se distribuye en Ubuntu), esta aggiornamento se implementará cuidadosamente a través de el faltriquera de actualizaciones del archivo de paquetes de Ubuntu.
Correcto a que el puesta en marcha seguro no se aplica a los entornos de puesta en marcha basados en BIOS, no publicaremos actualizaciones para GRUB2 en esos sistemas.
¿Qué tiene en sus bolsillos?
El archivo de paquetes de Ubuntu consta de varios compartimentos para cada traducción de Ubuntu: traducción, seguridad, actualizaciones y propuesta. El faltriquera de impulso contiene esos paquetes y su traducción particular que componían el impulso auténtico. El faltriquera de seguridad se utiliza para proporcionar actualizaciones de seguridad para paquetes. Los bolsillos propuestos y de actualizaciones se utilizan para proporcionar actualizaciones de corrección de errores a través del proceso de actualizaciones de traducción estable de dos pasos: los primeros paquetes se cargan en el faltriquera propuesto y solo posteriormente de que se hayan probado y validado lo suficiente, luego migran al faltriquera de actualizaciones. Los bolsillos de impulso, seguridad y actualizaciones están habilitados de forma predeterminada en las nuevas instalaciones de Ubuntu, pero el faltriquera propuesto no lo está; sin requisa, se puede habilitar manualmente con fines de prueba y demostración. Al dividir el archivo de Ubuntu entre las actualizaciones y los bolsillos de seguridad, esto permite a los usuarios más conservadores nominar tomar solo correcciones de seguridad (pero no de errores) al deshabilitar el faltriquera de actualizaciones. Estos bolsillos se diferencian no solo por lo que está permitido en cada faltriquera, sino además por la forma en que se aplican las actualizaciones de paquetes de cada faltriquera. Para certificar la entrega oportuna de las actualizaciones de seguridad, las nuevas versiones de paquetes lanzadas en este faltriquera están disponibles de inmediato para los usuarios finales, y herramientas como las actualizaciones desatendidas garantizan que se instalen automáticamente en las versiones más recientes de Ubuntu. En comparación, los paquetes en el faltriquera de aggiornamento se lanzan progresivamente para certificar que cualquier posible regresión solo afecte a un pequeño subconjunto de usuarios al detener las actualizaciones de los paquetes que se consideran problemáticos.
Como esta aggiornamento toca los paquetes que son críticos para que los sistemas Ubuntu se inicien con éxito, se publicarán a través de los bolsillos propuestos y luego los de actualizaciones en este caso, para impedir el impacto de cualquier posible regresión (aunque sea poco probable). Si proporcionadamente esto retrasa la entrega de la aggiornamento de GRUB2 a los usuarios de Ubuntu, en este caso, el impacto de este retraso es leve, ya que la aggiornamento asociada para shim además se retrasa, como se explica a continuación.
Uno no simplemente revoca múltiples binarios GRUB2
En la aggiornamento GRUB2 precedente para BootHole, el UEFI Forum lanzó una aggiornamento asociada para la cojín de datos UEFI DBX. La cojín de datos DBX se utiliza para enumerar los componentes que deben no ser de confianza durante el puesta en marcha seguro, pero que de otra guisa sería: en ese caso, se usó para enumerar las múltiples versiones anteriores de GRUB2 que eran vulnerables a BootHole. Sin requisa, la gran mayoría de las plataformas que admiten UEFI Secure Boot solo tienen un espacio pequeño para acumular esta información, y la aggiornamento precedente de DBX para BootHole consumió una cantidad significativa de este almacenamiento: consumir todo el almacenamiento haría que las máquinas no pudieran proceder. Como tal, se requería otro mecanismo para permitir la enumeración de GRUB2 inseguros (u otros componentes de puesta en marcha) para que no se les permitiera proceder. Trabajando en conjunto con Microsoft y otros, se diseñó un esquema de segmentación vanguardia de puesta en marcha seguro (SBAT) para shim, que proporciona un medio más flexible para proporcionar una directorio de GRUB2 (u otros binarios) en los que no se debe entregarse en manos como parte del puesta en marcha seguro. proceso. Encima, la cuña apoya el concepto de un proveedor DBX, que permite a los distribuidores de shim (como Ubuntu) destinar su propia directorio de binarios en los que no se debe entregarse en manos. Para esta aggiornamento, hemos complemento la directorio de todos los binarios GRUB2 más antiguos enviados en Ubuntu que contienen este nuevo conjunto de vulnerabilidades, así como las versiones que eran vulnerables a las vulnerabilidades originales de BootHole para este proveedor DBX adentro de shim como parte del paquete shim actualizado. para Ubuntu ..
Correcto al corto período de tiempo entre el exposición de las funciones SBAT para shim y el deseo de certificar que sean estables, así como a la falta de que Microsoft las valide para firmar como una nueva dormitorio confiable para un puesta en marcha seguro, una traducción retrasada coordinada de shim se ha establecido, por lo que se aplazamiento que estas actualizaciones asociadas para shim estén disponibles en unas pocas semanas posteriormente de las actualizaciones de GRUB2. Además debe tenerse en cuenta que, a diferencia de la aggiornamento precedente relacionada con BootHole para GRUB2 en Ubuntu, para esta aggiornamento, los binarios shim anteriores que fueron firmados por Microsoft para Ubuntu ahora se agregarán a la directorio de revocación de DBX del Foro UEFI precedente. Esto no se hizo durante la aggiornamento de BootHole ya que, en cambio, se revocó el certificado que se usó para firmar esos antiguos binarios de GRUB2. Para completar esta transición, este certificado antiguo ahora se agregará al proveedor DBX de shim encima de los binarios de GRUB2 mencionados anteriormente.
Finalmente, además esperamos propalar una aggiornamento para fwupd en Ubuntu. Este paquete se utiliza para instalar actualizaciones de firmware UEFI y además es de confianza como componente de puesta en marcha seguro, por lo que además requiere una aggiornamento para reconocer SBAT.
Ahí y de dorso…
Cuando se anunciaron por primera vez las vulnerabilidades de BootHole originales, se destacó el puesta en marcha seguro de UEFI y, en particular, GRUB2 como parte de ese ecosistema. Si proporcionadamente en ese momento se hizo un gran esfuerzo para intentar enumerar y resolver todas las posibles vulnerabilidades similares en GRUB2, esta era una tarea inconclusa. Esta última ronda de actualizaciones sondeo resolver las vulnerabilidades recién descubiertas, así como hacer que el proceso para futuras actualizaciones de este tipo sea un alucinación más dócil tanto para los desarrolladores de Ubuntu como para los usuarios finales. Para obtener más información sobre estas actualizaciones, visite el artículo de la Cojín de conocimientos de seguridad de Ubuntu.