fermvérTakéFW, mikroprogramové vybavení, vestavěný softwareZákladní

Definice

Firmware je software uložený přímo v paměti zařízení, který ovládá jeho hardware a spouští se dřív než operační systém nebo aplikace. Najdete ho v routerech, discích, klávesnicích, platebních terminálech i v čipech uvnitř počítače. Aktualizuje se zvláštním postupem zvaným flashování a jeho selhání může zařízení vyřadit z provozu.

Kategorie: Počítačová architekturaAktualizováno

Než se na to spolehnete: Ukázka dmesg u iwlwifi je typizovaná: konkrétní název .ucode souboru a číslo verze se liší podle generace čipu a jádra, jde o ilustraci formátu hlášky, ne o doslovný citát z konkrétního systému.

Proč se firmware odlišuje od běžného programu

Firmware sedí na hranici mezi hardwarem a softwarem. Běžná aplikace se opírá o operační systém, který jí zpřístupní paměť, disk i síť. Firmware naopak často žádný operační systém pod sebou nemá: sám nastavuje registry řadičů, obsluhuje přerušení a odpovídá za to, že se čip po zapnutí vůbec dostane do použitelného stavu. Bývá uložen ve flash paměti nebo v EEPROM přímo na desce, takže zůstává i po odpojení napájení.

Druhý rozdíl je v očekávané životnosti. Zatímco webová aplikace se nasazuje třeba denně, firmware trezoru, výtahu nebo průmyslového čidla může běžet beze změny deset let. Tomu odpovídá i způsob psaní: převažuje C a assembler, dynamická alokace paměti se často zakazuje úplně a kód se testuje proti konkrétní revizi desky.

Co se děje při zapnutí zařízení

Po přivedení napájení začne procesor vykonávat instrukce z pevně dané adresy. Tam leží první stupeň firmwaru, obvykle bootloader. Ten inicializuje hodiny a paměť RAM, ověří integritu hlavního obrazu (typicky kontrolním součtem nebo podpisem) a předá mu řízení. Teprve hlavní obraz rozběhne aplikační logiku, nebo v případě počítače najde zavaděč operačního systému. U PC tuhle roli hraje UEFI, dřív BIOS; u telefonů a routerů obdobné vícestupňové řetězce.

Aktualizace a riziko cihly

Zápis nového obrazu do paměti se nazývá flashování. Nebezpečné na něm je, že se přepisuje kód, který právě běží. Když v půlce zápisu vypadne proud, zařízení už nemá čím nastartovat a stává se z něj takzvaná cihla. Praxe proto používá dva mechanismy: bootloader, který se nikdy nepřepisuje a umí obraz obnovit, a dva oddíly A/B, kdy se nová verze zapíše vedle staré a přepne se na ni až po úspěšném ověření. Při první neúspěšné startovací sekvenci se zařízení vrátí k předchozímu oddílu.

Bezpečnostní dopad

Firmware má vyšší oprávnění než operační systém, takže napadený obraz přežije přeinstalaci systému i výměnu disku. Obrana stojí na podepsaných obrazech: bootloader přijme jen binárku podepsanou klíčem výrobce, jehož veřejná část je uložena v jednorázově zapisovatelné paměti. Na tomto principu stojí Secure Boot i řetězec důvěry v mobilních čipech.

Druhá typická slabina je zastaralost. Zařízení jako domácí routery či IP kamery se roky neaktualizují, protože výrobce podporu ukončil, a známé zranitelnosti v nich zůstávají otevřené. Při výběru hardwaru pro firemní nasazení je proto doba podpory firmwaru stejně podstatný parametr jako výkon.

Kde na firmware narazí i webový vývojář

Platební terminál, čtečka čárových kódů nebo tiskárna štítků v e-shopovém skladu mají vlastní firmware s vlastním verzováním. Rozdílné chování dvou terminálů stejného modelu se překvapivě často vysvětlí odlišnou verzí firmwaru, ne chybou v integraci.

Příklady z praxe

  1. Router se po aktualizaci nespustí

    Administrátor nahraje do domácího routeru nový obraz firmwaru přes webové rozhraní a v průběhu zápisu vypadne elektřina. Router se už nerozběhne, protože hlavní obraz je poškozený. Zachrání ho jen recovery režim bootloaderu, do kterého se vstupuje podržením tlačítka reset a nahráním obrazu přes TFTP na pevně danou IP adresu.

  2. Linux dohrává firmware do Wi-Fi karty za běhu

    Řada čipů nemá firmware trvale uložený v sobě, ale nahrává si ho při inicializaci ovladače ze souborového systému hostitele. V Linuxu jde o soubory v /lib/firmware. Když balíček s firmwarem chybí, karta se v systému objeví, ale nikdy nezačne skenovat sítě a v jádrovém logu je vidět neúspěšné načtení.

    $ dmesg | grep -i firmware
    iwlwifi 0000:00:14.3: Direct firmware load for iwlwifi-so-a0-gf-a0-83.ucode failed with error -2
    iwlwifi 0000:00:14.3: no suitable firmware found!
    
    $ ls /lib/firmware | head -3

