Le comunicazioni sicure in internet si basano sull'uso di certificati digitali, ne avevo parlato in un articolo precedente. Credo però che un piccolo esempio possa aiutare a capire meglio di cosa stiamo parlando:
Supponiamo di voler voler creare un sito sicuro per nFA. La procedura per rendere sicura la connessione è grossomodo questa:
- Scriviamo una serie di dati amministrativi (ragione sociale, indirizzo) e tecnici in un file, che è il certificato da firmare.
- In fondo al certificato aggiungiamo una "firma" digitale ottenuta processando il resto del certificato con una funzione crittografica.
- Inviamo il certificato ed un po' di soldi ad un'autorità di certificazione (CA da qui in poi).
- La CA verifica che siamo veramente noi e ci restituisce il nostro certificato con in più la sua firma e delle date di validità.
- Installiamo il certificato firmato sul nostro sito
Quando un'utente si collega a noi tramite una connessione sicura, il suo browser verifica:
- la nostra firma,
- quella della CA,
- che la CA sia una di quelle accettate dal browser.
Se tutte le condizioni sono verificate il browser accetta di stabilire una connessione sicura senza segnalare anomalie.
In realtà il browser non accetta solo le CA che ha installato, perchè queste possono autorizzarne altre, ed il gioco può essere ripetuto. Nell' immagine vedete un dettaglio del certificato di mail.google.com, autorizzato da Thawte SGC CA, a sua volta autorizzata ad autorizzare da Verisign con un certificato installato nel browser.
Discutiamo ora due problemi, uno puramente organizzativo ed uno tecnico-organizzativo che potrebbero consentire ad un pirata di introdursi in una comunicazione ritenuta sicura senza farsi notare dall' utente.
Primo problema
Come da punto 4, le autorità di certificazione dovrebbero verificare che i certificati digitali siano stati richiesti dall'organizzazione richiedente, ma in alcuni casi si limitano ad intascare i soldi e firmare. Quindi se un pirata vuol far credere di essere Google o una banca deve solo mandare un certificato da firmare e qualche decina di dollari al certificatore giusto. Ottenuto questo, la vittima si troverebbe ad accedere ad un sito fasullo ma certificato come autentico da una CA valida.
Secondo problema
Quando una CA firma un certificato non convalida tutto il suo contenuto, ma solo un "riassunto". Se riusciamo a generare certificati diversi con lo stesso "riassunto", la validazione creata dalla CA per il primo è valida anche per il secondo.
Tra i vari algoritmi usati per riassumere i certificati i più diffusi sono MD5 e SHA1, ma cominciano ad avere problemi: MD5 è seriamente compromesso dal 2004, mentre SHA1 ha alcune pecche minori che non ne pregiudicano seriamente la sicurezza, ma gli addetti ai lavori raccomandano comunque di abbandonarlo in favore di algoritmi più sicuri.
Purtroppo molte CA firmano ancora certificati realizzati con MD5, ed un gruppo di "white hat hackers" ha sfruttato la cosa per crearsi una CA fasulla che ogni browser prenderebbe per autentica.
Tramite questa, possono creare certificati validi per qualunque sito sulla terra; ma trattandosi di un gruppo di studio e non di criminali, l'hanno creata con data di scadenza nel 2004, in modo che non possa essere usata per truffare nessuno. Altri potrebbero aver fatto lo stesso giochetto con fini meno nobili. Va notato che i certificati creati possono benissimo errere firmati tramite SHA1 o algoritmi ancora più sicuri, il problema è nel certificato intermedio.
Conseguenze pratiche
Una volta ottenuto un certificato fasullo per un certo sito, un pirata può intromettersi nella comunicazione tra il vero sito e le vittime senza che queste possano accorgersene, e raccogliere posta, password bancarie, numeri di carta di credito e quant'altro. Neppure chi si occupa di sicurezza informatica per lavoro sarebbe in grado di distinguere questi certificati da quelli veri.
Basta una sola CA fasulla o poco seria per compromettere tutto il sistema, visto che i browserS si limitano a convalidare o meno i certificati senza dare valutazioni intermedie o verificare se esistano altri certificati per lo stesso sito emessi da altre CA.
I produttori di browser e le CA dovrebbero preoccuparsi di eliminare le CA non affidabili, e le CA dovrebbero smettere di utilizzare tecnologie notoriamente bacate, ma i primi sono poco interessati alla cosa ed i secondi spesso pensano solo a vendere certificati possibile.
Va aggiunto che non considerare validi i certificati firmati da una CA significa eliminarla dal mercato e danneggiare tutti i suoi clienti, e quindi espone al rischio di richieste di danni.
La tecnologia descritta è tuttora affidabile se applicata correttamente, ma come accennato ci sono problemi di incentivi e di incompetenza degli operatori, specialmente quelli specializzati nel rilascio di grandi quantità di certificati a prezzi stracciati sostanzialmente incompatibili con un vero controllo di identità.
Soluzioni
Come dicevo nell'articolo citato anteriormente, una conoscenza di base del sistema è necessaria per valutare i rischi di subire furti di dati o peggio. Purtroppo questo caso somiglia un po' al "problema dei limoni" cui si accennava a proposito della crisi finanziaria: se nemmeno un'esperto è in grado di distinguere un certificato buono da uno falso, l'unica strategia sicura è quella di dubitare di tutti.
Un utente potrebbe limitare i danni cancellando le CA sospette o chi le ha autorizzate dal browser, più o meno l'equivalente di scegliere quali agenzie di rating considerare affidabili o meno. Purtroppo individuare tutte quelle sospette non è banale, a meno di rimuoverle tutte e confermare i singoli certificati, cosa che può creare altri e peggiori problemi se non fatta con la dovuta attenzione.
Possono fare molto di più quegli utenti che acquistano i certificati, che dovrebbero stare alla larga da certificatori poco seri o tecnologicamente incompetenti, obbligandoli a mettersi in regola o uscire dal mercato. Purtroppo questo richiede una dimestichezza col problema che non è ragionevole aspettarsi dai piccoli utenti.
Val la pena ricordare che se un pirata ha accesso sia ad un PC che alla rete, come in un'internet point, in un'albergo o in alcune reti aziendali, può ottenere lo stesso risultato semplicemente installando una propria CA in ogni browser. In questi contesti non è prudente fidarsi di nessuna connessione.
Vi ho terrorizzato abbastanza? Spero di sì, era la mia segreta intenzione! Scherzi a parte, il rischio è infinitesimo se tutto ciò che fate con il browser è girovagare, leggere nFA e partecipare a qualche gruppo tipo FaceBook. Ma se usate la web per transazioni economico-finanziarie o altro tipo di transazioni che implichino l'uso di dati personali e riservati, fate un attimo di attenzione e ricordatevi che un minimo di rischio è inevitabile. Uoma avvisata, mezza salvata.
Interessante. Alcune domande.
1) Alle volte, visitando un sito, per esempio anche google mail, mi compare una finestra che avvisa che il certificato della firma digitale è "scaduto". Poi non compare più. Perchè?
2) Si dice che Firefox sia più sicuro di Explorer. Ma dal meccanismo che descrivi, relativamente alla sicurezza dei siti, il browser sembra ininfluente. Giusto?
3) La CA, chi ca... sono? Pubblici? Privati? E non sono tenuti a rispondere della congruità o verità delle certificazioni che emettono? Il volume di certificazione è così grande che nn si può controllare i certificati? Ma a fronte di una truffa denunciata, una certificazione rilasciata senza controlli nn sarebbe favoreggiamento?
4) Il lucchetto non garantisce un caspita? Allora perchè ci dicono sempre di vedere se c'è il lucchetto?
5) Ma quando google ordina le pagine, se le dispone in ordine di numero di visualizzazioni, non sta in qualche modo offrendo una garanzia che il sito che vai ad aprire è certificato?
ciao
Nell' ordine:
Un' ultima cosa: falsificare un certificato è banale, non farlo riconoscere al browser come falso è molto più complicato.Il fatto che qualcuno ci sia riuscito dimostra pero' che complicato non significa impossibile.