Zühlke – Empowering Ideas

Medizintechnik & Gesundheitsindustrie

Rust: Sichere Software von Anfang an

Rust - a promising alternative to C+?

Kann Software zu 100% fehlerfrei sein? Nein – und das stellt ein großes Problem dar, insbesondere in Branchen wie Automotive, Luftfahrt oder Medizintechnik. Hier wird ein hoher Aufwand getrieben, um Sicherheitslücken zu schließen und Daten zu schützen. Die noch recht junge Programmiersprache Rust bietet da einen spannenden Ansatz: Mit ihr sind die problematischsten Sicherheitslücken gar nicht erst möglich. Das reduziert nicht nur das Risiko, sondern senkt auch die Kosten für den Betrieb – und könnte die Software-Entwicklung revolutionieren. 

5 Minuten to read
Autor

Wenn es um systemnahe oder hoch performante Anwendungen geht, kommt man auch heute noch kaum um die Programmiersprachen C und C++ herum. Ihre Flexibilität, aber auch Effizienz, macht sie trotz ihres inzwischen recht hohen Alters von knapp 40 bzw. 50 Jahren noch immer in vielen Bereichen unverzichtbar. Bisher konnten sie sich stets an neue Technologien und Anforderungen anpassen.

Allerdings fängt diese Dominanz an zu wanken. 

Der Grund dafür ist, dass das Thema Sicherheit in den letzten Jahren immer wichtiger geworden ist und C/C++ Anwendungen regelmäßig sehr teure und potenziell sehr gefährliche Fehler produzieren, die auf den fehlerhaften Umgang mit Anwendungsspeicher zurückzuführen sind: sogenannte Speicherfehler.

Speicherfehler als mögliches Problem von C/C++

Drei Beispiele zeigen, wie schwerwiegend die Konsequenzen aus diesen Speicherfehlern sein können: 

  • Der Heartbleed-Bug aus dem Jahr 2014: Durch einen ungeprüften Parameter in SSL-Paketen konnte der Anwendungsspeicher von SSL-Servern gelesen werden. Der Kryptologe und Sicherheitsexperte Bruce Schneier beschreibt die Tragweite des Heartbleed-Bugs als: „Katastrophal ist das richtige Wort. Auf einer Skala von 1 bis 10 ist dies eine 11.“.
  • Ripple20 aus dem Jahr 2020 beschreibt 19 verschiedene Fehler einer oft benutzten TCP/IP Bibliothek: Das Team, das diese Fehler entdeckte, geht davon aus, dass „hunderte von Millionen Geräte verwundbar sind, vielleicht sogar Milliarden.“
  • Gerade einmal ein halbes Jahr nach Ripple20 wurden wieder mehrere Sicherheitslücken in mehreren TCP/IP Bibliotheken gefunden, die zu einem Großteil auf Speicherfehler zurückzuführen sind. Von „AMNESIA:33“ sind mehr als 150 Hersteller und über eine Million IoT-Geräte betroffen.

Viele Tech-Player, wie Apple, Chromium, Microsoft, Google, Mozilla oder Ubuntu haben diese Gefahr erkannt und sind zu dem Ergebnis gekommen, dass tatsächlich ca. 70% der Fehler, die nach der Auslieferung eines Produktes auftreten, auf die Kategorie „Speicherfehler“ zurückzuführen sind.

Das Problem verschärft sich zusätzlich, da die Fehler, die erst nach der Auslieferung auftreten, die teuersten sind und den größten Schaden anrichten können. 

Infografik rust blogpost de 1 Design Kosten für die Behebung eines Fehlers abhängig von der Entwicklungsphase Test Implementierung Nach Auslieferung

Die Vorteile der Programmiersprache Rust

Und genau bei diesen Problemen setzt Rust an. Die Programmiersprache wurde 2015 veröffentlicht und entwickelt sich gerade zu einer ernstzunehmenden Alternative zu C und C++. Gerade für Produkte, die hohe Anforderungen an Sicherheit, Effizienz, Anwendungsgeschwindigkeit und Wartbarkeit haben, wird Rust zunehmend attraktiv. Aus unserer Sicht dürfte Rust somit für Industrien wie Medizintechnik, Luftfahrt und Automobil schon bald ein wichtiger Erfolgsfaktor sein. Wir sehen vor allem 3 Gründe, warum das so ist: 

  1. Rust macht Software sicherer. Die Programmiersprache verhindert, dass Code, der Speicherfehler produziert, überhaupt kompiliert wird. Anders ausgedrückt: Die meisten Fehler, die bei C oder C++ Projekten schon zu sehr schwerwiegenden Konsequenzen geführt haben, wären mit Rust gar nicht möglich. 
  2. Rust macht Software über deren gesamten Lebenszyklus deutlich günstiger. Ein Großteil der Kosten für Software entsteht durch die Ausbesserung von Fehlern, die unweigerlich während der Programmierung entstehen. Mit Rust werden die meisten und potenziell schwerwiegendsten Fehler frühzeitig eliminiert. Amazon bestätigt dies: „Rust verwendet ein striktes Typsystem und ein Ownership-Modell, um die Sicherheit von Speicher und Nebenläufigkeit zur Kompilierzeit zu verifizieren. Dadurch sind die Kosten für das Testen und Validieren von Rust-Implementierungen wesentlich geringer als bei C/C++.“
  3. Rust liefert eine gute Performance. Die Programmiersprache ist ähnlich schnell und speichereffizient wie C und C++.
     