Časté omyly

MýtusFirmware je hardware, ne software.
Ve skutečnostiFirmware je software, jen uložený v nevolatilní paměti zařízení a těsně svázaný s konkrétním hardwarem. Proto se dá aktualizovat, aniž by se cokoli fyzicky měnilo.
MýtusKdyž se firmware aktualizuje, nic se nemůže pokazit, přece jde jen o update.
Ve skutečnostiAktualizace firmwaru přepisuje kód, který je nutný k nastartování zařízení. Přerušení zápisu nebo nesprávný obraz může přístroj vyřadit natrvalo, pokud nemá záložní bootloader nebo dvojici oddílů A/B.
MýtusPřeinstalace operačního systému vyčistí zařízení od jakéhokoli malwaru.
Ve skutečnostiŠkodlivý kód v UEFI nebo ve firmwaru periferie leží mimo systémový disk a přeinstalaci i výměnu disku přežije. Proti tomu pomáhá až ověřovaný start s podepsanými obrazy.

Časté dotazy

Jak zjistím verzi firmwaru svého zařízení?
Verzi firmwaru najdete obvykle ve webovém nebo systémovém rozhraní zařízení v sekci o systému, u routerů typicky na úvodní stránce administrace. Na počítači se verze UEFI zobrazí v jeho nastavení nebo systémovými nástroji: ve Windows příkazem wmic bios get smbiosbiosversion, v Linuxu čtením souborů v /sys/class/dmi/id nebo utilitou dmidecode. U periferií jako tiskárny či platební terminály se verze tiskne na servisní lístek nebo se vypíše přes servisní menu. Verzi si poznamenejte před aktualizací, usnadní to případný návrat zpět.
Kdy má smysl firmware aktualizovat a kdy ho raději nechat být?
Aktualizaci firmwaru má smysl provést, když řeší bezpečnostní zranitelnost, konkrétní chybu, kterou pozorujete, nebo přidává podporu hardwaru, který chcete použít. Naopak u stabilně běžícího produkčního zařízení bez známého problému platí staré pravidlo: neopravuj, co není rozbité. Před každou aktualizací zajistěte stabilní napájení, zálohu konfigurace a ověřte, že stahujete obraz přesně pro svou hardwarovou revizi. Obraz z jiné revize téhož modelu je jedna z nejčastějších příčin nefunkčního zařízení.
Co znamená, že je zařízení cihla?
Cihla je hovorové označení pro zařízení, které po neúspěšné aktualizaci firmwaru nejde nastartovat a nereaguje na běžné ovládání. Rozlišuje se měkká a tvrdá cihla. Měkkou zachrání recovery režim: bootloader zůstal nedotčený a umí přijmout nový obraz přes TFTP, USB nebo sériovou linku. Tvrdá cihla znamená poškozený i bootloader a řeší se až přímým zápisem do flash paměti programátorem přes rozhraní jako JTAG nebo SPI, což vyžaduje otevření zařízení.
Proč musí Linux u některých karet dohrávat firmware ze souboru?
Řada moderních čipů, hlavně Wi-Fi a GPU, nemá vlastní flash paměť s firmwarem, protože by prodražila výrobu a komplikovala opravy. Firmware se místo toho ukládá na hostitelský systém do /lib/firmware a ovladač jej při inicializaci nahraje do RAM čipu. Výhodou je snadná aktualizace běžným balíčkem, nevýhodou závislost na distribuci: řada těchto souborů je uzavřená a distribuce jako Debian je nabízí v oddělených nesvobodných balíčcích. Bez nainstalovaného balíčku se zařízení sice v systému objeví, ale nefunguje.
Jaký je vztah firmwaru a ovladače?
Firmware běží na procesoru uvnitř samotného zařízení, kdežto ovladač je kód běžící v operačním systému hostitele, který se zařízením komunikuje. Oba spolu tvoří dvojici: ovladač posílá příkazy, firmware je na straně periferie provádí. Proto se stává, že po aktualizaci jádra přestane hardware fungovat, dokud se nedoplní odpovídající verze firmwaru, a naopak nový firmware může vyžadovat novější ovladač. Při hledání chyby je proto užitečné zjistit obě verze současně.

Zdroje

  1. Firmware(otevře se v novém okně)Wikipedia
  2. Linux kernel firmware documentation(otevře se v novém okně)The Linux Kernel Organization
  3. BIOS Protection Guidelines (NIST SP 800-147)(otevře se v novém okně)NIST, 2011
  4. UEFI firmware security in Windows(otevře se v novém okně)Microsoft Learn

Související pojmy

Potřebujete to vyřešit v praxi?

Poradíme, jak na to ve vašem projektu

Vysvětlit pojem je jedna věc, navrhnout kolem něj funkční řešení druhá. Ozvěte se a probereme, co dává smysl u vás.