Was ist ein Buffer Overflow? Eine praktische Anleitung
Erfahre, wie Buffer Overflows tatsächlich funktionieren – mit einem echten C-Beispiel, einem Stack-Diagramm und den Tools, um es selbst zu beobachten.
Ein Buffer Overflow tritt auf, wenn ein Programm mehr Daten in einen Speicherbereich fester Größe schreibt, als dieser aufnehmen kann. Die zusätzlichen Bytes überlaufen in den benachbarten Speicher, und je nachdem, was neben diesem Buffer liegt, kannst du Variablen beschädigen, das Programm zum Absturz bringen oder den Ausführungsfluss vollständig kapern. Es ist eine der ältesten Fehlerklassen in der Softwaresicherheit und taucht heute noch in CTFs, CVEs und Embedded-Firmware auf.
Das anfällige Muster
Hier ist ein klassisches Beispiel in C:
#include <string.h>
void greet(char *name) {
char buffer[64];
strcpy(buffer, name);
}
int main(int argc, char **argv) {
greet(argv[1]);
return 0;
}
strcpy kopiert jeden String, den du übergibst, in buffer, ohne Bereichsprüfung. Wenn argv[1] länger als 64 Bytes ist, läuft das Kopieren über das Ende des Arrays hinaus. Auf dem Stack sitzt buffer unterhalb anderer lokaler Variablen, gesicherter Register und schließlich der Rücksprungadresse, die der CPU sagt, wo sie nach Abschluss von greet() springen soll. Überschreibe diese Rücksprungadresse mit einer Adresse, die du kontrollierst, und du kontrollierst, was als Nächstes ausgeführt wird.
Warum das noch immer kompiliert und läuft
C und C++ führen keine automatische Bereichsprüfung auf rohen Arrays durch. Funktionen wie strcpy, gets, sprintf und strcat schreiben gerne über das Ende eines Buffers hinaus, weil sie sich nur um einen Null-Terminator oder eine Quellenlänge kümmern, nicht um die tatsächliche Größe des Ziels. Vergleich das mit strncpy oder snprintf, die ein explizites Größenargument nehmen und dort stoppen. Die Anfälligkeit ist nicht wirklich
Mit KI-Unterstützung geschrieben, von Michal Pilch (CISSP), Korra Studio, überprüft und veröffentlicht.
Das ist eine Notiz aus der Korra-Studio-Wissensdatenbank — die Plattform verbindet jedes Thema mit 1-zu-1-Mentoring.
Kostenlos startenarrow_forward