Buffer overflow: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Aggiunta sotto-sezione "Difese a livello di compilatore" |
Bozza "Difese a livello di SO" |
||
Riga 105:
Un'altra estensione del compilatore ''gcc'', "StackGuard", consente sia la rivelazione di eventuali stack buffer overflow sia la prevenzione degli stessi: la prima difesa tuttavia risulta molto più efficiente e portabile della seconda, in generale meno affidabile e sicura. La rivelazione si basa sulla scrittura nello stack frame di una ''canary'' ''word'' fra le variabili locali e il ''return address'' memorizzato e sull'assunto che non sia possibile sovrascrivere il RA senza alterare la ''canary word'', che prende quindi questo nome proprio in analogia all'uso dei [[Canarino domestico|canarini nelle miniere di carbone]] come primo sistema di allarme. Prima di restituire il controllo all'istruzione puntata dal RA, si controlla se la ''canary word'' ha subito alterazioni: eventuali modifiche vengono considerate come un potenziale tentativo di alterare il controllo dell'esecuzione del programma e quindi di attacco. La tecnica adottata da StackGuard è efficace solo se l'attaccante non è in grado di prevedere la ''canary word'', in questo caso sarebbe infatti in grado di progettare l'overflow in modo da sovrascrivere la ''canary word'' con il suo valore originale: StackGuard a questo scopo esegue la randomizzazione del ''canary''. <ref>{{Cita web|url=https://www.usenix.org/legacy/publications/library/proceedings/sec98/full_papers/cowan/cowan.pdf|titolo=StackGuard: Automatic Adaptive Detection and Prevention of Buffer-Overflow Attacks}}</ref>
=== Difese a livello di sistema operativo ===
Molti sistemi operativi hanno tentato di rispondere al problema del buffer overflow imponendo delle restrizioni sull'uso della memoria e rendendo quindi più complessi gli attacchi.
Un meccanismo di difesa a livello di sistema operativo molto diffuso si basa sul rendere certe pagine di memoria, come quelle contenenti ''stack'' e ''heap'', non eseguibili: ogni tentativo di trasferire il controllo dell'esecuzione a codice all'interno di queste aree solleva quindi un'eccezione, impedendone l'esecuzione. Ciò può essere realizzato sfruttando certe funzionalità hardware dei processori note come "[[NX-bit|NX]]" ("No eXecute") bit o "XD" ("eXecute Disabled") bit, oppure tramite tecniche software che emulano questo funzionamento.
Alcuni sistemi operativi basati su UNIX come [[OpenBSD]] e [[MacOS|OS X]] supportano direttamente lo ''space executable protection'', ma sono disponibili anche package opzionali per altri SO come:
* PaX
* Exec Shield
* OpenWall
== Note ==
|