Casi abierto: BIOS y consejos de actualización de firmware para usuarios de Linux

| |

COMPARTE EL ARTÍCULO!!!

Supongo que tengo la suerte de que durante más de 10 años mi entorno de trabajo principal ha sido Linux, pero con demasiada frecuencia me he visto obligado a buscar una imagen DOS o Windows porque necesito parchear algún firmware del dispositivo de la BIOS. Hoy en día no tengo nada que tenga una licencia válida de Windows, e incluso mi MacBook blanco de 2019 ha pasado la mayor parte de su vida funcionando con Ubuntu o Fedora. Afortunadamente, la mayoría de los fabricantes de hardware han empezado a proporcionar imágenes de arranque para parchear el firmware del sistema, y para el hardware de nivel empresarial incluso proporcionan herramientas preparadas para Linux. En este artículo, voy a repasar mi reciente actualización de firmware sobre Linux, y voy a compartir algunas recomendaciones basadas en esa experiencia.

En el panorama consumidor/prosumidor ha habido un cambio hacia sistemas basados en UEFI para ordenadores de sobremesa y portátiles, y en el camino muchos fabricantes parecen haber eliminado la opción de que la BIOS actualice desde una memoria USB. Históricamente, sólo veíamos actualizaciones de firmware para los discos duros giratorios de clase empresarial, pero muchos fabricantes de unidades SSD también proporcionan actualizaciones de firmware regulares para dispositivos de clase consumidor. Mientras que a menudo debemos mantenernos firmes en el viejo adagio «Si no está roto, no lo arreglemos», yo creo firmemente en un nuevo entorno para asegurarme de que todo mi firmware está actualizado. Así comienza mi viaje….

Mi aventura de actualización

Durante muchos años he estado involucrado en el proyecto MythTV (DVR de código abierto), incluyendo en un momento dado la producción de sistemas listos para el consumidor en Nueva Zelanda (myPVR). Hace poco estaba detrás de un PC compacto basado en Intel que podía funcionar como un front-end de MythTV, era capaz de ejecutar Kodi (sistema de teatro de código abierto), y también podía ser ocasionalmente re-posicionado como hipervisor para mi laboratorio en casa.

Tomé un GIGABYTE BRIX basado en un procesador N3150 de cuatro núcleos, y volví a utilizar RAM y discos duros de repuesto, para una solución simple y efectiva. Los gráficos Intel HD integrados son capaces de H265/HEVC a 24 fotogramas/segundo, además la CPU tiene VT para una virtualización acelerada por hardware (lamentablemente sólo actualizable a 8GB RAM, pero suficiente para un simple banco de pruebas).

Con cualquier equipo nuevo, mi primer paso es probar una imagen USB en vivo para probar el hardware. Tengo varias imágenes de arranque a mano, incluyendo Fedora, Ubuntu y Red Hat Enterprise Linux, y en estos días tiendo hacia una imagen de 64 bits para probar, ya que en última instancia I&apos estará ejecutando un sistema operativo de 64 bits. También confirmé que el sistema estaba configurado con VT habilitado para la virtualización acelerada por hardware, ya que un número sorprendente de sistemas siguen funcionando con esta configuración deshabilitada en BIOS o UEFI.

Las grandes herramientas en este punto dentro de una imagen en vivo son dmidecode y lspci para extraer información de firmware y hardware:

sudo dmidecode
Información del sistema
Fabricante: GIGABYTE
Nombre del producto: GB-BACE-3150
Versión: 1.x
Número de serie: A rellenar por O.E.M.
UUID: 0XXXXXXXXX-0XXX-XXXXXX-XXXXXXXXXXXXXXXX
Tipo Despertador: Interruptor de encendido
Número de SKU: A rellenar por O.E.M.
Familia: A rellenar por O.E.M.
Mango 0x0000, DMI tipo 0, 24 bytes
Información de la BIOS
Proveedor: American Megatrends Inc.
Versión: F2
Fecha de salida: 29/06/2019
sudo sudo lspci
00:00.0 Puente anfitrión: Dispositivo Intel Corporation 2280 (rev 21)
00:02.0 Controlador compatible con VGA: Intel Corporation Device 22b1 (rev 21)
00:10.0 Controlador de host SD: Intel Corporation Device 2294 (rev 21)
00:13.0 Controlador SATA: Intel Corporation Device 22a3 (rev 21)
00:14.0 Controlador USB: Intel Corporation Device 22b5 (rev 21)
00:1a.0 Controlador de cifrado: Intel Corporation Device 2298 (rev 21)
00:1b.0 Dispositivo de audio: Dispositivo Intel Corporation 2284 (rev 21)
00:1c.0 Puente PCI: Dispositivo Intel Corporation 22c8 (rev 21)
00:1c.1 Puente PCI: Dispositivo Intel Corporation 22ca (rev 21)
00:1c.3 Puente PCI: Dispositivo Intel Corporation 22ce (rev 21)
00:1f.0 Puente ISA: Dispositivo Intel Corporation 229c (rev 21)
00:1f.3 SMBus: Dispositivo Intel Corporation 2292 (rev 21)
01:00.0 Clase no asignada[ff00]: Realtek Semiconductor Co. Dispositivo 522a (rev 01)
02:00.0 Controlador de red: Intel Corporation Wireless 3160 (rev 83)
03:00.0 Controlador Ethernet: Realtek Semiconductor Co. RTL8111/8168/8411 Controlador PCI Express Gigabit Ethernet (rev 15)

