IoT-Sicherheitsgrundlagen - Teil 3: Sicheres Booten und Firmware-Update
Zur Verfügung gestellt von Nordamerikanische Fachredakteure von DigiKey
2020-06-18
Hinweis des Herausgebers: Trotz der Verbreitung von IoT-Geräten ist die Sicherung dieser Geräte weiterhin ein ständiges Anliegen, da Sicherheitsprobleme ein Hindernis für den Einsatz angeschlossener Geräte im industriellen IoT (IIoT) und in unternehmenskritischen Anwendungen darstellen können, bei denen Unternehmens- und persönliche Daten im Falle eines erfolgreichen Angriffs kompromittiert werden können. Die Sicherung von IoT-Anwendungen kann entmutigend sein, aber in Wirklichkeit kann die Sicherheit von IoT-Geräten auf einigen wenigen, relativ einfachen Prinzipien aufbauen, die von Hardware-Sicherheitsgeräten unterstützt werden. Durch die Befolgung gut etablierter Sicherheitspraktiken können diese Bedenken ausgeräumt werden. Diese mehrteilige Serie bietet praktische Anleitungen, die den Entwicklern helfen sollen, sicherzustellen, dass die besten Praktiken von Anfang an befolgt werden. Teil 1 erörtert die kryptographischen Algorithmen, die sicheren Designs zugrunde liegen. Teil 2 erörtert die Rolle von privaten Schlüsseln, Schlüsselverwaltung und sicherer Speicherung in sicheren IoT-Designs. In Teil 3 werden die Mechanismen untersucht, die in sichere Prozessoren eingebaut sind, um andere Arten von Bedrohungen für IoT-Geräte abzuschwächen. Teil 4 identifiziert und zeigt, wie Sicherheitsmechanismen in fortschrittlichen Prozessoren angewendet werden können, um die Isolierung zu gewährleisten, die erforderlich ist, um Angriffe auf die Laufzeitumgebung von IoT-Geräten abzuschwächen. Teil 5 beschreibt, wie die IoT-Sicherheit von IoT-Geräten durch Sicherheitsmaßnahmen auf höherer Ebene weitergeführt wird, um diese Geräte mit IoT-Cloud-Ressourcen zu verbinden.
Die Kombination von hardwarebasierter Kryptographie und sicherer Speicherung bietet wesentliche Fähigkeiten, die für die Implementierung sicherer Internet of Things (IoT)-Designs erforderlich sind. Einmal eingesetzt, sind IoT-Geräte jedoch einer Vielzahl von Bedrohungen ausgesetzt, die darauf abzielen, diese Geräte zu untergraben, sofortige Angriffe zu starten oder subtilere und fortgeschrittenere anhaltende Bedrohungen zu bekämpfen.
Dieser Artikel beschreibt, wie Entwickler die Sicherheit in IoT-Geräten verbessern können, indem sie eine Vertrauenswurzel verwenden, die auf zugrundeliegenden Sicherheitsmechanismen aufbaut, um eine vertrauenswürdige Umgebung für die Ausführung von Software auf sicheren Prozessoren von Maxim Integrated bereitzustellen, Unter anderem Mikrochip-Technologie, NXP-Halbleiter und Silicon Labs.
Was ist die Wurzel des Vertrauens und warum ist es notwendig?
Kryptographische Methoden und sichere Schlüssel sind entscheidende Faktoren für die Sicherheit jedes angeschlossenen Geräts. Wie in Teil 1 und Teil 2 dieser Serie erwähnt, stellen sie grundlegende Mechanismen bereit, die von Protokollen höherer Ebenen zum Schutz von Daten und Kommunikation verwendet werden. Der Schutz des Systems selbst erfordert von den Entwicklern die Berücksichtigung von Schwachstellen, die den Systembetrieb und die Softwareausführung in eingebetteten Systemen beeinträchtigen können.
In einem typischen eingebetteten System löst ein System-Reset aufgrund eines Stromausfalls oder einer kritischen Software-Ausnahme schließlich den Software-Boot-Prozess aus, um ein Firmware-Image aus dem nichtflüchtigen Speicher neu zu laden. Normalerweise ist der Neustart von Software ein wichtiger Sicherheitsmechanismus, der dazu dient, die Funktion eines Systems wiederherzustellen, das versehentlich oder absichtlich destabilisiert wurde. In verbundenen Systemen, in denen Hacker eine Vielzahl von Black-Hat-Tools einsetzen, um Software zu kompromittieren, empfehlen Sicherheitsexperten häufig einen Neustart, um Einbrüchen entgegenzuwirken, die die Softwareausführung beeinträchtigen. Beispielsweise empfahl das FBI im Jahr 2018 Verbrauchern und Geschäftsinhabern, ihre Router neu zu starten, um eine damals laufende massive Hacking-Kampagne zu vereiteln.
In der Praxis ist ein Neustart keine Garantie für die Systemintegrität. Nach einem Neustart mit einem kompromittierten Firmware-Image bleibt das System immer noch unter der Kontrolle des Hackers. Um diese Art von Bedrohungen einzudämmen, müssen Entwickler sicherstellen, dass ihre Software auf einer Vertrauenskette läuft, die auf einer Vertrauenswurzel aufbaut, die beim Booten aufgebaut wird und sich durch alle Schichten der Software-Ausführungsumgebung erstreckt. Die Fähigkeit, dieses Sicherheitsniveau zu erreichen, hängt entscheidend davon ab, dass der Boot-Prozess mit vertrauenswürdiger Firmware beginnt.
Verifizierung von Firmware-Images für sicheres Booten
In einem eingebetteten System lädt der Host-Prozessor ein Firmware-Abbild aus dem Flash in den Hauptspeicher und beginnt mit der Ausführung (oder beginnt mit der Ausführung direkt aus dem Flash mit Execute-in-Place (XIP)-Fähigkeit). Wenn Hacker das Firmware-Image kompromittiert haben, führt der Boot-Prozess zu einem kompromittierten System.
Um die Integrität der Firmware vor dem Booten zu verifizieren, verwenden Entwickler einen Code Signing-Prozess, der früh in der Lieferkette beginnt. Innerhalb einer sicheren Einrichtung wird das Firmware-Image des Systems mit einem privaten Schlüssel aus einem privat-öffentlichen Schlüsselpaar signiert, das mit einem kryptografisch robusten Algorithmus wie dem Elliptic Curve Digital Signature Algorithm (ECDSA) erstellt wurde. Obwohl der private Schlüssel die Einrichtung nie verlässt, wird der öffentliche Schlüssel des Systems mit dem System ausgeliefert. Während des Bootvorgangs wendet der Prozessor diesen öffentlichen Systemschlüssel an, um die Firmware-Signatur zu überprüfen, bevor er das Image verwendet.
Natürlich lässt der soeben beschriebene Prozess den öffentlichen Schlüssel selbst verwundbar und damit auch die System-Firmware anfällig für unautorisierten Austausch. Wenn der öffentliche Schlüssel im eingebetteten System ungeschützt bleibt, könnten Hacker ihn möglicherweise durch einen öffentlichen Schlüssel aus einem selbst erzeugten privat-öffentlichen Schlüsselpaar ersetzen. Wenn sie das Firmware-Image des Systems durch bösartige Firmware ersetzen, die mit dem zugehörigen privaten Schlüssel in ihrem Besitz signiert ist, besteht die kompromittierte Firmware-Signatur den Verifizierungsprozess und der Boot-Prozess wird fortgesetzt, was zu einem kompromittierten System führt.
Aus diesem Grund beruhen sichere Systeme auf einem gültigen öffentlichen Schlüssel, der in einem sicheren Element innerhalb der Sicherheitseinrichtung bereitgestellt wird. Sicherheits-ICs wie die DS28C36 von Maxim Integrated und die ATECC608A von Microchip Technology bieten sowohl die sichere Speicherung eines traditionellen sicheren Elements als auch die sichere Ausführung von Authentifizierungsalgorithmen - wie z.B. ECDSA - zur Verifizierung von Firmware-Signaturen.
Vor dem Hochfahren kann der Host-Prozessor die Firmware über eine serielle Schnittstelle z.B. an den DS28C36 senden. Im Gegenzug verwendet der DS28C36 den zuvor in der sicheren Einrichtung bereitgestellten öffentlichen Schlüssel des Systems, um zu überprüfen, ob die Firmware-Signatur tatsächlich mit dem zugehörigen privaten Schlüssel in derselben sicheren Einrichtung erstellt wurde. Schließlich meldet der DS28C36 das Verifizierungsergebnis an den Host-Prozessor, der das Firmware-Image lädt, wenn die Signatur gültig ist (Abbildung 1).
<Abbildung 1: Entwickler können Sicherheits-ICs wie den Maxim Integrated DS28C36 zur Überprüfung von Firmware-Signaturen verwenden, um zu verhindern, dass der Host-Prozessor kompromittierte Firmware bootet. (Bildquelle: Maxim Integrated)
Ein sichererer Boot-Prozess schützt das Firmware-Image, um jegliche Bedenken bezüglich kompromittierter Schlüssel oder Images auszuräumen. Mit Hilfe von sicheren Speicher- und Kryptographie-Beschleunigern werden in eine wachsende Zahl von Prozessoren, darunter auch die Gecko-Prozessoren der Serie 2 von Silicon Laboratories, effektive sichere Boot-Fähigkeiten eingebaut, Unter anderem NXP's LPC55S69JBD100, Maxim Integrated's MAX32520 und Microchip Technology's ATSAML11D16A. Mit Hilfe dieser Fähigkeiten kann diese Klasse von sicheren Prozessoren die Grundlage für das Vertrauen schaffen, das für die Schaffung einer vertrauenswürdigen Umgebung für die Ausführung von System- und Anwendungssoftware erforderlich ist.
Schaffung einer Vertrauenswurzel durch sicheres Booten
Sichere Prozessoren dieser Klasse bieten sichere Boot-Optionen, die die Integrität des Firmware-Images, das der Wurzel des Vertrauens zugrunde liegt, sicherstellen sollen. Zum Beispiel bauen die EFR32MG21A und EFR32BG22 Gecko Serie 2 Prozessoren von Silicon Laboratories diese Vertrauenswurzel durch einen mehrstufigen Boot-Prozess auf, der auf einem sicheren Hardware-Element bzw. einem virtuellen sicheren Element (VSE) basiert (Abbildung 2).
Abbildung 2: Der Prozessor EFR32MG21A von Silicon Laboratories, ein Gecko der Serie 2, verwendet in der ersten Stufe seines mehrstufigen Boot-Prozesses (hier dargestellt) ein integriertes Hardware-Sicherheitselement, während der EFR32BG22 seinen mehrstufigen Boot-Prozess mit einem virtuellen Sicherheitselement einleitet. (Bildquelle: Silicon Laboratories)
Im EFR32MG21A bietet ein dedizierter Prozessorkern kryptografische Funktionalität zusammen mit einem sicheren Hardware-Element zur sicheren Schlüsselspeicherung. Unterstützt durch diese dedizierte Fähigkeit initiiert der Prozessor den Boot-Prozess unter Verwendung von Code, der im Festwertspeicher (ROM) gespeichert ist, um den FSB-Code (First Stage Bootloader) zu verifizieren. Nach der Verifizierung wird der FSB-Code ausgeführt, der wiederum die Codesignatur des Second-Stage-Bootloaders (SSB) verifiziert. Die Boot-Sequenz fährt mit der Ausführung der verifizierten SSB fort, die wiederum die Signatur des Anwendungscodes verifiziert, der in der Regel sowohl Code auf Systemebene als auch den Anwendungscode auf höherer Ebene umfasst. Schließlich wird der verifizierte Anwendungscode ausgeführt, und der Systembetrieb läuft wie von der Anwendung gefordert ab.
Da dieser Prozess mit ROM-Code beginnt und nur verifizierten FSB-, SSB- und Anwendungscode ausführt, führt dieser Ansatz zu einer verifizierten Vertrauenskette für die Codeausführung. Da das erste Glied in dieser Vertrauenskette auf ROM-Code angewiesen ist, der nicht geändert werden kann, erweitert jedes nachfolgende Glied in der Kette diese vertrauenswürdige Umgebung. Gleichzeitig ermöglicht dieser Ansatz Entwicklern die sichere Aktualisierung des Anwendungscodes und sogar des Codes für die erste und zweite Stufe des Bootloaders. Solange jedes Codepaket eine verifizierte Signatur liefert, bleibt die vertrauenswürdige Umgebung intakt.
Prozessoren, die diese Art des sicheren Starts mit einer Vertrauenswurzel versehen, unterstützen in der Regel mehrere Modi und Optionen. Beispielsweise bieten die Gecko-Prozessoren der Serie 2 von Silicon Laboratories eine stärkere zertifikatsbasierte, sichere Boot-Fähigkeit.
Bei routinemäßigen PKI-Transaktionen (Public Key Infrastructure) enthalten Zertifikate den öffentlichen Schlüssel zusammen mit einem Verweis auf ein oder mehrere zugehörige Zertifikate, die letztlich auf ein von einer Zertifizierungsstelle (Certificate Authority, CA) ausgestelltes Stammzertifikat verweisen. Jedes Zertifikat in dieser Kette dient dazu, das/die darunter liegenden Zertifikat(e) zu verifizieren, wodurch eine Vertrauenskette entsteht, die auf einer vertrauenswürdigen CA basiert. Browser verlassen sich auf diese Vertrauenskette während der Authentifizierungsphase der Transport Layer Security (TLS), um die Identität von Webservern zu bestätigen. Auf die gleiche Weise können eingebettete Systeme Zertifikate verwenden, um die Identität der Quelle des Bootloader- oder Anwendungscodes zu bestätigen. Hier verläuft der mehrstufige Bootvorgang wie oben beschrieben, jedoch mit zusätzlicher Überprüfung des mit jeder Stufe verbundenen Zertifikats (Abbildung 3).
Abbildung 3: Die Gecko-Prozessoren der Serie 2 von Silicon Laboratories erhöhen die Systemsicherheit durch die Verifizierung von Zertifikaten für öffentliche Schlüssel, die während der Signaturprüfung in jeder Phase des Boot-Prozesses verwendet werden. (Bildquelle: Silicon Laboratories)
Andere Prozessoren, wie z. B. der NXP LPC55S69JBD100, unterstützen eine Reihe verschiedener Optionen für das Firmware-Image. Neben signierten Firmware-Images unterstützen diese Prozessoren Boot-Images unter Verwendung des Industriestandards Device Identifier Composition Engine (DICE) der Trusted Computing Group. Eine dritte Option erlaubt es den Entwicklern, Bilder in speziellen Bereichen des Prozessor-Flash zu speichern, die die PRINCE-Chiffre unterstützen, bei der es sich um eine Blockchiffre mit niedriger Latenz handelt, die eine mit anderen Chiffren vergleichbare Sicherheitsstärke erreichen kann, jedoch in einem viel kleineren Siliziumbereich. Der im LPC55S69JBD100 implementierte PRINCE-Chiffrierer kann verschlüsselten Code oder Daten, die in den speziellen PRINCE-Flash-Regionen des Prozessors gespeichert sind, on-the-fly entschlüsseln. Da die zur Entschlüsselung verwendeten geheimen Schlüssel nur der PRINCE-Kryptographie-Engine zugänglich sind, bleibt dieser Entschlüsselungsprozess sicher. Tatsächlich werden diese geheimen Schlüssel durch einen Schlüsselverschlüsselungsschlüssel (KEK) geschützt, der durch die PUF-Funktion (Physical Unclonable Function) des LPC55S69JBD100 generiert wird. (Weitere Informationen zur Verwendung von PUF und KEK finden Sie in Teil 2).
Dieser Ansatz bietet Entwicklern die Möglichkeit, zusätzliche Firmware-Images zu speichern - eine Fähigkeit, die erforderlich ist, um IoT-Geräte mit Firmware-Over-the-Air-(FOTA-)Update-Methoden zu versehen, ohne das Risiko eines "Brickings" des Geräts. Wenn der Prozessor nur einen Speicherort zum Speichern von Firmware-Images verwenden kann, kann ein fehlerhaftes Firmware-Image den Prozessor in einen unbestimmten oder gesperrten Zustand versetzen, der das Gerät blockiert oder verriegelt. Durch das Speichern von Firmware-Images in den PRINCE-aktivierten Flash-Regionen des LPC55S69JBD100 können Entwickler Back-Off-Strategien verwenden, die eine frühere funktionierende Firmware-Version wiederherstellen, wenn die neue Version in einen nicht funktionierenden Zustand bootet.
Da alle diese neuen Firmware-Images die im zugrundeliegenden Boot-Prozess erforderlichen Signatur-Prüfungen bestehen müssen, können Entwickler die Vorteile der sicheren FOTA voll ausschöpfen, um neue Funktionen hinzuzufügen oder Fehler zu beheben, ohne das System oder seine Vertrauenskette einzubeziehen.
Fazit
Die Sicherheit auf System- und Anwendungsebene erfordert eine Ausführungsumgebung, die den Betrieb nur autorisierter Software zulässt. Obwohl die Verifizierung von Code-Signaturen ein wesentliches Merkmal zur Ermöglichung dieser Art von Umgebung ist, müssen sichere Systeme auf einen umfassenderen Satz von Fähigkeiten zurückgreifen, um die Vertrauenskette aufzubauen, die zur Gewährleistung einer vertrauenswürdigen Software-Ausführung erforderlich ist. Die Grundlage für diese vertrauenswürdigen Umgebungen liegt in einer Vertrauenswurzel, die durch sichere Boot-Mechanismen bereitgestellt wird, die von sicheren Prozessoren unterstützt werden. Mit dieser Klasse von Prozessoren können Entwickler sichere IoT-Geräte implementieren, die in der Lage sind, Angriffen zu widerstehen, die darauf abzielen, die Softwareausführung in einem System zu lähmen oder das System vollständig zu kapern.
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.




