Moin,
Immer wieder lese ich von Buffer overflows, den gefährlichen Sicherheitslücken. In Windows, Browsern, Winamp, SQL, cgi-scripte usw. Das ein Aufnehmen von Daten bis zum Abwinken den ein oder anderen Computer über die 35 Stunden Woche verhelfen verstehe ich ja. Wie kann aber jetzt fremder übergebener Code ausgeführt werden?
Chris
*Der auch grad an Gehirn overflow leidet*
Hi,
das funktioniert ungefähr so:
Ein Programm wartet auf eine Eingabe (Anfrage) aus dem Netz (zB Webserver). Der Programmierer rechnet damit, daß diesen nicht länger als x Bytes sein wird und reserviert einen entsprechenden Speicherbereich als Puffer. Weil er aber schlampig programmiert, überprüft er die Länge der eingehenden Anfrage nicht. Also werden eintreffende Daten munter in den Puffer geschrieben, bis irgendein Code folgt, der dem Programm mitteilt, daß das Ende erreicht ist. Die Größe des Puffers wird dabei nicht beachtet, sondern es wird in den darauffolgenden Speicherstellen weitergeschrieben wenn die Anfrage nicht in den Puffer passt.
Nun sind in den üblichen Rechnerarchitekturen Programm- und Datenspeicher nicht getrennt - d.h. es kann passieren, daß auch Datenbereiche überschrieben werden.
Wenn nun irgendwo ein Sprungbefehl auf die betreffende Stelle des Programms kommt, wird der dort stehende Code ausgeführt - ja, genau der der vorher durch den Pufferüberlauf reingeschrieben wurde.
Für das Betriebssystem sieht es allerdings so aus, als ob einfach das betreffende Programm (Webserver) laufen würde.
Das heißt wiederum, daß man so beliebigen Code auf der Maschine ausführen kann und zwar mit denselben Rechten, die das angegriffene Programm besitzt. Läuft dieses zB unter root (Superuser) besitzt der aufgerufgene Code ebenfalls Superuser - Privillegien und damit auch der, der ihn böswilligerweise geschickt hat.
Das ist unter anderem der Grund, warum man nicht mit Administrator - Rechten ins Netz gehen soll und warum Window 9x per se unsichere Systeme sind - dort gibt es nämlich keine Benutzerverwaltung - alle sind root.
LG
Stuffi
Ooops!
Natürlich meinte ich, daß Programm bereiche überschrieben werden können…
LG
Stuffi
Moin Chris!
Immer wieder lese ich von Buffer overflows, den gefährlichen
Sicherheitslücken. In Windows, Browsern, Winamp, SQL,
cgi-scripte usw. Das ein Aufnehmen von Daten bis zum Abwinken
den ein oder anderen Computer über die 35 Stunden Woche
verhelfen verstehe ich ja. Wie kann aber jetzt fremder
übergebener Code ausgeführt werden?
Hier ein ausführlicher Artikel aus der c’t zum Thema „Buffer Overflow Exploits“:
http://www.heise.de/ct/01/23/216/
CU
Markus
Hier ein ausführlicher Artikel aus der c’t zum Thema „Buffer
Overflow Exploits“:
http://www.heise.de/ct/01/23/216/
CU
Markus
Hallo Markus,
genau sowas habe ich gesucht. sogar mit Anleitung
Tschüs Chris
das funktioniert ungefähr so:
Ein Programm wartet auf eine Eingabe (Anfrage) aus dem Netz
(zB Webserver). Der Programmierer rechnet damit, daß diesen
nicht länger als x Bytes sein wird und reserviert einen
entsprechenden Speicherbereich als Puffer. Weil er aber
schlampig programmiert, überprüft er die Länge der eingehenden
Anfrage nicht. Also werden eintreffende Daten munter in den
Puffer geschrieben, bis irgendein Code folgt, der dem Programm
mitteilt, daß das Ende erreicht ist. Die Größe des Puffers
wird dabei nicht beachtet, sondern es wird in den
darauffolgenden Speicherstellen weitergeschrieben wenn die
Anfrage nicht in den Puffer passt.
das nennt sich heap overflow und ist in dieser form eher selten, warum, siehe unten…
Nun sind in den üblichen Rechnerarchitekturen Programm- und
Datenspeicher nicht getrennt - d.h. es kann passieren, daß
auch Datenbereiche überschrieben werden.
falsch, code segments sind gemeinhin nicht so einfach zu ueberschreiben…
daher sind die von dir beschriebenen heap overflows auch eher selten mit dem ausfuehren von code verbunden, es gibt andere anwendungen.
was gemeinhin auftritt, ist ein sog. stack overflow, dh. der puffer wird beim funktionsaufruf auf dem stack alloziert.
wenn dann eine ueberlange eingabe durch eine unsichere (nicht laengenbeschraenkte) libraryfunktion dorthineinkopiert wird, wird irgendwann die auch auf dem stack gelagerte ruecksprungaddresse ueberschrieben, was normalerweise zu einem veritablen segmentation fault fuehrt - ausser der angreifer wusste was er tat, dann zeigt sie auf ein stueck code weiter vorn in besagter ueberlanger eingabe, was zwar im kontext und mit allen privilegien des angegriffenen programms laeuft, aber meist nicht ganz so harmlos ist…
hierzu auch die folgende standardliteratur:
aleph1; smashing the stack for fun & profit; 1996; phrack magazine #49 file 14
http://www.phrack.com/show.php?p=49&a=14
conover, matt; w00w00 on heap overflows; 1999; w00w00 security development
http://www.w00w00.org/files/articles/heaptut.txt
joachim
1 „Gefällt mir“