Linux Adictos Isaac  

Cómo actualizar la BIOS, UEFI o Microcódigo desde Linux

¿Sabes cómo actualizar la BIOS de tu PC? Con las vulnerabilidades como Spectre, Meltdown, y todas sus variantes y otros agujeros de seguridad detectados en el hardware, especialmetne en las CPUs, seguramente has leído en multitud de ocasiones que muchas de ellas se solucionan sabiendo cómo actualizar la BIOS o UEFI de tu equipo, ya que se necesita una actualización o parche para el microcódigo que emplea la CPU y así alterar la forma de operar de la Unidad de Control de la CPU para que no sea vulnerable a dichas amenazas.

Además de las vulnerabilidades, el firmware se puede actualizar por muchas otras cáusas, como un malfuncionamiento de un dispositivo de hardware, errores constantes en el software de manera inexplicable, actualizaciones para añadir algunas funcionalidades, etc. Pero como he dicho, en los últimos meses hemos escuchado demasiadas veces este término por problemas de seguridad bastante críticos en algunos casos y que tenían que ver con la forma en la que los modernos microprocesadores realizan el tratamiento de algunos saltos, de la cache, FPU y la ejecución especulativa, aunque en otros casos han sido detectados en otras partes del sistema como chipsets o ciertos procesadores de seguridad integrados en estas plataformas…

¿Qué es el firmware?

Todos tenemos bastante claro lo que es el hardware (parte física y palpable de un equipo, es decir, la electrónica) y el software (esa parte lógica que no se puede tocar: los programas). Pero entre el hardware y el software, o mejor dicho, entre el hardware y el kernel del sistema operativo existe algo más: el firmware. El firmware está presente en todos los dispositivos y partes de un ordenador, desde el ratón, la unidad óptica, hasta la GPU y CPU que operan con un microcódigo.

¿Pero qué es? Bueno, se puede decir que es código, es decir, software y por tanto un componente lógico pero en esta ocasión es inalterable. Opera a bajo nivel, y controla directamente las funcionalidades de los circuitos electrónicos. Este firmware, con ayuda de los controladores o drivers permiten que cuando el kernel del sistema operativo manda realizar alguna tarea al hardware, éste la ejecute. Este programa o código ha sido grabado por el fabricante del dispositivo en una memoria que normalmente es flash, o algún tipo de ROM como la EEPROM.

Pero uno de los firmware que más nos interesa en éste artículo es la BIOS o UEFI de un sistema, ya que se trata de un firmware muy importante que tiene diversas funciones durante el encendido y funcionamiento del equipo. Por ejemplo, éste código es el encargado de activar la máquina durante el arranque, detectar los discos duros o medios donde haya un sistema operativo disponible, realizar algunas comprobaciones interfiriendo con otros firmware de los componentes y periféricos, y ceder el control al kernel cuando el sistema comienza a iniciarse…

¿Por qué actualizándolo afecta a la CPU?

… y ésto qué tiene que ver con la CPU, pues bastante. Resulta que las CPUs tienen una unidad de control, esta unidad de control es una circuitería que se encarga de controlar el resto de partes del microprocesador o CPU, como por ejemplo decodificar las instrucciones y hacer que los datos con los operandos vayan a los registros oportunos para luego activar alguna unidad fucnional como una ALU o FPU y que ésta realice alguna operación sobre los datos en función del tipo de instrucción que se esté ejecutando. Esas instrucciones a su vez proceden del programa o código de software que se esté procesando en ese momento, ya que como debes saber, los programas están compuestos por una serie de instrucciones secuenciales.

Como puedes imaginar, ésta unidad de control opera de un modo como el fabricante o diseñador la haya creado. En algunos casos concretos puede que la unidad de control sea cableada, es decir, suelen ser bastante rápidas pero poco flexibles, ya que están implementadas directamente con una circuitería muy concreta. En cambio, también las hay programables, es decir, una circuitería algo más “abierta” que puede operar de un modo u otro según un microcódigo o firmware. Se deduce por tanto que s i cambiamos el firmware o microcódigo podemos hacer que la unidad de control y por tanto la CPU pueda operar de diferente modo o corregir algunos bugs o vulnerabilidades.

No quiero ponerme demasiado técnico, quiero que este artículo llegue a cuanta más gente mejor y que se entienda de forma fácil todo lo que quiero decir… Y en muchas máquinas resulta que dicho código suele estar integrado en la BIOS o UEFI , aunque en ocasiones el microcódigo puede ser actualizado mediante el kernel durante cada arránque guardando la actualización o parche en una memoria volátil, es decir, en la RAM, evitando que se tenga que alterar la BIOS/UEFI.

¿Cómo actualizar la BIOS/UEFI desde Linux?

Para actualizar el BIOS/UEFI desde Linux o el microcódigo, vamos a desglosar ambos procedimientos.

Antes de realizar una actualización del microcódigo es muy importante que tengas el firmware del BIOS/UEFI actualizado, ya que de lo contrario podría no funcionar. Así que consulta el sitio web del proveedor de tu firmwre como Phoenix, Award, etc., o el de soporte técnico de tu modelo de placa base, que suelen tener paquetes para actualizar estos sistemas.

