Oprogramowanie sprzętowe

oprogramowanie zainstalowane na stałe w urządzeniu, zapewniające podstawowe procedury jego obsługi

Oprogramowanie sprzętowe[1][2], oprogramowanie wbudowane[3][4], oprogramowanie układowe[5][6], oprogramowanie wewnętrzne, mikrooprogramowanie[7][8] (ang. firmware[a]) – oprogramowanie zainstalowane na stałe w urządzeniu, zapewniające podstawowe procedury jego obsługi.

Reflektometr optyczny firmy Yokogawa podczas pomiarów długości światłowodu z widocznym na ekranie efektem pracy oprogramowania sprzętowego

Inną definicją oprogramowania sprzętowego jest kod poniżej systemu operacyjnego (a wręcz poniżej kodu maszynowego komputera) – przykładowo oprogramowanie karty sieciowej nie jest, w przeciwieństwie do sterowników, częścią systemu operacyjnego. Oprogramowanie sprzętowe może być małych rozmiarów (jak w karcie sieciowej) lub stanowić wydzielony system (przykładowo kontrolerem napędów taśmowych 3490E-F01 jest serwer x86 pracujący pod kontrolą systemu operacyjnego Sinix – jednak z punktu widzenia systemu operacyjnego korzystającego z napędów kod ten realizuje zdefiniowane protokołem funkcje sprzętowe).

Nowsze urządzenia mają często możliwość aktualizacji tego oprogramowania, dzięki zapisaniu go na przykład w pamięci flash lub EEPROM.

Historia

Ascher Opler użył terminu firmware w artykule Datamation w roku 1967[9]. Początkowo termin ten oznaczał zawartość zapisywalnego fragmentu pamięci CPU, zawierającej mikroprogram, który definiował i implementował zestaw instrukcji komputera, ponadto mógł być przeładowany w celu modyfikacji instrukcji, które procesor był w stanie wykonać. Pierwotnie firmware kontrastowało ze sprzętem komputerowym (CPU) i oprogramowaniem (standardowe instrukcje wykonywane przez CPU). Nie składało się ono z instrukcji maszynowych procesora, lecz z mikrokodu niższego poziomu odpowiedzialnego za implementację instrukcji. Wbudowane oprogramowanie istniało na „pograniczu” między sprzętem a oprogramowaniem, stąd powstała nazwa firmware. Z czasem znaczenie tego pojęcia poszerzyło się do wszystkich danych zapisywanych w pamięci ROM, w skład których wchodziły instrukcje procesora dla BIOS, programu rozruchowego lub aplikacji dedykowanych.

Do połowy lat 90. aktualizacje oprogramowania sprzętowego przeważnie wiązały się z podmianą pamięci je zawierającej (zwykle były nimi układy scalone ROM). Pamięć flash umożliwiała aktualizację bez konieczności fizycznego wyjmowania układów scalonych. Błąd w trakcie procesu aktualizacji mógł permanentnie uszkodzić urządzenie; system jest na to narażony, gdy fragmenty pamięci flash – zawierające oprogramowanie „źródłowe” lub program aktualizujący – zostaną wyjęte i przeprogramowane. Jeżeli proces aktualizacji zostanie gwałtownie przerwany, oprogramowanie może przestać działać prawidłowo i tym samym uruchomienie urządzenia i wznowienie aktualizacji będzie niemożliwe. Aby tego uniknąć, pamięć flash powinna mieć zabezpieczoną sekcję tylko do odczytu, zawierającą oprogramowanie „źródłowe”. Wadą produkcyjną jest to, że oprogramowanie tylko do odczytu nie może być zmodyfikowane i musi być poddane bardzo dokładnym testom.

Zagrożenia

Mark Shuttleworth, założyciel firmy Canonical, która utrzymuje dystrybucję Ubuntu, opisał zamknięte oprogramowanie sprzętowe jako zagrożenie bezpieczeństwa, mówiąc, że „oprogramowanie wbudowane w twoim urządzenie jest najlepszym przyjacielem NSA” i nazywa je „koniem trojańskim o monumentalnych proporcjach”. Stwierdził, że niskiej jakości oprogramowanie sprzętowe z zamkniętym źródłem stanowi główne zagrożenie dla bezpieczeństwa systemu[10]: „Twoim największym błędem jest założenie, że NSA jest jedyną instytucją nadużywającą tej pozycji zaufania – w rzeczywistości rozsądne jest założenie, że całe oprogramowanie sprzętowe jest źródłem niebezpieczeństwa, na co składa się najwyższy stopień niekompetencji ze strony producentów, a także najwyższy stopień kompetencji z bardzo szerokiej gamy tego typu agencji”. Jako potencjalne rozwiązanie tego problemu wezwał do deklaratywnego oprogramowania, które opisywałoby „powiązanie sprzętowe i zależności” i „nie powinno zawierać kodu wykonywalnego”[11]. Oprogramowanie sprzętowe powinno być oprogramowaniem typu open source, aby można było sprawdzić i zweryfikować kod.

Niestandardowe włamania do oprogramowania sprzętowego koncentrowały się również na wstrzykiwaniu złośliwego oprogramowania do smartfonów lub pendrajwów. Jedna operacja tego typu na smartfonie z systemem operacyjnym Symbian została zademonstrowana podczas hakerskiej konferencji MalCon[12][13]. Podczas konferencji Black Hat USA w roku 2014 zaprezentowano włamanie do oprogramowania urządzenia USB o nazwie BadUSB[14], pokazując, jak można przeprogramować mikrokontroler pendrajwa, dzięki czemu można „oszukać” różnego rodzaju urządzenia w celu przejęcia kontroli nad komputerem, eksfiltrowania danych lub szpiegowania użytkownika[15][16]. Pozostałe osoby badające kwestie bezpieczeństwa pracowały dalej nad sposobem wykorzystania zasad działania BadUSB[17], wydając jednocześnie kod źródłowy w postaci narzędzi hakerskich, których można użyć do modyfikacji zachowania różnych urządzeń USB[18].

Przykłady urządzeń z oprogramowaniem sprzętowym

Systemy preinstalowane w serwerach (np. ESXi na nośniku USB w serwerze) również są nazywane oprogramowaniem sprzętowym.

Zobacz też

Uwagi

Przypisy