Se un avversario può identificare la capacità di un buffer, quali sarebbero le possibili conseguenze?
L'autore dell'attacco conosce già la capacità di tutti i buffer. Questa è la normale assunzione di base: i buffer nel software sono definiti dal software stesso, che esiste come codice sorgente, eseguibile, copie di backup e nelle teste dei progettisti. Lo stesso software potrebbe essere stato acquistato dall'attaccante e modificato in retromarcia; o il software potrebbe semplicemente essere opensource. Il software non può essere considerato segreto in alcun modo, perché ci sono troppi modi per gli estranei di apprendere quel software segreto.
Supponiamo che tu esegua del software sul tuo server, che si aspetta dai client connessi un nome utente e una password. Il software memorizzerà i dati ricevuti in buffer in memoria prima di elaborare tali informazioni. Supponiamo che i buffer siano adatti a ricevere 200 caratteri ciascuno. L'attaccante sa anche che (vedi sopra). Fin qui tutto bene.
Il problema non è che l'attaccante conosca la dimensione dei buffer; il problema è quando l'hacker fornisce più dati di quanti possano adattarsi a detti buffer, e il software, erroneamente, cerca di spingere i dati nel buffer anche se non ha senso. Questo è l'overflow del buffer: il software stupido e ingenuo è indotto a provare a fare qualcosa di assurdo, e i dati si riversano su altri elementi di dati nella RAM della macchina.
Alcuni linguaggi di programmazione, in effetti la maggior parte di essi, ad eccezione dei linguaggi preistorici come C, controllano sistematicamente gli accessi agli array e quindi rilevano il tentativo di overflow del buffer anche se lo sviluppatore non riusciva a includere i controlli necessari. Questo non risolve il problema (il problema è che il software vuole ancora fare cose che non hanno senso), ma almeno contiene il danno (il processo incriminato viene rapidamente ucciso, e questa è la sua portata).
Leggi altre domande sui tag attacks data-leakage known-vulnerabilities buffer-overflow threats