Memory Safety

Memory Safety

Memory Safety bezeichnet die Eigenschaft einer Programmiersprache oder Laufzeitumgebung, bestimmte Arten von Programmierfehlern beim Umgang mit Arbeitsspeicher von vornherein zu verhindern. Viele der gefährlichsten Sicherheitslücken der letzten Jahrzehnte gehen auf das Fehlen genau dieser Eigenschaft zurück.

Jedes Programm speichert seine Daten vorübergehend im Arbeitsspeicher des Computers. Dabei kann etwas schiefgehen: Ein Programm liest Daten aus einem Speicherbereich, der ihm gar nicht gehört. Es schreibt über die Grenzen eines reservierten Bereichs hinaus. Oder es versucht, Speicher zu benutzen, den es bereits freigegeben hat. Solche Fehler heißen Speicherzugriffsfehler. Eine Sprache oder Umgebung gilt als « memory-safe », wenn sie diese Fehlerklasse technisch unmöglich macht — entweder schon beim Übersetzen des Programms oder spätestens beim Ausführen.

Memory Safety als unterschätzte Sicherheitslücke

Die US-Behörde für Cybersicherheit (CISA) schätzt, dass rund 70 Prozent aller kritischen Sicherheitslücken in großer Software auf Speicherzugriffsfehler zurückgehen. Dazu zählen Fehler wie Buffer Overflow: Ein Angreifer schickt mehr Daten, als für einen Speicherbereich vorgesehen sind, und überschreibt dabei benachbarte Bereiche gezielt mit eigenem Schadcode. Das Programm führt diesen Code dann unwissentlich aus. Genau solche Angriffe haben in der Vergangenheit Betriebssysteme, Browser und industrielle Steuerungssysteme kompromittiert.

Der Kern des Problems: In Sprachen wie C oder C++ ist der Programmierer selbst dafür verantwortlich, Speicher anzufordern, korrekt zu benutzen und wieder freizugeben. Menschen machen dabei Fehler. Und ein einziger Fehler kann ausreichen, um ein gesamtes System angreifbar zu machen.

Wie Sprachen Speicherfehler verhindern

Es gibt zwei grundlegende Ansätze. Der erste ist eine automatische Speicherverwaltung, ein sogenannter Garbage Collector: Das Laufzeitsystem des Programms beobachtet laufend, welche Speicherbereiche noch gebraucht werden, und gibt den Rest automatisch frei. Java, Python und Go funktionieren so. Der Programmierer muss sich nicht selbst darum kümmern — und kann deshalb bestimmte Fehler schlicht nicht mehr machen. Der Nachteil ist ein gewisser Rechenaufwand, der permanent im Hintergrund läuft.

Der zweite Ansatz überprüft die Speicherzugriffe nicht zur Laufzeit, sondern bereits beim Übersetzen des Quellcodes in ausführbare Dateien. Die Programmiersprache Rust geht diesen Weg. Ihr Compiler, also das Programm, das Quellcode in eine ausführbare Datei umwandelt, analysiert schon vor der Ausführung, ob jeder Speicherzugriff gültig ist. Programme, die diese Prüfung nicht bestehen, lassen sich gar nicht erst starten. Rust erreicht damit Memory Safety ohne den Laufzeit-Overhead eines Garbage Collectors — was besonders für leistungskritische Systeme attraktiv ist.

Ein häufiger Irrtum: Memory Safety bedeutet nicht, dass ein Programm keine Fehler mehr haben kann. Logikfehler, falsche Berechnungen oder fehlerhafte Datenbankabfragen sind davon nicht betroffen. Memory Safety schließt genau eine Klasse von Fehlern aus — aber es ist die Klasse, die am häufigsten für schwere Sicherheitslücken verantwortlich ist.

Memory Safety in aktuellen Debatten und Produkten

Das Thema hat in den letzten Jahren deutlich an politischem Gewicht gewonnen. Die US-Regierung empfahl 2024 in einem offiziellen Bericht, künftig bevorzugt memory-safe Sprachen einzusetzen. Microsoft erklärte, dass rund 70 Prozent der gemeldeten Sicherheitslücken in Windows auf Speicherzugriffsfehler zurückgehen — und hat begonnen, neue Komponenten in Rust zu schreiben. Google tut dasselbe für Teile des Android-Betriebssystems.

Auch im Bereich KI-Infrastruktur spielt Memory Safety eine Rolle. Viele Bibliotheken, die neuronale Netze trainieren oder ausführen, sind aus Geschwindigkeitsgründen in C++ geschrieben — also in einer Sprache ohne automatische Speichersicherheit. Die Branche diskutiert, ob der Wechsel zu sichereren Sprachen dort praktisch umsetzbar ist, ohne zu viel Rechenleistung zu verlieren.

Für Nutzer ist Memory Safety unsichtbar — sie merken höchstens dann etwas davon, wenn sie fehlt: durch einen Absturz, durch ein System, das sich seltsam verhält, oder durch eine Schlagzeile über eine ausgenutzte Sicherheitslücke, die sich mit einem anderen Sprachdesign hätte vermeiden lassen.

Subscribe free. Unsubscribe the second it sucks.

High-signal news across AI, business, UX, and tech. Every morning.