EMZETT.
Login

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 strcpy oder gets prüfen die Länge nicht. Sicherer sind strncpy/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