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.
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
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.
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
- Firmware(otevře se v novém okně)
- Linux kernel firmware documentation(otevře se v novém okně)
- BIOS Protection Guidelines (NIST SP 800-147)(otevře se v novém okně)
- UEFI firmware security in Windows(otevře se v novém okně)