Elektroniknet Logo

Debugging von Zephyr-Applikationen

Verifizieren auf Sicherheit und Zuverlässigkeit

Datenwissenschaftler , Big Data , künstliche Intelligenz , Maschinenlerntechnologie-Konzept. Silhouette-Brille vor dem Laptop-Bildschirm mit Programmierkodierung.
© Zapp2Photo - shutterstock.com

In der Version 2.6.0 des Echtzeit-Betriebssystem Zephyr wurde die Unterstützung für das Software-Tracing erweitert. Sie macht das Debugging einfacher und schafft dadurch die Voraussetzungen für mehr Zuverlässigkeit, Security und Safety.

In den vergangenen fünf Jahren ist im Rahmen des Zephyr Project [1] der Linux Foundation ein quelloffenes Echtzeit-Betriebssystem (Real Time Operating System, RTOS) für Embedded-Systeme entstanden. Das Zephyr-RTOS unterstützt derzeit mehr als 200 Module mit Mikrocontrollern von ARM, RISC-V, Tensilica, NIOS und ARC als Single- und Multicore-Systeme. Ebenfalls unterstützt werden die Funkkommunikation via Bluetooth Low Energy, Wi-Fi und 802.15.4 Matter (Zigbee) sowie Standardschnittstellen wie 6LoWPAN, CoAP, Ethernet, USB, CAN und Thread. Die jeweiligen Board Support Packages (BSP) enthalten entsprechende Bibliotheken, die es den Entwicklern erleichtern das RTOS zu implementieren.

Ein ganz wichtiger Aspekt des Zephyr-Projekts ist die Tatsache, dass dieses RTOS speziell mit Blick auf Sicherheit konzipiert wurde, dabei aber gleichzeitig eine schnelle und effiziente Entwicklung ermöglichen soll. Als Bestandteil der Linux Foundation wird das Projekt durch ein Product Incident Response Team, eine auf Safety-Zertifizierungen abzielende, nachprüfbare Codebasis sowie langfristigen Support (Long Term Support, LTS) mit entsprechenden Security-Updates, unterstützt.

All dies bietet die Möglichkeit, ICs und Module für Anwendungen im Industrie-, Automobil‑, Smart-City- und Smart-Home-Bereich schnell und sicher mit beliebigen Clouds zu verbinden. Die Covid-19-Pandemie hat den Bedarf an Kontaktverfolgungs-Wearables, Distanz-Trackern und sogar smarten Sicherheitsschuhen steigen lassen, die dank des geringen Speicherbedarfs, der integrierten Stacks und der Zuverlässigkeit von Zephyr allesamt in nur drei Monaten auf der Basis dieses RTOS realisiert werden konnten.

So übernimmt beispielsweise ein für ein Wearable konzipierter Tracker-/Multi-Sensor-Entwurf die Kontaktverfolgung und überträgt aufgezeichnete Ereignisse an ein Gateway, das anschließend über eine Mobilfunk-Verbindung für den Transfer in die Cloud sorgt. Hierdurch werden die jeweiligen Kontakte festgestellt und es wird ermittelt, welche Personen mit einer infizierten Person in Kontakt gekommen sind.

Ein weiterer Entwickler stattete seine smarten Schuhe mit einer Schutzfunktion aus, die den Träger mithilfe eines in die Schuhe integrierten Vibrationsalarms warnt, sobald er einer anderen Person zu nah kommt. Bei Ertönen des Signals kann der Träger dann entweder eine Maske anlegen oder die Distanz zur anderen Person vergrößern. Ein weiteres neues Produkt, das auf der Basis von Zephyr entwickelt wurde, ist ein Distanz-Tracker, der den Abstand zwischen zwei oder mehr Menschen am Arbeitsplatz misst.

Relevante Anbieter

Herausforderung: Schutz und Sicherheit

Wenngleich das Thema Security bei Zephyr im Mittelpunkt steht, können natürlich dennoch Probleme auftreten – nicht nur im Zephyr-Kernel, sondern auch im Applikations-Code. Das Zephyr-Projekt führt eine öffentliche Liste mit allen gefundenen und beseitigten Schwachstellen. Darin finden sich neben dem BadAlloc-Problem [2] auch Sicherheitslücken in den USB- und Bluetooth-Bibliotheken. Dies lässt erkennen wie herausfordernd es ist, ein Embedded-System zu entwickeln, das sowohl »secure« als auch »safe« ist.

Embedded-Systeme mit Cloud-Anbindung enthalten eine Unmenge an Code und sind entsprechend komplex. Ein »Hello World«-Projekt mit Verbindung zur AWS-Cloud per MQTT und TLS generiert Binärcode mit einem Umfang von einigen hundert KB. Hinzu kommt, dass die meisten RTOS-Applikationen eine Vielzahl komplexer Interaktionen beinhalten, in denen Bugs recht häufig sind. Dazu zählen auch Sicherheitslücken, die ausgenutzt werden könnten, um Zugang nicht nur zum Gerät selbst, sondern möglicherweise auch zum übrigen Netzwerk zu erlangen. Ein ungeschütztes System ist somit auch nicht funktionssicher, und jegliche Schwachstelle kann beispielsweise bei Systemen im Industrie- und Medizinbereich dramatische Folgewirkungen haben.

Steigende Komplexität durch Multithreading

Mit einem RTOS wie Zephyr kommt eine weitere Komplexitätsebene hinzu, die von Embedded-Entwicklern berücksichtigt werden muss, nämlich das Multithreading. Dieses macht es möglich, den Code in separate Threads zu unterteilen, die unabhängig voneinander laufen – zumindest theoretisch. In der Praxis dagegen bestehen oftmals Abhängigkeiten zwischen den Threads, die die Komplexität erhöhen. Einige diese Abhängigkeiten sind gewollt und notwendig, da die Threads häufig miteinander kommunizieren müssen. Andere dagegen sind unbeabsichtigt und gelegentlich auch problematisch. Sie sind im Quellcode oft nicht erkennbar und es lässt sich schwer vorhersagen, wie sie sich auf das Laufzeitverhalten auswirken.

Für Mikrocontroller, die häufig für IoT-Anwendungen genutzt werden, stellt dies eine echte Herausforderung dar, da sie über keinen Speicherschutz verfügen. Etwaige Bugs sind daher nicht isoliert und können durch das Verfälschen von Daten alle Bereiche des Laufzeit-Systems beeinträchtigen. In Verbindung mit dem Multithreading, das anderen Threads an nahezu jedem Punkt das Anhalten der Verarbeitung ermöglicht, sowie angesichts der aus den Abhängigkeiten zwischen den Threads resultierenden Komplexität, besteht ein größeres Risiko, dass es zu nicht-deterministischem Verhalten, schwer greifbaren Bugs und Schwachstellen kommt.


  1. Verifizieren auf Sicherheit und Zuverlässigkeit
  2. Auf Sicherheit überprüfen

Verwandte Artikel

Percepio AB