Le risposte qui sono fantastiche. Ecco un altro modo per pensarci.
Tutti i software hanno bug. Un tasso di difetto standard è 2-10 difetti per mille righe di codice; alcuni di questi saranno difetti rilevanti per la sicurezza (di diversa gravità). I browser hanno milioni di linee di codice. Quindi, per quanto ne sappiamo, un tipico browser potrebbe avere centinaia o migliaia di difetti di sicurezza in agguato, in attesa di essere scoperti.
Supponiamo che nel browser ci siano 500 vulnerabilità di sicurezza sconosciute, che non sono state ancora scoperte. Diciamo che se inserisci 500 ore di lavoro (fuzzing, revisione del progetto, revisione del codice, ecc.), Scoprirai una vulnerabilità, una disegnata a caso dal pool di 500 vulnerabilità.
Quanto tempo ci vuole perché un utente malintenzionato trovi la sua prima vulnerabilità precedentemente sconosciuta? 500 ore = 3 mesi-persona.
Quanto tempo ci vuole perché un difensore trovi tutte le vulnerabilità, in modo che possano essere riparate? Almeno 500 * 500 = 250.000 ore = 125 anni-persona. In realtà, questa è una sottostima. A causa di un fenomeno matematico noto come problema del tagliando del tagliando, il numero effettivo è più di 500 * log (500) * 500 = 1,5 milioni di ore = 776 anni-persona. Questo non tiene nemmeno conto della quantità di lavoro per risolvere i problemi una volta trovati, per testare le correzioni, per spingerli fuori agli utenti - o la probabilità che alcune delle correzioni possano introdurre nuovi problemi. In pratica, la situazione difficile del difensore è persino peggiore di quanto questo possa suggerire.
Quindi puoi vedere che l'attaccante ha un enorme vantaggio sul difensore. Con un po 'di sforzo, l'attaccante può trovare una vulnerabilità (dal momento che l'attaccante non si cura di quello che trova, qualsiasi farà); mentre ci vuole un enorme sforzo per trovare e risolvere tutti i difensori. Poiché il difensore deve trovare tutte le vulnerabilità, mentre l'attaccante deve solo trovarne uno, l'attaccante ha un enorme vantaggio.
Questo è uno dei motivi per cui la gente dice "non puoi incastrare sulla sicurezza dopo il fatto" o "non puoi testare la sicurezza in". Se hai creato il software con pratiche di sicurezza inferiori, non è probabile che una quantità ragionevole di test dopo il fatto sia sufficiente.