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 eingebettete Systeme sind davon nicht ausgenommen.

In diesem Artikel werden wir eine Technik besprechen, die eingebetteten Linux-Geräten mehr Sicherheit verleiht. Der Leser sollte sich jedoch bewusst sein, dass diese Methode eingebettete 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 eingebetteten Linux-Geräts zu implementieren. Diese Vertrauenskette wird implementiert, um zu verhindern, dass auf den Geräten beschädigte Software oder 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 die ROM-Kode überprüft, ob der Bootloader vom Hersteller stammt, dann Bootloader verifiziert, dass das Linux Kernel stammt auch vom Hersteller, bevor es gestartet wird und schließlich überprüft der Kernel, dass ROOTFS (die Anwendung) stammt vom Hersteller.

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

So implementieren Sie 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 vorzuziehen, ein schreibgeschütztes ROOTFS zu verwenden und eine vom Kernel bereitgestellte Funktion zu nutzen, die heißt 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 fertig sind Root-Hash.

Um zu verwenden DM-Verity auf der ROOTFS-Partition 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 erkennt eine Beschädigung im ROOTFS 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 Umstände mit und gemeinsam finden wir die beste Lösung für Ihre Produktentwicklung.
Kontaktiere uns

Lesen Sie mehr Neuigkeiten

5/6/25

Einführung in Embedded Linux: maßgeschneiderte Lösungen für Ihr Projekt

„Entdecken Sie die Grundlagen von Linux Embarqué, einem Open-Source-Betriebssystem, leicht und modular, das im Internet der Dinge, in vernetzten Objekten, in industriellen oder medizinischen Systemen eingesetzt wird. Technologie und Strategie vous accompagne dans vos projets innovants grâce à son expertise.

MEHR LESEN
3/6/25

T&S Success Story: Rückblick auf Sébastien Juliens Karriere bei T&S und Englab

Sébastien Julien hat Englab bei T&S strukturiert und weiterentwickelt. Er brachte strategische Visionen, praktische Erfahrung und menschliches Wachstum ein, um ein Ingenieurbüro zu einem wichtigen Kapital des Unternehmens zu machen.

MEHR LESEN
15/5/25

Das Engagement von Technology & Strategy für SBTi: ein ehrgeiziger Klimapfad bis 2033

T&S verpflichtet sich gemeinsam mit SBTi zu einem ehrgeizigen Ansatz, um seine CO2-Emissionen zu reduzieren und seine Maßnahmen bis 2033 unter aktiver Beteiligung aller seiner Unternehmen an den globalen Klimazielen auszurichten.

MEHR LESEN