Actualizar la BIOS/UEFI es algo delicado como puedes comprobar en el último apartado de reisgos. Por eso te aconsejo que no lo hagas si no estás seguro de lo que estás haciendo y si quieres actualizar o lo necesitas, pero no tienes suficientes conocimientos, siempre consulta con un profesional. Además, te recomendaría echar un vistazo a proyectos como fwupd, BIOSDisck, Flashrom, etc., que son herramientas muy prácticas que nos van a ayudar  en el proceso.

Uno de los que más me gusta es Flashrom, se trata de un paquete que nos aporta una herramienta que permite identificar, leer, escribir, verificar, y borrar chips flash. Eso no solo sirve para flashear un BIOS/UEFI/CoreBoot, también nos sirve para modificar otras memorias flash de tarjetas de red, GPUs, etc., en otros dispositivos con firmware modificable. Además soporta varios sistemas operativos y multitud de marchas y modelos de dispositivos y placas.

  • Instala el paquete flashrom en tu distribución usando el gestor de paquetes que utilices normalmente, ya que es una herramienta que se encuentra entre los repositorios de las distribuciones más importantes.
  • Usa root o sudo, ya que para usarla se necesitan privilegios al ser algo delicado.
  • Identifica el firmware que usamos simplemente ejecutando el comando:

flashrom

  • Te recomiendo que hagas un backup de tu ROM actual, por si te encuentras con que la nueva actualizción no funciona y quieres volver atrás. Para ello:

flashrom -r copia_seguridad.bin

  • Si ya tenemos la nueva ROM que hemos descargado desde una fuente CONFIABLE, podemos usar el siguiente comando para flashear, por ejemplo, si nuestra nueva actualización se llama uefi-sm.bin:

flashrom -wv uefi-sm.bin

Para más información consulta el manual con man flashrom.

Actualizar microcódigo:

Para actualizar el microcódigo de nuestra CPU, sin tocar al BIOS/UEFI, es decir, con una simple modificación en el kernel de Linux, puedes optar por instalar los paquetes necesarios para tu CPU. Por ejemplo, si tienes una CPU AMD moderna, lo normal es que instales el paquete llamado amd64-microcode, y para una Intel el paquete intel-microcode (si usas openSUSE, SUSE, RHEL, CentOS, etc., el paquete se llama microcode_ctl, y para Arch intel-ucode o amd-ucode…) que podrás encontrar en webs confialbes…(eso si se trata de una máquina x86, si es ARM o diferente, acude a la web del fabricante). Insisto a pesar de parecer un pesado, no descargues este tipo de paquetes desde fuentes desconocidas, es muy importante. Bien, ahora que ya lo tenemos descargado e instalado, puede que el procedimiento sea diferente en cada distribución y que implique activar algunos paquetes o actualizaciones restringidos como los propietarios…

Con esos paquetes instalados y las configuraciones del sistema que hacen referencia a las actualizaciones bien configuradas, las propias actualizaciones de seguridad que instala el sistema operativo ya incluirán este tipo de parches para el microcódigo si se ha detecatado algunas vulnerabilidad grave como es el caso de Spectre, Meltdown, etc.

Si quieres, puedes obtener información del microcódigo de tu distro usando:


dmesg | grep microcode

Y con eso obtendremos detalles del microcódigo, de hecho, si hemos ejecutado este comando antes de instalar los paquetes que he comentado antes (tras instalar es necesario reiniciar) y después, veremos que nos muestra cambios si había alguna actualización disponible que ha sido instalada.

En ocasiones, AMD, Intel y otros fabricantes o diseñadores de CPUs, suelen aportar tarballs con blobs binarios para actualizar el microcódigo o firmware. Si has descargado uno de estos paquetes de un lugar confiable, sigue las instrucciones que te aporta el distribuidor o consulta los ficheros README.

Peligros y consejos antes de actualizar la BIOS

Una actualización del firmware o del microcódigo de la CPU supone en la mayoría de casos actualizar códigos cerrados que proporcionan los proveedores de la CPU que tengamos, controladores del kernel cerrados (blobs binarios), etc. Quiero dejar esto claro, ya que se desconoce su contenido y forma de operar y me parece lógico que lo sepas. En principio, si no usas hardware libre, no te queda otra que fiarte del fabricante o diseñador de tu CPU o placa base, pero eso sí, núnca jamás descargues microcódigo o firmware desde webs no oficiales, ya que es algo muy delicado.

De hecho no solo es delicado por cuestiones de seguridad, ya que también podrías dejar el equipo totalmente inservible. Incluso si has descargado el fimware de una web confiable, algo puede salir mal durante el proceso, como por ejemplo que haya un apagón y eso deje a medias la instalación de la actualización y el firmware completamente corrupto, lo que significa que ya puedes estar pensando en gastar dinero para comprar una nueva placa base.

Esto es lo que se conoce con el término de brick en el argot del hardware, es decir, dejar tu hardware como un ladrillo, sin ningún tipo de utilidad. Con esto te quiero decir que seas precabido y que no nos hacemos responsables de lo que pueda ocurrir si te decides a actualizar algún firmware o flashear el BIOS/EFI. Pero ojo, esto no siempre implica riesgos, como te he dicho antes, no siempre se necesita “tocar” el BIOS/EFI, también hay actualizaciones que solo son a nivel del SO y no implican esos riesgos…

Espero que haya sido de utilidad este tutorial, cualquier duda o sugerencia, no olvides dejar tus comentarios

El artículo Cómo actualizar la BIOS, UEFI o Microcódigo desde Linux ha sido originalmente publicado en Linux Adictos.

Leave A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.