Compiler: Windows soll komplett initialisierten Stack bekommen
Nicht initialisierter Speicher ist ein typisches Sicherheitsproblem von C und C++. Microsoft will dies für das gesamte Windows-System lösen.

Microsoft will mittelfristig sämtliche Stack-Variablen in seinem Windows-Betriebssystem automatisch beim Kompilieren initialisieren. Das schreibt das dafür zuständige Team im Blog von Microsofts Security Response Center. Sind die Arbeiten erfolgreich, kann der Windows-Hersteller gleich eine ganze Klasse von Sicherheitslücken automatisch verhindern.
Das zugrunde liegende Problem ist, dass es die Programmiersprachen C und C++ nicht forcieren, Variablen bei der Deklaration zu initialisieren. Das heißt, ihnen werden unter Umständen keine Werte zugewiesen. Das ist jedoch nicht definiertes Verhalten und kann etwa dazu führen, dass geschützte Inhalte von Speicherbereichen versehentlich offengelegt werden oder dass die Speicherbereiche direkt genutzt werden. Beides kann zu Sicherheitslücken führen.
In dem Blogbeitrag schreibt Microsoft selbst, dass in den Jahren 2017 und 2018 nicht initialisierter Speicher die Ursache für 5 bis 10 Prozent der von Microsoft verteilten CVE-Nummern für Sicherheitslücken gewesen sei. Als mögliche Gegenmaßnahmen zählt das Team eine statische Analyse, Fuzzing, Code-Überprüfungen oder eben die automatische Initialisierung auf.
Letzteres nennt Microsoft Initall, wobei bisher noch nicht in allen Fällen wirklich Stack-Variablen initialisiert werden, sondern nur in einigen ausgesuchten Fällen wie im Kernel-Code oder in der Virtualisierung Hyper-V. Der Grund dafür ist die teilweise schlechte Leistung der Technik. So habe das Team in ersten Tests mit verschiedenen Metriken Leistungseinbußen von bis zu 10 Prozent verzeichnet. Man habe darüber hinaus einige Probleme beheben müssen, die in Verbindung mit Initall aufgetaucht seien, etwa bei der Speicherverwaltung.
Dem Blogeintrag zufolge konnte das Team bereits einige Sicherheitslücken mit der Technik verhindern, zumindest auf den unterstützten Systemen. Wohl auch deshalb will Microsoft Initall künftig in noch größerem Umfang als bisher einsetzen. Das Team geht außerdem davon aus, dass Microsoft langfristig kein System mehr unterstützen wird, auf dem Initall nicht eingesetzt wird. Die beschriebene Fehlerklasse sollte damit nicht mehr zu Sicherheitslücken führen.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
- ohne Werbung
- mit ausgeschaltetem Javascript
- mit RSS-Volltext-Feed
Jo, aber "Default-Initialisierung" kann aber eben auch "keine Initialisierung" bedeuten.
Ja, der Overhead ist extrem hoch. Das kann leicht schon mal 20.000 Takte kosten wenn...
Ja, die gibt es. Eine die man in diesem Zusammenhang besonders hervorheben kann ist Rust...