di Pierluigi Paganini*
In molti ignorano l’importanza dei processi di firma digitale per i principali produttori di software. Tali meccanismi risultano essenziali per prevenire che il codice sorgente eseguito su un qualunque dispositivo possa essere alterato per qualunque motivo.
Oggi giorno con l’avvento del paradigma dell’Internet of Things un numero impressionante di dispositivi che ci circonda funziona grazie al software che esegue. Dalle Smart TV ai nostri PC, tutti questi dispositivi eseguono applicazioni che se compromesse potrebbero causare il furto di informazioni sensibili o addirittura seri danni a persone o cose.
Firmare digitalmente un codice sorgente consente di certificarne autenticità e integrità, ma quanti sono i certificati digitali usati per firmare software e quanti tra essi sono stati invece usati per attività fraudolente?
A risponderci sono gli esperti di Kaspersky Lab, che hanno pubblicato un rapporto in cui spiegano perché la sola firma digitale di un codice sorgente non possa metterci al riparo da brutte sorprese.
La maggior parte degli amministratori di rete e utenti ritiene affidabile qualunque software che sia firmato digitalmente, ma il discorso vale anche per molti antivirus, e pur in presenza di codice malevolo ne ignorano la pericolosità a causa della firma digitale apposta.
Gli esperti Kaspersky hanno scoperto nel solo 2014 più di 6mila certificati digitali usati per firmare codice malevole. Tra i casi più clamorosi osservati negli scorsi anni ricordiamo l’arma cibernetica Stuxnet, oppure le backdoor usate dagli hacker dietro le operazioni Winnti e Darkhotel.
Come si firma digitalmente un software?
Il processo per firmare digitalmente una qualunque applicazione è composto dai seguenti passaggi:
1. Lo sviluppatore compila il file sorgente.
2. Viene calcolato l’hash del file sorgente (MD5, SHA1, o SHA2).
3. L’hash ottenuto è cifrato con la chiave privata dello sviluppatore del software.
4. La firma digitale ottenuta e il certificato digitale vengono aggiunti alla fine del file.
La verifica dell’integrità del codice è molto semplice: usando la chiave pubblica dello sviluppatore memorizzata nel certificato digitale è possibile decodificare l’hash e confrontarlo con l’hash previsto per il file legittimo.
Il certificato digitale contiene la chiave pubblica dello sviluppatore di software, che può essere usata per decodificare il messaggio e verificare l’integrità del file. Lo stesso certificato contiene inoltre ulteriori informazioni relative al soggetto che appone la firma, che vanno controllate attentamente.
Le Autorità di Certificazione (CA) sono i soggetti responsabili per la verifica dell’identità del titolare del certificato. Il sistema operativo Windows aggiunge nel suo store dei certificati quello relativo alle principali CA accreditate come affidabili, mentre i certificati digitali rilasciati da altre CA possono essere aggiunti a discrezione dell’utente.
Gli esperti hanno evidenziato l’importanza di monitorare il software, anche se esso è firmato con un certificato digitale valido. Kaspersky consiglia di adottare una soluzione antivirus efficace e invita le aziende e gli utenti ad adottare le seguenti best practice di sicurezza:
- Non eseguire codice digitalmente firmato da un fornitore di software sconosciuto.
- Usare una soluzione antivirus che gestisca un database di certificati attendibili e non attendibili.
- Non installare un certificato digitale emesso da CA sconosciute.
- Non fidarsi del fatto che un software sia firmato digitalmente per considerarlo sicuro.
- Analizzare attentamente gli attributi dei certificati digitali usati per firmare l’applicazione (come il numero di serie o l’hash del certificato).
- Installare l’aggiornamento Microsoft MS13-098, che elimina l’errore nella gestione dei certificati digitali.
Ulteriori informazioni su come un certificato digitale possa essere usato illegalmente sono riportate in quest’altro mio articolo: “How Cybercrime Exploits Digital Certificates“.
*Pierluigi Paganini
Membro Gruppo di Lavoro Cyber G7 2017 presso Ministero degli Esteri
Membro Gruppo Threat Landscape Stakeholder Group ENISA
Collaboratore SIPAF presso il Mef