Vermeiden von Pufferüberläufen
Ein Pufferüberlauf ist eine der häufigsten Quellen für Sicherheitsrisiken. Ein Pufferüberlauf wird im Wesentlichen dadurch verursacht, dass ungeprüfte externe Eingaben als vertrauenswürdige Daten behandelt werden. Das Kopieren dieser Daten mithilfe von Vorgängen wie CopyMemory, strcat, strcpy oder wcscpy kann unerwartete Ergebnisse erzeugen, 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 anderen schädlichen Code in Ihren Prozess einführt und ausführt. Das Kopieren von ungeprüften Eingabedaten in einen stapelbasierten Puffer ist die häufigste Ursache für ausnutzbare 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 enthält einige Ideen und Ressourcen, die Ihnen helfen, neue Risiken zu vermeiden und vorhandene Risiken zu minimieren:
-
Statische Pufferüberläufe
-
Ein statischer Pufferüberlauf tritt auf, wenn ein Puffer, der im Stapel deklariert wurde, mit mehr Daten geschrieben wird, als ihm zugeordnet wurden. Die weniger offensichtlichen Versionen dieses Fehlers treten auf, wenn nicht überprüfte Benutzereingabedaten direkt in eine statische Variable kopiert werden, was zu einer möglichen Stapelbeschädigung führt.
-
Heapüberläufe
-
Heapüberläufe wie statische Pufferüberläufe können zu Speicher- und Stapelbeschädigungen führen. Da Heapüberläufe nicht im Stapel, sondern im Heapspeicher auftreten, halten einige Benutzer sie für weniger in der Lage, ernsthafte Probleme zu verursachen. Heapüberläufe erfordern jedoch echte Programmieraufwand und sind ebenso in der Lage, Systemrisiken wie statische Pufferüberläufe zuzulassen.
-
Arrayindizierungsfehler
-
Arrayindizierungsfehler sind auch eine Quelle von Speicherüberläufen. Eine sorgfältige Begrenzungsüberprüfung und Indexverwaltung trägt dazu bei, diese Art von Speicherüberlauf zu verhindern.
Beim Verhindern von Pufferüberläufen geht es in erster Linie darum, guten Code zu schreiben. Ü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], Writing Solid Code, ISBN 1-55615-551-4, Microsoft Press, Redmond, Washington.
- Howard, Michael und LeBlanc, David [2003], Writing Secure Code, 2d ed., ISBN 0-7356-1722-8, Microsoft Press, Redmond, Washington.
Hinweis
Diese Ressourcen sind in einigen Sprachen und Ländern möglicherweise nicht verfügbar.
Die sichere Zeichenfolgenbehandlung ist ein seit langem bestehendes Problem, das sowohl durch die Einhaltung bewährter Programmierpraktiken als auch häufig durch die Verwendung und Nachrüstung vorhandener Systeme mit sicheren Zeichenfolgenbehandlungsfunktionen behoben wird. Ein Beispiel für einen solchen Satz von Funktionen für die Windows-Shell beginnt mit StringCbCat.