stack based overflow basato su heap [chiuso]

-2

Perché è più difficile eseguire un overflow del buffer basato su heap rispetto a uno stack? (per quanto riguarda l'architettura x86)

Ho pensato che potrebbe essere il fatto che gli heap stiano allocando la memoria in modo dinamico. Ma c'è più di questo?

    
posta radscheit 09.02.2016 - 21:55
fonte

1 risposta

5

Condividono la stessa memoria fisica, tuttavia il frame dello stack contiene gli indirizzi di ritorno.

Gli indirizzi di ritorno memorizzano l'indirizzo del codice nella funzione / procedura / metodo di chiamata, in modo che la funzione / procedura / metodo chiamata sappia dove tornare quando viene eseguita. Meccanicamente, l'istruzione "return" invia istruzioni al processore per caricare l'indirizzo di ritorno dallo stack frame, quindi scaricare lo stack frame e passare a quell'indirizzo di ritorno caricato. (L'operazione di chiamata fa effettivamente l'inverso: cattura l'indirizzo corrente come indirizzo di ritorno e lo inserisce nello stack insieme a un nuovo frame.)

Un problema di sicurezza problematico è il dirottamento del contatore del programma del processore, che indica quali istruzioni verranno eseguite successivamente!

Se si sovrascrive l'indirizzo di ritorno nello stack frame, è possibile rendere il ramo di codice "return" a una posizione di propria scelta invece di dove dovrebbe andare (torna al chiamante).

    
risposta data 09.02.2016 - 22:59
fonte

Leggi altre domande sui tag