RFID, NFC e Denaro Digitale – La Sicurezza

Dopo aver esplorato la tecnologia che sarà alla base dei futuri sistemi di pagamento, e dopo aver capito qualcosa di più sui processi fisici che stanno alla base del loro funzionamento, è arrivato il momento di rispondere alla domanda fondamentale, che di certo tutti voi vi siete già posti: mi posso fidare?

Io la mia risposta ce l’ho ma non ve la dico adesso, perché voglio che siano le prossime disquisizioni a forgiarvi una vostra opinione. Prima di capire come difendersi però, è assolutamente necessario capire da chi e da cosa bisogna guardarsi: come abbiamo visto infatti, la comunicazione tra tag e reader avviene mediante un’onda radio che si diffonde nello spaziotempo einsteiniano, e che potenzialmente essa è “leggibile” da chiunque sia provvisto di una banale antenna!

I tipi di attacchi a cui siamo esposti sono di diverso tipo, e possono essere più o meno efficaci a seconda che il target sia un tag passivo, attivo od in base alla tipologia di memoria adottata. Alcuni sono più pericolosi ed altri meno, e possiamo individuare certe categorie più ricorrenti che vale la pena analizzare più nel dettaglio.

Sniffing

Il più rischioso degli attacchi in cui possiamo incappare, specialmente se stiamo trattando con degli NFC che servono ad eseguire pagamenti, è quello che mette un “attaccante” in grado di intercettare le nostre comunicazioni e/o clonarle. L’intercettazione può essere molto semplice se siamo nel raggio operativo del tag e del reader, soprattutto se non abbiamo previsto nessuna cifratura dei dati, avendo così la possibilità fraudolenta di acquisire informazioni riservate di ogni genere.

Un primo vantaggio però, specialmente nei tag passivi, è proprio quella della ridotta distanza operativa, per cui una lettura non autorizzata può essere possibile solamente se si è abbastanza vicini, nel raggio di pochi centimetri come abbiamo visto nel primo articolo della serie, al dispositivo. Questo basta già di per sé a considerarne sicuro l’uso in alcuni ambiti (ad esempio nei badge aziendali), ma di certo non sufficiente nelle transazioni bancarie di prossimità, dove le distanze operative sono anche superiori e c’è in gioco qualcosa di più importante.

Inoltre esiste un buon metodo, che sfrutta un “buco” di sicurezza nei sistemi anti-collisione, che permette di ovviare alla necessità di essere molti vicini al tag. Come abbiamo visto i sistemi anti-collisione, hanno lo scopo di permettere ad un reader di elaborare più tag contemporaneamente senza problemi di sovraccarichi. Questo viene fatto mediante un procedimento, denominato binary tree, che prevede un’interrogazione del reader verso i tags un bit dopo l’altro: prima viene chiesto di rispondere a tutti i tag il cui ID inizia per 0, poi quelli per 1 e così via, ed in base alle risposte ricevute si procederà con l’interrogazione di tutti i restanti bits.

Il problema è che il reader emette un campo elettromagnetico che ha un’intensità notevolmente superiore al tag, e quindi un potenziale cracker può “ascoltare” tutte queste interrogazioni ad una distanza maggiore, ma soprattutto potrà dedurre la risposta dei tags semplicemente sapendo che cosa sta chiedendo il reader, anche se la distanza operativa è di pochi centimetri, ricostruendo per intero i messaggi originali. I tag attivi invece, sono naturalmente ben più esposti a letture fraudolente a causa proprio della loro elevata distanza di trasmissione, ragion per cui i dati vengono cifrati con varie tecniche che esploreremo in seguito.

