Vulnerabilità del software: concetti fondamentali
Nel precedente articolo abbiamo parlato delle vulnerabilità delle applicazioni come via di accesso privilegiata per perpetrare gli attacchi cyber. In questo articolo approfondiremo alcuni concetti fondamentali per l’ambito delle vulnerabilità del software e come possono essere gestite all’interno di un processo strutturato.
Partiamo dalla terminologia.
Che cosa sono le vulnerabilità: vocabolario
Difetto = una qualunque deviazione dalle specifiche.
Bug = un bug è una problematica nel codice o nella sua progettazione che genera un malfunzionamento, risultati errati o un crash/terminazione anomala.
Vulnerabilità = una debolezza presente, comprensibile e sfruttabile da un attaccante. In assenza di strumenti di attacco e di valore per l’hacker attaccante siamo in presenza di un “normale” bug.
Vulnerabilità zero-day = una qualunque vulnerabilità di un software non nota ai suoi sviluppatori o da essi conosciuta ma non gestita.
Exploit = una procedura con cui si evidenzia una vulnerabilità. Uno
Zero-day exploit = un qualunque programma che sfrutti una vulnerabilità zero-day per causare effetti indesiderati.
Fonti delle vulnerabilità
Anche per i professionisti di Application Security, la ricerca di vulnerabilità ed exploit non è sempre immediata. Non esiste un modo univoco per identificare exploit e vulnerabilità e non esiste un database esaustivo che li raccolga tutti. Le fonti in cui trovare vulnerabilità e/o exploit sono i principali database, i siti di advisory dei produttori di tool di sicurezza informatica, ed i Framework di Exploiting.
Riportiamo qui i principali:
Common Vulnerabilities and Exposures (CVE)
Gestito da MITRE Corporation, CVE è uno standard internazionale per identificare e denominare le vulnerabilità di sicurezza informatica. Ogni vulnerabilità ha un identificatore univoco chiamato CVE ID. Quando si fa riferimento a un CVE, quindi, si intende in genere una falla di sicurezza a cui è stato assegnato un numero identificativo (ID) CVE.
National Vulnerability Database (NVD)
Gestito dal National Institute of Standards and Technology (NIST) degli Stati Uniti, l’NVD è un database basato sulle voci del CVE e fornisce ulteriori informazioni come la severità delle vulnerabilità e metriche come il Common Vulnerability Scoring System (CVSS).
Exploit Database
Mantenuto da Offensive Security, l’Exploit Database raccoglie e documenta exploit di vulnerabilità software, fornendo codice di esempio e dettagli sull’exploitability.
CERT Vulnerability Notes Database
Gestito dal CERT Coordination Center (CERT/CC) della Carnegie Mellon University, questo database fornisce note sulle vulnerabilità e raccomandazioni per mitigare i rischi. Una fonte autorevole è anche il portale del CSIRT Italia, istituito presso l’Agenzia per la cybersicurezza nazionale (ACN), per conoscere attraverso alert e bollettini le vulnerabilità di sicurezza rilevate.
OWASP TOP 10
Una delle principali fonti di dati è la OWASP Top 10, il documento di riferimento a livello internazionale in cui vengono identificati i 10 maggiori rischi di sicurezza per le Web Application. Si tratta di un elenco delle 10 vulnerabilità di sicurezza che colpiscono le applicazioni e le espongono al rischio di attacchi informatici.
La OWASP Top 10 del 2021 la versione più recente dopo quella del 2017, comprende:
- Broken Access Control
- Cryptographic Failures
- Injection
- Insecure Design
- Security Misconfiguration
- Vulnerabile and Outdated Components
- Identification and Authentication Failures
- Software and Data Integrity Failures
- Security Logging and Monitoring Failures
- Server-Side Request Forgery (SSRF)
Per un maggiore approfondimento rimandiamo alla versione italiana della pagina OWASP che invita ad affrontare le minacce in modo più organico e completo e di cui il vulnerability management va inteso solo come una componente.
Flusso di gestione delle vulnerabilità
La sicurezza delle applicazioni è orientata a ridurre la superficie di attacco minimizzando le vulnerabilità presenti nelle applicazioni attraverso un processo continuo di identificazione, gestione, mitigazione e prevenzione. Il flusso di lavoro del team di sicurezza può essere suddiviso in queste fasi, rappresentate in figura:
Application Vulnerability Assessment
Il Vulnerability Assessment è un’analisi di sicurezza delle applicazioni che ha come obiettivo l’identificazione di tutte le vulnerabilità potenziali dei sistemi e delle applicazioni valutando il danno potenziale che l’eventuale “attaccante” può infliggere all’unità produttiva. Questo può essere fatto attraverso vari metodi, come l’analisi statica e dinamica del codice, i test di penetrazione (pentesting), e l’uso di strumenti di scansione delle vulnerabilità.
Una volta identificate, le vulnerabilità devono essere gestite attraverso un processo di prioritizzazione e pianificazione delle azioni correttive. Questo può includere l’assegnazione di punteggi di severità basati su sistemi come il Common Vulnerability Scoring System (CVSS), e la decisione su quali vulnerabilità correggere per prime in base al loro impatto potenziale e alla probabilità di sfruttamento.
Mitigazione delle Vulnerabilità
Mitigare le vulnerabilità significa implementare misure per ridurre o eliminare il rischio che queste rappresentano. Questo può includere la correzione del codice, l’applicazione di patch, l’aggiornamento delle librerie e dei framework utilizzati, o l’implementazione di controlli compensativi.
Prevenzione delle Vulnerabilità
La sicurezza delle applicazioni include anche strategie per prevenire l’introduzione di nuove vulnerabilità durante lo sviluppo del software. Questo può essere ottenuto attraverso pratiche di coding sicuro, formazione continua degli sviluppatori, e l’integrazione di processi di sicurezza nel ciclo di vita dello sviluppo software (SDLC), come il DevSecOps.
Monitoraggio e Risposta
Parte della sicurezza delle applicazioni è il monitoraggio continuo delle applicazioni in produzione per individuare nuove vulnerabilità o exploit in tempo reale. Questo include l’uso di sistemi di rilevamento delle intrusioni (IDS), il monitoraggio del traffico di rete, e l’analisi dei log. In caso di una vulnerabilità sfruttata, devono essere attivati piani di risposta agli incidenti per limitare i danni.
Compliance e Regolamentazioni
Le normative e gli standard di sicurezza (come GDPR, NIS2, ISO/IEC 27001) spesso richiedono che le organizzazioni gestiscano e mitighino le vulnerabilità come parte dei loro programmi di sicurezza delle applicazioni. La conformità a queste regolamentazioni implica l’adozione di best practice per la sicurezza delle applicazioni.
Conclusioni
Considerando il continuo aumento delle vulnerabilità software note, concentrarsi sul rilevamento lascerà le organizzazioni con un modello di sicurezza delle applicazioni incompleto. Per affrontare le minacce alla sicurezza delle applicazioni più urgenti, le organizzazioni devono adottare un modello di sicurezza delle applicazioni maturo che includa la definizione delle priorità e la correzione oltre al rilevamento.
Ricordandosi che:
“Perfect security is impossible, Zero risk is impossible. We must bring continuous risk and trust-based application security assessment and prioritization of application vulnerabilities to DevSecOps.” (da “ Gartner’s 10 Things to Get Right for Successful DevSecOps, di Neil MacDonald, Ian Head’)
Scopri come possiamo aiutarti
Troviamo insieme le soluzioni più adatte per affrontare le sfide che ogni giorno la tua impresa è chiamata ad affrontare.