Versión rusa de este artículo.Introduccion
El firmware de las placas base de las computadoras modernas funciona de acuerdo con la especificación
UEFI , y desde 2013 son compatibles con la tecnología de autenticación de los programas descargados y los controladores de arranque seguro, que está diseñada para proteger la computadora de los
kits de
arranque . Secure Boot bloquea la ejecución de código de programa no firmado o no confiable: archivos .efi de programas y cargadores de arranque de sistemas operativos, firmware de equipos adicionales (tarjetas de video OPROM, adaptadores de red).
Secure Boot se puede deshabilitar en cualquier placa base de la tienda, pero un requisito físico para cambiar su configuración es una presencia física en la computadora. Debe ingresar a la configuración de UEFI cuando se inicia la computadora, y solo entonces será posible desactivar la tecnología o cambiar su configuración.
La mayoría de las placas base solo vienen con claves de Microsoft como confiables, por lo que los creadores del software de arranque se ven obligados a contactar a Microsoft para la firma de los gestores de arranque, someterse a un procedimiento de auditoría y justificar la necesidad de una firma global de su archivo si desean que la unidad o la unidad flash se ejecuten innecesariamente deshabilite el Arranque seguro o agregue manualmente su clave en cada computadora.
Microsoft tiene que firmar gestores de arranque para desarrolladores de distribuciones de Linux, hipervisores, discos de arranque antivirus y programas de recuperación de computadoras.
Quería hacer una unidad flash USB de arranque con varios programas de recuperación de computadora que arrancaran sin deshabilitar el Arranque seguro. Veamos cómo se puede implementar esto.
Descargadores firmados del gestor de arranque
Entonces, para arrancar Linux con Secure Boot habilitado, necesita un gestor de arranque firmado. Microsoft ha prohibido la firma de software con licencia bajo GPLv3 debido a la prohibición de la
tivoización por las reglas de la licencia, por lo que
GRUB no podrá firmar .
En respuesta, la Fundación Linux lanzó
PreLoader , y Matthew Garrett escribió
shim : pequeños cargadores de arranque que verifican la firma o el hash del próximo archivo de descarga. PreLoader y shim no usan certificados
UEFI db , pero contienen una base de datos de hashes permitidos (PreLoader) o certificados (shim) dentro de ellos mismos.
Ambos programas, además de descargar automáticamente archivos confiables, le permiten descargar cualquier archivo previamente no confiable en el modo de arranque seguro, pero requieren la presencia física del usuario: al primer inicio, debe seleccionar el certificado agregado o el archivo hash en la interfaz gráfica, después de lo cual los datos se ingresan en una variable NVRAM especial una placa base que no está disponible para cambio desde un sistema operativo cargado. Los archivos se vuelven confiables solo para estos precargadores, y no para el Arranque seguro en general, y de todos modos no puede ejecutarlos sin Precargador / shim.
Acciones requeridas al iniciar un programa no confiable por primera vez a través de shim.Todas las distribuciones populares de Linux actuales usan shim, debido a la compatibilidad con certificados, lo que facilita la actualización del siguiente gestor de arranque sin la necesidad de interacción del usuario. Normalmente, shim se usa para ejecutar GRUB2, el gestor de arranque más popular en Linux.
GRUB2
Para evitar que los atacantes hagan negocios en silencio con la ayuda de un gestor de arranque firmado de algún kit de distribución, Red Hat creó parches para GRUB2 que bloquean las funciones "peligrosas" cuando se activó el arranque seguro: insmod / rmmod, appleloader, linux (reemplazado por linuxefi), multiboot, xnu, memrw, iorw. El módulo de cargador de cadena, que carga archivos arbitrarios .efi, se complementó con su propio cargador .efi (PE), sin usar los comandos UEFI LoadImage / StartImage, así como el código de validación de los archivos descargados a través de shim, de modo que la capacidad de descargar archivos sea confiable para shim pero no confiable en términos de UEFI. Por qué hicieron exactamente eso no está claro; UEFI le permite redefinir (enganchar) la función de verificar las imágenes descargadas, así es como funciona PreLoader, y Shim tiene
esa función , pero está deshabilitada de forma predeterminada.
De una forma u otra, el uso de un GRUB firmado de alguna distribución de Linux fallará. Hay dos formas de crear una unidad flash USB de arranque universal que no requiera agregar las claves de cada archivo descargado a las de confianza:
- Usando un GRUB modificado que descarga archivos EFI por sí mismo, sin verificar una firma digital y sin bloquear módulos;
- Usando su propio precargador (segundo) anulando las funciones de verificación de firma digital UEFI (EFI_SECURITY_ARCH_PROTOCOL.FileAuthenticationState, EFI_SECURITY2_ARCH_PROTOCOL.FileAuthentication)
La segunda opción es preferible: los programas descargados no confiables también podrán descargar programas no confiables (por ejemplo, puede descargar archivos a través de UEFI Shell), y en la primera versión, solo GRUB puede descargar todo.
Modificamos PreLoader , eliminando el código adicional y permitiendo el lanzamiento de cualquier archivo.
Total, la arquitectura de la unidad flash es la siguiente:
______ ______ ______ ╱│ │ ╱│ │ ╱│ │ /_│ │ → /_│ │ → /_│ │ │ │ → │ │ → │ │ │ EFI │ → │ EFI │ → │ EFI │ │_______│ │_______│ │_______│ BOOTX64.efi grubx64.efi grubx64_real.efi (shim) (FileAuthentication (GRUB2) override) ↓↓↓ ↑ ↑ ______ ↑ ╱│ │ ║ /_│ │ ║ │ │ ═══════════╝ │ EFI │ │_______│ MokManager.efi (Key enrolling tool)
Entonces había
Super UEFIinSecureBoot Disk .
Super UEFIinSecureBoot Disk: una imagen de disco con el gestor de arranque GRUB2, diseñado para ejecutar convenientemente programas efi y sistemas operativos sin firmar en el modo UEFI Secure Boot.
El disco se puede usar como base para crear una unidad USB con utilidades de recuperación de la computadora, para lanzar varias distribuciones en vivo de Linux y WinPE, arrancando desde la red, sin deshabilitar el Arranque seguro en la configuración de la placa base, lo que puede ser conveniente al dar servicio a las computadoras de otras personas o empresas computadoras portátiles, por ejemplo, con una contraseña establecida para cambiar la configuración de UEFI.
La imagen consta de tres componentes: un precargador shim de Fedora (firmado con una clave de Microsoft preinstalada en la gran mayoría de las placas base y portátiles), un precargador modificado de Linux Foundation PreLoader (para deshabilitar la verificación de firma al cargar archivos .efi) y un cargador de arranque GRUB2 modificado.
Durante el primer arranque de un disco en una computadora con Secure Boot, debe seleccionar un certificado a través del menú MokManager (se inicia automáticamente), después de lo cual el gestor de arranque funcionará como si Secure Boot estuviera apagado: GRUB carga cualquier archivo .efi o kernel de Linux sin firmar, programas EFI descargados puede ejecutar otros programas y controladores con una firma faltante o no confiable.
Para demostrar la operatividad, la imagen contiene Super Grub Disk (secuencias de comandos para buscar y cargar los sistemas operativos instalados, incluso si su cargador de arranque está dañado), GRUB Live ISO Multiboot (secuencias de comandos para el conveniente arranque de Linux LiveCD directamente desde ISO, sin desempaquetado y procesamiento preliminares), Uno Archivo Linux (kernel e initrd en un archivo, para recuperación del sistema) y varias utilidades UEFI.
El disco es compatible con UEFI sin arranque seguro, así como con computadoras más antiguas con BIOS.
Descargadores firmados
Me preguntaba si era posible evitar de alguna manera la necesidad de agregar una clave a través de una cuña en el primer inicio. ¿Quizás hay algunos descargadores firmados que le permiten hacer más de lo que esperaban los autores?
Al final resultó que hay tales cargadores. Uno de ellos se usa en
Kaspersky Rescue Disk 18 , un disco de arranque con software antivirus. GRUB desde el disco le permite cargar módulos (comando insmod), mientras que los módulos en GRUB le permiten cargar código ejecutable regular. El precargador de disco es nativo.
Por supuesto, solo porque GRUB del disco no carga código no confiable. Es necesario modificar el módulo del cargador de cadena para que GRUB no use las funciones UEFI LoadImage / StartImage, sino que cargue de forma independiente el archivo .efi en la memoria, realice la reubicación, encuentre el punto de entrada y lo siga. Afortunadamente, casi todo el código necesario está en el repositorio
GRUB con soporte de Red Hat Secure Boot , el único problema: no hay código de análisis de encabezado
PE , el encabezado analiza y devuelve shim, en respuesta a una llamada de función a través de un protocolo especial. Esto se puede solucionar fácilmente transfiriendo el código apropiado de shim o PreLoader a GRUB.
Así que hubo un disco UEFIinSecureBoot
silencioso . La arquitectura de disco resultante es la siguiente:
______ ______ ______ ╱│ │ ╱│ │ ╱│ │ /_│ │ /_│ │ → /_│ │ │ │ │ │ → │ │ │ EFI │ │ EFI │ → │ EFI │ │_______│ │_______│ │_______│ BOOTX64.efi grubx64.efi grubx64_real.efi (Kaspersky (FileAuthentication (GRUB2) Loader) override) ↓↓↓ ↑ ↑ ______ ↑ ╱│ │ ║ /_│ │ ║ │ │ ═══════════╝ │ EFI │ │_______│ fde_ld.efi + custom chain.mod (Kaspersky GRUB2)
Conclusión
En este artículo, descubrimos que no hay suficientes cargadores de arranque confiables firmados con una clave de Microsoft que permita trabajar en modo de arranque seguro.
Utilizando los archivos firmados de Kaspersky Rescue Disk, logramos una descarga "silenciosa" de cualquier archivo .efi no confiable con Secure Boot habilitado, sin la necesidad de agregar un certificado a UEFI db o shim MOK.
Estos archivos se pueden usar tanto para buenas obras (para descargar desde unidades flash USB) como para malas (para instalar bootkits sin el conocimiento del propietario de la computadora).
Supongo que el certificado de Kaspersky no durará mucho y se agregará a la
lista global de certificados UEFI revocados , que se instalarán en computadoras que ejecutan Windows 10 a través de Windows Update, lo que interrumpirá la carga de Kaspersky Rescue Disk 18 y Silent UEFIinSecureBoot Disk. Veamos qué tan pronto sucederá esto.
Descargue Super UEFIinSecureBoot Disk:
https://github.com/ValdikSS/Super-UEFIinSecureBoot-DiskDescargue Silent UEFIinSecureBoot Disk en la red
ZeroNet Git Center :
http://127.0.0.1:43110/1KVD7PxZVke1iq4DKb4LNwuiHS4UzEAdAv/Sobre ZeroNetZeroNet es un sistema muy poderoso para crear sitios web y servicios dinámicos distribuidos descentralizados. Al visitar un recurso, el usuario comienza a descargarlo y distribuirlo, como en BitTorrent. Al mismo tiempo, es posible crear recursos completos: blogs con comentarios, foros, alojamiento de videos, sitios wiki, chats, correo electrónico, git.
ZeroNet separa los conceptos de código y datos del sitio: los datos del usuario se almacenan en archivos .json, y cuando se sincronizan, se importan a la base de datos sqlite del sitio con un esquema estandarizado, que le permite hacer cosas impresionantes: búsqueda de texto local en todos los sitios abiertos en milisegundos, automático Análogo de RSS en tiempo real para todos los sitios a la vez.
Sistema de autenticación y autorización estandarizado (similar a OAuth), soporte para trabajar detrás de NAT y a través de Tor.
ZeroNet es muy rápido, fácil de usar, tiene una interfaz moderna y características pequeñas pero muy convenientes, como el cambio global de temas de día / noche en los sitios.
Considero que ZeroNet es un sistema muy subestimado, y publico intencionalmente la versión Silenciosa solo en ZeroNet Git, para atraer a nuevos usuarios.