La clonazione è invece una tecnica che prevede la copiatura bit a bit dei dati contenuti nel tag, in modo da poterne costruire di fasulli che “impersonano” quello originale. In questi casi, anche le tecniche di cifratura più avanzate falliscono miseramente, in quanto è sufficiente avere a disposizione un tag “vergine” simile a quello che vogliamo emulare, intercettare l’intero contenuto dell’originale e copiarlo integralmente. Cifratura o no, i due tag saranno indistinguibili e potrei tranquillamente pagare i miei acquisti utilizzando il vostro conto! Saranno necessarie tecniche più avanzate di mutua autenticazione, ed anche queste saranno trattate più dettagliatamente insieme a quelle di cifratura.

Tampering e Spoofing

Nel gruppo delle alterazioni dei dati originali, troviamo principalmente due tipologie di attacco: quelle mirate a sovrascrivere la memoria del tag con dati fasulli (tampering), e quelle indirizzate verso la falsificazione delle informazioni trasmesse (spoofing). Come abbiamo visto, ci sono delle necessità per cui il tag deve avere una memoria riscrivibile, possibilità che espone a sovrascritture non autorizzate e certamente pericolose.

Proteggersi da questi attacchi può essere semplice, è sufficiente infatti dotare di password che autorizzano oppure no la scrittura, od ancora cifrare i dati prima di scriverli con una chiave che risiede solo nel reader, così facendo qualsiasi alterazione porterebbe ad avere dati non conformi e quindi non utilizzabili.

Parlando di spoofing invece, abbiamo diversi tipi di attacchi più o meno semplici e più o meno efficaci. Quello più semplice, ma anche meno pericoloso, è il disturbo della comunicazione tra tag e reader per impedire la corretta esecuzione di una lettura: esso è facilmente realizzabile, in quanto è sufficiente disturbare il campo elettromagnetico con onde di vario genere, ma di certo il danno arrecato di norma dovrebbe essere di poco conto (di solito la mancata operatività del sistema).

Più difficile è invece alterare i dati “on the fly”: ci si posiziona “davanti” al tag  decifrandone la comunicazione, la si modifica opportunamente e la si lascia procedere alterata verso il reader (questo è un esempio di quello che più comunemente si chiama “man in the middle attack”). Questo approccio è decisamente complesso da attuare e dipende da molti fattori tra cui le tecniche di modulazione utilizzate e quelle di cifratura, ma è un attacco che può avere un livello di pericolosità anche molto elevata.

DOS e Injection

Gli attacchi di tipo DOS (Denial of Service) possono assumere varie forme: si va dal rendere inutilizzabile un tag piuttosto che un reader, oppure dallo sfruttare i sistemi anti-collisione per mettere fuori servizio un reader sovraccaricandolo (un po’ come succede negli attacchi DOS e DDOS per i siti web). Dando un disservizio è possibile mettere in ginocchio tutta una serie di sistemi, situazione che può essere sfruttata in vari modi facilmente intuibili.

Siccome i tag ed i reader sono di norma collegati anche ad altri apparati informatici, quali ad esempio un web server, è possibile veicolare del codice maligno (injection) attraverso il flusso di dati in transito ed infettare anche un’intera server farm, oppure fare dei disastri con delle semplici istruzioni SQL che cancellano tabelle dai database e fenomeni simili.

Come difendersi

Adesso che abbiamo una panoramica degli attacchi ai quali potremmo essere esposti durante il pagamento della nostra spesa, è il caso di vedere più nel dettaglio alcuni sistemi di difesa, perché fino a questo punto sono certo che abbiate la sensazione che la sicurezza degli RFID sia un po’ traballante, vista la moltitudine di possibilità di attacco.

La situazione è in realtà più rosea, in quanto oltre alla già citata cifratura è sufficiente instaurare dei solidi meccanismi di mutua autenticazione, per mettersi al riparo da tentativi di sniffing, di clonazione e di tutte le altre problematiche, fatta eccezione per i problemi minori quali il DOS e l’injection per i quali i metodi di difesa sono differenti, e presi in prestito dalle tecnologie adottate per proteggere i siti web ed i database comunemente in circolazione.

