Raffaele Rialdi, Vevy Europe Visual Developer Security MVP Email: [email protected] Blog: http://blogs.ugidotnet.org/raffaele MVP Profile: http://mvp.support.microsoft.com/profile/raffaele Agenda 1. La teoria 2. La tecnologia 3. L'implementazione Crisi di identità • Problemi di privacy – Identificare pur restando anonimi (forum, chat, ...) – Identificare in modo certo (banche, sportelli virtuali) Vulnerabile User/Pwd Costoso • L'identità cambia a seconda del contesto – Identità virtuali diverse per ogni dominio non in trust – Identità virtuali spesso differenti da quella fisica • L'identità custodita da un sito A potrebbe essere riutilizzata dall'utente nel sito B – Il sito A potrebbe usare la password all'insaputa dell'utente • Password deboli o difficili da ricordare PKI X.509 Difficile PKI X.509 .... Si parla di identità • È un insieme di informazioni che descrivono in qualche modo un utente o una entità • Le applicazioni usano queste informazioni per – Identificare in modo univoco (nel proprio dominio) – Autorizzare ciò che l’utente può fare nell’applicazione – Personalizzare il contenuto erogato all’utente/entità • Il contenitore sulle informazioni relative all’identità è normalmente chiamato “Token” – Il formato cambia a seconda del metodo di autenticazione Leggi dell'identità 1, 2, 3 1. User Control and Consent L'utente deve essere consapevole quando viene identificato e quali informazioni vengono rivelate – Windows Authentication e Passport non rispettano questo requisito 2. Minimal disclosure for a constrained use L'identificazione deve avvenire fornendo solo le minime informazioni necessarie – Least identifying information 3. Justifiable Parties Il sistema di identificazione deve coinvolgere solo le parti che sono coinvolte nel dialogo – Passport implicava l'identificazione da parte di Microsoft anche per su siti non Microsoft http://www.identityblog.com Leggi dell'identità 4, 5 4. Directional Identity L'identità deve essere direzionale. Se è omnidirezionale è pubblica a tutti. Se è monodirezionale è contestuale a quel server – – 5. Il provider delle identità deve supportare sia identità pubbliche che private L’utente non sempre desidera che il server a cui si collega possa rivelare informazioni su di se Pluralism of operators and technologies È necessario un metasystem Un utente può avere più identità da spendere in contesti differenti (banche, forum, sportelli comunali, ...) e l'interoperabilità tra provider di identificazione deve essere possibile http://www.identityblog.com Leggi dell'identità 6, 7 6. Human Integration L'essere umano deve poter gestire e scegliere l'identità in modo chiaro e semplice. Il canale uomo-macchina è difficile da proteggere. – password difficili da ricordare e facili da trovare o sniffare 7. Consistent experience across contexts L'utente deve poter scegliere l'identità in modo semplice e trasparente a prescindere dal contesto (tecnologie e provider coinvolte in quel contesto) http://www.identityblog.com Identity Metasystem • Consiste nell’uso di una serie di protocolli standard (WS-*) che permettono di far dialogare tre attori: – Subject: l'utente o il servizio che deve dimostrare la propria identità – Relying Party (RP): il sito web/servizio che deve identificare chi si collega – Identity Provider (IP): l'entità che genera il token con le informazioni e che ne garantisce la veridicità • Il Security Token Service (STS) permette di convertire un token in un altro formato o trasformare i claim • Il security token è espresso nel formato standard SAML (Security Assertion Markup Language) I protocolli standard • WS-SecurityPolicy – descrive il token di sicurezza e i claim richiesti dalla policy • WS-MetadataExchange – permette di richiedere e ricevere le policy Identity Provider Relying Party Identity Provider Relying Party Kerberos SAML x.509 Custom Security Token Service WS-Security Policy Security Token Service WS-Security Policy • WS-Trust – protocollo per richiedere e ricevere il token (STS) • Request for a Security Token (RST) • Request for a Security Token Response (RSTR) WS-Trust, WS-MetadataExchange Identity Selector Subject • Gli Identity Provider hanno al loro interno un Security Token Service (STS) • Cardspace (cioè la gestione dell'interfaccia utente) è "ignorante" nei confronti dei formati dei token I claim (asserzioni) • Chi ci autentica ha bisogno di asserzioni che servono per il processo di autorizzazione • Alcuni claim per Raffaele Rialdi – – – – È uno developer È sposato Ha ricevuto l'award MVP Ha un blog all'indirizzo http://blogs.ugidotnet.org/raffaele • L'identità digitale di un soggetto è data da un insieme di asserzioni fornite in modo sicuro e verificabile da un provider di identità Role Claim based authentication • I ruoli forniscono diritti agli utenti per eseguire azioni o accedere a risorse – Presuppone di identificare l'utente e poi verificare se ha un certo diritto – Il Principal di .NET incapsula utente e rispettivi ruoli • I Claim sono asserzioni che viaggiano all'interno del token – La loro veridicità dipende dall'Identity Provider – Anche una carta di identità può essere falsa, nonostante il suo IP sia credibile • È veramente necessario identificare un utente per assegnargli un diritto? – Per verificare l'età di una persona non è necessario conoscerne il nome • I token di accesso di Windows – non sono stati progettati per essere cross-platform – sono erogati da sistemi operativi (i claim possono essere erogati anche da altre entità) – I SID e le ACL nei token sono utili solo all'interno dell'OS. I Claim hanno significato ovunque il loro Identity Provider sia trusted Agenda 1. La teoria 2. La tecnologia 3. L'implementazione Cos'è Cardspace? • Cardspace è l'implementazione Windows per la scelta delle Infocard che rappresentano le identità dell'utente • I vantaggi di Cardspace sono – Rendere all'utente semplice ed economico l'uso dei certificati digitali (PKI) – Niente più username/password – Addio Phishing • Mono è in Work-in-progress su Cardspace • Firefox ha un plugin funzionante • Linux ha un Identity Provider di PingIdentity.com Interazione uomo - PC • Niente più password, solo "Card" • UI isolata in un altro desktop • L'infrastruttura completa comprende: – Il motore principale (Infocard.exe) • gira come Localsystem, dialoga con UI via RPC • Include un Identity Provider locale – L'interfaccia utente di CardSpace (icardgt.exe) • gira con l'account utente – Un control panel applet (InfoCardCpl.Cpl) – I componenti per aprire la UI da IE7 e WCF Le Infocard • Contengono metadati sui Claim compilati, non i valori effettivi • I dati delle Infocard non escono mai dal PC (se non quando sono esportate dall'utente) • È l'utente a chiedere all'IP il token e a passarlo, solo se vuole, alla RP – Il token non è usabile neppure dal Subject ma transita solo tramite l'utente – Il Subject può chiedere un secondo token di "preview" per verificare le informazioni prima di inviarle Le Infocard • Un Infocard store per user (Cardspace.db) \Users\<user>\AppData\Local\Microsoft\ CardSpace\ \Documents and Settings\<user>\Local Settings\Application Data\Microsoft\ CardSpace\ Vista XP/2K3 • Le ACL dello store abilitano solo Localsystem • Criptato due/tre volte con: – Machine Key. Se lo store è copiato su un'altra installazione è inutilizzabile • In caso di crash recovery le card sono perse. Backup!!! – User Key (basato sulle credenziali utente). Se l'utente non è loggato, la chiave non è neppure presente sulla macchina • Se la password viene resettata, le card sono perse. Backup!!! – Pin. Se l'utente vuole, può proteggere ogni card con un pin • Il backup esporta le card criptandole con una password chiesta al momento dell'esportazione Contenuto di una Infocard (.crd) • Uno o più URL dell'indirizzo IP dell'STS – Necessario per recuperare il Security Token che contiene i Claim • I tipi di Claim che saranno contenuti dentro il Security Token – L'IP li cripta con la chiave pubblica della Relying Party • I tipi di Security Token creabili dall'Identity Provider • I valori dei Claim sono sempre e solo custoditi dentro l'Identity Provider Self issued cards • L'utente è Identity provider di se stesso • È lo scenario più diffuso in internet – Forum, community, siti aziendali, ... • I Claim sono garantiti dall'IP e quindi non necessariamente "veri" • La distinzione tra registrazione iniziale e login non ha più senso – Cardspace ci ricorda quali cards sono state usate su un sito Subject Relying Party Managed cards emesse da RP • L'Identity Provider è il sito web / servizio • Scenario comune dove l'utente possa accedere solo dopo approvazione della relying party – Listini rivenditore, siti come ebay, banche, ... • I Claim sono stabiliti da RP e perciò affidabili • La RP deve erogare una cards al Subject prima che questo possa accedere Subject Relying Party Managed cards con IP indipendente • La Relying Party deve fidarsi dell'Identity Provider – Cardspace può nascondere all'IP l'identità della RP • Scenario dove una sola card abilita più relying party – Equivalente di una "carta di identità" – Siti governativi, aziende associate ("federate"), • I Claim sono affidabili • La IP deve erogare una card al Subject Subject Relying Party 3. filtro delle card / IP che soddisfano RP 4. scelta della card con Cardspace 1. Richiesta di accesso al sito Relying Party 7. Token ok? 2. Risposta con requisiti di autenticazione Subject 6. 5. Richiesta Token 8. Token di autenticazione a RP STS • Active Directory Security Token Service (AD/STS) – usa kerberos • Linux STS (PingIdentity.com) Self issued cards • Le personal cards possono avere solo 12 Claim: – GivenName, Surname, EmailAddress, StreetAddress, Locality, StateOrProvince, PostalCode, Country, PrimaryPhone, DateOfBirth, Gender – PrivatePersonalIdentifier (PPID, non appare nella UI) • PPID viene generato la prima volta che viene usato • PPID viaggia dentro il token criptato e non è intercettabile – RP lo legge in chiaro • PPID non viene mostrato all'utente (Social Engineering) • PPID è differente per ogni Relying Party – RP non può usare il PPID per rubare info su altri siti • Quindi PPID è già più sicuro di una password, ma ... Private Personal Identifier (PPID) • Se l'hacker ruba il PPID alla relying party • Se l'hacker si scrive un suo Identity Provider • Se l'hacker genera una propria card con quel PPID • Soluzione: Non usare PPID ma una combinazione tra PPID e la public key dell'Issuer (l'Identity Provider) • Come: In TokenProcessor.cs viene esposta la proprietà UniqueID che combina queste due cose PPID • L'unico Claim di una personal card che l'utente non ha modo di modificare • Derivato dalla master key del certificato SSL – Se il certificato è EV, usa Organization, Location, State, Country – Se il certificato è standard, usa il campo subject di tutte le certification authority concatenate – Quindi il PPID è sempre differente, da website a website • La classe TokenProcessor espone una proprietà (UniqueID) che è l'hash di PPID e la public key dell'issuer Prerequisiti: certificato SSL • Cardspace richiede un certificato SSL sul webserver/servizio • La certificate authority deve essere valida e la certificate revocation list deve essere raggiungibile – Commerciale (indispensabile per Internet) • Certificato Standard: ~18 … 250$ / anno • Certificato Extended Validation (EV): ~400 … 900$ / anno – Win2K3 Certificate Authority per Intranet / Test – OpenSSL Certificate Authority per Intranet / Test • Chi, come, cosa, ... sui certificati – http://technet2.microsoft.com/windowsserver/en/library/fb3df0cd-0aae472b-9e9c-bb8ca878bc341033.mspx – http://snipr.com/1nbn9 Certificati di test • Affinché i certificati siano validi è necessario che: – – – – La Certificate Authority sia valida. Es: Adatum.com Il certificato server sia valido. Es: Fabrikam.com La revocation List sia disponibile. Es: Adatum.crl Il file Hosts mappi su localhost la Adatum e Fabrikam • One-time WCF Setup – http://msdn2.microsoft.com/en-us/library/ms751527.aspx – Tools: Fx3Samples\WCF_Samples\Setup\CS • Cardspace Certificates Setup – http://msdn2.microsoft.com/en-us/library/aa967570.aspx – Tools: Fx3Samples\CardSpace_Samples\CreatingManagedCards\CS Agenda 1. La teoria 2. La tecnologia 3. L'implementazione Integrazione Asp.net - Cardspace • Activex – <object> ... </object> • XHTML behaviour – <ic:> Asp.net e la login mista Token Cardspace postato Si User era loggato? No Si Loggato con Usr/Pwd? Si Aggiorno il profilo registrato con CS? No No Si Associo il profilo con Cardspace Utente già loggato con Cardspace registrato con Usr/Pwd? No Associare il profilo solo perché l'email coincide, è errato Utente non registrato (nuovo utente) Aggiorno il profilo Creo Utente Aggiorno il profilo L'utente è loggato e l'associazione ha senso Dare i permessi ad un certificato 1. Aprire una Cmd come administrator 2. c:\> FindPrivateKey My localmachine – FindPrivateKey è negli esempi del Fx 3.0 WCFSamples\TechnologySamples\Tools\FindPrivateKey\CS 3. Scegliere il certificato e copiare la voce "Thumbprint" Dare i permessi ad un certificato 4. Trovare il nome del file per quel certificato: FindPrivateKey my localmachine –t "thumbprint" -a Dare i permessi ad un certificato 5. Visualizzare i permessi sul file Cacls nomefile 6. Riassegnare i permessi sul file aggiungendo network_service Cacls nomefile /G System:F Administrators:F NetworkService:R Full Control Full Control 7. Verificare i permessi nuovamente (punto 5) Read Domande?