Radiocomandi Apricancello
From UIC
Radiocomandi Apricancello
Contents |
| Infos | |
|---|---|
| Author: | Kaiser |
| Email: | ryo99@freemail.it |
| Website: | none |
| Date: | 22/07/2005 (dd/mm/yyyy) |
| Level: |
|
| Language: | Italian |
| Comments: | Formattazione Wiki: Antelox |
Introduzione
Salve, questo è il mio primo tutorial e ora vi spiego il motivo che mi ha spinto a sciverlo. Tanto tempo fa, quando ero ancora piccino picciò mi divertivo a smontare ogni cosa e un giorno smontai un radiocomando apricancello; non sapevo assolutamente nulla di elettronica tantomeno di informatica ma volevo assolutamente adattarlo per aprire il cancello del mio condominio. Col passare del tempo i miei interessi hanno subito molti cambiamenti ma ho sempre avuto un particolare occhio di riguardo verso i radiocomandi; non sono mai riuscito ad adattare quello che avevo (e possiedo ancora adesso) da bambino perchè totalmente incompatibile in frequenza però nel tentativo di raggiungere questo obiettivo ho imparato tantissime cose. Lavorando a questo progetto mi sono reso conto che in giro per la rete non c'è scritto molto riguardo questi sistemi ma soprattutto ho visto quanto sia lento il progresso tecnologico che li riguarda; nonostante da anni siano in commercio sistemi molto sicuri, la stragrande maggioranza degli utenti continua ad adoperare quelli vecchi mettendo a repentaglio la sicurezza delle proprie abitazioni e cosa sconcertante, visitando una fiera di elettronica ho visto presentarli come nuovi e tecnologicamente avanzati e quando ho chiesto spiegazioni del perchè esponessero cose così obsolete mi hanno risposto che era una questione di comodità!
Lo scopo del tutorial è di fornire a chi è interessato all'argomento e magari non ha la più pallida idea di come funzioni un radiocomando, un punto di partenza per realizzare da solo qualcosa di utile e di interessante, infatti se tutto va bene, questo minitutorial introduttivo sarà seguito da altri tute dove fornirò gli elementi per realizzare qualcosa di pratico senza pretendere di spiegare teorie complicate sulla radiofrequenza. Ma soprattutto intendo mostrare quanto sia semplice eludere alcuni sistemi che purtroppo ripeto vengono ancora utilizzati da ignari utenti quando ne esistono di altri assolutamente più sicuri e dal costo non troppo superiore ai precedenti.
Tools
- Nessun tool particolare basta un motore di ricerca su internet, eventualmente se proprio vogliamo fare gli sboroni un oscilloscopio ma non è essenziale.
- Una minima conoscenza elettronica del tipo che se vi dico transistor non caschiate dalle nuvole.
Essay
Incominciamo dalla preistoria. Il mio insegnate di elettronica era di origine napoletana e ci raccontò che dalle sue parti i ladri di auto le aprivano con l'accendigas! Eh sì, perchè in principio i telecomandi non facevano altro che inviare nell'etere un impulso ad una data frequenza, se questa combaciava con quella su cui era tarato il ricevitore l'auto si apriva. Ok, ma l'accendigas che centra? Centra xè l'accendigas produce una scintillina dalla durata infinitesima e dovete sapere che più un impulso elettrico è breve più il suo spettro (cioè la gamma di frequenze dei segnali che lo compongono) è ampio. Cosa vuol dire tutto ciò? Semplice, ogni segnale elettrico può essere scomposto in una serie di altri segnali di base i quali hanno ognuno frequenze multiple degli altri (detto in modo brutale), immaginando di poter creare un impulso elettrico il più breve possibile, diciamo infinitesimo, esso sarà composto da sgnali che coprono tutte le frequenze da -infinito a +infinito. Se prendiamo per buona questa affermazione allora un impulso breve come quello dell'accendigas potrebbe anche contenere la frequenza che serve ad aprire l'auto. Scoperto questo inghippo i costruttori di telecomandi hanno inventato i telecomandi ad infrarossi che però continuavano ad andare in tilt per via del caldo e fu così che si passò ai radiocomandi a codice fisso con oscillatore libero. Questi oggetti funzionano grosso modo così:
Contengono un chip collegato ad una serie di microinterruttori, il chip viene attivato dalla pressione di un pulsante e legge lo stato degli interruttori; attraverso una logica interna il chip spara fuori una sequenza binaria che pilota la base di un transistor il quale collegato ad un circuito L-C forma un oscillatore modulato On-Off (cioè quando alla base arriva uno 0 il tx è spento, quando arriva un 1 il transistor oscilla alla frequenza tarata col circuito risonante L-C generando così la portante trasmessa dall'antenna che è la induttanza L stessa). Se aprite un radiocomando apricancello vecchio stile noterete: un numero variabile di microinterruttori che vi darà già alcune informazioni sul tipo di codifica, un chip encoder dal quale potete risalire (se la sigla è leggibile e non si tratta di dispositivi programmati) alla codifica, una induttanza/antenna disegnata sul circuito stampato, un transistor e un compensatore che è un condensatore la cui capacità è regolabile tramite una piccola vite. Questa configurazione non è più consentita dalle normative a causa delle fluttuazioni della frequenza generata dall'oscillatore dovute alla deriva delle caretteristiche dei componenti al variare della temperatura e per l'invecchiamento; inoltre la grossa mole di frequenze spurie emesse possono generare interferenze. E' evidente che se un malintenzionato volesse intromettersi nel nostro sistema dovrebbe costruirsi un telecomando identico al nostro; identico significa che la frequenza portante generata dall'oscillatore deve coincidere o perlomeno andarci molto vicino e che deve coincidere anche la sequenza binaria sia dal punto di vista binario appunto, che dal punto di vista temporale. Non basta quindi cambiare gli interruttori per usare un radiocomando con un cancello diverso dal suo perchè potrebbe avere una frequenza completamente diversa oppure il decoder potrebbe avere un clock differente. Perchè i segnali di informazione vengono modulati? Perchè non si inviano così come sono? Per varie ragioni: l'informazione solitamente ha frequenza tale che richiederebbe antenne chilometriche per essere trasmessa, trasportando un segnale su un'altro segnale con frequenza molto più alta consente di usare antenne più piccole inoltre permette di far viaggiare molti segnali in un unico mezzo trasmissivo senza che essi interferiscano tra loro e nel nostro caso permette anche di creare un meccanismo di sicurezza (esistono trasmettitori che implementano continui salti di frequenza in modo tale da non poter essere ricevuti per intero da malintenzionati). La portante e il tipo di modulazioni dipendono dal tipo di segnale che si vuole trasmettere e dal tipo di mezzo trasmissivo.
Affrontiamo il primo problema: di frequenze possibili ne esistono un'infinità, è quindi da scartare l'idea di mettersi con un generatore rf e provare a generare tutte le combinazioni di codice per ogni frequenza possibile mentre sembra fattibile appostarsi con un ricevitore e cercare di captare il segnale, con un po' di fatica e gli strumenti giusti si potrebbe fare. Ma c'è un "però", le normative stabiliscono, per i motivi prima esposti, delle frequenze apposite per questi radiocomandi quindi se un radiocomando non opera in queste frequenze allora non è omologato e per questo motivo da qualche hanno tutti hanno cercato di adeguarsi con nuovi prodotti; la più famosa e strausata è la famigerata 433,92 MegaHertz. Supponiamo dunque che il malintenzionato decida di operare su tale frequenza; rimane da decidere se usare la forza bruta oppure dilettarsi in un + elegante sniffing; per sapere quale può essere il tipo di attacco più probabile andiamo a vedere in dettaglio i sistemi di codifica utilizzati dai chip dei radiocomandi.
Sistema a Codice Fisso
Prima abbiamo parlato di microinterruttori che determinano il codice del telecomando, ma in che modo il chip genera la sequenza binaria da trasmettere? Ebbene ci sono 2 tipi essenziali di codifiche, National e Motorola (dalle case produttrici dei rispettivi chip).
Codifica Motorola
L'encoder è il chip siglato MC145026 mentre MC145027 e MC145028 sono i decoder. Non sto a spiegarvi dettagliatamente il loro funzionamento che potete approfondire scaricandovi il datasheet relativo, ad ogni modo ecco come funzionano questi chip: l'encoder è collegato ad un massimo di 9 microinterruttori a tre stati (possono essere collegati a massa, all'alimentazione oppure lasciati volanti); quando il chip viene abilitato rileva lo stato degli interruttori e produce la codifica seriale che continua fin tanto che il chip rimane abilitato. Se un interruttore è collegato a massa il chip lo traduce in 2 brevi impulsi sull'uscita, se è collegato all'alimentazione in 2 impulsi di durata più lunga mentre se è lasciato aperto in un impulso lungo seguito da uno breve. Questa modulazione è una sorta di PWM (Pulse Width Modulation) e viene ripetuta per tutti e 9 i bit. Il primo decoder menzionato riceve il treno di impulsi e li traduce interpretando i primi 5 impulsi come codice a tre stati ed i restanti 4 come codice binario (quindi gli ultimi 4 interruttori del tx non possono essere volanti!) e se riceve ALMENO 2 sequenze valide (ovvero che combaciano con quelle dei propri interruttori) allora si attiva. Il suo fratellino funziona nello stesso modo con l'unica differenza che tratta il segnale ricevuto come un codice ternario a 9 cifre il quale ci offre la bellezza di 3^9 = 19683 combinazioni. Non lasciatevi ingannare dalle apparenze!!! Sembrano pochissime di fronte alla potenza di un elaboratore ma se pensate che si deve ripetere ogni codice almeno una volta e se ogni codice durasse 100ms, si impiegherebbero 19683*2*0,1 = 3936,6 secondi = 65,61 minuti. Ma c'è un problema grosso: esattamente quanto dura la trasmissione di un codice? La risposta è: dipende dal clock che dipende dalla rete R-C impiegata nel telecomando e siccome il costruttore può scegliere i valori di R e di C in una gamma molto ampia, il malintenzionato dovrebbe azzeccare con una certa precisione (non trascurabile) la frequenza del clock altrimenti i chip non sono allineati e la ricezione non avviene correttamente. Ricapitolando dovremmo trasmettere 39366 sequenze per le quali potrebbe volerci 1 ora, il tutto ripeterlo per ogni possibile frequenza del treno di impulsi; beh non so a voi ma a me passerebbe la voglia di provarci :) Resta però fattibile e quindi molto pericoloso per la sicurezza l'intercettazione e decodifica di una trasmissione mediante scheda a microprocessore accoppiata ad un ricevitore radio.
Codifica National
Il chip in questione è l'onnipresente MM53200 che ogni tanto si presenta con nomi diversi ma è sempre lui il birichino; fa sia da encoder che da decoder e tra poco lo troverete pure nell'ovetto Kinder :P Vediamo come opera questo integrato: possiede dodici ingressi che possono essere portati a massa o lasciati liberi tramite i soliti interruttori; genera quindi un codice binario il cui clock è sempre determinato da una rete R-C esterna e che deve essere ricevuto per ALMENO ben 4 VOLTE per attivare l'rx. Avendo a disposizione 12 linee si possono generare 2^12=4096 combinazioni diverse. Andiamo ora a vedere in dettaglio il protocollo supponendo che il clock sia di 100kHz:
Tramite dei timers interni, il chip genera il proprio segnale; se un interruttore è a massa l'uscita andrà bassa per 0,32 ms e subito dopo alta per 0,64 ms mentre se l'interruttore è flottante l'uscita andrà bassa per 0,64 ms e subito dopo alta per 0,32 ms. Questo per tutti e 12 i bit iniziando dal B1 e finendo col B12. Un bit occupa quindi 0,96 ms di spazio temporale mentre una word occupa 11,52 ms. Tra una word e l'altra viene inserita una pausa di 11,52 ms che comprende anche un impulso alto di sincronismo della durata di 0,32 ms quindi per trasmettere le 4 word necessarie all'attivazione dell'rx si impiegano 92,16 ms che moltiplicate per il numero di combinazioni fa circa 377 secondi = 6,29 minuti. Ne consegue che aumenta la possibilità di effettuare un brute con successo, dopotutto si può fare qualche tentativo con delle frequenze di clock standard tanto una prova dura circa 7 minuti e in un'ora riesco a farne un po'; resta però che lo sniffing del codice se prima era fattibile adesso diventa un gioco da ragazzi e la cosa non è molto piacevole.
Per i motivi sopra esposti si è pensato di realizzare sistemi a codice dinamico in modo da rendere completamente inutile l'intercettazione del codice da parte di malintenzionati visto che ad ogni ricezione viene ricalcolato un nuovo codice e quelli vecchi non funzionano più.
Sistema a Codice Dinamico
Per darvi un'idea di cosa voglia dire "dinamico" vi parlo di un sistema piuttosto vecchio chiamato Dynacoder appunto. Esso risale addirittura al 1995 se non sbaglio quindi pensate un po' quanto tempo e passato è la diffusione di questi apparecchi sta iniziando solo ora e solo dove si richiede un'elevata sicurezza. Comunque questo dispositivo si basa sul PIC16C54 e funziona in questo modo: il codice inviato è composto da 65 bit dei quali 24 costituiscono la parte fissa che dipende dal trasmettitore in uso, 32 bit variano invece ad ogni nuova trasmissione come pure i restanti 8. I 24 bit fissi identificano il trasmettitore percui si possono produrre 16.777.216 tx differenti e scordatevi di avere il codice uguale a quello del vicino :) Ma se per qualche arcano motivo questo dovesse accadere niente paura perchè arrivano gli altri 32 bit con oltre 4 miliardi di combinazioni. La combinazione trasmessa varia ogni volta calcolata tramite un algo programmato nel pic e in media si ripete una volta ogni milione di trasmissioni ne viene che la probabilità di avere due radiocomandi con uguale codice fisso vicini che trasmettono la stessa sequenza è 1 su 340.000 miliardi! E i restanti 8 bit? Cosa succederebbe se il vostro fratellino dispettoso si mettesse a pigiare il pulsante per 100 volte lontano dal ricevitore? Nulla visto che il sistema tollera un disallineamento massimo tra tx e rx di 256 trasmissioni e gli 8 bit contengono informazioni di sincronismo per mantenere allineati i chip. Grazie ad una eeprom seriale è possibile gestire più di un radiocomando memorizzandovi i relativi codici. Penso abbiate capito la differenza tra un apricancello affidabile e sicuro e uno che lascia il tempo che trova quindi occhio a quello che avete a casa.
Dopo questo palloso discorso teorico/introduttivo ho finito, per adesso, ma se il Que vorrà tornerò con diverse prelibatezze.
Note Finali
Ringrazio tutti quelli che hanno lavorato e lavorano per la UIC, tutto il gruppo ormai sciolto da tempo dei RingZ3r0 grazie ai quali ho scoperto un nuovo fantastico mondo.
Disclaimer
I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.
Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevoli e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.