Overflow minimal
Version vom 3. November 2025, 19:46 Uhr von Thomas.will (Diskussion | Beiträge) (→Buffer Overflow: Die unsichtbare Gefahr in 6 Bytes)
Buffer Overflow: Die unsichtbare Gefahr in 6 Bytes
- Autor
- Thomas Will
- Datum
- 2025-11-03
- Kurzbeschreibung
- :Ein winziger Programmierfehler kann verheerende Folgen haben. Das Beispielprogramm overflow_minimal.c zeigt, wie bereits 6 Bytes ausreichen, um eine kritische Schwachstelle zu erzeugen.
- :Zweck: Lehrbeispiel für Trainings und Code-Reviews. Nur in einer isolierten Labor-VM ausführen.
- Voraussetzungen
- :Debian/Ubuntu oder andere Linux-Distribution mit gcc, gdb und python3 installiert.
Das gefährliche Programm
- :Datei: overflow_minimal.c
- :Hinweis: Der Code ist absichtlich unsicher, um den Überlauf sichtbar zu machen. Nur zu Lehrzwecken in eigenen Laboren verwenden.
/* overflow_minimal.c - Buffer Overflow Demonstration */ #include <stdio.h> #include <string.h>
void func(char *input)
{
char buffer[6]; // Nur 6 Bytes Puffer!
strcpy(buffer, input); // Keine Längenprüfung!
printf("Du hast eingegeben: %s\n", buffer);
}
int main(int argc, char *argv[])
{
if (argc < 2) {
printf("Usage: %s <input>\n", argv[0]);
return 1;
}
func(argv[1]);
return 0;
}
Kompilieren
- :Stack-Protector deaktiviert, Debug-Symbole aktiv:
gcc -fno-stack-protector -z execstack -g -o overflow_minimal overflow_minimal.c
- :Analyse mit AddressSanitizer:
gcc -g -fsanitize=address -fno-omit-frame-pointer -o overflow_minimal_asan overflow_minimal.c
Testen
- :Normale Eingabe (≤ 6 Zeichen):
./overflow_minimal ABCDEF # Ausgabe: Du hast eingegeben: ABCDEF
- :Kurze Überschreitung (7 Zeichen):
./overflow_minimal ABCDEFG
- :Zuverlässiger Crash (lange Eingabe):
./overflow_minimal "$(python3 -c 'print(\"A\"*200)')"
Beobachtbares Verhalten
- :Kurze Überläufe treffen oft nur lokale Variablen; das Programm kann noch Ausgaben machen und später abstürzen.
- :Lange Eingaben überschreiben saved registers / return address und führen meist zu SIGSEGV.
- :Mit ASAN-Kompilation erhältst du eine klare Meldung („stack-buffer-overflow“) mit Backtrace.
Analyse mit GDB
- :Beispiel:
gdb --args ./overflow_minimal "$(python3 -c 'print(\"A\"*200)')" # in gdb: run # nach Crash: bt # ggf.: info registers, x/24x $rsp, disas
- :Trainer-Hinweis: Stack-Layout (saved RBP, return address, lokale Variablen) erklären.
Sicherer Fix (Kontrast)
void func_safe(char *input)
{
char buffer[6];
snprintf(buffer, sizeof buffer, "%s", input);
printf("Du hast eingegeben: %s\n", buffer);
}
Fazit
- :Schon minimale Programmierfehler können massive Sicherheits- oder Stabilitätsprobleme verursachen.
- :Sorgfalt bei Puffergrößen, Eingabevalidierung und das Nutzen moderner Schutzmechanismen sind Pflicht in der sicheren Softwareentwicklung.