Vermeiden von Pufferüberläufen

Ein Pufferüberlauf ist eine der am häufigsten verwendeten Sicherheitsrisiken. Ein Pufferüberlauf wird im Wesentlichen durch die Behandlung deaktivierter, externer Eingaben als vertrauenswürdige Daten verursacht. Der Akt des Kopierens dieser Daten mithilfe von Vorgängen wie CopyMemory, strcat, strcpy oder wcscpy kann unvorgesehene Ergebnisse erstellen, was systembeschädigungen ermöglicht. In den besten Fällen wird Ihre Anwendung mit einem Kernabbild, einem Segmentierungsfehler oder einer Zugriffsverletzung abgebrochen. Im schlimmsten Fall kann ein Angreifer den Pufferüberlauf ausnutzen, indem er andere böswillige Code in Ihrem Prozess einführt und ausführt. Das Kopieren deaktivierter Daten in einen stapelbasierten Puffer ist die häufigste Ursache für exploitable Fehler.

Pufferüberläufe können auf verschiedene Arten auftreten. Die folgende Liste enthält eine kurze Einführung in einige Arten von Pufferüberlaufsituationen und bietet einige Ideen und Ressourcen, die Ihnen helfen, neue Risiken zu vermeiden und vorhandene zu mindern:

Statische Pufferüberläufe

Ein statischer Pufferüberlauf tritt auf, wenn ein Puffer, der auf dem Stapel deklariert wurde, mit mehr Daten geschrieben wird als für den Halteraum zugewiesen wurde. Die weniger sichtbaren Versionen dieses Fehlers treten auf, wenn nicht überprüfte Benutzereingabedaten direkt in eine statische Variable kopiert werden, wodurch potenzielle Stapelbeschädigungen verursacht werden.

Heap-Überläufe

Heap-Überläufe wie statische Pufferüberläufe können zu Speicher- und Stapelbeschädigungen führen. Da Heap-Überläufe im Heap-Speicher statt im Stapel auftreten, betrachten einige Personen sie als weniger in der Lage, schwerwiegende Probleme zu verursachen; Dennoch erfordern Heapüberläufe echte Programmierpflege und sind genauso in der Lage, Systemrisiken als statische Pufferüberläufe zu ermöglichen.

Arrayindizierungsfehler

Arrayindizierungsfehler sind auch eine Quelle von Speicherüberläufen. Sorgfältige Überprüfung und Indexverwaltung helfen, diesen Speichertyp zu überlaufen.

Das Verhindern von Pufferüberläufen ist in erster Linie das Schreiben guter Code. Überprüfen Sie immer alle Eingaben, und schlagen Sie bei Bedarf ordnungsgemäß fehl. Weitere Informationen zum Schreiben von sicherem Code finden Sie in den folgenden Ressourcen:

  • Maguire, Steve [1993], Schreiben solider Code, ISBN 1-55615-551-4, Microsoft Press, Redmond, Washington.
  • Howard, Michael und LeBlanc, David [2003], Schreiben von Secure Code, 2d ed., ISBN 0-7356-1722-8, Microsoft Press, Redmond, Washington.

Hinweis

Diese Ressourcen sind möglicherweise in einigen Sprachen und Ländern nicht verfügbar.

 

Tresor Zeichenfolgenbehandlung ist ein langjähriges Problem, das weiterhin behandelt wird, indem sowohl bewährte Programmierpraktiken als auch häufig vorhandene Systeme mit sicheren Zeichenfolgenbehandlungsfunktionen verwendet und umgerüstet werden. Ein Beispiel für eine solche Reihe von Funktionen für die Windows Shell beginnt mit StringCbCat.