Uno dei problemi fondamentali quando si parla di integrare policy di sicurezza negli RFID, è sempre l’estrema difficoltà tecnica di trovare un buon compromesso tra costi, robustezza e richieste energetiche. Più un sistema è sicuro e più sarà certamente costoso, senza contare che sarà necessario avere circuiti con più potenza elaborativa e quindi richieste energetiche da supplire con batterie più grandi quando si hanno tag attivi, con molti più compromessi invece nei tag passivi.

Sottolineiamo anche come in molti casi non sia necessario avere protocolli di sicurezza avanzati, e pertanto ci si può accontentare di piccoli accorgimenti od addirittura di lasciare tutto “aperto”, ma nella nostra analisi abbiamo contestualizzato il caso dei pagamenti tramite NFC dove certamente è necessario avere un livello di sicurezza elevatissimo. Come anticipato, questo livello di sicurezza si ottiene solamente usando all’unisono tecniche avanzate di autenticazione e di cifratura.

Le prime si suddividono in due classi: passive ed attive. I meccanismi di autenticazione passiva, si poggiano fondamentalmente sull’utilizzo di una firma digitale da apporre al dato che transita, in modo da prevenire gli attacchi di manipolazione e falsificazione dei bits, nei modi che abbiamo esaminato sopra. In pratica si genera il digest del messaggio con un algoritmo di hash (ad esempio lo SHA-256) e lo si firma digitalmente con una coppia di chiavi asimmetriche RSA.

A questo punto il messaggio non può più essere alterato, in quanto il reader una volta averlo ricevuto eseguirà le operazioni inverse, cioè decifrerà con la chiave pubblica RSA il digest ottenendo quello originale, e lo confronterà con quello da lui stesso generato sulla base del messaggio vero e proprio: solo una perfetta corrispondenza è garanzia che i dati siano quelli originali. Questo metodo è molto poco costoso e quindi adatto all’inserimento nei tag passivi, anche perché tutta l’elaborazione è di fatto a carico del reader e quindi non necessitiamo di molta potenza elaborativa supplementare nel tag.

C’è da dire però che questo sistema rimane vulnerabile ai tentativi di clonazione: una copiatura completa del contenuto infatti mi permetterà di replicare il messaggio nel suo complesso (firma compresa), esponendo quindi una grave falla nel sistema. E’ necessario pertanto adottare dei sistemi migliori, definiti di autenticazione attiva, dove la necessità è quella di stabilire che il tag ed il reader siano autentici, così facendo si potrà tranquillamente instaurare un canale cifrato e dialogare con tranquillità.

I metodi più comuni di autenticazione attiva sono due: il Mutual Symmetrical Keys ed il Derived Keys. L’MSK prevede la conoscenza da ambo le parti di una chiave segreta che non verrà mai trasmessa durante la comunicazione, e si articola di un meccanismo noto come challenge reponse: in pratica, il reader invia alcuni bits generati in maniera pseudo casuale al tag, che risponderà con un messaggio basato su questi bits e sulla chiave condivisa: solo il vero tag potrà rispondere con dei dati coerenti.

Il DK è un metodo simile ma più semplice, che permette di avere chiavi differenti per ogni coppia di dispositivi. Anche qui abbiamo una chiave segreta integrata direttamente nel firmware dei dispositivi, ed il messaggio è cifrato utilizzando questa chiave più una chiave pubblica, come ad esempio il numero di seriale del tag, ottenendo così una chiave univoca che viene poi ricostruita dal reader all’atto della ricezione del messaggio.

Entrambi questi metodi ci mettono al sicuro anche dalla clonazione, in quanto il messaggio che transita e che può essere copiato manca delle chiavi segrete che sono inserite come parametri di fabbrica direttamente nell’hardware, rendendo quindi inutile qualsiasi tentativo di azione fraudolenta. Vi metto a conoscenza anche di un nuovo ed interessante metodo di autenticazione attiva basato più su sistemi fisici che informatici, che però non è ancora standard ISO è bene dirlo.

