Inhaltsverzeichnisliste

  Artikel von: Mohamed BELOUARGA & Fabien Lahoudere  

     

Die Welt wird immer vernetzter, und Millionen von Geräten werden so entwickelt, dass sie entweder mit Servern oder miteinander verbunden werden können. Diese Hyperkonnektivität ist mit vielen Bedrohungen verbunden, und Linux-basierte embedded Systems sind davon nicht ausgenommen.

In diesem Artikel werden wir eine Technik besprechen, die embedded Linux-Geräten mehr Sicherheit verleiht. Der Leser sollte sich jedoch bewusst sein, dass diese Methode embedded Linux-Geräte nicht vor allen Bedrohungen schützt.

Der Leser sollte wissen, dass der Autor ein Embedded-Linux-Ingenieur und kein Cybersicherheitsexperte ist.

 Was ist ein sicherer Start?  

Beim sicheren Start geht es darum, eine Vertrauenskette zwischen verschiedenen Softwarekomponenten eines embedded Linux-Geräts zu implementieren. Diese Vertrauenskette wird implementiert, um zu verhindern, dass auf den Geräten beschädigte Software ausgeführt wird, die nicht vom Gerätehersteller stammt.


Diese Vertrauenskette ist in der Tat ein mehrschichtiger Überprüfungsprozess, der den Ursprung dieser Softwarekomponenten identifiziert.

Secure boot process of linux embedded systems softwares and devices

Zuerst überprüft der ROM Code, ob der Bootloader vom Hersteller stammt, dann verifiziertder Bootloader, dass das Linux Kernel auch vom Hersteller stammt, bevor es gestartet wird und schließlich überprüft der Kernel, dass ROOTFS (die Anwendung) vom Hersteller stammt.

Im Folgenden werden wir sehen, wie diese Vertrauenskette funktioniert — oder wie wir sie nennen: sicherer Start- und wie man diese umsetzt.

  So implementieren Sie den Secure Boot  

 Den Bootloader sichern  

Dieser Teil ist hardwareabhängig und wird durch Hardware und ROM-Code realisiert. Der ROM-Code bestätigt, dass der Bootloader vom Hersteller stammt, indem er seine Signatur überprüft. Die Signatur des Bootloaders ist normalerweise sein Hash, der mit einem privaten Schlüssel verschlüsselt ist.

Wenn die Signatur beschädigt ist, startet der ROM-Code den Bootloader nicht, wodurch das Gerät nicht gestartet wird.

 Den Kernel sichern  

Nach seiner Überprüfung startet der ROM-Code den Bootloader.

Der Bootloader initialisiert gerade genug Hardware (mindestens SDRAM und serielle Konsole), um den Kernel zu booten und den Kernel sowie den Gerätebaum in den RAM zu laden.

Der Bootloader überprüft die Signaturen des Kernels und des Gerätebaums (und gegebenenfalls anderer Binärdateien), bevor der Kernel gestartet wird.

Wenn Binärdateien überprüft werden müssen, kann ein FIT-Image, das all diese Binärdateien enthält, verwendet werden, um die Effizienz dieses Prozesses zu erhöhen.

 Das ROOTFS sichern  

Um das ROOTFS zu sichern, ist es ratsam, ein schreibgeschütztes ROOTFS zu verwenden und eine vom Kernel bereitgestellte Funktion zu nutzen, die sogenannte DM-Verity.

DM-Verity verwendet einen Hashbaum, um sicherzustellen, dass das ROOTFS nicht beschädigt ist. Layer0 des Hash-Baums enthält die ROOTFS-Hashes — ein Hash pro 4k.

Weitere Einzelheiten finden Sie im folgenden Schema.

Securing the ROOTFS for secure boot in linux systems softwares and devices

  • Layer 0 enthält Hashes des ROOTFS, einen Hash für jeweils 4 kB Speicher
  • LAYER 1 enthält Hashes von LAYER 0
  • LAYER-2-Hashes von LAYER 1...
  • Bis wir mit einem Hash namens Root-Hash fertig sind

Um DM-Verity auf der ROOTFS-Partition zu verwenden, ist es einfacher, ein InitramFS zu verwenden, das startet DM-Verity auf der Partition des ROOTFS vor dem Wechsel zum ROOTFS.

Das initramFS (das den Root-Hash enthält) sollte dem FIT-Image hinzugefügt und ebenfalls signiert werden.

Wenn DM-Verity eine Beschädigung im ROOTFS erkennt oder wenn sich der Root-Hash geändert hat, generiert das Feature eine Kernel-Panik, die den Start blockiert.

  Beispiel für imx8  

