Overflow minimal

Aus Xinux Wiki
Version vom 3. November 2025, 19:46 Uhr von Thomas.will (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „= Buffer Overflow: Die unsichtbare Gefahr in 6 Bytes = ;Autor: Thomas Schmidt ;Datum: 2025-11-03 *Kurzbeschreibung * :Ein winziger Programmierfehler kann verh…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Buffer Overflow: Die unsichtbare Gefahr in 6 Bytes

Autor
Thomas Schmidt
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.