Amb les vulnerabilitats com Spectre, Meltdown, i totes les seues variants i altres forats de seguretat detectats en el hardware, especialment a les CPU, segurament has llegit en multitud d'ocasions que moltes d'elles se solucionen sabent com actualitzar la BIOS o UEFI del teu equip, ja que es necessita una actualització o pegat per al microcodi que empra la CPU i així alterar la forma d'operar de la Unitat de Control de la CPU perquè no siga vulnerable a aquestes amenaces.
A més de les vulnerabilitats, el firmware es pot actualitzar per moltes altres causes, com un mal funcionament d'un dispositiu del hardware, errors constants en el programari de manera inexplicable, actualitzacions per afegir algunes funcionalitats, etc. Però com he dit, en els últims mesos hem escoltat massa vegades aquest terme per problemes de seguretat bastant crítics en alguns casos, i que tenien a veure amb la forma en la qual els moderns microprocessadors realitzen el tractament d'alguns salts de la memòria cau, la FPU i l'execució especulativa, encara que en altres casos han estat detectats en altres parts del sistema com chipsets o certs processadors de seguretat integrats en aquestes plataformes.
Què és el firmware?
Tots tenim bastant clar el que és el hardware (part física i palpable d'un equip) i el software (part lògica que no es pot tocar, els programes). Però entre el software i el hardware, o millor dit, entre el maquinari i el nucli del sistema hi ha alguna cosa més: el microprogramari o firmware. El firmware és present en tots els dispositius i parts d'un ordinador, des del ratolí, la unitat òptica, fins a la GPU i CPU que operen amb un microcodi.
Es pot dir que és codi, és a dir, programari i per tant un component lògic, però en aquesta ocasió és inalterable. Opera a baix nivell, i controla directament les funcionalitats dels circuits electrònics. Aquest firmware, amb ajuda dels controladors o drivers permeten que quan el nucli del sistema mana realitzar alguna tasca al hardware, aquest l'execute. Aquest programa o codi ha estat gravat pel fabricant del dispositiu en una memòria que normalment és flash, o algun tipus de ROM com la EEPROM.
Un dels firmware que més ens interessa en aquest article és la BIOS o UEFI d'un sistema, ja que es tracta d'un firmware molt important que té diverses funcions durant l'encesa i funcionament de l'equip. Per exemple, aquest codi és l'encarregat d'activar la màquina durant l'arrencada, detectar els discs durs o mitjans on hi hagi un sistema operatiu disponible, realitzar algunes comprovacions interferint amb altres firmware dels components i perifèrics, i cedir el control al nucli quan el sistema comença a iniciar-se.
Resulta que les CPU tenen una unitat de control, aquesta unitat de control s'encarrega de controlar la resta de parts del microprocessador o CPU, com ara descodificar les instruccions i fer que les dades amb els operands vagin als registres oportuns per després activar alguna unitat funcional com una ALU o FPU i que aquesta realitze alguna operació sobre les dades en funció del tipus d'instrucció que s'estiga executant. Aquestes instruccions al seu torn procedeixen del programa o codi de programari que s'estiga processant en aquell moment, ja que els programes estan compostos per una sèrie d'instruccions seqüencials.
Com pots imaginar, aquesta unitat de control treballa d'una manera com el fabricant o dissenyador l'haja creat. En alguns casos concrets pot ser que la unitat de control siga cablejada, és a dir, solen ser bastant ràpides però poc flexibles, ja que estan implementades directament amb uns circuits molt concrets. En canvi, també n'hi ha programables, és a dir, uns circuits que poden operar d'una manera o altra segons un microcodi o firmware. Es dedueix per tant que s i canviem el firmware o microcodi podem fer que la unitat de control i per tant la CPU puga operar de diferent manera o corregir alguns errors o vulnerabilitats.
En moltes màquines resulta que aquest codi sol estar integrat a la BIOS o UEFI, encara que a vegades el microcodi pot ser actualitzat mitjançant el nucli durant cada arrencada guardant l'actualització o pegat en una memòria volàtil, és a dir, a la RAM, evitant que s'haja d'alterar la BIOS/UEFI.
Actualitzar la BIOS/UEFI
Abans de realitzar una actualització del microcodi és molt important que tingues el firmware del BIOS UEFI actualitzat, ja que en cas contrari podria no funcionar. Així que consulta el lloc web del proveïdor del teu firmware com Phoenix, Award, etc., o el suport tècnic del teu model de placa base, que solen tenir paquets per actualitzar aquests sistemes.
Linux descobreix la versió del BIOS usant una opció de línia d'ordres. Com puc esbrinar la versió de BIOS usant una opció de línia d'ordres de Linux? Com verifique la versió del BIOS de la placa base amb l'opció de línia d'ordres de Linux?
Per conéixer la versió de BIOS en sistemes operatius Linux, utilitzeu la comanda dmidecode, que és una eina per analitzar les dades del BIOS. Heu d'iniciar sessió com a usuari root per executar la comanda dmidecode.
Part inicial de les sortides que mostra:
# dmidecode 2.11
SMBIOS 2.5 present.
72 structures occupying 2684 bytes.
Table at 0x000F0750.
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: American Megatrends Inc.
Version: 0602
Release Date: 08/04/2009
Address: 0xF0000
Runtime Size: 64 kB
ROM Size: 1024 kB
Characteristics:
ISA is supported# dmidecode 2.11
SMBIOS 2.5 present.
72 structures occupying 2684 bytes.
Table at 0x000F0750.
Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
Vendor: American Megatrends Inc.
Version: 0602
Release Date: 08/04/2009
Address: 0xF0000
Runtime Size: 64 kB
ROM Size: 1024 kB
Characteristics:
ISA is supported
PCI is supported
PNP is supported
APM is supported
BIOS is upgradeable
BIOS shadowing is allowed
ESCD support is available
Boot from CD is supported
Selectable boot is supported
BIOS ROM is socketed
EDD is supported
5.25"/1.2 MB floppy services are supported (int 13h)
3.5"/720 kB floppy services are supported (int 13h)
3.5"/2.88 MB floppy services are supported (int 13h)
Print screen service is supported (int 5h)
8042 keyboard services are supported (int 9h)
Serial services are supported (int 14h)
Printer services are supported (int 17h)
CGA/mono video services are supported (int 10h)
ACPI is supported
USB legacy is supported
LS-120 boot is supported
ATAPI Zip drive boot is supported
BIOS boot specification is supported
Targeted content distribution is supported
BIOS Revision: 6.2
........................................
PCI is supported
PNP is supported
APM is supported
BIOS is upgradeable
BIOS shadowing is allowed
ESCD support is available
Boot from CD is supported
Selectable boot is supported
BIOS ROM is socketed
EDD is supported
5.25"/1.2 MB floppy services are supported (int 13h)
3.5"/720 kB floppy services are supported (int 13h)
3.5"/2.88 MB floppy services are supported (int 13h)
Print screen service is supported (int 5h)
8042 keyboard services are supported (int 9h)
Serial services are supported (int 14h)
Printer services are supported (int 17h)
CGA/mono video services are supported (int 10h)
ACPI is supported
USB legacy is supported
LS-120 boot is supported
ATAPI Zip drive boot is supported
BIOS boot specification is supported
Targeted content distribution is supported
BIOS Revision: 6.2
........................................
En aquest exemple, visualitze la versió de BIOS amb l'opció -s (dmidecode -s bios-version):
root@Multi-Serveis:~#
És possible imprimir tota la informació relacionada amb la BIOS usant la següent sintaxi també:
L'ordre dmidecode resumeix la informació sobre el maquinari de l'ordinador (portàtil, desktop, server) i que figura a la BIOS del seu sistema. Funciona amb i386, x86-64, ia64 i arm64. Per a més informació vegeu la pàgina oficial del projecte aquí.
Actualitzar la BIOS/UEFI és una cosa delicada, per això t'aconselle que no ho faces si no estàs segur del que estàs fent i si vols actualitzar o ho necessites, però no tens prou coneixements, sempre consulta amb un professional. A més, et recomanaria donar una ullada a projectes com fwupd, BIOSDisck, Flashrom, etc., que són eines molt pràctiques que ens ajudaran en el procés.
Un d'ells és Flashrom (https://flashrom.org/Flashrom), es tracta d'un paquet que ens aporta una eina que permet identificar, llegir, escriure, verificar, i esborrar xips flash. Això no només serveix per flashejar BIOS/UEFI/CoreBoot, també ens serveix per a modificar altres memòries flash de targetes de xarxa, GPUs, etc., en altres dispositius amb firmware modificable. A més suporta diversos sistemes operatius i multitud de marxes i models de dispositius i plaques.
Instal·la el paquet flashrom a la teua distribució usant el gestor de paquets que utilitzes normalment, ja que és una eina que es troba entre els repositoris de les distribucions més importants.
Fes servir root o sudo, ja que per a usar-lo calen privilegis de super usuari. L'ordre flashrom Identifica el firmware que fem servir, simplement executa:
root@Multi-Serveis:~# flashrom
flashrom v0.9.5.2-r1546 on Linux 3.2.0-4-amd64 (x86_64)
flashrom is free software, get the source code at http://www.flashrom.org
Calibrating delay loop... OK.
Found chipset "Intel ICH10R". Enabling flash write... OK.
Found Macronix flash chip "MX25L8005" (1024 kB, SPI) at physical address 0xfff00000.
No operations were specified.
root@Multi-Serveis:~#
Et recomane fer una còpia de seguretat del teu ROM actual, per si et trobes que la nova actualització no funciona i vols tornar enrere, (flashrom -r copia_seguridad.bin):
root@Multi-Serveis:~# flashrom -r copia_seguretat.ROM
flashrom v0.9.5.2-r1546 on Linux 3.2.0-4-amd64 (x86_64)
flashrom is free software, get the source code at http://www.flashrom.org
Calibrating delay loop... OK.
Found chipset "Intel ICH10R". Enabling flash write... OK.
Found Macronix flash chip "MX25L8005" (1024 kB, SPI) at physical address 0xfff00000.
Reading flash... done.
root@Multi-Serveis:~#
Si ja tenim la nova ROM que hem descarregat des d'una font confiança per, podem usar la següent comanda per flashejar, per exemple, si la nostra nova actualització es diu UEFI-sm.bin:
## flashejar la ROM ##
flashrom -w uefi-sm.bin (flashesja la rom)
## Verificar que la ROM s'haja copiat bé ##
flashrom -v uefi-sm.bin
Al meu cas:
root@Multi-Serveis:~# flashrom -w P5KPL-SE-0701.ROM
flashrom v0.9.5.2-r1546 on Linux 3.2.0-4-amd64 (x86_64)
flashrom is free software, get the source code at http://www.flashrom.org
Calibrating delay loop... OK.
Found chipset "Intel ICH10R". Enabling flash write... OK.
Found Macronix flash chip "MX25L8005" (1024 kB, SPI) at physical address 0xfff00000.
Flash image seems to be a legacy BIOS. Disabling coreboot-related checks.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.
root@Multi-Serveis:~# flashrom -v P5KPL-SE-0701.ROM
flashrom v0.9.5.2-r1546 on Linux 3.2.0-4-amd64 (x86_64)
flashrom is free software, get the source code at http://www.flashrom.org
Calibrating delay loop... OK.
Found chipset "Intel ICH10R". Enabling flash write... OK.
Found Macronix flash chip "MX25L8005" (1024 kB, SPI) at physical address 0xfff00000.
Flash image seems to be a legacy BIOS. Disabling coreboot-related checks.
Reading old flash chip contents... done.
Verifying flash... VERIFIED.
root@Multi-Serveis:~#
Per a més informació consulta el manual de flashrom amb:
man flashrom
Perills i consells abans d'actualitzar la BIOS
Una actualització del firmware o del microcodi de la CPU suposa en la majoria de casos actualitzar codis tancats que proporcionen els proveïdors de la CPU que tinguem, controladors del nucli tancats (binaris), etc. Vull deixar això clar, ja que es desconeix el seu contingut i forma d'operar i em sembla lògic que ho sàpigues. En principi, si no fas servir maquinari lliure, no et queda altra que fiar-te del fabricant o dissenyador de la CPU o la placa mare, però això sí, mai descarregues microcodi o firmware des de webs no oficials, ja que és una cosa molt delicada.
De fet no només és delicat per qüestions de seguretat, ja que també podries deixar l'equip totalment inservible. Fins i tot si has descarregat el firmware d'una web fiable, alguna cosa pot sortir malament durant el procés, com per exemple que hi haja una apagada i això deixe a mitges la instal·lació de l'actualització i el firmware completament corrupte.
Significa açò, que ja pots estar pensant a gastar diners per comprar una nova placa base? Pot ser no, els explique el meu cas, a continuació.
Equivocació (error) al flahsejar el Bios
Catàstrofe en actualitzar el bios amb un firmware d'altra placa. L'ordinador queda inservible, en principi tot està perdut. Podem comprar altre bios, també podem dur la bios, a algun tècnic i que la flashetje amb l'arxiu del nostre bios, que podem aportar-li nostres mateixa. Però crec que havia de provar abans algunes coses. Després de moltes hores i proves ho vaig aconseguir de la següent forma:
- Desmuntant el xip de la màquina mal flashejada.
- Muntar-lo en altra maquina, amb el mateix xip i diferent firmware (altra placa mare), i intentar l'actualització del xip. En intentar fer l'actualització des del bios, el sistema no reconeix la imatge flash, impossible continuar.
Solució!
- Arrencar la màquina que flashejarà amb el seu xip original.
- Entrem al seu sistema (en aquest cas Ubuntu Server 18.04 LTS (Bionic Beaver).
- Amb la màquina en marxa desmuntem el xip del Bios i muntem el chip a flashejar.
- Instal·lem el firmware amb l'eina flashrom.
- Tornem a posar cada xip al seu lloc i llest.
Com el comandament flashrom -w (flashrom -w copia_seguretat), no m'ha funcionat faig ús de flashrom -p internal -w (flashrom -p internal -w copia_seguretat.ROM -o writelog.txt). Recordeu sempre com usuari root o com a sudo. Procés al terminal:
### Per realitzar una còpia de seguretat i actualitzar el BIOS, executeu: ###
flashrom -p internal -r backup.rom -o backuplog.txt
flashrom -p internal -w newbios.rom -o writelog.txt
### Si us plau, assegureu-vos de copiar backup.rom a alguns mitjans externs abans d'intentar escriure. Això facilita la recuperació fora de línia. Si l'escriptura falla i flashrom es queixa sobre que el xip està en un estat desconegut, podeu intentar restaurar la còpia de seguretat executant-la. ###
flashrom -p internal -w backup.rom -o restorelog.txt
### Per realitzar una còpia de seguretat i actualitzar el BIOS, executeu: ###
flashrom -p internal -r backup.rom -o backuplog.txt
flashrom -p internal -w newbios.rom -o writelog.txt
### Si us plau, assegureu-vos de copiar backup.rom a alguns mitjans externs abans d'intentar escriure. Això facilita la recuperació fora de línia. Si l'escriptura falla i flashrom es queixa sobre que el xip està en un estat desconegut, podeu intentar restaurar la còpia de seguretat executant-la. ###
flashrom -p internal -w backup.rom -o restorelog.txt
Al meu cas:
root@server-roig:/home/joan# flashrom -p internal -w copia_seguretat.ROM -o writelog.txt
flashrom v0.9.9-r1954 on Linux 4.15.0-43-generic (x86_64)
flashrom is free software, get the source code at https://flashrom.org
Calibrating delay loop... OK.
Found chipset "Intel ICH7/ICH7R".
Enabling flash write... OK.
Found Macronix flash chip "MX25L8005/MX25L8006E/MX25L8008E/MX25V8005" (1024 kB, SPI) mapped at physical address 0x00000000fff00000.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.
Violación de segmento (`core' generado)
root@server-roig:/home/joan# suhtdown -h now
Actualitzar el Microcodi
Per actualitzar el microcodi de la nostra CPU, sense tocar la BIOS/UEFI, és a dir, amb una simple modificació en el nucli de Linux, pots optar per instal·lar els paquets necessaris per a la CPU. Per exemple, si tens una CPU AMD moderna, el normal és que instal·les el paquet anomenat amd64-microcode, i per a una Intel el paquet intel-microcode, si fas servir openSUSE, SUSE, RHEL, CentOS, etc., el paquet es diu microcode_ctl , i per Arch intel-ucode o amd-ucode. que podràs trobar en webs confialbes ... (això si es tracta d'una màquina x86, si és ARM o diferent, acudeix a la web del fabricant). Insistisc tot i semblar un pesat, no descarregues aquest tipus de paquets des de fonts desconegudes, és molt important. Bé, ara que ja el tenim descarregat i instal·lat, pot ser que el procediment siga diferent en cada distribució i que implique activar alguns paquets o actualitzacions restringits com els propietaris.
Amb aquests paquets instal·lats i les configuracions del sistema que fan referència a les actualitzacions, ben configurades, les pròpies actualitzacions de seguretat que instal·la el sistema operatiu ja inclouran aquest tipus de pegats per al microcodi si s'ha detectat algunes vulnerabilitats greus com és el cas de Spectre , Meltdown, etc.
Si vols, pots obtenir informació del microcodi del teu distro usant:
dmesg | grep microcode
Fonts:

Torna a la portada