Buffer Overrun

Hallo
Über den MSBlast gelesen:
Dieser erzeugt einen Buffer Overrun und führt dadurch Programm-Code aus.

Meine Fragen:
Was bedeutet ein Buffer Overrun?
Wie kommt es dass dadurch Code ausgeführt wird?
Und was ist das für ein Code Java, Assembler oder was?

Viele Grüsse

Ratz

Meine Fragen:
Was bedeutet ein Buffer Overrun?

Das bei irgendeiner Eingabe mehr Daten als erwartet geschickt werden. Der resevierte Puffer ist dann zu klein und - falls die Länge nicht überprüft wird - die Daten werden über sein Ende hinausgeschrieben.

Wie kommt es dass dadurch Code ausgeführt wird?

Wenn im Speicher unmittelbar nach dem Puffer ein Bereich mit auszuführenden Befehlen steht, und dieser überschrieben wird, kann es passieren, daß stattdessen bei einem Sprung dorthin der durch der Buffer-Overflow eingeschleuste Code ausgeführt wird.

Und was ist das für ein Code Java, Assembler oder was?

Wird wohl Maschinensprache sein.

LG
Stuffi

Hallo

Moin,

Über den MSBlast gelesen:
Dieser erzeugt einen Buffer Overrun und führt dadurch
Programm-Code aus.

Ich kenn nur buffer overflows. Wird wohl das gleiche sein.

Meine Fragen:
Was bedeutet ein Buffer Overrun?

Das Ueberschreiben von Speicherbereichen, meist ungewollt, im boesen Fall beabsichtigt.

Wie kommt es dass dadurch Code ausgeführt wird?

Ganz einfach :smile:. Im Speicher gibt es etwas, dass nennt sich Stack (Stapel). Klingt komisch, ist aber so. Wenn ein Programm ablaeuft und in eine Unterfunktion springt muss sich der Rechner ja irgendwie merken, woher die Funktion gerufen wird, weil er ja irgendwann wieder zurueck springen will, um mit dem eigentlichen Programm weiterzumachen. Logisch. Er schreibt die Adresse (und einigen anderen Krempel) also auf den Stack, so aehnlich, wie ihr auf euren Notizblock, und springt in die Funktion. Ausserdem wird auf diesem Stack auch Platz fuer Daten angelegt, die nur die Funktion selbst braucht, eben auch wie im Notizbuch. Gut.

Nun hat jemand eine kaputte Funktion programmiert. Das ist der Fred Foobar. Hallo Fred. Die Funktion soll nach dem Namen des Nutzers fragen. Den Namen notiert sich Fred im Datenbereich der Funktion und macht damit noch Sachen, die uns jetzt mal nicht interessieren. Und da der Fred nur Leute kennt, deren Namen weniger als 10 Buchstaben haben, laesst er auf dem Stack auch nur Platz fuer 10 reservieren.

Sein schnippischer Kumpel, das ist der J. Random Hacker (Hallo J.) weiss das. Er startet das Programm und laesst die Funktion von Fred aufrufen. Jetzt gibt der Spitzbube aber anstatt seines Namens ‚J. Random0x&d§2[$´#,s"Xii-‘ ein. Freds Funktion schreibt ‚J. Random0‘ auf ihren persoenlichen Platz im Notizbuch. Dann macht die Funktion den vorgesehenen Krempel und springt schliesslich den Code von J. Random an… halt, wieso das denn?

Okay, das ist der Herr MHz. Hallo, Herr MHz. Der Herr MHz hat frueher mal hier gearbeitet (sein juengerer Bruder GHz hat ihn abgeloest) und wird fuer uns mal die Maschine langsamer laufen lassen, damit wir sehen, was mit dem ‚x&d§2[$´#,s"Xii-‘ von J. passiert. Normalerweise geht das nicht, aber fuer uns macht er eine Ausnahme.

Dem Fred seine Funktion schaufelt nicht nur die ersten 10 Buchstaben auf den Stack, schliesslich ist J. Random Hackers eingegebener Name da noch nicht zu Ende. Sie macht munter weiter bis zu einer Markierung nach dem ‚x&d§2[$´#,s"Xii-‘. Koennt ihr euch noch an den notierten Ruecksprungpunkt erinnern? Der steht da auch. Da der Fred aber so bloed war, zu wenig Platz auf dem Notizbuch vorzusehen, radiert seine Funktion die Notiz der Ruecksprungadresse weg und schreibt den Krempel von J. dahin. Klar?

J. ist nun aber ein ausgesprochen cleveres Kerlchen. In dem Kauderwelsch steht naemlich die Adresse seiner eigenen Funktion, die er vorher irgendwie in den Speicher gelegt hat. Und wie man sowas liest und wie man seinen eigenen Code im Speicher ablegt und vor allem wiederfindet, das zeigen wir euch in der naechsten Folge der lustigen Hack- und Crackgeschichten.

Und was ist das für ein Code Java, Assembler oder was?

Maschinencode. Was anderes kann der Rechner sowieso nicht.

Viele Grüsse

Ratz

In welcher Form hab ich gerade das Niveau des Bretts beinfluss?
Gruss vom Zentrum.

In welcher Form hab ich gerade das Niveau des Bretts
beinfluss?

Wie immer.

Sebastian

Hallo!

Über den MSBlast gelesen:
Dieser erzeugt einen Buffer Overrun und führt dadurch
Programm-Code aus.

Meine Fragen:
Was bedeutet ein Buffer Overrun?
Wie kommt es dass dadurch Code ausgeführt wird?
Und was ist das für ein Code Java, Assembler oder was?

Schau Dir zu diesem Thema mal folgenden Artikel an:

c’t 23/2001, S. 216: Sicherheit: Buffer-Overflows
http://www.heise.de/ct/01/23/216/

CU
Markus