Um einige hardwareabhängige Aspekte des sicheren Starts zu veranschaulichen, nehmen wir imx8 als Beispiel:

 CST-Werkzeuge  

Bevor wir versuchen, Secure Boot auf imx8 zu implementieren, müssen wir einige private Schlüssel generieren, die zum Signieren der Binärdateien verwendet werden. NXP bietet CST-Werkzeuge (Code Signing Tool), das private und öffentliche Schlüssel generiert und es uns ermöglicht, den Bootloader und andere Binärdateien zu signieren.

 Sicherungen und CAAM  

Imx8 hat ein Modul namens CAAM (Modul für kryptografische Beschleunigung und Sicherheit), das verwendet wird, um die Überprüfung aller Signaturen zu beschleunigen. Imx8 hat auch einige Register namens Einmalig programmierbare Register (eFuse).

Um die Signaturverifizierung zu ermöglichen, müssen SRK_HASH eFuses mit den generierten Hashes für öffentliche Schlüssel programmiert werden, und um die Karte zu sperren, sollte eine weitere eFuse programmiert werden.

All diese Elemente werden verwendet, um den HAB (High Assurance Boot) zu implementieren: den IMX Secure Boot.

 ROM-Kode  

Beim Booten überprüft der ROM-Code, ob die SRK_HASH eFuses programmiert sind. Ist dies der Fall, wird die Signatur des Bootloaders überprüft (SPL + ATF + OPTEE + U-Boot). Je nachdem, ob die Karte gesperrt ist oder nicht, setzt der ROM-Code den Startvorgang fort oder stoppt ihn:

ROM secure booting of linux Embedded devides

Der Rom-Code verifiziert ein Bild, wie das Bild unten zeigt:

ROM Code verification of FIT Image and hash Certificate

Hinweis: Andere eFuses müssen ebenfalls programmiert werden, um Secure Boot ordnungsgemäß zu implementieren. Zum Beispiel die eFuse, die den JTAG deaktiviert.

 IMX-Boot  

Nach der Überprüfung seiner Signatur startet der ROM-Code den Bootloader (SPL dann ATF und OPTEE dann U-Boot).

U-Boot sollte so konfiguriert sein, dass die Signatur des FIT-Images überprüft wird, wenn das HAB aktiviert ist. Die Überprüfung der Signatur des FIT-Images erfolgt durch einige Aufrufe des ROM-Codes (über ATF).

U-Boot verhält sich dann wie der ROM-Code im vorherigen Schritt: Wenn die Karte gesperrt ist und die Signatur beschädigt ist, stoppt es den Startvorgang.

 Fit Image und ROOTFS  

Das Fit Image enthält mindestens drei Elemente: der Kernel, der Gerätebaum und die Initram FS.

Wenn U-Boot die Signatur des Images überprüft, extrahiert es diese Elemente und startet den Kernel.

Wenn der Kernel mit dem InitramFS gestartet wird, wendet letzteres DM-Verity auf die ROOTFS-Partition an und gibt dem Kernel den Root-Hash. Schließlich fährt der Kernel mit dem Booten auf dem ROOTFS fort.

 

Diese verschiedenen Schritte stellten den sicheren Start für imx8 dar:

Embedded Linux base softwares devices or systems secure booting sequence

Der neugierige Leser kann im Internet mehr Dokumentation zur HAB-Implementierung finden. Dieser zweite Teil des Artikels sollte nicht die gesamten HAB-Details erklären, sondern nur die Beziehung zwischen Secure Boot und der Hardware aufzeigen.

Teilen:
Teilen

Unsere Experten sind nur einen Anruf entfernt!

Teilen Sie uns Ihre Wünsche und Vorstellungen mit - Gemeinsam finden wir die beste Lösung für Ihre Produktentwicklung.
Kontaktieren Sie uns

Lesen Sie mehr Neuigkeiten

12/1/26

10 Jahre Zusammenarbeit: Treue wird belohnt

Entdecken Sie eine 10-jährige Zusammenarbeit zwischen T&S und Bosch, die sich auf das Testen von Airbagsystemen und eingebetteter Software für die Fahrzeugsicherheit konzentriert.

MEHR LESEN
8/1/26

Lehrlingssteuer: Erneute Unterstützung für unsere Partneruniversitäten und Schulen

Technology & Strategy erneuert sein Engagement für die Hochschulbildung und verteilt die Lehrlingssteuer an Partneruniversitäten und Schulen, die Nachwuchstalente fördern.

MEHR LESEN
16/12/25

T&S Sponsorship Program 2025: Meet the Organizations We Support

Discover the winners of the T&S Sponsorship Program 2025. Technology & Strategy supports 7 organizations driving social and environmental impact across Europe.

MEHR LESEN