Wie man TrustZone zur Sicherung von IoT-Geräten mit minimaler Hardware-Komplexität und Kosten verwendet
Zur Verfügung gestellt von Nordamerikanische Fachredakteure von DigiKey
2020-07-23
IoT-Bausteine am Rand erfordern zusätzliche Sicherheitsmaßnahmen, als sie traditionell bei eingebetteten Produkten erforderlich sind. Das Verständnis und der Einstieg in die Sicherheit ist oft schwierig für Teams und Entwickler, die einen Hintergrund in der Elektrotechnik haben und keine Erfahrung in Kryptographie oder Systemsicherheit haben.
In einem modernen Entwicklungszyklus steht den Entwicklern wenig Zeit und Budget zur Verfügung, um bei Null anzufangen oder Sicherheitsexperten zu werden. Stattdessen können die Entwickler bestehende Sicherheitslösungen nutzen und sie auf ihre spezifischen Bedürfnisse zuschneiden.
In diesem Artikel wird Arm's® TrustZone vorgestellt, eine interessante Lösung, die unter den Entwicklern von Mikrocontroller-basierten Systemen an Bedeutung gewonnen hat. Der Artikel stellt beispielhaft STMicroelectronics' Mikrocontroller der Serie STM32L5 vor, die TrustZone unterstützen, und zeigt, wie man mit Hilfe der zugehörigen Entwicklungskits mit TrustZone beginnen kann.
Sicherheit durch Isolation
Das grundlegende Kernelement eines sicheren eingebetteten Systems ist die Sicherheit durch Isolierung. Die Idee ist, dass wichtige Datenbestände wie private Schlüssel, Benutzerdaten, sichere Funktionen usw. von generischen Daten und Funktionen wie Elementen der grafischen Benutzeroberfläche oder dem Echtzeitbetriebssystem (RTOS) isoliert werden sollten. Es gibt zwar Methoden, mit denen eine Software-Isolation geschaffen werden kann, aber Sicherheitsexperten sind sich einig, dass ein eingebettetes System Sicherheit durch hardwarebasierte Isolation nutzen muss.
Es gibt verschiedene Möglichkeiten, wie Hardware zur Isolierung eingesetzt werden kann, wie z.B. die Verwendung eines Mikrocontrollers und eines Sicherheitsprozessors oder die Verwendung eines Mehrkernprozessors, bei dem ein Kern für die sichere Verarbeitung vorgesehen ist. Die neueren Arm Cortex®-M23-, Cortex-M33- und Cortex-M55-Prozessoren unterstützen eine optionale hardwarebasierte Isolationsfunktion, die als TrustZone bezeichnet wird.
Was ist die Arm TrustZone?
TrustZone ist ein in Single-Core-Mikrocontrollern implementierter Hardware-Mechanismus, der die Ausführungsumgebung in sichere und nicht sichere Speicher, Peripheriegeräte und Funktionen unterteilt. Jede Ausführungsumgebung enthält dann auch eine Speicherschutzeinheit (Memory Protection Unit, MPU), die zur weiteren Isolierung von Speicherregionen verwendet werden kann, um "mehr Schichten in der Zwiebel" zu schaffen, die als Abschreckung für potenzielle Angreifer dienen, die versuchen, auf Datenbestände zuzugreifen.
Im Allgemeinen wird ein Entwickler von eingebetteten Systemen sein System in mindestens zwei Projekte partitionieren, das Projekt für die nicht sichere Ausführung, das oft als Benutzerprojekt bezeichnet wird, und das Projekt für die sichere Ausführung, das oft als Firmware-Projekt bezeichnet wird. Ein Mikrocontroller, der TrustZone aktiviert, bootet in den sicheren Zustand und startet das System, bevor er in den nicht sicheren Zustand springt, um die Benutzeranwendung auszuführen (Abbildung 1).
Abbildung 1: TrustZone-Projekte erreichen eine Isolierung durch einen Hardware-Mechanismus, der die eingebettete Software in ein Benutzerprojekt (nicht sicher) und ein Firmware-Projekt (sicher) unterteilt. (Bildquelle: Arm)
Das Benutzerprojekt kann nur über ein sicheres Gateway, das zwischen dem Firmware-Projekt und dem Benutzerprojekt erstellt wird, auf sichere Funktionen zugreifen und ist nicht in der Lage, auf sichere Speicherplätze zuzugreifen, ohne eine Ausnahme auszulösen.
Auswählen eines TrustZone-fähigen Entwicklungsboards
Der einfachste Weg, TrustZone zu verstehen, ist, einfach einzusteigen und mit ihr zu arbeiten. Um dies zu tun, muss ein Entwickler zunächst ein Entwicklungsboard auswählen. Es gibt mehrere verschiedene Entwicklungs-Boards, aus denen Sie über verschiedene Mikrocontroller-Anbieter auswählen können, aber Vorsicht: Sie implementieren TrustZone nicht alle auf die gleiche Weise, was die Sache etwas knifflig machen kann.
Ein gutes Beispiel für ein Entwicklungsboard, das für den Einstieg in die TrustZone verwendet werden kann, ist das STMicroelectronics STM32L562E Discovery Kit (Abbildung 2).
<Abbildung 2: Das STM32L562E Discovery Kit enthält zahlreiche On-Board-Sensoren, Bluetooth und eine E/A-Erweiterungskarte, die den Einstieg in TrustZone-Anwendungen erleichtert. (Bildquelle: STMicroelectronics)
Das Kit enthält viele unterstützende Funktionen, die nützlich sein können, wenn Sie zum ersten Mal mit TrustZone arbeiten. Zum Beispiel enthält das Entwicklungskit ein 1,54" 240 x 240 Pixel großes TFT-LCD-Modul mit einem Touch-Control-Panel, ein Bluetooth v4.1 Low-Energy-Modul, einen iNEMO 3D-Beschleunigungsmesser und ein Gyroskop sowie ein integriertes STLINK-V3E, neben vielen anderen Funktionen für E/A- und Peripherie-Erweiterungen.
Ein zweites Entwicklungsboard, das für den Einstieg in die TrustZone verwendet werden kann, ist das STMicroelectronics NUCLEO-L552ZE-Q Nucleo-Board (Abbildung 3).
<Abbildung 3: Das STM32L552ZE-Q NUCLEO-Entwicklungsboard bietet einen TrustZone-fähigen Prozessor, ST-LinkV3 und Erweiterungsheader für kundenspezifische Entwicklungsaktivitäten. (Bildquelle: STMicroelectronics)
Im Gegensatz zum Discovery Kit STM32L562E ist das NUCLEO-L552ZE-Q ein Basis-Entwicklungsboard, das den Mikrocontroller ST-LinkV3, den Mikrocontroller STM32L552VET6, Erweiterungsports und eine LED enthält. Dieses Entwicklungsboard eignet sich hervorragend für Entwickler, die mit TrustZone spielen und so schnell wie möglich mit der Integration ihrer eigenen Hardware-Komponenten beginnen möchten.
Auch wenn der NUCLEO-L552ZE-Q nicht alle Glöckchen und Pfeifen enthält, ist der STM32L552VET6 recht beeindruckend. Es handelt sich um einen Arm Cortex-M33-Prozessor mit einer Gleitkommaeinheit (FPU), bis zu 512 Kilobyte (Kbytes) Flash-Speicher und 256 Kbytes SRAM. Es enthält mehrere zusätzliche Sicherheitsfunktionen oberhalb der TrustZone, wie z.B. eine Vertrauenswurzel mit eindeutigem Boot-Eintrag, sichere Firmware-Installation und sichere Firmware-Upgrade-Unterstützung mit vertrauenswürdiger Firmware für Cortex-M (TF-M).
Zu den Prozessoren beider Entwicklungsgremien gehört die TrustZone Security Arbitration Unit (SAU), mit deren Hilfe festgelegt wird, welche Speicher und Peripheriegeräte durch die TrustZone geschützt werden sollen. Die SAU fehlt in den TrustZone-Implementierungen einiger Mikrocontroller-Anbieter. Dies ist nicht unbedingt ein Problem, aber es erfordert ein anderes Verfahren zur Einrichtung von TrustZone.
Die erste TrustZone-basierte Anwendung wird gestartet
Um eines der STMicroelectronics-Entwicklungsboards zum Laufen zu bringen, sind mehrere Schritte und Softwarepakete erforderlich. Zunächst wird ein Entwickler STM32CubeIDE herunterladen wollen. STM32CubeIDE stellt den Compiler, die Mikrocontroller-Pakete und die IDE für die Anwendungsentwicklung sowie alle zugehörigen Anwendungshinweise, einschließlich STM AN5394, zur Verfügung.
Die Verwendung eines bestehenden TrustZone-Beispielprojekts ist der schnellste Weg, um eine Anwendung zum Laufen zu bringen. Es gibt mehrere Projekte, die als Teil des Softwarepakets STM32Cube_FW_L5 enthalten sind. Die Software wird als Teil der STM32CubeL5-Software heruntergeladen. Nach dem Herunterladen können Entwickler das TrustZoneEnabled-Projekt importieren, das sich in einem Verzeichnispfad wie dem folgenden befindet:
STM32Cube_FW_L5_V1.2.0\STM32Cube_FW_L5_V1.2.0\Projekte\STM32L552E-EV\Vorlagen\TrustZone Enabled\
Sobald das Projekt importiert ist, kann ein Entwickler sehen, dass das Projekt eine hierarchische Projektstruktur hat, die die Anwendung in sichere und unsichere Anwendungen unterteilt (Abbildung 4).
<Abbildung 4: Das TrustZone-Projekt wird in einer hierarchischen Projektstruktur mit sicheren und nicht sicheren Projekten durchgeführt. (Bildquelle: Beningo Embedded Group)
Es gibt eine Menge Details, die in diesen Projekten erforscht werden können. AN5394 kann eine ganze Reihe von Details ausfüllen, während die Datei readme.txt im Doc-Ordner jedes Projekts die Details für die sicheren und nicht sicheren Projekte erklären kann. Für die Zwecke dieses Artikels werden wir die wichtigsten Konzepte im Zusammenhang mit TrustZone untersuchen. Konkret: wie TrustZone konfiguriert ist. Die Konfiguration kann in der Datei partition_stm32L562xx.h gefunden werden, die sich unter befindet:
C:\STM32Cube_FW_L5_V1.2.0\Projekte\STM32L562E-DK\Vorlagen\TrustZone Enabled\Secure\IncC:\STM32Cube_FW_L5_V1.2.0\Projekte\STM32L562E-DK\Vorlagen\TrustZone Enabled\Secure\Inc
Diese Datei enthält die Einstellungen für die SAU. Abbildung 5 zeigt zum Beispiel die Einstellungen für die SAU-Region 0. Dieser Bereich ist derzeit als sichere Ausführung konfiguriert. Abbildung 6 hingegen zeigt die SAU-Region 1 als nicht sicher konfiguriert.
<Abbildung 5: Die SAU wird verwendet, um zu konfigurieren, welche Speicherbereiche sicher und welche nicht sicher sind. Der obige Code zeigt, wie die SAU-Region 0 für eine sichere Ausführung konfiguriert ist. (Bildquelle: Beningo Embedded Group)
<Abbildung 6: Die SAU wird verwendet, um zu konfigurieren, welche Speicherbereiche sicher und welche nicht sicher sind. Der obige Code zeigt, wie die SAU-Region 1 für eine nicht sichere Ausführung konfiguriert ist. (Bildquelle: Beningo Embedded Group)
Ein Entwickler würde entscheiden, welche Regionen sicher und welche nicht sicher sein müssen, und die Partitionsdatei zur Konfiguration der SAU verwenden. Das Erstellen dieser Einstellungen garantiert nicht, dass TrustZone aktiviert wird! Wenn eine TrustZone-basierte Anwendung auf das Ziel programmiert wird, muss ein Entwickler das TZ-Optionsbyte auf 1 setzen, um TrustZone zu aktivieren. Während des Starts wird sie dann aktiviert, und die SAU-Konfiguration wird gelesen und verwendet.
Tipps und Tricks für die Arbeit mit TrustZone
Der Einstieg in TrustZone ist nicht schwierig, erfordert aber, dass Entwickler über das Design ihrer Anwendung etwas anders denken. Es folgen einige „Tipps und Tricks“ für den Einstieg:
- Alle Daten müssen nicht geschützt werden. Identifizieren Sie im Vorfeld die kritischen Datenbestände, die geschützt werden müssen.
- Nutzung bestehender Sicherheitsrahmenwerke wie CMSIS-Zone und Trusted Firmware for Cortex-M (TF-M) zur Beschleunigung der Entwicklung.
- Untersuchen Sie sorgfältig die potenziellen Bedrohungen für das Gerät und wählen Sie einen Mikrocontroller aus, der Hard- und Softwarelösungen zum Schutz vor diesen Bedrohungen unterstützt.
- TrustZone bietet eine einzige Schicht der Isolation. Nutzen Sie MPUs und andere Hardware-Mechanismen, um mehrere hardwarebasierte Isolationsschichten zu erstellen.
- Identifizieren Sie sichere und unsichere Codeelemente während der Architekturphase und nicht während der Implementierung.
Entwickler, die diese "Tipps und Tricks" befolgen, werden feststellen, dass sie eine Menge Zeit und Ärger sparen, wenn sie auf die Sicherung ihres IoT-Geräts hinarbeiten.
Fazit
TrustZone ist ein wichtiges Werkzeug für IoT-Entwickler, die ihre Geräte sichern und ihre Datenbestände schützen möchten. Sichere Lösungen können auf verschiedene Weise implementiert werden, aber wie wir gesehen haben, bietet TrustZone Entwicklern eine einzige Kernlösung, die ein traditionelles Softwareentwicklungsmodell bietet. Der einzige Unterschied besteht darin, dass Entwickler anfangen müssen, in sicheren und unsicheren Komponenten, Daten und Threads zu denken.
Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der DigiKey oder offiziellen Politik der DigiKey wider.