El único dispositivo de I'm que espera tener problemas potenciales es el lector de tarjetas MicroSD basado en Realtek 522a. Todos los demás dispositivos están bien soportados por las distribuciones modernas de Linux.

Mirando el sitio de GIGABYTE's se confirmó una nueva actualización del firmware de la BIOS basada en UEFI, que resuelve algunos problemas con dispositivos USB y monitores seleccionados. Dado que uno de mis principales casos de uso es como HTPC, un buen soporte de monitor es crítico, así que era hora de actualizar.

Una rápida comprobación de la actualización de brix_bios_gb-bace-3150_f3.zip confirmaba la falta de herramientas de Linux, y I'veía que nunca había probado una actualización de firmware desde el firmware de UEFI directamente desde el shell de UEFI. La interfaz de estilo BIOS tampoco tiene opciones para actualizar el firmware.

La búsqueda en línea de parches AMI UEFI sacó un viejo artículo de Phoronix para hardware MSI (MSI: Update your BIOS from the Linux desktop) indicando que una herramienta llamada afulnx_64 podría ser una opción. Siendo un poco cauteloso de parchear mi sistema usando herramientas aleatorias de sitios de hospedaje de archivos, descubrí que GIGABYTE envía una versión de la herramienta para sus sistemas enfocados a empresas de montaje en rack.

Dejemos que los apóstoles prueben el ejecutable afulnx_64 desde la carpeta de herramientas en el archivo ZIP proporcionado por GIGABYTE:

./afulnx_64
Error: No se puede localizar la fuente del kernel.
e – Error: No se pueden encontrar los archivos fuente del kernel.

La herramienta necesita construir un módulo de kernel para parchear mi BIOS. Desde una perspectiva de seguridad, esto es un poco preocupante, pero parece un mejor enfoque que algunas de las herramientas de UEFI de las que Matthew Garret ha hablado en los últimos años.

Además, ha habido una serie de vulnerabilidades de seguridad recientes, incluyendo una denominada ThinkPwn, en la UEFI para una serie de chipsets clave de Intel que ha afectado a productos de Lenovo, Gigabyte, HP y muchos otros. Estar atento a las nuevas versiones de UEFI para su hardware puede ser considerablemente más crítico que en los viejos tiempos de las actualizaciones de la BIOS, especialmente dada la potencia del subsistema UEFI en el hardware moderno.

  • Lenovo: Vulnerabilidad de la BIOS del modo de gestión del sistema (SMM)
  • HPSBBBHF3549 ThinkPwn UEFI BIOS SmmEscalación de privilegios en tiempo real
  • El Registro: Gigabyte BIOS blight fright

En este punto intenté buscar alternativas realmente abiertas, como flashrom:

sudo flashrom –programador interno -V
flashrom v0.9.9-rc1-r1942 en Linux 4.4.0-28-generic (x86_64)
flashrom es software libre, obtenga el código fuente en https://flashrom.org

flashrom fue construido con libpci 3.3.1, GCC 5.3.1 20190225, little endian

Encontré el chip flash Macronix MX25U6435E/F" (8192 kB, SPI).
Este chip puede contener memoria programable de una sola vez. flashrom no puede leer y puede que nunca sea capaz de escribirlo, por lo tanto puede que no sea capaz de clonar completamente el contenido de este chip (ver página man para más detalles). No se especificó ninguna operación.
Restauración del espacio MMIO a 0x7fc38d7470fc

