Embedded Systems: Sicher entwickeln mit Rust und Ada

Viele eingebettete Systeme werden immer noch in C geschrieben. Entwickler sollten sich Gedanken über einen Umstieg machen.

Artikel von Karsten Lüth veröffentlicht am
Logo der Website Getadanow.com
Logo der Website Getadanow.com (Bild: Leah Goodreau/Public Domain via Wikimedia Commons / Montage: Golem.de)

Die fortschreitende Digitalisierung unserer Lebenswelt wird überwiegend durch eingebettete Systeme vorangetrieben. Immer mehr Geräte sind intelligent, vernetzt und mit einem leistungsfähigen Mikrocontroller versehen.

Selbst Glühbirnen sind inzwischen computerisiert und bieten bestenfalls viel Komfort in der vollautomatisierten Wohnung, können im Fehlerfall aber auch lästig oder sogar gefährlich werden und Hackern den Zugang auf das private Netzwerk ermöglichen. Eyal Itkin, Technology Lead der auf Sicherheit spezialisierten Firma Check Point Software Technologies Ltd., hat auf der Defcon 28 dazu eine sehr interessante Analyse präsentiert.

Traditionell werden eingebettete Systeme oft in der Programmiersprache C entwickelt, das zeigt auch die Tabelle der Top Programming Languages von IEEE Spectrum. Die Sprache C hat jedoch dermaßen viele Nachteile, dass es sich lohnt, über Alternativen nachzudenken. Zum Beispiel Rust oder Ada.

Ada ist seit rund 40 Jahren verfügbar und wird überwiegend für sicherheitskritische Anwendungen in der Luft- und Raumfahrt, der Verteidigung und in der Medizintechnik eingesetzt. Rust hingegeben ist vergleichsweise neu: Die erste stabile Rust-Version gibt es seit 2015. Dennoch ist Rust schon seit Jahren auf Platz eins der Most-Loved-Languages-Liste von Stackoverflow.

Stellenmarkt
  1. Ingenieur für Applikation / Techniker für Applikation (m/w/d)
    Viscom AG, Hannover
  2. Mitarbeiter (m/w/d) IT-Support
    Vitalcenter Gerstberger KG, Memmingen
Detailsuche

Der größte Vorteil der Programmiersprache C ist indes ihre enorme Verbreitung. Es gibt unzählige Entwicklerinnen und Entwickler, Werkzeuge, Bibliotheken und in C geschriebene Alt-Projekte. C ist leicht zu lernen, erlaubt hardwarenahe Programmierung und C-Compiler generieren effizienten Maschinencode.

Unter den am häufigsten auftretenden Fehlern sind allerdings auch viele, die typisch für C sind, beispielsweise die Benutzung freigegebener Speicherbereiche, Out-of-Bounds Reads/Writes, Integer Overflows oder Null-Pointer-Dereferenzierung. Um solche Fehler zu vermeiden, wurden viele Richtlinien für die sichere Programmierung mit C erstellt. Bekannt sind zum Beispiel der Misra-C Standard, die ISO/IEC TS 17961:2013 C Secure Coding Rules, oder der SEI Cert C Coding Standard.

C ist nur mit sehr viel Aufwand sicher zu machen

Diese Richtlinien zu studieren ist teilweise ähnlich aufwendig, wie eine komplett neue Programmiersprache zu lernen, und einige dieser Guidelines sind so lang, dass man sich fragt, warum die Autoren nicht einfach eine andere Programmiersprache empfehlen. Die AUTOSAR Guidelines for the use of the C++14 language in critical and safety-related systems zum Beispiel sind über 300 Seiten lang. Die Konsequenz ist, dass es zwar viele erfahrene C-Programmierer gibt, diese aber häufig dennoch geschult werden müssen, damit sie sicheres C programmieren.

Programmierung sicherer Systeme mit Rust: Eine Einführung

C ist nicht nur weniger sicher, sondern auch weniger produktiv als von den Entwicklern eingeschätzt:

  • Die Syntax von C ist sehr kompakt und benutzt nur sehr wenige Schlüsselwörter. Das beschleunigt zwar das Schreiben von Programmen, verringert aber auch die Lesbarkeit. Dadurch entstehen höhere Kosten für Code Review und Analyse.
  • C ist deswegen so leicht so lernen, weil viele wichtige Features fehlen. C kennt keine Pakete, hat nur ein einfaches Typsystem und besitzt keine Sprachelemente für die Beschreibung von Nebenläufigkeit.
  • Tendenziell führen C-Compiler weniger Überprüfungen zur Compile-Zeit durch als Ada- oder Rust-Compiler. Das freut die Entwickler, denn sie kommen so schnell zu einem ausführbaren Programm. Da aber die fehlenden Überprüfungen zu einer höheren Anzahl von Laufzeitfehlern führen, steigen insgesamt die Entwicklungskosten.

Viele diese Nachteile kennt Ada nicht. Ada ist extrem gut lesbar, hat ein umfassendes Typsystem und Tasks sind Bestandteil der Sprache.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
Rust hat das einzigartige Feature des Ownership-Modells 
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6.  


Aktuell auf der Startseite von Golem.de
Star Trek: Enterprise
Mit Warp 5 zur vorzeitigen Absetzung

Vor 20 Jahren startete mit Enterprise die damals ungewöhnlichste Star-Trek-Serie. Das unrühmliche Ende nach vier Jahren erscheint heute unverdient.
Von Tobias Költzsch

Star Trek: Enterprise: Mit Warp 5 zur vorzeitigen Absetzung
Artikel
  1. Xiaomi: BSI untersucht Sicherheit in Smartphones aus China
    Xiaomi
    BSI untersucht Sicherheit in Smartphones aus China

    Nach Zensurvorwürfen gegen Smartphone-Hersteller aus China untersucht nun auch das BSI die Geräte und deren Filter.

  2. Bitcoin: China verbietet Handel mit Kryptowährungen
    Bitcoin
    China verbietet Handel mit Kryptowährungen

    Die chinesische Zentralbank will den Handel mit Kryptowährungen wie Bitcoin komplett verbieten. Die Kurse beginnen zu fallen.

  3. Security: Forscher veröffentlicht iOS-Lücken aus Ärger über Apple
    Security
    Forscher veröffentlicht iOS-Lücken aus Ärger über Apple

    Das Bug-Bounty-Programm von Apple ist vielfach kritisiert worden. Ein Forscher veröffentlicht seine Lücken deshalb nun ohne Patch.

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • Samsung G7 31,5" WQHD 240Hz 499€ • Lenovo-Laptops zu Bestpreisen • 19% auf Sony-TVs bei MM • Samsung SSD 980 Pro 1TB 150,50€ • Dualsense-Ladestation 35,99€ • iPhone 13 erschienen ab 799€ • Sega Discovery Sale bei GP (u. a. Yakuza 0 4,50€) [Werbung]
    •  /