Andrea Beggi

Doing what you like is freedom, liking what you do is happiness.

Skype: architettura e sicurezza

A T T E N Z I O N E ! Questo post ha piu' di sei mesi. Le informazioni contenute potrebbero non essere aggiornate.

Il VoIP, la telefonia via Internet, sta guadagnando sempre più popolarità: sono ormai milioni gli utenti che si affidano a questa tecnologia, attirati dalla convenienza dei costi e dalla facilità di integrazione con altre forme di comunicazione.
Ma come funziona il più popolare dei sistemi di telefonia via internet, Skype? E’ un sistema proprietario, benchè sia parzialmente gratuito. Quanto è sicuro affidare ad esso le proprie comunicazioni? Ci sono dei rischi nel suo utilizzo? E’ più o meno sicuro di una telefonata fatta tramite linee telefoniche tradizionali?
Sono domande alle quali è difficile rispondere, poichè la sicurezza delle conversazioni su Skype dipende da diversi fattori, come ad esempio lo stato del computer sul quale funziona il programma, e la configurazione della rete alla quale esso è collegato.
Il protocollo utilizzato è segreto e proprietario, le uniche fonti sono le affermazioni dell’azienda e i risultati del reverse engineering. Essendo basato sul peer-to-peer, va considerata anche la presenza di altri computer che collaborano per la riuscita della chiamata. Insomma, i fattori che insistono sulla sicurezza sono molti e difficili da controllare. Per chiarire questi aspetti cerchiamo di capire meglio come funziona e che cosa avviene nella comunicazione tra utenti.

Skype è nato dai creatori di Kazaa, Janus Friis e Niklas Zennstrom. Kazaa è uno dei client di file sharing più diffusi, e non è immune da critiche, perchè contiene programmi adware, che mostrano popup pubblicitari durante la navigazione.
Fondandosi su un business model diverso, Skype ne è privo. Mossa azzeccata, poichè la sempre maggiore consapevolezza degli utenti fa si che programmi che celano “ospiti” indesiderati siano sempre più osteggiati. I creatori di Skype pongono chiaramente l’accento su questo aspetto, anche se non escludono che in un futuro il programma potrebbe contenere adware. (“Does Skype include adware or spyware? NO! Skype does not, and never has, included adware or spyware in the Skype application or in the Skype installer.”)
Tuttavia Skype usa quanto di buono è stato fatto per l’architettura di Kazaa, con il quale condivide parecchio codice, al punto che a partire dalla versione 3.0, Kazaa comprende anche un client Skype.

Le comunicazioni di Skype si appoggiano alle tecniche del peer-to-peer (P2P), per migliorare la qualità della voce durante le chiamate e per ridurre la latenza nella trasmissione di dati tra utenti.
Il termine P2P si riferisce ad una classe di programmi che si appoggiano al gran numero di computer client permanentemente collegati ad Internet, piuttosto che a costosi server centralizzati. Di conseguenza, Skype non ha un singolo punto critico sul quale basa le proprie operazioni, rendendo la sua amministrazione molto più semplice ed economica. Ciò permette di ribaltare queste economie sull’utente, che giova di tariffe più competitive per i servizi a pagamento.

Skype usa una directory (un database di risorse, in senso lato) proprietaria, chiamata Global index distribuited directory, attraverso la quale gli utenti si trovano a vicenda, si chiamano e mandano messaggi, il tutto senza usare un server centralizzato.

Skype usa un’architettura detta a “supernodo P2P”, attraverso la quale sono gestite tutte le comunicazioni. Piuttosto che su un grosso server centrale, i client interagiscono tra di loro, per supportare la rete. La partecipazione del client alla rete Skype è il mezzo attraverso il quale la rete stessa si sorregge.

L’architettura a supernodo è stata usata da molti programmi P2P. Un supernodo è un normale client Skype che dà servizi alla rete, gestendo una lista di contatti e facilitando lo smistamento delle chiamate. Su un supernodo risiede parte della Global index distribuited directory, il che permette di creare una rete robusta, pur appoggiandosi ad un gran numero di client non “affidabili” dal punto di vista della continuità del collegamento. Skype dichiara che tale architettura è in grado si scalare fino a decine di milioni di client, senza degrado di prestazioni o problemi di affidabilità.

