Vai al contenuto

Heap overflow

Da Wikipedia, l'enciclopedia libera.
Versione del 5 feb 2007 alle 23:04 di Pigr8 (discussione | contributi) (Nuova pagina; testo: ''''Heap overflow''' è un altro nome per indicare un buffer overflow che avvenga nell'area dati dela heap. A differenza che nello stack, dove la memoria viene allocata...')
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Heap overflow è un altro nome per indicare un buffer overflow che avvenga nell'area dati dela heap. A differenza che nello stack, dove la memoria viene allocata staticamente, nella heap essa viene allocata in modo dinamico dalle applicazioni a run-time e tipicamente contiene dati dei programmi utente.

Gli heap overflow solitamente vengono usati dai cracker per perforare programmi scritti in modo non impeccabile. Lattcco avviene come segue: se una applicazione copia dei dati senza preventivamente controllare se trovano posto nella variabile di destinazione, il cracker può fornire al programma un insieme di dati troppo grande per essere gestito correttamente, andando così a sovrascrivere i metadati, cioè le informazioni di gestione della heap, prossimi alla destinazione dell'insieme di dati. In questo modo, l'attaccante può sovrascrivere una locazione arbitraria di memoria, con una piccola quantità di dati. Nella maggior parte degli ambienti, questo può fornire all'attaccante il controllo dell'esecuzione del programma.

La vulnerabilità Microsoft JPEG GDI+ MS04-028 è un esempio del pericolo che uno heap overflow può rappresentare per un utente informatico.

Rilevare e prevenire gli heap overflow

Le ultime versioni della GNU libc (la libreria c che comprende l'allocatore Lea) può rilevare gli heap overflow dopo che sono avvenuti. L'allocatore DieHard previene gli heap overflow basati su bachi della libreria e riduce la probabilità che uno heap overflow possa avere effetti su un programma in esecuzione. DieHard rende anche impossibile la sovrascrittura dei metadati della heap, memorizzando questi ultimi separatamente dalla heap.