Questa domanda include due parti: perché abbiamo così tanti bug in primo luogo e perché non tutti i bug vengono rilevati e risolti con un tempo sufficiente.
Perché abbiamo bug del software
La scrittura del software richiede risorse, cioè tempo, conoscenza degli sviluppatori e denaro. C'è sempre una mancanza di tempo (per andare al mercato) e il numero e l'esperienza degli sviluppatori. Inoltre, più sviluppatori non significa semplicemente che il prodotto viene svolto più velocemente perché più sviluppatori significano più sovraccarico di comunicazione che aumenta la complessità.
E c'è una carenza di denaro, perché c'è la necessità che il prodotto abbia un ritorno positivo sull'investimento.
Quindi, per scrivere software più sicuro, in primo luogo dovresti mirare a una complessità minima che puoi gestire con il minor numero di sviluppatori possibile. Ma sfortunatamente le complesse esigenze dei clienti contraddicono spesso questo obiettivo. Oltre a questo, i requisiti cambiano con il tempo perché l'ambiente in cui il software viene utilizzato cambia.
In questo modo anche il software con un buon progetto iniziale sviluppato da sviluppatori esperti diventa più complesso nel tempo. E la maggior parte del software non è stata ancora sviluppata con un buon progetto iniziale da sviluppatori esperti, ma molti hanno appena iniziato come un prototipo che inizialmente ha funzionato abbastanza bene e poi è stato esteso ed esteso nel tempo spesso da diversi sviluppatori (con una comprensione limitata del progetto iniziale ).
E questa è solo una delle ragioni per cui hai dei bug. Altri motivi sono che il software viene utilizzato in un ambiente per il quale non è mai stato progettato, come il software progettato per un ambiente chiuso e protetto ora viene connesso a Internet aperto.
Perché non tutti i bug vengono trovati e risolti
Ricercatori e sviluppatori di sicurezza all'interno e all'esterno delle società di software hanno gli stessi limiti: c'è solo un numero limitato di tempo e un numero limitato di ricercatori, mentre c'è un sacco di software con potenziali problemi. Pertanto, i ricercatori di sicurezza si concentrano sul software che promette il più grande ritorno di investimento prima, cioè dove i bug ad alto impatto possono essere trovati nel minor tempo utilizzando la conoscenza specifica e l'esperienza del ricercatore.
Questo ovviamente lascia molti bug nascosti perché alcuni potrebbero aver bisogno di un'esperienza specifica, alcuni sembrano non valere la pena di essere rilevati o semplicemente perché non c'è tempo per esaminare l'area specifica del software. E anche se viene rilevato un errore, potrebbe non essere abbastanza critico investire risorse per risolverlo (alcune o solo così profondamente nella progettazione che è troppo costoso) o il produttore del software potrebbe non esistere più o il software è dichiarato fine vita quindi nessuno dovrebbe usarlo comunque (anche se molti lo fanno per vari motivi).
Non possiamo semplicemente ignorare gli errori non ancora trovati?
Trovare e sfruttare bug è simile all'estrazione di risorse naturali: ci sono ancora molte risorse non scoperte e ci sono luoghi in cui lo sfruttamento di queste risorse è troppo costoso. Ma nuove conoscenze, nuove tecniche o semplicemente un aumento del valore marcato di risorse specifiche rendono interessante sfruttare queste risorse o cercare altre risorse nascoste. In caso di bug questa potrebbe essere una nuova tecnica o uno strumento che rende facile trovare nuove classi di bug. In alternativa, il cambio di casi d'uso rende operativi vettori di attacco in precedenza impossibili, come la connessione di alcuni software a Internet. Oppure potrebbe esserci un obiettivo prezioso utilizzando un software specifico che lo rende interessante per cercare vulnerabilità in questo software e sfruttarlo.