Hackerboard WikiHaboBlog

[HaBo]

 
(In)security allgemein Sicherheit, Anonymität im Netz. Schutz und Maßnahmen. Prävention und Konzepte. Sicherheitsarchitekturen allgemein und auf der Netzwerkebene.

Verständnisfrage Bufferoverflows

Diskussion: Verständnisfrage Bufferoverflows im Forum (In)security allgemein, in der Kategorie Security Area; Guten Tag zusammen, ich habe am Montag eine mündliche Prüfung in der Uni und dazu eine Frage zum Thema Buffer ...

Antwort
Alt 03.10.09, 17:09   #1 (permalink)
 
Registriert seit: 03.02.06
Rothkegel Leistung: Facit NTK
Rothkegel eine Nachricht über ICQ schicken
Likes: 0
Standard Verständnisfrage Bufferoverflows


Guten Tag zusammen,
ich habe am Montag eine mündliche Prüfung in der Uni und dazu eine Frage zum Thema Buffer Overflows.

Ich habe das System so verstanden:
Man hat einen Puffer mit Größe N.
Nun werden, durch mangelnde Abfrage o.ä., in den Puffer N+1 (oder mehr) Byte geschrieben.
Dadurch wird auch die Rücksprungadresse die bei N+1 liegt überschrieben, und zwar mit dem Code der in den Bytes ist, die größer als N sind.

Erstmal: Ist das so prinzipiell richtig? Also dass die Rücksprungadresse bei N+1 liegt?

Wie kann man dadurch jetzt Schadcode ausführen lassen?

Heißt das, dass man in den Puffer seinen Schadcode einpflanzt und bei N+1 die Rücksprungadresse so manipuliert, dass der Schadcode ausgeführt wird?

Oder wird von dem Programm aus jeder Code ab N+1 ausgeführt, weil hier ja die Rücksprungadresse liegen soll?

Gruß und schönes Wochende

Rothkegel ist offline   Mit Zitat antworten
Alt 03.10.09, 17:51   #2 (permalink)
 
Registriert seit: 20.11.08
prEs Leistung: Facit NTK
prEs eine Nachricht über AIM schicken prEs eine Nachricht über Yahoo! schicken
Likes: 0
Standard

Also das ganze mal am Beispiel eine stackbasierten overflows

Das ganze funktioniert zB beim Aufruf der Funktion strcpy.

folgendes Beispiel
Code:
 
#include <stdio.h>
#include <string.h>

void overflow(char *str){
   char toSmallBuffer[100];
   strcpy(toSmallBuffer, str);
}

int main(){
   char toBigBuffer[200];
   for(int i = 0; i < 200; ++i)
      toBigBuffer[i] = 'A'; // A == 0x41 ...
   overflow(toSmallBuffer, toBigBuffer);
   return 0;
}
wenn overflow() aufgerufen wird, dann werden die 200 bytes in einen Speicherraum geschrieben der nur groß genug ist um 100 bytes zu fassen.

beim Aufruf der Funktion overflow wird ein Stackframe erzeugt, der zuerst die Funktionsargumente dann durch call die Returnaddresse auf denn Stack pusht. Jetzt wird eine "Sicherung" des StackFramePointers angelegt.Dann werden noch 100 bytes für toSmallBuffer frei gemacht

der Stack sieht jetzt so aus:

# REST des Stack
# Das Funktionsargument , in diesem Fall ein Zeiger auf Char mit der Adresse von toBigBuffer
# Die Rücksprungadresse, welche den EIP auf eine Postion nach dem call von overflow verweist
# der Safed Frame Pointer welcher denn denn letzten Wert des FramePointers im letzten Stackframe enthält
# Hier ist nun ein Raum von 100 Bytes (toSmallBuffer)
# $ESP

Wenn nun die 200 bytes in den nur für 100 Byte großen Raum geschrieben werden, wird zuerst der SafedFramePointer dann die Rücksprungadresse überschrieben.

In unserem Fall würde die Rücksprung Adresse mit 4x ' A ' überschrieben werden, was den dem wert 0x41414141 entspricht.
Jetzt springt der EIP(instruction pointer) an die Adresse und versucht dort die Ausführung des Programms fortzusetzen, leider ist das keine richtige Adresse (meistens) und es kommt zum Segmentation fault.

Könnte man aber selbst bestimmen mit was die Rücksprung adresse überschrieben wird, zB wenn toBigBuffer vom Benutzer eingegeben wird, kann man auch den Programmfluss umlenken.
Dann kann man die ungefähre Position des Buffers im speicher ausrechnen, und hier seinen Shellcode einfügen.
Meistens bekommt man nicht die genaue Adresse deswegen füllt man denn ersten teil des Buffers mit einem NOP-Sled(No Operation == 0x90).
Der Buffer sieht jetzt so aus
[NOP | Shellcode | RET | ....]
Wenn der Wert der Return-Adresse jetzt auf einen Bereich im NOP Sled verweist, springt der Instruction Pointer in den NOPsled(es passiert nicht ..) bis er zum Shellcode kommt, welcher dann ausgeführt wird.
Shellcode ist ein Bytecode der Maschienencodeanweisungen enthält und heißt so weil er meist bezweckt eine Shell auszuführen.

Das ist alles nur grob grob zusammengefasst , aber dazu gibts wirklich genug Material im Netz.

mfg prEs
prEs ist offline   Mit Zitat antworten
   
HaBOT
 

Werbung ist gerade online    
Alt 03.10.09, 17:56   #3 (permalink)
Themenstarter
 
Registriert seit: 03.02.06
Rothkegel Leistung: Facit NTK
Rothkegel eine Nachricht über ICQ schicken
Likes: 0
Standard

Super, ich danke dir.
Jetzt hab ich das System verstanden und kann auch noch mit ein paar Fachbegriffen auftrumpfen :-)

Gruß
Rothkegel ist offline   Mit Zitat antworten
Alt 03.10.09, 17:59   #4 (permalink)
 
Registriert seit: 20.11.08
prEs Leistung: Facit NTK
prEs eine Nachricht über AIM schicken prEs eine Nachricht über Yahoo! schicken
Likes: 0
Standard

^^ Ging aber schnell

Freut mich auf jeden Fall wenn ich dir helfen konnte.

mfg prEs
prEs ist offline   Mit Zitat antworten
Alt 03.10.09, 18:24   #5 (permalink)
friday0D
Guest
 
Likes:
Standard RE: Verständnisfrage Bufferoverflows

Ich finde
http://www.w00w00.org/files/articles/heaptut.txt
sehr nützlich, da es verschiedene Wege zeigt. Vielleicht verbergen sich da auch noch ein paar Passagen mit den Du auftrumpfen kannst
  Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Security Area » (In)security allgemein » Verständnisfrage Bufferoverflows
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ein paar Fragen zu Bufferoverflows lone.wolf Code Kitchen 4 13.04.09 19:35
Verständnisfrage zu md5 crusaderv83 Cryptography & Encryption 16 29.08.07 22:31
Bufferoverflows über ein Netzwerk Hackse (In)security allgemein 11 27.06.07 23:22
FSB Verständnisfrage bei 8*400Mhz Takt Ben Q. Hardware Probleme 2 09.06.07 14:45
Verständnisfrage zum WLAN Hephaistos WLAN-Zone 15 13.12.05 14:29


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61