Vulnerabilità
Una vulnerabilità è un errore o una dimenticanza in un sistema che ne compromette la sicurezza. Questa è derivata da un bug nel sistema: in altre parole se un bug crea un rischio di sicurezza allora è una vulnerabilità. Un exploit è un programma o un metodo per sfruttare una vulnerabilità, che ci permette di compromettere un sistema. Molte delle vulnerabilità scoperte in software di interesse comunie sono documentate nel common vulnerabilities and exposures (CVE) database.
A ogni vulnerabilità viene assegnato uno score di severità (CVSS score), che tiene conto di alcune proprietà della vulnerabilità, come quale sia il vettore di accesso per sfruttarla (per esempio locale o remoto), la complessità di accesso, se richiede autenticazione al sistema e l'impatto sul sistema. Inoltre tiene conto di altre metriche quali la sfruttabilità (ad esempio se l'attacco è solo teorico oppure esistono exploit online) e se è possibile rimediarla o mitigarla.
A prima vista potrebbe sembrare che si possa raggiungere la correttezza completa, eliminando tutti i bug nel nostro sistema, quindi eliminando ogni possibile vulnerabilità. Questo però non è così semplice, per diverse ragioni:
- all'aumentare della complessità, il sistema diventa sempre più prono a contenere bug. Ad esempio se abbiamo due componenti che in isolamento non presentano bug, possono comunque emergere errori nell'interazione tra di essi.
- Tipicamente nei sistemi informatici si tende a utilizzare dipendenze fornite e sviluppate da terze parti. Queste potrebbero contenere bug che spesso sono fuori dal controllo degli sviluppatori che utilizzano queste dipendenze.
- I sistemi informatici si affidano molto spesso a sistemi legacy datati, che non vengono aggiornati per ridurre costi o possibili down time del servizio.
Ciclo di vita di una vulnerabilità
Una vulnerabilità viene introdotta in un sistema ad esempio con una modifica al codice che contiene un bug. In un successivo momento, qualcuno scopre la vulnerabilità, in questo stadio dove nessun altro la conosce si chiama zero-day. Questo tipo di vulnerabilità è molto potente, in quanto né il vendor né gli utilizzatori del sistema ne sono a conoscenza. Molte agenzie di intelligence, governi oppure organizzazioni criminali comprano vulnerabilità per i loro scopi, che siano lanciare attacchi, oppure memorizzarle per utilizzi futuri.
Una volta che il vendor scopre la vulnerabilità intercorre un lasso di tempo per creare una patch che la elimina. Questo però non è scontato: il vendor potrebbe non essere interessato a pubblicare una patch, potrebbe essere andato out-of-business, o la vulnerabilità potrebbe essere semplicemente non eliminabile.
Dopo che una patch è stata pubblicata, i sistemi che non hanno ancora aggiornato sono comunque esposti ad attacchi. L'esposizione di un sistema termina quando è stata applicata la patch che risolve quella vulnerabilità. In questo periodo di tempo, la vulnerabilità è chiamata one-day (o anche n-day) in quanto è pubblicamente nota, ma i sistemi non hanno ancora applicato la patch.