L’idea di base è che gli apparecchi che comunicano (tag e reader) si mandino contemporaneamente dati casuali. Nella fase di setup iniziale i due apparati sincronizzano ampiezza e fase dei segnali così come l’esatta temporizzazione dei bit trasmessi. Dopo la sincronizzazione i due apparati possono inviare dati esattamente nello stesso istante e con la medesima ampiezza e fase.

Questo è estremamente vantaggioso perché d’ora in poi, ogni volta che i due attori inviano lo stesso bit, ad esempio 0, l’onda risultante è data dalla somma dei due segnali cioè sempre 0, nel caso invece di 1 si ottiene un segnale con intensità doppia. Nel caso di segnali discordanti invece, quando ad esempio il tag invia uno 0 ed il reader un 1, si ottiene sempre un segnale di intensità pari ad uno. Se ci mettiamo nei panni di un cracker che ascolta la nostra comunicazione otteniamo qualcosa come quello mostrato in figura:

In pratica senza sapere chi ha inviato che cosa, non è possibile ricostruire il messaggio che risulterà sempre uguale “all’esterno” indipendentemente da quale dei due apparecchi abbia inviato lo 0 e l’1. Solo i veri tag e reader, sapendo cosa hanno inviato loro stessi, lavorando per “differenza” potranno ricostruire il messaggio originale e potranno dialogare in tutta sicurezza. Un metodo a mio avviso geniale, ogni tentativo di clonazione o contraffazione fallisce miseramente!

A questo punto, qualunque metodo si a stato scelto, abbiamo reso tag e reader consapevoli di essere autentici e siamo pronti ad instaurare una comunicazione cifrata. Le possibilità sono molte, ed anche qui dipendono dalle risorse a disposizione sia in termini economici che di elaborazione.

Possiamo usare algoritmi a chiave simmetrica come il DES, il 3DES o l’AES oppure rivolgerci alla cifratura asimmetrica che può far uso degli algoritmi come l’RSA, le Curve Ellittiche od il Diffie Helmann. Per tutti questi casi rientriamo nelle consuete casistiche di sicurezze proprie di tutti gli altri sistemi informatici, dall’online banking ai vari servizi della PA, pertanto non ci soffermeremo sui punti di forza o le debolezze di questi già diffusissimi sistemi di cifratura.

Ora sappiamo tutto sulla tecnologia che muoverà i sistemi di pagamento del prossimo futuro (e non solo visto che come abbiamo imparato gli usi di tale tecnologia sono vastissimi) ed abbiamo anche cercato di capire quanto siano sicuri. La mia opinione è che lo siano, e lo saranno ancora di più quando l’arrivo di questi dispositivi sarà per la massa.

Progettandoli bene e farcendoli con le migliori tecniche fin qui esposte e con molte altre ancora, la sicurezza si può ottenere e potremo dormire sonni tranquilli in quanto nessuno riuscirà a sottrarci il nostro denaro digitale, che rimarrà ben protetto forse ancor di più di quello di “carta”. In futuro rubarci il portafoglio non servirà a nulla, in quanto la nostra carta RFID funzionerà solo con i nostri parametri biometrici ed i dati in essa contenuti saranno ben cifrati ed al sicuro.

L’intercettazione a distanza sarà complessa grazie alla mutua autenticazione, cosicché potremmo andare in giro sereni con il nostro cellulare NFC senza alcuna paura. Certamente la sicurezza al 100% non esiste, e tutto può essere sempre bypassato al pari di quanto lo sia già oggi con i sistemi tradizionali. Ma la scienza va sempre avanti, i sistemi di pagamento cambieranno e diventeranno completamente elettronici, ed è bello sapere come di pari passo avanzino anche le tecniche di sicurezza, rendendoci felici e tranquilli utilizzatori dei mezzi digitali del futuro.

Vi lascio al solito ai vostri commenti sulla questione, sperando che questa serie di articoli rimanga nella vostra memoria quando, in un giorno non troppo lontano, effettuerete il vostro primo pagamento di prossimità con il cellulare.

Press ESC to close