Integralność oprogramowania embedded – jak chronić firmware i know-how w systemach wbudowanych

Integralność oprogramowania embedded – jak chronić firmware i know-how w systemach wbudowanych

Dlaczego integralność oprogramowania embedded jest tak ważna?

Systemy embedded stały się podstawą nowoczesnych technologii — od automatyki przemysłowej po urządzenia medyczne, automotive i IoT.
Wraz z rosnącą łącznością (sieci publiczne, chmura, edge) rośnie też liczba zagrożeń: manipulacje firmware, nieautoryzowane aktualizacje, ataki na bootloader, a nawet kradzież algorytmów.

Każda, nawet niewielka zmiana kodu, może prowadzić do:

  • utraty bezpieczeństwa urządzenia,
  • zatrzymania produkcji,
  • przejęcia kontroli,
  • kradzieży własności intelektualnej,
  • naruszenia wymogów regulacyjnych (CRA, NIS2).

Dlatego integralność oprogramowania to fundament zaufania — decyduje o tym, czy system można uznać za bezpieczny i autentyczny.


Czym jest ochrona integralności

Ochrona integralności polega na zastosowaniu procedur kryptograficznych i sprzętowych, które zapewniają, że:

  • kod nie został zmodyfikowany,
  • urządzenie uruchamia tylko zaufane oprogramowanie,
  • wszystkie naruszenia są wykrywalne,
  • a w razie problemu system przechodzi w bezpieczny tryb.

W praktyce wykorzystuje się:

  • podpisy cyfrowe,
  • szyfrowanie,
  • uwierzytelnianie komponentów,
  • weryfikację łańcucha certyfikatów.

Integralność firmware stanowi jeden z filarów cyberodporności — obok poufności i autentyczności.


Ochrona przed kopiowaniem a ochrona know-how

Ochrona przed kopiowaniem (copy protection) i ochrona know-how (IP protection) są ze sobą ściśle powiązane.
Jeśli ktoś może zmodyfikować firmware, może też odczytać jego zawartość i poznać logikę działania.

Dlatego współczesne urządzenia wykorzystują:

  • szyfrowanie danych i kodu,
  • bezpieczne elementy sprzętowe (TPM, CmDongle),
  • podpisy cyfrowe,
  • mechanizmy sprawdzające integralność podczas uruchamiania (Secure Boot).

Takie podejście łączy ochronę własności intelektualnej z bezpieczeństwem funkcjonalnym.

TPM to specjalny mikroukład zintegrowany z urządzeniem, który zwiększa bezpieczeństwo poprzez bezpieczne przechowywanie kluczy kryptograficznych, certyfikatów i haseł

CmDongle - potocznie określany jako "klucz sprzętowy". Jest to karta mikroprocesorowa (np. w postaci niewielkiego pendriva), wyposażona w procesor kryptograficzny, który m.in. wykonuje operacje szyfrowania i deszyfrowania, podłączana do komputera, serwera bądź urządzenia IoT / embedded (np. poprzez port USB). Używane do szyfrowania klucze są w nim trwale zapisane. Różne rodzaje CmDongle można znaleźć np. tutaj: https://www.wibu.com/pl/produkty/bezpieczne-repozytoria-licencji/codemeter-dongle.html


Jakie ataki zagrażają integralności systemów embedded

  1. Podróbki urządzeń (fake devices) – kopie wyglądające jak oryginały, lecz z nieautoryzowanym firmware.
  2. Podmiana firmware na karcie pamięci – atakujący wgrywa własny kod.
  3. Manipulacja nośnikiem danych – edycja i ponowne włożenie pamięci flash lub SD.
  4. Ataki przez interfejsy komunikacyjne – UART, USB, Ethernet.
  5. Analiza działania urządzenia – w poszukiwaniu luk lub sposobów obejścia licencji.

Wszystkie te ataki mają wspólny cel: zmienić lub zastąpić kod działający w urządzeniu.


Jak zbudować łańcuch zaufania w systemie embedded

Typowy system wbudowany działa warstwowo:

  1. Warstwa sprzętowa / bootloader – najwyższy poziom zaufania.
  2. System operacyjny – uruchamiany po weryfikacji bootloadera.
  3. Aplikacja – startuje dopiero po potwierdzeniu integralności systemu.
  4. Dane konfiguracyjne – muszą być sprawdzone przed użyciem.

Rys. 1 Structure of an embedded device_300dpi_CNYK.jpg

Każda warstwa potwierdza autentyczność poprzedniej, tworząc łańcuch zaufania (chain of trust).


Jak wdrożyć ochronę integralności w praktyce

1. Podpisanie i szyfrowanie kodu (AxProtector)

Na tym etapie wykonywane są następujące czynności:

  • wygenerowanie skrótu (hash) z kodu binarnego oprogramowania,
  • podpisanie go kluczem prywatnym producenta,
  • zaszyfrowanie pliku binarnego,
  • dołączenie certyfikatu z kluczem publicznym.

