Midori nimmt Formen an: Das Ende von Windows ist besiegelt

Schon seit Mitte der 90er Jahre sind die Betriebssystemhersteller dabei, bei allen APIs Puffer vor einem Überlauf zu sichern. Wie man jedoch immer wieder in Security-Bulletins nachlesen kann, werden auch heute noch regelmäßig Sicherheitslücken gefunden, die einen Pufferüberlauf ausnutzen. Die Häufigkeit von Pufferüberläufen in Sicherheitswarnungen nimmt zwar ab, dennoch kann man nicht von einer Entwarnung reden.

Managed Code lässt keine Pufferüberläufe zu. Zu jedem Objekt gehört seine Länge in Bytes. Beim Arbeiten mit Objekten wird jedes Mal überprüft, ob die Längenbeschränkung eingehalten wird, selbst wenn das nicht nötig wäre. Das führt dazu, dass Managed Code zum Teil deutlich langsamer ist als Unmanaged Code. So ist zum Beispiel der folgende C-Code als sicher einzustufen:

const char* const yesno[2] = {"No", "Yes"];
char answer[4];
int condition;
if ( ... ) condition = 1; else condition = 0;
strcpy(answer, yesno[condition]);

Die grundsätzlich unsichere Funktion strcpy kann in diesem Fall verwendet werden, weil sichergestellt ist, das answer nur Yes oder No annehmen kann. Dafür ist answer mit vier Bytes, nämlich drei Zeichen und dem Nullterminator, ausreichend dimensioniert. In einer Managed-Code-Umgebung bekommt der obige Code jedoch in etwa folgendes Äquivalent in C:

const char* const yesno[2] = {"No", "Yes"];
const int maxlen = 4;
char answer[maxlen];
int condition;
if ( ... ) condition = 1; else condition = 0;
if (strlen(yesno[condition]) >= maxlen )
errorHandler();
else

strcpy(answer, yesno[condition]);

Diesen zusätzlichen Code kann ein Optimizer meist nicht ganz ausmerzen. Das gilt insbesondere dann, wenn die Definition des String-Arrays yesno in einem anderen Modul steht als der Rest des Beispielcodes.

Anders als oft angenommen ist Managed Code nicht deswegen langsamer, weil der Sourcecode zunächst in einen Bytecode und erst später auf dem Zielsystem in Native Code übersetzt wird. Im Gegenteil, ein Just-In-Time-Compiler kann spezifische Befehlssatzerweiterungen, zum Beispiel SSE2, SSE4.2 oder 3DNow, ausnutzen. Die geringere Ausführungsgeschwindigkeit kommt fast ausschließlich von den redundanten Überprüfungen.

Page: 1 2 3 4 5 6 7

ZDNet.de Redaktion

Recent Posts

Intel verkauft NAND-Flash-Sparte für 9 Milliarden Dollar

Käufer ist der südkoreanische Anbieter SK Hynix. Das Unternehmen steigt so zur Nummer zwei im…

3 Tagen ago

Safari und Opera: Sieben Mobile Browser anfällig für Spoofing

Angreifer lassen speziell präparierte Websites in der Adressleiste als legitim erscheinen. Lediglich Apple schafft es,…

3 Tagen ago

Google: Kartellklage des US-Justizministeriums ist unbegründet

Die Einschätzung teilt Google in einer Börsenpflichtmeldung mit. Die US-Justiz wirft dem Internetkonzern indes die…

3 Tagen ago

Windows 10 20H2: Installation und neue Funktionen im Überblick [UPDATE]

Microsoft hat Windows 20H2 offiziell zum Download freigegeben. Vermutlich wird die interne Update-Funktion von Windows…

4 Tagen ago

Soundcore Life Q30: Kopfhörer mit Geräuschunterdrückung ausprobiert

Der Soundcore Life Q30 bietet für knapp 80 Euro 40-mm-Treiber mit Seidenmembranen. Die aktualisierte Soundcore-App…

4 Tagen ago

OpenStack Foundation wird zur Open Infrastructure Foundation

Die OpenStack Foundation erweitert ihren Fokus von der OpenStack Infrastructure as a Service (IaaS) Cloud…

4 Tagen ago