Quando un client Skype diventa un supernodo, accetta connessioni da un piccolo numero di altri utenti Skype, al fine di mantenere la coerenza e l’accuratezza della Global index distribuited directory. L’attività da supernodo è completamente trasparente (invisibile) per l’utente, e solo client in grado di accettare connessioni dall’esterno diventano supernodi, quindi sono esclusi da questa attività tutti i client dietro un NAT e/o un firewall (od un proxy).

Uno dei più grossi punti a favore di Skype è la possibilità di funzionare anche in ambienti dove il traffico di rete è pesantemente limitato, (NAT, firewall, proxy) senza richiedere speciali configurazioni o interventi da parte dell’amministratore di rete. Vediamo come questo è possibile.

Skype Connection

L’architettura di Skype permette di appoggiare le chiamate tra questi client a supernodi che accettano connessioni in ingresso, e che funzionano come relay per le chiamate di altri client.
Quando un utente effettua una chiamata, per prima cosa tenta di contattare direttamente la destinazione finale, e se questa è in grado di accettare connessioni, viene stabilito un collegamento diretto tra i due client (1). Se il destinatario non è in grado, il chiamante si rivolge al Global index (con il quale tutti i client sono in costante comunicazione) e gli comunica di chiedere al destinatario di provare ad iniziare la comunicazione. Se il chiamante accetta connessioni in ingresso, anche in questo caso si stabilisce un collegamento diretto, che offre la minore latenza possibile e la maggiore affidabilità (2).
Se neppure il chiamante è in grado di accettare connessioni, quindi entrambi i client sono dietro NAT/firewall/proxy, la chiamata viene stabilita con l’aiuto di un supernodo, che agisce da relay per la comunicazione. In pratica tutto il traffico tra chiamante e chiamato passa per il supernodo, senza mettere mai in comunicazione diretta i due utenti (3). Usando una metafora, è una specie di passaparola, invece di un discorso faccia a faccia.
Tutti i pacchetti costituenti la comunicazione passano per il supernodo, il quale non è comunque in grado di interpretarli, poichè sono criptati da entrambi i client. Tutto il traffico voce, instant messaging e file transfer è criptato tra il chiamante ed il chiamato.

Sniffando il traffico, si è potuto constatare che tutto il traffico relativo all’autenticazione ed al collegamento iniziale tra client usa una versione modificata del protocollo http, mentre le conversazioni, lo scambio file e l’instant messaging usano un protocollo criptato proprietario.

C’è stato parecchio studio relativo alle connessioni tra client dietro NAT, ed infatti Skype utilizza diverse tecniche dette NAT traversal. Una delle tecniche più diffuse si chiama hole punching, e implica l’utilizzo di pacchetti UDP per attraversare il NAT. A dispetto del nome, questa tecnica non viola le policy di sicurezza, ma serve per “informare” il router NAT che la connessione è stata richiesta da uno dei due estremi della connessione.

A causa di questa architettura è facile capire come le implicazioni di sicurezza debbano essere attentamente valutate. Skype sostiene che le comunicazioni rispondono ai seguenti requisiti:
Confidenzialità: Il contenuto della comunicazione deve essere accessibile solo agli interessati, e l’identità dei partecipanti deve essere verificata.
Integrità: Le comunicazioni devono essere autenticate e verificabili, e non devono essere corrotte o modificate durante il trasporto.
Disponibilità: I servizi di Skype devono essere accessibili e disponibili agli utenti autenticati.

