Pufferüberlauf und Schutzmaßnahmen (ASLR, Stack-Canary, DEP)
Kurz: Ein Pufferüberlauf entsteht, wenn ein Programm mehr Daten in einen Speicherbereich schreibt, als hineinpassen, und dabei Nachbardaten überschreibt. Moderne Systeme erschweren die Ausnutzung durch mehrere Schutzschichten.
Genauer: Typisch in Sprachen ohne automatische Grenzenprüfung wie C und C++. Überschrieben werden können Variablen oder die Rücksprungadresse auf dem Stack.
Im Detail
- Ursache: Funktionen wie
strcpyodergetsprüfen die Länge nicht. Sicherer sindstrncpy/snprintf, Längenprüfungen oder Sprachen mit Grenzenprüfung (Rust, Java, Python). - Stack-Canary: Ein geheimer Wert vor der Rücksprungadresse wird vor dem Verlassen der Funktion geprüft. Weicht er ab, bricht das Programm ab.
- DEP/NX: Datenbereiche sind nicht ausführbar, eingeschleuster Code läuft nicht.
- ASLR: Adressen von Stack, Heap und Bibliotheken ändern sich bei jedem Start, sodass feste Sprungziele fehlen.
- Weitere: Kontrollflussintegrität (CFI), Compilerwarnungen, Sanitizer (siehe Valgrind und Sanitizer), Fuzzing.
- Langfristig: Speichersichere Sprachen verhindern die ganze Klasse von Problemen.
Siehe auch: Exploit