Anteil Speicherfehler RUST

Mehr als eine sichere Programmiersprache

Vor allem die Kombination aus Sicherheit und Performanz hat Rust gerade im Enterprise-Umfeld bereits zu einer wichtigen Alternative zu Garbage-collected Programmiersprachen wie Java, C# und Go werden lassen. Das ist auch ein deutlicher Hinweis darauf, dass Rust sich ebenfalls in Sachen Wartbarkeit mit aktuellen Programmiersprachen messen kann und somit einen weiteren Effizienzschub in der Embedded-Entwicklung verspricht.

In Anbetracht all dieser Punkte ist es kein Wunder, dass Rust seit dem Jahr 2016 die beliebteste Programmiersprache unter Software-Entwicklerinnen und -Entwicklern ist. 

Bei der Menge an Vorteilen stellt sich jedoch schnell die Frage: Warum ist Rust noch nicht längst der Standard - gerade bei sicherheitsrelevanten Softwareprojekten? Hierfür sehen wir vor allem drei Gründe: 

  • Rust ist noch eine sehr neue Programmiersprache, die Zeit benötigt, sich mit einem Ökosystem zu messen, das seit knapp einem halben Jahrhundert gewachsen ist. Eine Folge ist zum Beispiel die deutlich geringere Anzahl an kompetenten Rust-Entwicklerinnen und -Entwickler. Dennoch ist die gegenwärtige Entwicklung von Rust atemberaubend schnell: Rust erreicht innerhalb Monaten Meilensteine, für die früher jahrelange Entwicklung nötig war und die Community wächst mit einem ebenso hohen Tempo.
  • Es werden zwar schon viele etablierte Szenarien zuverlässig von Rust unterstützt. Spezielle Themen, wie z.B. die Embedded-Software-Entwicklung oder der Zertifizierung des Compilers (z.B. ISO26262) befinden sich allerdings noch am Anfang.
  • Andererseits gibt es Situationen, in denen die manuelle Speicherverwaltung von Rust zu aufwändig ist. Das ist in der Regel in Situationen der Fall, in denen Geschwindigkeit, Latenz oder Speicherverbrauch nicht kritisch sind. In diesem Fall bieten Programmiersprachen mit Garbage-Collector, wie z.B. Java, C# und Go einen höheren ROI.

Fazit

Es gibt gute Gründe, warum Rust immer mehr Verbreitung findet. Dazu gehören vor allem die wachsenden Anforderungen an Effizienz und Risikominimierung. Hier kann der Einsatz von Rust viele Vorteile bieten, sei es beispielsweise in einem Herzschrittmacher, in einem Airbag oder Online-Dienste für Chat und Videokonferenzen. 

Der Hauptvorteil von Rust ist: Speicherfehler können kategorisch ausgeschlossen werden, wodurch Fehler nach der Auslieferung insgesamt seltener auftreten. Deshalb werden sich Produkte, bei denen dies aufgrund von C oder C++ dennoch passiert, in Zukunft mit Rust messen müssen.

Doch wie können Sie das Potenzial von Rust in Ihrem Unternehmen abschätzen? 

  • Wenn Sie stark auf C oder C++ setzen, hilft es zu ermitteln, wie sehr sich der Einfluss der genannten Speicherfehler auf Ihre Entwicklungsgeschwindigkeit und die Zuverlässigkeit Ihrer Anwendungen auswirkt. Die Beseitigung dieser Fehler macht sich in der Regel schon während der Implementierungsphase durch erhöhte Debugging-Aufwände bemerkbar.
  • Wenn Sie viele Enterprise-Anwendungen auf Java, C# oder Go entwickeln, empfehlen wir Ihnen, Ihre Anforderungen bzgl. Geschwindigkeit, Latenz oder Speicherverbrauch unter die Lupe zu nehmen. Je wichtiger diese Punkte für Sie sind, desto interessanter könnte der Einsatz von Rust für Sie sein. 

Für eine erste Evaluierung bietet sich als Start ein kleines Pilotprojekt an. Dieses liefert wertvolle Erkenntnisse über das Potenzial im gesamten Unternehmen. Ein solider Business Case sichert dabei den ROI.

Wir unterstützen Sie gerne dabei!