vuoi
o PayPal
tutte le volte che vuoi
Altri tipi di Buffer Overflow
Return to system call
Quando lo stack adotta la misura di non eseguibilità dei dati per prevenire gli attacchi
di stack buffer overflow, gli attaccanti fanno uso del così detto “ Return to sytem-call ”,
dove l ‘ indirizzo di ritorno non viene posto pari ad un indirizzo del buffer, dove risiede
lo shellcode o lo scivolo di NOP, ma viene sostituito con l’indirizzo di codice già presente
nel sistema, quale ad esempi, le funzioni di librerie standard. Così facendo, l ‘ attaccante
fornirà i parametri da passare a tali funzioni, come ad esempio la funzione “ system ( ) “,
la quale potrebbe a sua volta aprire una shell ed eseguire qualsiasi comando presente
nel buffer sovrascritto.
Un ‘ ulteriore forma di attacco che sfrutta le chiamate a funzioni di sistema, prevede l’uso
di due funzioni, talvolta funzioni ben precise, usate per aggirare il vincolo di non
eseguibilità dello stack. A tal proposito, l ‘ indirizzo di ritorno colpito, come per il caso
precedente, punterà ad una funzione di sistema, quale potrebbe essere la strcpy ( ), e
l’indirizzo di segna posto della prima funzione chiamata, sarà pari all ’ indirizzo di una
seconda funzione, che in questo caso sarà lo shellcode. Quindi la prima funzione avrà
lo scopo di copiare lo shellcode in una porzione di memoria eseguibile, e quando questa
terminerà la propria esecuzione, ritornerà all ‘ indirizzo designato, che farà riferimento
allo stesso shellcode appena copiato. Così facendo, l ‘ attaccante è riuscito a far eseguire
il proprio codice malevolo, aggirando così la difesa della non eseguibilità dello stack.
Un ‘ altra forma di attacco che fa uso il buffer overflow, interessa l ‘ area dei dati globale.
Questo attacco risulta essere simile al heap buffer overflow, in quando l ‘ attaccante
cerca di modificare l ‘ indirizzo di un puntatore a funzione che potrebbe essere
dichiarato proprio in questa area.
Metodi di difesa contro i Buffer Overflow
I metodi di difesa adottabili per contrastare i buffer overflow si dividono in due categorie:
Misure di difesa a tempo di compilazione;
· Misure di difesa a tempo di esecuzione;
·
Difese a tempo di compilazione
Una prima barriera di difesa contro i buffer overflow, è la scelta di un linguaggio di
programmazione ad alto livello. Questi implementano una forte nozione dei tipi di
variabile e delle operazioni che su di essi e possibile eseguire, inoltre gli stessi
compilatori implementano del codice aggiuntivo che eseguire il controllo automatico
sugli intervalli, rimuovendo così la vulnerabilità di buffer overflow,
Un secondo metodo di difesa prevede l ‘ uso di scrittura sicura del codice. Usando
linguaggi di programmazione quali il C, i programmatori devono adottare delle tecniche
di programmazione al fine di mitigare la possibile comparsa di vulnerabilità sfruttabili
per eseguire un attacco di buffer overflow, cercando quindi di rendere più robusto la
gestione degli input esterni di dati, e il corretto accesso ai buffer usati per salvare tali
dati.
Anche l ‘ uso di librerie esterne sicure può aiutare la prevenzione di vulnerabilità
sfruttabili da un attaccante. Sono molte le funzioni delle librerie standard del C ritenute
non sicure, e un programmatore attento, deve informarsi su tali vulnerabilità, e sostituire
queste funzioni con funzioni sicure, implementando del codice di controllo proprio o
usando delle librerie esterne note per la loro sicurezza.