SSL/TLS | [email protected] | Web Security Problemi Integrità Confidenzialità Ascolto sulla rete Furti sulla macchina server SSL può risolvere alcuni problemi, ma misure di sicurezza fisica restano necessarie Autenticazione Impersonificazione Denial of service, Web server modificati | [email protected] | Applicazione di SSL/TLS Modifica dei dati, inserzione SSL (Secure Socket Layer) Originariamente sviluppato da Netscape La versione 3 è disegnata contributi pubblici Standardizzazione presso IETF Comitato TLS (Transport Layer Security) formato TLS considerabile SSL v3.1 Compatibile con SSL v3 | [email protected] | Due concetti di SSL Sessione SSL Un’associazione tra client e server Definisce un insieme di parametri crittografici creati dal protocollo di Handshake Può essere condivisa da diverse connessioni SSL Usata per evitare costose negoziazioni dei parametri criptografici per ogni connessione Connessioni SSL Un link di comunicazione sicuro, paritetico, transiente Associata con (derivata da) una sessione SSL Entrambe con diversi parametri che definiscono Session state Connection state | [email protected] | Stack di protocolli SSL Usa protocollo TCP: consegna dati affidabile Aggiunge funzioni di sicurezza SSL non è un protocollo singolo: protocollo a due livelli SSL SSL Change Handshake Cipher Spec protocol protocol SSL Alert protocol SSL Record protocol TCP IP | [email protected] | HTTP SSL Record protocol Dati applicativi Frammentazione Compressione Aggiunta MAC Cifratura Aggiunta header SSL Record protocol | [email protected] | Change Cipher Spec protocol Protocollo molto semplice: singolo comando tra client e server Il nuovo stato stabilito dal protocollo di handshake è uno stato di pending non ancora valido Il protocollo Change Cipher Spec rende attivo lo stato di pending: cambiano I parametri di connessione | [email protected] | Alert protocol Trasferisce gli alert collegati a SSL alle entità in connessione Reso sicuro con il Record protocol usando i parametri di connessione attuali Ogni messaggio è di due byte Un bite per la severità dell’alert Warning: connessione può essere ripristinata Fatal: connessione terminata Un bite per il tipo (alert code) | Unespected message Bad record MAC Decompression failure Handshake failure Illegal parameter Close notify No certificate Bad certificate Unsupported certificate Certificate revoked Certificate expired Certificate unknown [email protected] | Handshake protocol Consente a client e server Mutua autenticazione Negoziazione di crittatura e protocollo MAC Negoziazione delle chiavi crittografiche Stabilire uno state Eseguito prima di qualsiasi trasmissione di dati Eseguito anche se si riutilizza una sessione già esistente | [email protected] | Handshake protocol Type 1byte | Length 3 byte Content ≥ 0 byte Tipo messagio Parametri Hello_request null Client_hello Versione, random, id sessione, suite di cifratura, metodo di compressione Server_hello Versione, random, id sessione, suite di cifratura, metodo di compressione Certificate Catena dei certificati X.509 Server_key_exchange Parametri e firma Certificate_request Typo e CA Server_done Null Certificate_verify Firma Cleint_key_exchange Parametri e firma Finished Valore hash [email protected] | Handshake protocol Client Server Fase 1 Definizione delle caratteristiche di sicurezza (numero di protocollo, ID sessione, suite cifratura, metodo di compressione, numeri random iniziali) Fase 2 Tempo Invio del certificato del server, invio chiavi server, eventuale richiesta certificato client, fine fase di hello Fase 3 Invio del certificato del client (se richiesto), invio chiavi client, invio verifica del certificato Fase 4 Modifica della siute di cifratura e fine del protocollo di handshake | [email protected] | Handshake fase 1 client_hello (lista delle preferenze del client) versione: la maggiore supportata dal client Numero random del client Incluso il time stamp per evitare attacchi di replay ID di sessione ≠ 0 richiesta di sessione già esistente per aprire la nuova connessione = 0 il client vuole aprire una nuova sessione Metodo di compressione supportato dal client Suite di cifratura Lista degli algoritmi di crittazione supportati dal client in ordine di preferenza Ogni elemento è un algoritmo di scambio delle chiavi | [email protected] | Handshake fase 1 server_hello (risposte alle richieste del client) versione: quella proposta dal client se supportata, se no massima supportata dal server Numero random del server ID sessione Se l’offerta fatta dal client è ancora supportata uguale a quello del client Nuovo ID assegnato dal server Metodo di compressione scelto dalla lista del client Suite di cifratura scelta dalla lista del client | [email protected] | Metodi di scambio delle chiavi Prima è scambiato un pre-master secret Da questo si deriva un master secret Le altre chiavi sono derivate dal master secret | [email protected] | Scambio del pre-master secret RSA Server manda il proprio certificato con chiave pubblica del server Client cripta il pre-master secret con la chiave pubblica del server e lo invia Diffie-Hellman (DH) a parametri fissi I parametri DH di server e client sono fissi e scambiati con i certificati Ephemeral DH I certificati server e client contengono le chiavi RSA Server crea i parametri DH (one-time) e li firma digitalmente Anonymous DH Nessun certificato, nessuna autenticazione, invio dei soli parametri DH vulnerabile ad attacchi MITM | [email protected] | Handshake fase 2 certificate (server) Necessario per autenticare il server Con DH a parametri fissi si hanno tutte le informazioni per lo scambio di chiavi non serve la fase di scambio delle chiavi server_key_exchange Non serve per DH a parametri fissi e RSA (se RSA non è solo per firma) Contenuto del messaggio dipende dal metodo scelto Anonymous-DH: parametri DH pubblici e chiave pubblica del server Ephemeral DH: come sopra più firma su scambio chiave RSA Firma contiene valori numerici scambiati nella fase di hello | [email protected] | Handshake fase 2 certificate_request Il server può chiedere il certificato client (non usuale) mutua AuthN Due campi: Tipo di certificato (DH a parametri fissi, ephemeral DH, solo firma) Lista delle CA accettate dal server server_hello_done Server si mette in attesa della risposta del client | [email protected] | Handshake fase 3 Dopo server_hello_done client verifica il certificato server e i parametri hello certificate (client) Inviato solo se richiesto dal server client_key_exchange Contenuto funzione del metodo concordato RSA: pre-master secret (48-byte) criptato con chiave RSA del server DH a parametri fissi: sono nel certificato client messaggio null Anonymous o ephemeral DH Parametri e chiave pubblica inviati senza firma non c’è autenticazione del client! | [email protected] | Handshake fase 3 In questa fase non c’è autenticazione del client Chiunque può inviare il messaggio client_key_exchange certificate_verify Metodo di autenticazione del client Client firma con la propria chiave privata un messaggio contenente master secret e messaggi di handshake Eccetto per DH a parametri fissi che non ha chiave di firma E per DH a parametri fissi? Nessuna autenticazione Un attacante non può produrre le chiavi pre-master e master se non conosce le chiavi DH private | [email protected] | Handshake fase 4 change_cipher_spec Attiva le informazioni di cifratura scambiate e la connessione finished Un MAC creato sui messaggi di handshake usando il master secret Per verificare che la fase di handshake è andata a buon fine e che entrambe le parti hanno la stessa master secret finished del client verificato dal server e viceversa | [email protected] | Creazione del master secret Master secret: valore di 48-byte generato per sessione Creazione in due fasi pre-master secret scambiato durante handshake Con RSA: client crea, cifra e invia server decifra) Con DH: entrambi calcolano lo stesso valore master secret è calcola a partire da pre-master secret e stringhe random master_secret = MD5(pre_master_secret + SHA('A' + pre_master_secret + ClientHello.random + ServerHello.random)) + MD5(pre_master_secret + SHA('BB' + pre_master_secret + ClientHello.random + ServerHello.random)) + MD5(pre_master_secret + SHA('CCC' + pre_master_secret + ClientHello.random + ServerHello.random)); | [email protected] | TLS (Transport Layer Security) TLS definito in RFC 2246 Simile a SSL v3 con alcune differenze: Numero versione: 3.1 MAC: TLS usa HMAC con pad in XOR (SSL appende i pad) Alert code aggiuntivi Suite di cifratura uguali a SSL ad esclusione di Fortezza Client con ephemeral DH non sono accettati in TLS Ci sono differenza nel calcolo di certificate_verify e finished Usata una diversa funzione di generazione di numeri pseudo-random | [email protected] | © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY.