Come impedire completamente i flussi di bufferover nel software di rete?

3

È possibile creare software che non è vulnerabile a nessun tipo di overflow del buffer? Ad esempio, un software che riceve pacchetti di dati e lo trasferisce alla destinazione dopo l'analisi dei dati.

    
posta pier 30.09.2012 - 09:03
fonte

1 risposta

7

Dipende da ciò che chiami overflow del buffer.

È possibile e facile fare software che non scrive mai al di fuori di un buffer. Tutto ciò che serve è un linguaggio di programmazione che controlla i limiti dell'array, ad es. Python, Java, C #, VB, Pascal, Ruby ... in effetti quasi tutte le lingue tranne C, C ++, Forth e Assembly. In un linguaggio che controlla i limiti dell'array, qualsiasi tentativo di traboccare un buffer attiva una condizione di errore (ad esempio viene generata un'eccezione) che impedisce la scrittura indesiderata della memoria.

È difficile creare software che mai tenta di scrivere fuori da un buffer. Il controllo dei limiti impedisce al buffer di traboccare veramente, ma il codice sta ancora cercando di fare qualcosa che non ha senso, e questo è un bug. Non permettere che la scrittura avvenga è buona, ma il thread / processo si blocca ancora (trasforma un exploit shell remoto in un Denial of Service, che è migliore , ma non buono ). La scrittura di codice privo di bug è teoricamente fattibile, ma non accade mai nella pratica (l'unica applicazione che è reputata veramente priva di bug è Metafont ).

Ci sono molte persone che lavorano sul concetto di dimostrare la correttezza del codice. In un senso abbastanza strong (vedi il problema di interruzione ), non è possibile fare un dimostratore di correttezza generico, ma si può spero che alcuni suggerimenti aggiunti nel codice sorgente possano aiutare un rilevatore automatico. Ciò significa utilizzare alcuni linguaggi specifici che consentono questo tipo di cose (ad esempio Esterel o Eiffel ). Per quanto ne so, un programmatore che pensa molto è ancora necessario nel processo. È stato detto che la NASA paga parecchio per avere software senza bug (ho sentito circa 20000 $ per linea di codice!) E tuttavia questo non è garantito (quando Apollo 11 è atterrato sulla Luna, il il computer di bordo si è schiantato e Armstrong ha dovuto eseguire l'atterraggio manualmente, in vero stile hollywoodiano.

    
risposta data 30.09.2012 - 15:44
fonte

Leggi altre domande sui tag