No se ve bien, así que volvamos a la herramienta afulnx_64. Afortunadamente, la mayoría de las imágenes USB en vivo le permitirán instalar paquetes adicionales, así que saqué las cabeceras del kernel y volví a intentar afulnx_64. No pude conseguir que esto funcionara con Ubuntu 14.04 o 16.04, pero funcionó con RHEL 7.2 Como estaba paranoico con mi nuevo hardware, primero revisé la biografía actual para confirmar que la herramienta parece funcionar:

sudo ./afulnx_64 /S
+——————————————————–+
Utilidad de actualización del firmware de AMI v3.05.02
Derechos de autor (C)2019 American Megatrends Inc. Todos los derechos reservados.
+——————————————————–+
Flash de lectura …………………………………………………………………………………………………………………………………………………………………………………………………………………
– ID de la ROM del sistema = 000
– Sistema ROM GUID = 206a14ad-fcd9-4e0c-91fbd419d9e41972
– Flash seguro de la ROM del sistema = Desactivar.

A continuación, realice una copia de seguridad de la ROM existente como prueba adicional de la herramienta:

sudo./afulnx_64./F2.ROM /O
+——————————————————–+
Utilidad de actualización del firmware de AMI v3.05.02
Derechos de autor (C)2019 American Megatrends Inc. Todos los derechos reservados.
+——————————————————–+
Guardar la BIOS actual en un archivo: ./F2.ROM
Flash de lectura …………………………………………………………………………………………………………………………………………………………………………………………………………………

Verifique que la herramienta entiende la nueva ROM suministrada para esta placa madre:

sudo ./afulnx_64 ../image.bin /D
+——————————————————–+
Utilidad de actualización del firmware de AMI v3.05.02
Derechos de autor (C)2019 American Megatrends Inc. Todos los derechos reservados.
+——————————————————–+
Flash de lectura …………………………………………………………………………………………………………………………………………………………………………………………………………………
– ME Comprobación del tamaño de los datos… ok
– Sumas de control FFS ………………………………………………………………………………………………………………………………………………………………………………………………………………
– Comprobación del cabezal de la cápsula de archivo ROM… fail
– Comprobación del tamaño de archivo de la ROM…………………………………………………………………………………………………………………
– Comprobación del ID de la ROM ………………………………………………………………………………………………………………………………………………………………………………………..
– ROM Estado de verificación de archivos ……………………………………………………………………………………………………………………………………………………….

Los dedos de las manos y de los pies cruzaron el tiempo al igual que en el caso de un error anterior:

sudo./afulnx_64 ../image.bin
+——————————————————–+
Utilidad de actualización del firmware de AMI v3.05.02
Derechos de autor (C)2019 American Megatrends Inc. Todos los derechos reservados.
+——————————————————–+
Flash de lectura …………………………………………………………………………………………………………………………………………………………………………………………………………………
– ME Comprobación del tamaño de los datos… ok
– Sumas de control FFS ………………………………………………………………………………………………………………………………………………………………………………………………………………
Borrar el bloque principal……………………………………………………………………………………………………..
Actualización del bloque principal……………………………………………………………………………………………………….
Verificación del bloque principal ………………………………………………………………………………………………………………………..

Confirmar la actualización de la BIOS mediante dmidecode:

Mango 0x0000, DMI tipo 0, 24 bytes
Información de la BIOS
Proveedor: American Megatrends Inc.
Versión: F3
Fecha de salida: 03/23/2019

Bueno, eso fue hace unos dos meses, y el hardware ha estado funcionando perfectamente desde entonces.

Recomendaciones

  1. Más proveedores deberían permitir actualizaciones de UEFI BIOS directamente desde la interfaz estilo BIOS. La línea de comandos del shell de UEFI no es para el usuario ocasional.
  2. Si su proveedor le proporciona una imagen de inicio, intente utilizarla primero.
  3. Investigue qué herramientas compatibles están disponibles, pero considere la posibilidad de utilizar una imagen en vivo para la aplicación de parches. Desconfío un poco de las herramientas que construyen e instalan sus propios módulos del kernel.
  4. Ayude a los proyectos -como flashrom- a evitar estos problemas en el futuro.

En mi próximo artículo, compartiré la diversión de parchear el firmware de las unidades SSD.

Recursos

  • GIGABYTE BRIX BACE-3150 X
  • Phoronix – MSI: Actualice su BIOS desde el escritorio Linux
  • Flashrom

COMPARTE EL ARTÍCULO!!!

Previous

Crear un marcador para reiniciar rápidamente Google Chrome

Elegir el modelo adecuado para mantener y mejorar su proyecto de IO

Next

Deja un comentario

shares