Oggi, i software sono integrati nella vita quotidiana, come componente dei dispositivi e dei sistemi che vengono utilizzati abitualmente: computer, smartphone, sistemi nelle automobili, controllo degli elettrodomestici, etc.
I software possono essere spiegati come sistemi solitamente complessi ideati e sviluppati da diversi programmatori. La creazione di un software avviene tramite la scrittura di un codice. Di solito i programmatori commettono errori (bug) nella scrittura del codice: questi errori sono la radice delle vulnerabilità software, perché è attraverso gli errori che si crea una porta d’accesso. Il software è così esposto a delle vulnerabilità.
La prima regola della programmazione dice che “è sempre colpa del programmatore”.
Due studi condotti nel 1973 e nel 1984 hanno rilevato che, degli errori totali riportati:
- Il 95% era causato dai programmatori
- Il 2% dal software di sistema (il compilatore e il sistema operativo)
- Il 2% da altri software
- l’1 % dall’hardware.
Una vulnerabilità è quindi un difetto nella “costruzione” del software che può essere sfruttata in modo lecito o illecito per modificare il normale comportamento del sistema, come ad esempio, per ottenere alcuni privilegi nel sistema. Quest’attività è conosciuta con il nome di exploit.
Le vulnerabilità, quindi, offrono un possibile punto di accesso a dispositivi e sistemi per attività lecite, come un controllo volto alla risoluzione, o illeciti, come l’attacco esterno da parte di un hacker.
Nonostante la conoscenza e consapevolezza sulle vulnerabilità presenti al giorno d’oggi, permane una fortissima tendenza, tutt’ora in crescita, sul numero di vulnerabilità segnalate, motivo per cui la sicurezza del software è diventata un importante campo di ricerca e di business.
La presenza di vulnerabilità nella produzione di software rende necessario disporre di strumenti e attività che possano aiutare i programmatori a rilevare o evitare errori nello sviluppo del codice. Oltre alle attività di code review tipiche di programmatori esperti e/o software specifici si possono eseguire attività di vulnerability assessment e Penetration test, più simili alle attività che potrebbe svolgere un eventuale hacker.
Vulnerabilità software, alcuni esempi
Quante e quali sono le vulnerabilità software? Esistono diverse tipologie di vulnerabilità, segnalate man mano che vengono scoperte. Di seguito alcune tra le tipologie codificate e riconosciute:
Buffer overflow: è un errore che si verifica runtime – mentre il programma è in esecuzione – quando in un buffer di una dimensione fissa vengono scritti dati di dimensioni maggiori rispetto alla dimensione del buffer. Ciò potrebbe comportare un cattivo funzionamento del sistema poiché i nuovi dati potrebbero corrompere quelli di altri buffer o processi.
Format string bug: si verifica quando i dati inviati di una stringa di input vengono interpretati come un comando lecito dall’applicazione.
Vulnerabilità software, esempi di Exploit
Quando si verifica la possibilità di attaccare un software, dovuta ad una vulnerabilità, si parla di Exploit.
Buffer overflow exploit può essere utilizzato per iniettare codice dannoso al fine di eseguire il codice iniettato e prendere controllo del sistema.
Format string exploit: l’utente malintenzionato può eseguire codice, leggere la struttura dei dati (stack) o causare un errore di segmentazione nell’applicazione in esecuzione, causando nuovi comportamenti che potrebbero compromettere la sicurezza o la stabilità del sistema.
Redatto da Lucia D’Adamo, in collaborazione con Andrea Petriglia, supervisionato da Marco Pirrone