RYs. 2 Integrity Check_300dpi_CMYK.jpg

2. Weryfikacja przy uruchamianiu (AxEngine)

W momencie uruchomienia oprogramowania na urządzeniu odbywa się:

  • sprawdzenie licencji i certyfikatu,
  • weryfikacja podpisu i łańcucha certyfikatów,
  • odszyfrowanie i uruchomienie kodu,
  • porównanie hash z podpisem,
  • test daty ważności i listy CRL.

Rys. 3 Integrity Check_runtime_300dpi_CMYK.jpg

Dzięki temu urządzenie uruchomi tylko autentyczny, niezmodyfikowany kod.


Backward Check – weryfikacja wsteczna

Backward Check to mechanizm, który potwierdza, że poprzedni etap uruchamiania (np. bootloader) został wykonany prawidłowo.
To szczególnie ważne, gdy aplikacja nie ma pełnego dostępu do danych z niższych warstw.

Do weryfikacji używa się:

  • TPM (Trusted Platform Module),
  • CmDongle lub innego bezpiecznego elementu sprzętowego.

State Engine_300dpi_CMYK.jpg

Trusted Device przechowuje pomiary (hash) bootloadera i decyduje, czy można kontynuować uruchamianie.
Jeśli bootloader został zmodyfikowany — system nie wystartuje.


Pre-Boot Loader – pierwszy krok zaufania

To najmniejszy, najbardziej krytyczny fragment kodu, który:

  • weryfikuje integralność właściwego bootloadera,
  • aktywuje silnik bezpieczeństwa sprzętowego,
  • inicjuje łańcuch zaufania.

Pre-Boot Loader tworzony jest jednorazowo, umieszczany w pamięci ROM lub eFUSE i nie podlega aktualizacji.
Zawiera klucze, których nie można odczytać z zewnątrz.
Jeśli ten element zostanie naruszony – cały system przestaje być zaufany.


Łańcuch certyfikatów – kryptograficzny fundament zaufania

Certyfikaty tworzą hierarchię:

  1. Root Certificate – przechowywany offline lub w TPM.
  2. Code Signing Root – generuje certyfikaty niższego poziomu.
  3. Boot Signing Certificate – podpisuje bootloader.
  4. Code Signing Certificate – podpisuje firmware i aplikacje.
  5. Config Signing Certificate – podpisuje dane konfiguracyjne.
  6. CRL (Certificate Revocation List) – pozwala unieważniać certyfikaty.

Certificate chain_300dpi_CMYK.jpg

Klucze prywatne nigdy nie opuszczają bezpiecznego sprzętu (TPM, HSM, CmDongle), a certyfikaty publiczne mogą być dołączone do firmware’u.


CodeMeter – kompleksowa platforma ochrony integralności

Opisane podejście wsperane jest przez technologię CodeMeter firmy Wibu-Systems. Jej zaletą jest to, że integruje:

  • szyfrowanie kodu aplikacji,
  • podpis cyfrowy i zarządzanie certyfikatami,
  • bezpieczne przechowywanie kluczy (dongle, TPM),
  • weryfikację hash i podpisów w czasie uruchamiania,
  • integrację z systemami embedded i PLC.

Obsługiwane platformy to m.in.:

  • Windows, Linux, macOS,
  • Windows Embedded, Real-Time Linux,
  • QNX, VxWorks, CODESYS,
  • sterowniki PLC i układy FPGA.

Dzięki temu jest to rozwiązanie, które pozwala całościowo zabezpieczyć firmware i know-how bez wpływu na wydajność systemu.


FAQ – najczęstsze pytania

Czy integralność oprogramowania można wdrożyć w każdym urządzeniu?
Tak. Mechanizmy weryfikacji (TPM, CodeMeter, podpisy cyfrowe) można zintegrować nawet z mikrokontrolerami o ograniczonych zasobach.

Czy CodeMeter działa z Secure Boot?
Tak. CodeMeter rozszerza proces Secure Boot o szyfrowanie, licencjonowanie i kontrolę uruchamiania aplikacji użytkownika.

Czy łańcuch certyfikatów można aktualizować?
Tak, ale tylko z zachowaniem pełnego łańcucha zaufania – z podpisem wyższej instancji i weryfikacją CRL.


Podsumowanie

Integralność oprogramowania embedded to klucz do zaufania w świecie Przemysłu 4.0.
Bez niej niemożliwe jest zapewnienie bezpieczeństwa działania urządzeń ani ochrona know-how producenta.

Podpisy cyfrowe, szyfrowanie, TPM, CodeMeter i łańcuch certyfikatów tworzą spójny ekosystem, który gwarantuje, że urządzenie uruchamia tylko autentyczny, nienaruszony kod – niezależnie od środowiska, w którym działa.

*Niniejszy artykuł powstał na podstawie White Paper "Software Integrity Protection", dostępny na stronie: https://www.wibu.com/pl/integrity-protection-for-embedded-systems.html *