SINGLE SIGN ON
Internet è fatta di tanti servizi sparsi qua e là, sistemi distribuiti a più non posso. Ogni servizio richiede in genere che uno si iscriva e che poi ad ogni utilizzo si autentichi. Capita quindi di dover iscriversi a decine di cose diverse, con decine di account e password diverse.
Questo significa 2 cose:
- i miei dati sono noti a tanti siti diversi;
- ho tante password in giro, il che vuol dire che per non dimenticarle le faccio tutte uguali, con gli ovvi problemi di sicurezza che ciò comporta.
Allora si è pensato bene di inventare sistemi Single Sign On, in cui i servizi distribuiti cooperano e si rifanno tutti ad una singola credenziale.
Deve quindi esserci un dominio principale, che è quello dove effettivamente io mi registro, e i domini secondari devono ripescare le mie info da quello principale. Quindi, la mia login viene effettuata solo sul dominio principale. È poi il dominio principale a comunicare ai secondari che l'autenticazione è riuscita.
Ci sono due modi di implementare questo sistema: farlo centralizzato o creare una federation.
SSO centralizzato
Un'entità ha tutti i miei dati, e va quindi ben protetta. I secondari si rivolgono a lei e si scambiano info sull'autenticazione tramite protocolli come SAML (Security Assertion Markup Language) e SOAP (un protocollo per scambiarsi messaggi in XML, usando in genere HTTP come trasporto, ma anche SMTP, volendo).
SAML contiene delle asserzioni, cioè delle affermazioni che possono essere:
- di autenticazione: identifica un utente;
- di attributi: trasportano caratteristiche di un utente, eg il suo numero di carta di credito;
- di permessi: dicono che cosa un utente può fare.
Di per sé SAML non autentica niente, serve solo per trasportare info su di un utente.
Microsoft .NET Passport
Microsoft ha inventato il sistema Passport, che è un SSO centralizzato, e qui vediamo un po' come funziona.
La registrazione avviene al server centrale Passport. Ogni utente da questa registrazione riceve un PUID, cioè un Password User ID. I siti esterni che si rifanno a Passport non ricevono info di autenticazione da parte del server Passport centrale, ma solo messaggi che dicono "Ok, l'auth è andata a buon fine".
La registrazione si cerca di fare che sia il più sicura possibile. Si utilizza il CAPTCHA, ovvero una forma di Challenge Response per umani.
Il CAPTCHA lo conoscete tutti: spesso sarà capitato di doversi iscrivere ad un sito e di dover inserire le lettere tutte storte e deformate che appaiono. In pratica si tratta di un test di Turing, ma all'incontrario: il test di Turing serviva per distinguere le macchine dagli umani, qui serve per distinguere gli umani dalle macchine. Sono immagini fatte in modo tale che solo un uomo possa distinguerle, così da evitare registrazioni automatiche. In realtà poi diversi di questi CAPTCHA sono stati crackati, ma è un'altra storia.
Infine, si invia un'email per la conferma della registrazione.
Quando entro su di un sito partecipante, iscritto a Passport, questo sito mi rinvia appunto alla pagina di login di Passport. Se tutto va bene, Passport invierà a me 3 cookie criptati, i quali conterranno:
- il mio PUID e il timestamp (perché dopo un po' la mia auth scadrà);
- le mie info di profilo;
- i siti che ho precendentemente visitato!
La storia dei siti precedentemente visitati è stata giustificata dicendo che magari un certo sito non vuole che un utente abbia visitato precedentemente la concorrenza.
Tanto per fare un po' di storia, Passport è stato abbandonato a favore di Windows Live ID, e quest'ultimo non è più spacciato per SSO ma è offerto come un sistema di autenticazione tra gli altri. Passport aveva delle falle di sicurezza che permettevano di rubare un'identità tramite un semplice browser (!!). Inoltre, come al solito con Microsoft, la prima versione della licenza permetteva a Microsoft di disporre dei dati personali degli utenti.
La faccenda dei siti precedentemente visitati, a mio, avviso, si spiega facendo riferimento al mercato fiorente che riguarda le abitudini degli internauti. Per le aziende che operano su Internet è di fondamentale importanza sapere esattamente che gusti ho, per potermi venire incontro meglio. Questo è ciò a cui le varie Licenze di servizi di posta etc. si riferiscono quando parlano di utilizzo da parte di società dei nostri dati a fini commerciali etc. etc.
Ma torniamo a noi. Questi tre cookie infami vengono crittati, e siccome vengono memorizzati sul computer dell'utente, il sito affiliato può recuperarli se gli servono.
Siccome i cookie sono sì crittati, ma il canale di trasporto su cui viaggiano no, in genere si usa SSL (Secure Socket Layer) per queste comunicazioni.
Ma c'è dell'altro. L'autenticazione di primo livello è composta semplicemete da una coppia login - password. Quella di secondo livello invece tira in ballo un PIN, che in modo simile ai PIN dei cellulari posso sbagliare al max 5 volte di fila. Se sbaglio 5 volte, allora mi vengono fatte 3 domande tra le 10 che ho creato in fase di registrazione. E adesso potete dare un nuovo significato alla parola paranoia.
Ovviamente, siccome tutto è centralizzato, Passport ha un single point of failure. Ecco qualche interessante metodo per aggirare tutto questo bailamme.
Attacco passivo: io, Bad Guy, creo un sito che assomiglia in tutto e per tutto a quello di Passport, ma magari con un indirizzo lievemente diverso (eg Pasport con una s sola). L'utente poco avveduto si registrerà presso di me:)
Attacco attivo:: il cattivone si inserisce nel canale di comunicazione tra utente e sito affiliato a password, e crea una copia per sé delle info che l'utente invia a password.
Attacco DNS:: inquino i record DNS del mio utente, così che quando viene indirizzato a www.passport.com, l'IP è quello del mio server cattivone, il quale offre la stessa interfaccia.
SSO Federation
Per evitare la centralizzazione, si è pensato di dividere i dati sensibili di un utente in più domini. Ciascun dominio possiede una mia identità parziale, mentre l'unione di tutte le mie identità parziali dà luogo alla mia identità di rete.