Evitare sovraccarichi del buffer
Un sovraccarico del buffer è una delle fonti più comuni di rischio per la sicurezza. Un sovraccarico del buffer è essenzialmente causato dal trattamento dell'input esterno non controllato come dati attendibili. L'azione di copia di questi dati, usando operazioni come CopyMemory, strcat, strcpyo wcscpy, può creare risultati imprevisti, che consente il danneggiamento del sistema. Nel migliore dei casi, l'applicazione interromperà con un dump principale, un errore di segmentazione o una violazione di accesso. Nel peggiore dei casi, un utente malintenzionato può sfruttare il sovraccarico del buffer introducendo ed eseguendo altro codice dannoso nel processo. La copia di dati di input non controllati in un buffer basato su stack è la causa più comune di errori sfruttabili.
I sovraccarichi del buffer possono verificarsi in diversi modi. L'elenco seguente fornisce una breve introduzione ad alcuni tipi di situazioni di sovraccarico del buffer e offre alcune idee e risorse che consentono di evitare di creare nuovi rischi e mitigare quelli esistenti:
-
sovraccarico del buffer statico
-
Un sovraccarico del buffer statico si verifica quando un buffer, dichiarato nello stack, viene scritto in con più dati di quelli allocati per contenere. Le versioni meno evidenti di questo errore si verificano quando i dati di input utente non verificati vengono copiati direttamente in una variabile statica, causando potenziali danneggiamenti dello stack.
-
sovraccarico dell'heap
-
Gli sovraccarichi dell'heap, ad esempio i sovraccarichi del buffer statico, possono causare il danneggiamento della memoria e dello stack. Poiché gli overrun dell'heap si verificano nella memoria heap anziché nello stack, alcune persone considerano che siano meno in grado di causare gravi problemi; tuttavia, gli overrun dell'heap richiedono una reale attenzione nella programmazione e possono consentire rischi per il sistema quanto gli overrun del buffer statico.
-
errori di indicizzazione della matrice
-
Gli errori di indicizzazione delle matrici sono anche un'origine di sovraccarichi di memoria. Il controllo accurato dei limiti e la gestione degli indici consentono di evitare questo tipo di sovraccarico della memoria.
La prevenzione dei sovraccarichi del buffer riguarda principalmente la scrittura di codice valido. Verificare sempre tutti i tuoi input e gestire gli errori in modo elegante quando necessario. Per altre informazioni sulla scrittura di codice sicuro, vedere le risorse seguenti:
- Maguire, Steve [1993], Scrivere Codice Solido, ISBN 1-55615-551-4, Microsoft Press, Redmond, Washington.
- Howard, Michael e LeBlanc, David [2003], Writing Secure Code, 2d ed., ISBN 0-7356-1722-8, Microsoft Press, Redmond, Washington.
Nota
Queste risorse potrebbero non essere disponibili in alcune lingue e paesi.
La gestione sicura delle stringhe è un problema di lunga data che continua a essere risolto seguendo le procedure di programmazione consigliate e spesso usando e adattando sistemi esistenti con funzioni di gestione delle stringhe sicure. Un esempio di tale set di funzioni per la shell di Windows inizia con StringCbCat.