Voglio comprendere la differenza esatta tra questi due tipi di attacco. Da quello che ho letto:Differenza tra - buffer overflow e return in libc attack
Overflow del buffer: sovrascrive l'indirizzo di ret sullo stack per puntare a un'altra sezione del codice in cui è inserito il codice dannoso. Così efficacemente - qui abbiamo bisogno di modificare il codice sorgente del programma per eseguire effettivamente l'attacco.
Torna a Libc- Qui invece di modificare il codice sorgente, vengono utilizzate le chiamate di funzioni di tempo fornite dalla libreria C (per esempio aprono una shell). Qui i parametri utilizzati per la chiamata di funzione vengono anche passati nel buffer di sovrascrittura, finendo dopo la parte ret dello stack.
È la descrizione sopra riportata?
E un'altra domanda correlata: sarebbe possibile avere un attacco di overflow del buffer senza effettivamente modificare il codice sorgente del programma originale? Probabilmente se scriviamo un nuovo programma e permettiamo di modificare alcune sezioni di memoria (che è il nuovo indirizzo nella pila corrotta del programma originale). Inoltre, penso che questo potrebbe non essere possibile a causa della protezione della memoria offerta tra i processi nel kernel.
Puoi spiegare cosa intendi facendo - memoria eseguibile (o non eseguibile). E l'altro dubbio (parte della mia domanda originale) è - credo che un codice C non avrebbe accesso a tutte le parti della memoria principale. Quindi, come viene accertato dove viene inserito il codice assembly dannoso in memoria. Perché penso che per la maggior parte delle regioni di memoria - sarebbe solo contrassegnare un errore di segmentazione quando si torna lì. – Hari
Il nucleo del codice di exploit che è stato inserito in genere utilizzava ed exec() lo stile di famiglia. Ciò significa, alimentando i parametri appropriati, si potrebbe avere, ad esempio, generare una shell/bin/sh come utente root. Questo è * l'esecuzione * di un programma e non puoi più. Ci sono molte diverse misure di sicurezza, ma questo sarebbe descritto, ad esempio, in – gnometorule
http://en.wikipedia.org/wiki/NX_bit – gnometorule