Condividi tramite


Evitare l'overrun del buffer

Un overrun del buffer è una delle origini più comuni del rischio di sicurezza. Un overrun del buffer è essenzialmente causato dal trattamento non controllato, l'input esterno come dati attendibili. L'atto di copiare questi dati, usando operazioni come CopyMemory, strcat, strcpy o wcscpy, può creare risultati imprevisti, che consente il danneggiamento del sistema. Nel migliore dei casi, l'applicazione interromperà un dump core, 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 non controllati, i dati di input in un buffer basato su stack sono la causa più comune degli errori sfruttabili.

Gli overrun del buffer possono verificarsi in diversi modi. L'elenco seguente fornisce una breve introduzione a alcuni tipi di situazioni di overrun del buffer e offre alcune idee e risorse per evitare di creare nuovi rischi e attenuare quelli esistenti:

Overrun del buffer statico

Un sovraccarico del buffer statico si verifica quando un buffer, dichiarato nello stack, viene scritto in con più dati di quanto sia stato allocato 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.

Heap overruns

L'overrun dell'heap, ad esempio l'overrun del buffer statico, può causare il danneggiamento della memoria e dello stack. Poiché gli heap overrun si verificano nella memoria heap anziché nello stack, alcune persone considerano che siano meno in grado di causare problemi gravi; tuttavia, l'overrun dell'heap richiede un'assistenza di programmazione reale e può consentire i rischi di sistema come overrun statici del buffer.

Errori di indicizzazione della matrice

Gli errori di indicizzazione della matrice sono anche un'origine di overrun di memoria. Il controllo attento dei limiti e la gestione degli indici consentono di evitare l'overrun di questo tipo di memoria.

La prevenzione dell'overrun del buffer riguarda principalmente la scrittura di codice valido. Convalidare sempre tutti gli input e non riuscire correttamente quando necessario. Per altre informazioni sulla scrittura di codice sicuro, vedere le risorse seguenti:

  • Maguire, Steve [1993], scrittura di solid code, ISBN 1-55615-551-4, Microsoft Press, Redmond, Washington.
  • Howard, Michael e LeBlanc, David [2003], Scrittura di codice sicuro, 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 delle stringhe sicure è un problema di lunga durata che continua a essere risolto seguendo le procedure di programmazione consigliate e spesso usando e aggiornando i sistemi esistenti con funzioni di gestione delle stringhe sicure e sicure. Un esempio di tale set di funzioni per la shell di Windows inizia con StringCbCat.