Skype basa il concetto di riconoscibilità di un utente sul suo username, che, insieme alla password assicura l’identità della persona.
Al momento del collegamento alla rete, l’utente viene autenticato per mezzo della password, e gli viene fornito un certificato, con validità temporale limitata, firmato elettronicamente da Skype (che usa la parte privata della propria chiave RSA, mentre la chiave pubblica è incorporata nel client). Queste credenziali vengono scambiate tra gli utenti al momento della connessione. La presenza di una firma elettronica valida viene usata per accertare l’identità del chiamante senza dover contattare un server centrale. Come sempre il consiglio è di usare password “forti”, poichè un malintenzionato in possesso del nome utente (che è pubblico) e della password, può facilmente spacciarsi per un’altra persona (furto di identità).

Tutto il contenuto delle comunicazione tra due utenti Skype è criptato, dall’origine alla destinazione, e ciò è particolarmente importante in considerazione del fatto che spesso i pacchetti viaggiano per mezzo di un client supernodo, che non deve avere alcun accesso ai contenuti.
Questo è ciò che Skype afferma, ma non vi è modo di sapere se la crittografia è esente da debolezze, o se lo sarà in futuro.

Al momento del collegamento, i client si scambiano i loro certificati, per essere sicuri di comunicare con il vero interlocutore, quindi decidono una chiave a 256 bit per criptare il traffico. La tecnica usata è AES-256 (Advanced Encryption Standard a 256 bit).
La chiave scambiata è unica per la sessione e non viene riutilizzata. Nel caso di sessioni multiple, vengono utilizzate chiavi diverse per ciascuna sessione.

In realtà, Skype rifiuta di fornire particolari riguardanti la gestione delle chiavi, il sistema di autenticazione e il modo di implementare la crittografia, quindi è possibile che il traffico sia criptato ma non sicuro. Ad esempio, se le chiavi fossero memorizzate sul computer, ci potrebbe essere un modo per recuperarle e compromettere la sicurezza.
Una delle caratteristiche del client è la possibilità di autoaggiornarsi. Va tenuto conto che tutto il traffico generato dal client e non strettamente legato alla comunicazione, è in chiaro, e non si sa quale parte di questi dati siano visibili ad un supernodo, né se il supernodo sia in grado di vedere tutto il traffico della rete oppure una piccola parte di esso.
Una diretta conseguenza di ciò potrebbe essere la possibilità di forzare un aggiornamento a determinati client con versioni non “innocenti” del programma, che permettano di conoscere le chiavi per decifrare le conversazioni. Per sperare che ciò non avvenga dobbiamo fidarci della buona volontà dei programmatori di Skype.

Ritengo comunque improbabile la presenza di una backdoor che permetta di intercettare il traffico, poiché una sua eventuale scoperta comprometterebbe la fiducia dell’utenza, che abbandonerebbe rapidamente il sistema. Non credo sia un caso che la società sia basata in Lussemburgo: è il modo migliore per stare lontani dalle istituzioni statunitensi che potrebbero chiedere di inserire una backdoor per intercettare le comunicazioni

Malgrado questo, una conversazione Skype è sempre molto più sicura e riservata di una qualunque telefonata tradizionale, che è intercettabile con minore sforzo da chiunque abbia fisicamente accesso ad un punto qualunque della linea telefonica.

Una soluzione sicuramente più sicura è una connessione VoIP tunnellata dentro una VPN (rete privata virtuale), ma per scopi ed architettura non si tratta di un sistema confrontabile con Skype.

In ogni caso le raccomandazioni per ottenere la massima sicurezza da Skype sono abbastanza semplici:

  • Assicurarsi di non avere virus, spyware o adware installati sul PC.
  • Utilizzare password “forti”.
  • Cambiare spesso password.
  • Se si scambiano informazioni e /o dati sensibili, assicurarsi, con metodi alternativi, dell’identità della persona con la quale si sta comunicando, perchè potrebbe non essere la stessa persona con la quale si è comunicato in precedenza.
  • Dedicare ai file trasferiti le stesse attenzioni che si riservano agli allegati di posta elettronica.
  • Tenete sempre presente che la trasmissione viene decodificata all’altro capo, quindi il vostro interlocutore potrebbe registrare la vostra voce o comunque farne usi che a voi non piacciono.
  • Se fate della paranoia una ragione di vita, staccate il microfono mentre non lo usate.

