Fondamenti di sicurezza
La triade CIA: riservatezza, integrità e disponibilità
La triade CIA spiegata: riservatezza, integrità e disponibilità, con esempi quotidiani, verifiche con hash e firme e dieci incidenti da classificare.
Distingui vulnerabilità, minaccia, rischio ed exploit, guarda come CWE e CVE danno un nome alle falle e capisci perché anche le falle irraggiungibili possono contare.
Gran parte della confusione in sicurezza nasce da quattro parole che si usano come se volessero dire la stessa cosa: vulnerabilità, minaccia, rischio ed exploit. Una notizia dice "è stata sfruttata una vulnerabilità critica" e chi legge ci vede un solo fatto. In pratica sono quattro cose diverse. Tenerle separate ti dice cosa correggere per primo, cosa tenere d'occhio e cosa può aspettare.
Questo articolo ti dà definizioni operative, mostra come le quattro si collegano in un'unica catena e poi spiega due sistemi di denominazione che incontrerai ovunque. CWE dà un nome ai tipi di debolezza. CVE dà un nome a falle specifiche in prodotti specifici. Le ultime sezioni trattano due affermazioni che sorprendono chi inizia: una vulnerabilità senza un percorso per raggiungerla di solito ha un rischio basso, e un'impostazione sbagliata conta come vulnerabilità anche se nessuno ha scritto un bug.
Per questo articolo non ti serve un lab. La parte pratica è un esercizio su carta. Se leggi prima l'articolo sulla triade CIA, il passaggio sull'impatto ti sembrerà familiare.
Parti dalla definizione ufficiale. Il glossario del NIST Computer Security Resource Center definisce una vulnerabilità come una debolezza in un sistema informativo, nelle sue procedure di sicurezza, nei suoi controlli interni o nella sua implementazione, che potrebbe essere sfruttata o attivata da una fonte di minaccia. La parola che conta è "weakness", debolezza. Una vulnerabilità è una proprietà di un sistema. Esiste che qualcuno la stia cercando o no.
Una vulnerabilità è una debolezza che potrebbe essere usata per causare danni. Alcuni esempi:
Una vulnerabilità non ha bisogno di un attaccante per esistere. Deve esistere nel sistema, ed è la prima cosa da controllare quando valuti qualcosa.
Una minaccia è una circostanza, un attore o un evento che potrebbe approfittare di una debolezza e causare danni. Il NIST usa il termine "threat source" per il soggetto o l'evento: un gruppo criminale, un insider malintenzionato, un'alluvione o un amministratore che sbaglia un file di configurazione.
La differenza rispetto a una vulnerabilità è la direzione. Una vulnerabilità descrive ciò su cui si può agire. Una minaccia descrive ciò che può agire. Una minaccia è potenziale. Per contare non serve che sia attiva contro di te in questo momento.
Il rischio combina quanto è probabile un evento dannoso con quanto sarebbe grave. NIST SP 800-30 Revision 1, la guida alla valutazione del rischio, tratta il rischio come funzione di probabilità e impatto. In parole semplici, il rischio è quanto è probabile che qualcosa accada, rapportato al danno che causerebbe. È un giudizio, non un calcolo preciso.
Molti team disegnano una matrice con la probabilità su un asse e l'impatto sull'altro. La matrice aiuta a ragionare. Non è una misura. Due finding con lo stesso punteggio di gravità possono avere un rischio molto diverso, perché il punteggio descrive la falla e il rischio descrive il tuo ambiente.
Un exploit è un metodo, un pezzo di codice o una sequenza di passi che usa una vulnerabilità per produrre un risultato non previsto da chi ha progettato il sistema. La parola può indicare la tecnica stessa o lo strumento che la esegue.
Due relazioni vanno ricordate. Primo, un exploit ha bisogno di una vulnerabilità contro cui funzionare. Secondo, una vulnerabilità non ha bisogno di un exploit pubblico per esistere. Molte vulnerabilità sono note e non hanno mai un exploit pubblico. Altre si attivano con un semplice input che chiunque può provare.
Queste quattro parole descrivono una sola catena. Eccola in ordine, con un generico modulo di login come esempio:
Puoi spezzare la catena in più punti. Un limite di richieste toglie la debolezza. L'autenticazione a più fattori rende molto meno utile un tentativo riuscito. Limitare il modulo a una rete privata riduce la portata della minaccia. Ogni controllo spezza un anello diverso, quindi devi sapere su quale anello stai lavorando.
Vedrai di continuo due identificatori nelle notizie di sicurezza, nei bollettini e nei report degli scanner. Rispondono a domande diverse, e confonderli è uno degli errori più comuni di chi inizia.
Il sito CWE descrive CWE come un elenco, sviluppato dalla comunità, di debolezze comuni del software e dell'hardware. Definisce una debolezza come una condizione in un componente software, firmware, hardware o di servizio che, in certe condizioni, potrebbe contribuire all'introduzione di vulnerabilità. CWE risponde alla domanda: che tipo di errore è questo?
Ogni voce CWE ha un numero. La voce per la SQL injection è CWE-89, che riguarda la neutralizzazione impropria di elementi speciali in un comando SQL. La voce per il cross-site scripting è CWE-79. Queste voci non nominano alcun prodotto. Descrivono uno schema che compare in molti prodotti e aiutano chi sviluppa a riconoscerlo prima del rilascio.
CVE è un elenco di vulnerabilità di sicurezza informatica rese pubbliche. Ogni record descrive una falla in un prodotto, di solito con le versioni interessate e i link ai bollettini di sicurezza. L'identificatore ha questa forma:
CVE-YEAR-NUMBERUn esempio reale è CVE-2021-44228, la falla in Apache Log4j 2 nota come Log4Shell. L'ID ti dice di quale falla si tratta. Il record ti dice quali prodotti e versioni sono interessati e dove trovare la correzione del produttore.
CVE risponde a un'altra domanda: quale falla specifica, in quale prodotto, è questa? Un singolo tipo CWE può avere molti record CVE in prodotti diversi, perché lo stesso tipo di errore viene commesso più e più volte.
Quando leggi un record CVE, cerca il tipo di debolezza a cui è associato. Un record associato a CWE-89 ti dice che la falla è una SQL injection, anche se il prodotto non ti è familiare. Così puoi applicare a un caso nuovo quello che sai della categoria. Vale anche il contrario: se un prodotto ha precedenti con un certo tipo di debolezza, sai cosa controllare per primo.
Immagina un servizio con una falla nota, in ascolto solo sull'indirizzo di loopback del tuo portatile. Nessun'altra macchina può connettersi. È una vulnerabilità? Sì. Il rischio è alto? Di solito no, perché la probabilità è molto bassa. Nessuno fuori dal tuo portatile può raggiungere la falla, quindi nessuna fonte di minaccia può usarla attraverso la rete.
Qui si vede all'opera l'idea di rischio. Una probabilità più bassa dà un rischio più basso, anche quando l'impatto sarebbe grave. La gravità da sola non decide cosa correggere per primo.
Attenzione, però. "Nessun percorso raggiungibile oggi" è un'affermazione su un singolo momento. Alcune cose cambiano il quadro:
Quindi rischio basso non significa rischio zero, e non significa ignorare la falla. Di solito la correzione può venire dopo i finding con percorsi raggiungibili, e dovresti ricontrollare la raggiungibilità ogni volta che la rete cambia.
Molti principianti danno per scontato che una vulnerabilità debba essere un bug nel codice. È una visione troppo stretta. La definizione del glossario NIST include la "implementation" e gli "internal controls" del sistema, e CWE copre anche le debolezze di configurazione. Un'impostazione che espone dati o accessi è una debolezza, anche se nessuna riga di codice è sbagliata.
Un esempio semplice. Questo blocco nginx attiva il directory listing per un percorso:
location /backup/ {
autoindex on;
}Nessun codice è rotto. Nginx fa esattamente quello che dice questa riga. Ma chiunque possa raggiungere il percorso vede un elenco dei file in quella cartella, e alcuni potrebbero essere backup mai destinati al pubblico. La debolezza sta nella configurazione, e qualcuno può usarla per sapere cose che non dovrebbe sapere.
Altre configurazioni sbagliate comuni seguono la stessa logica:
Controlla i tuoi sistemi in questo modo. Per ogni impostazione che regola chi può vedere o cambiare qualcosa, chiediti se uno sconosciuto potrebbe usarla. Se sì, hai una vulnerabilità, che l'abbia scritta uno sviluppatore o l'abbia scelta un amministratore.
Non serve un lab. Prendi un foglio o un file di testo e lavora su cinque casi. Per ciascuno scrivi quattro risposte brevi: la debolezza, la probabile fonte di minaccia, se serve un exploit per usarla e se è raggiungibile da internet o solo dall'interno di una rete.
Per ogni caso, scrivi una frase che inizia con "Il rischio è" e ne dà il motivo. Confronta le risposte con il ragionamento sopra. I casi 1 e 4 hanno le frasi sul rischio più utili, perché raggiungibilità e secondo fattore cambiano la probabilità del danno. Il caso 5 è una configurazione sbagliata che resta una vulnerabilità, anche se oggi nel bucket non c'è niente, perché i dati possono arrivare domani.
Conserva le risposte. Quando più avanti leggerai un vero bollettino di sicurezza, potrai applicare le stesse quattro domande.
Leggi la voce del glossario NIST sulla vulnerabilità e le sezioni sulla valutazione del rischio di NIST SP 800-30 Revision 1. Poi apri un record CVE che ti interessa e trova tre cose: il prodotto e le versioni interessati, la descrizione della falla e l'associazione CWE, se presente. Questa abitudine trasforma un elenco di identificatori in un quadro chiaro, ed è la competenza di base per leggere i bollettini di sicurezza.
Quando le quattro parole ti sono chiare, la domanda successiva è come una debolezza possa essere raggiunta di proposito. L'articolo sul threat modeling con STRIDE mostra un modo strutturato per elencare le minacce contro un sistema prima che qualcuno lo attacchi. Usa lo stesso vocabolario che hai appena imparato, quindi lì le distinzioni viste sopra conteranno.
Leggendo con regolarità i record CVE noterai che la descrizione spesso indica la condizione necessaria per attivare la falla. Quella condizione è il tuo primo controllo sulla raggiungibilità. Scrivila accanto alla versione interessata e alla tua esposizione.
Fondamenti di sicurezza
La triade CIA spiegata: riservatezza, integrità e disponibilità, con esempi quotidiani, verifiche con hash e firme e dieci incidenti da classificare.
Fondamenti di sicurezza
Impara i diagrammi di flusso dei dati, i trust boundary e le sei categorie STRIDE, poi modella un OWASP Juice Shop locale in Threat Dragon.
Fondamenti di sicurezza
Cosa comprende la sicurezza informatica, la triade CIA, i modi comuni in cui i sistemi cedono e un primo esercizio sicuro con gli hash sulla tua macchina.