Una nota a margine riguarda i supernodi. Non c’è modo per un utente di sapere se il proprio computer sta funzionando come supernodo, e ci sono diversi indizi del fatto che lo stato di supernodo implichi un consumo considerevole di banda, che potrebbe arrivare ad essere uguale al doppio della banda di tutte le comunicazioni che il supernodo sta “proxando” in un dato momento.
Non è chiaro se i supernodi siano coinvolti anche nel traffico Skype-In e Skype-Out, cioè i servizi a pagamento che vengono offerti per ricevere ed effettuare chiamate da/per linee telefoniche tradizionali.
Va considerato comunque che la banda ha un costo e Skype ottiene guadagni anche tramite i cicli di clock e la banda dei computer supernodo.

Ricapitolando, cerchiamo di rispondere alle domande poste all’inizio. Skype è un sistema potenzialmente molto sicuro, ma per considerarlo tale si richiede un atto di fiducia nei confronti dei suoi creatori. Le sue comunicazioni sono ragionevolmente più sicure di una telefonata tradizionale, ma vanno osservate le normali precauzioni da prendere nel caso di utilizzo di programmi di comunicazione (in senso lato). Non possiamo essere sicuri che le conversazioni non siano intercettabili, o comunque che non lo saranno in futuro, finché l’architettura su cui si basa non verrà resa pubblica.

Al momento Skype gareggia con pochi altri in questa corsa al VoIP, ma già altri contendenti si stanno affacciando. In particolare si attende lo sviluppo e la diffusione di sistemi Open Source, che per loro natura (codice aperto), hanno maggiori garanzie di sicurezza rispetto ad una soluzione proprietaria “chiusa”: si è visto come la maggior parte delle perplessità riguardo la sicurezza di Skype, derivino dal fatto che esso è un sistema proprietario e che il codice non è disponibile.

Riferimenti:

Tags: ,

61 Commenti

dune | #

Mi è appena accaduto che una mia comunicazione chat con skype è stata violata e seguita passo passo da una terza persona!! Sono ancora sotto schock per quanto accaduto!! Ritengo che il mio pc sia sicuro avendo fatto girare più volte antivirus, che non hanno trovato nulla, e utilizzo password forti.
Perciò il problema dovrebbe essere relativo al pc con il quale comunicavo. Furto di password?? E’ possibile captare i messaggi chat su un terzo pc accedendo contemporaneamente con la stessa login e password?? E se questo accade esiste un modo per monitorare accessi contemporanei?? O esistono programmi in grado di decodificare una comunicazione chat?? Tutto ciò pone un problema di sicurezza enorme e vorrei sapere come risolverlo. Ovviamente tutto è documentato dalle registrazioni!! Grazie per l’attenzione

claudio | #

ma si puo’ sapere il telefono di skype per parlare con l’assistenza ancora non mi hanno consegnato e messo in funzione un bonifico fatto per acquistare l’abbonamento skype out ch edevo fare perfavore rispondetemi grazie

Mirko | #

Complimenti per l’articolo, una sola domanda, essendo datato 2005, di tutte le infomazioni contenute ce ne’ qualcuna scaduta o aggiornata?

Grazie

Mirko

mario | #

come devo fare per cancellare alcuni indirizzi da skype?

giuseppe | #

non riesco a connetermi a skyp . cssa devo fare aiutatemi

SPY | #

Skype comunque non è sicuro…

save | #

bell’articolo ma.. perchè se il p2p dovrebbe essere cosi vantaggioso skype su smartphone fa cacare e si sente malissimo? Forse perchè utilizzando una connessione 3g o debole wifi un programma che continua ad aprire e chiudere connessioni come prevede un’architettura p2p non va assolutamente bene!

giulio | #

Scusate vorrei sapere se una persona mi dice di chiamarmi da Madrid, invece mi compare Milano è possibile o mi prende in giro. Grazie è molto importante. Giulio