Sicurezza di rete - Livello di trasporto
La sicurezza della rete implica la protezione dei dati dagli attacchi mentre sono in transito su una rete. Per raggiungere questo obiettivo, sono stati progettati molti protocolli di sicurezza in tempo reale. Esistono standard diffusi per i protocolli di sicurezza di rete in tempo reale come S / MIME, SSL / TLS, SSH e IPsec. Come accennato in precedenza, questi protocolli funzionano a diversi livelli del modello di rete.
Nell'ultimo capitolo, abbiamo discusso alcuni protocolli popolari progettati per fornire sicurezza a livello di applicazione. In questo capitolo, discuteremo il processo per ottenere la sicurezza di rete a Transport Layer e i protocolli di sicurezza associati.
Per la rete basata su protocollo TCP / IP, i livelli fisico e di collegamento dati sono generalmente implementati nel terminale utente e nell'hardware della scheda di rete. I livelli TCP e IP sono implementati nel sistema operativo. Qualunque cosa al di sopra di TCP / IP viene implementata come processo utente.
Necessità di Transport Layer Security
Parliamo di una tipica transazione commerciale basata su Internet.
Bob visita il sito web di Alice per la vendita di merci. In un modulo sul sito web, Bob inserisce il tipo di merce e la quantità desiderata, il suo indirizzo e i dettagli della carta di pagamento. Bob fa clic su Invia e attende la consegna della merce con addebito dell'importo del prezzo dal suo account. Tutto ciò suona bene, ma in assenza di sicurezza di rete, Bob potrebbe avere qualche sorpresa.
Se le transazioni non utilizzavano la riservatezza (crittografia), un utente malintenzionato potrebbe ottenere i dati della sua carta di pagamento. L'aggressore può quindi effettuare acquisti a spese di Bob.
Se non viene utilizzata alcuna misura di integrità dei dati, un utente malintenzionato potrebbe modificare l'ordine di Bob in termini di tipo o quantità di merci.
Infine, se non viene utilizzata l'autenticazione del server, un server potrebbe visualizzare il famoso logo di Alice ma il sito potrebbe essere un sito dannoso gestito da un utente malintenzionato, mascherato da Alice. Dopo aver ricevuto l'ordine di Bob, poteva prendere i soldi di Bob e fuggire. Oppure potrebbe effettuare un furto di identità raccogliendo il nome di Bob e i dettagli della carta di credito.
Gli schemi di sicurezza del livello di trasporto possono risolvere questi problemi migliorando la comunicazione di rete basata su TCP / IP con riservatezza, integrità dei dati, autenticazione del server e autenticazione del client.
La sicurezza a questo livello viene utilizzata principalmente per proteggere le transazioni Web basate su HTTP su una rete. Tuttavia, può essere utilizzato da qualsiasi applicazione in esecuzione su TCP.
Filosofia di TLS Design
I protocolli Transport Layer Security (TLS) operano al di sopra del livello TCP. La progettazione di questi protocolli utilizza le popolari API (Application Program Interface) per TCP, chiamate "socket" per l'interfacciamento con il livello TCP.
Le applicazioni sono ora interfacciate direttamente con Transport Security Layer invece che con TCP. Transport Security Layer fornisce una semplice API con socket, che è simile e analoga all'API di TCP.
Nel diagramma sopra, sebbene TLS risieda tecnicamente tra l'applicazione e il livello di trasporto, dalla prospettiva comune è un protocollo di trasporto che funge da livello TCP potenziato con servizi di sicurezza.
TLS è progettato per funzionare su TCP, l'affidabile protocollo di livello 4 (non su protocollo UDP), per rendere la progettazione di TLS molto più semplice, perché non deve preoccuparsi del "timeout" e della "ritrasmissione dei dati persi". Il livello TCP continua a farlo come al solito che serve alla necessità di TLS.
Perché TLS è popolare?
La ragione per la popolarità dell'utilizzo di una sicurezza a Transport Layer è la semplicità. La progettazione e la distribuzione della sicurezza a questo livello non richiede alcuna modifica nei protocolli TCP / IP implementati in un sistema operativo. Solo i processi e le applicazioni utente devono essere progettati / modificati, il che è meno complesso.
Secure Socket Layer (SSL)
In questa sezione, discutiamo la famiglia di protocolli progettati per TLS. La famiglia include le versioni SSL 2 e 3 e il protocollo TLS. SSLv2 è stato ora sostituito da SSLv3, quindi ci concentreremo su SSL v3 e TLS.
Breve storia di SSL
Nel 1995, Netscape ha sviluppato SSLv2 e utilizzato in Netscape Navigator 1.1. La versione 1 di SSL non è mai stata pubblicata e utilizzata. Successivamente, Microsoft ha migliorato SSLv2 e ha introdotto un altro protocollo simile denominato Private Communications Technology (PCT).
Netscape ha sostanzialmente migliorato SSLv2 su vari problemi di sicurezza e ha implementato SSLv3 nel 1999. Successivamente, l'Internet Engineering Task Force (IETF) ha introdotto un protocollo simile TLS (Transport Layer Security) come standard aperto. Il protocollo TLS non è interoperabile con SSLv3.
TLS ha modificato gli algoritmi crittografici per l'espansione e l'autenticazione della chiave. Inoltre, TLS ha suggerito l'uso della crittografia aperta Diffie-Hellman (DH) e Digital Signature Standard (DSS) al posto della crittografia RSA brevettata utilizzata in SSL. Ma a causa della scadenza del brevetto RSA nel 2000, non c'erano validi motivi per gli utenti di passare da SSLv3 ampiamente diffuso a TLS.
Caratteristiche salienti di SSL
Le caratteristiche salienti del protocollo SSL sono le seguenti:
SSL fornisce la sicurezza della connessione di rete attraverso:
Confidentiality - Le informazioni vengono scambiate in forma crittografata.
Authentication- Gli enti di comunicazione si identificano a vicenda attraverso l'uso di certificati digitali. L'autenticazione del server Web è obbligatoria mentre l'autenticazione del client è mantenuta facoltativa.
Reliability - Mantiene i controlli di integrità del messaggio.
SSL è disponibile per tutte le applicazioni TCP.
Supportato da quasi tutti i browser web.
Fornisce facilità nel fare affari con nuove entità online.
Sviluppato principalmente per l'e-commerce Web.
Architettura di SSL
SSL è specifico per TCP e non funziona con UDP. SSL fornisce API (Application Programming Interface) alle applicazioni. Le librerie / classi C e Java SSL sono prontamente disponibili.
Il protocollo SSL è progettato per interagire tra l'applicazione e il livello di trasporto come mostrato nell'immagine seguente:
SSL in sé non è un protocollo a livello singolo come illustrato nell'immagine; infatti è composto da due sottostrati.
Il sottostrato inferiore comprende l'unico componente del protocollo SSL chiamato SSL Record Protocol. Questo componente fornisce servizi di integrità e riservatezza.
Il sottostrato superiore comprende tre componenti del protocollo relativi a SSL e un protocollo dell'applicazione. Il componente dell'applicazione fornisce il servizio di trasferimento delle informazioni tra le interazioni client / server. Tecnicamente, può funzionare anche sopra il livello SSL. Tre componenti del protocollo relativi a SSL sono:
- Protocollo di handshake SSL
- Modificare il protocollo delle specifiche di crittografia
- Protocollo di avviso.
Questi tre protocolli gestiscono tutti gli scambi di messaggi SSL e vengono discussi più avanti in questa sezione.
Funzioni dei componenti del protocollo SSL
I quattro componenti secondari del protocollo SSL gestiscono varie attività per la comunicazione sicura tra la macchina client e il server.
Protocollo di registrazione
Il livello di registrazione formatta i messaggi del protocollo di livello superiore.
Frammenta i dati in blocchi gestibili (lunghezza massima 16 KB). Facoltativamente comprime i dati.
Crittografa i dati.
Fornisce un'intestazione per ogni messaggio e un hash (Message Authentication Code (MAC)) alla fine.
Consegna i blocchi formattati al livello TCP per la trasmissione.
Protocollo di handshake SSL
È la parte più complessa di SSL. Viene richiamato prima della trasmissione dei dati dell'applicazione. Crea sessioni SSL tra il client e il server.
La creazione della sessione prevede l'autenticazione del server, la negoziazione di chiavi e algoritmi, la definizione delle chiavi e l'autenticazione del client (opzionale).
Una sessione è identificata da un insieme univoco di parametri di sicurezza crittografici.
Più connessioni TCP sicure tra un client e un server possono condividere la stessa sessione.
Azioni del protocollo di handshake attraverso quattro fasi. Questi sono discussi nella sezione successiva.
ChangeCipherSpec Protocol
La parte più semplice del protocollo SSL. Si compone di un unico messaggio scambiato tra due entità comunicanti, il client e il server.
Quando ogni entità invia il messaggio ChangeCipherSpec, cambia il suo lato della connessione nello stato sicuro come concordato.
Lo stato in sospeso dei parametri di cifratura viene copiato nello stato corrente.
Lo scambio di questo messaggio indica che tutti i futuri scambi di dati sono crittografati e l'integrità è protetta.
Protocollo di avviso SSL
Questo protocollo viene utilizzato per segnalare errori, come messaggi imprevisti, MAC con record errato, negoziazione dei parametri di sicurezza non riuscita, ecc.
Viene anche utilizzato per altri scopi, come notificare la chiusura della connessione TCP, notificare la ricezione di un certificato errato o sconosciuto, ecc.
Istituzione della sessione SSL
Come discusso in precedenza, ci sono quattro fasi per stabilire la sessione SSL. Questi sono principalmente gestiti dal protocollo SSL Handshake.
Phase 1 - Stabilire capacità di sicurezza.
Questa fase comprende lo scambio di due messaggi: Client_hello e Server_hello .
Client_hello contiene un elenco di algoritmi crittografici supportati dal client, in ordine decrescente di preferenza.
Server_hello contiene la Cipher Specification (CipherSpec) selezionata e un nuovo session_id .
CipherSpec contiene campi come -
Algoritmo di cifratura (DES, 3DES, RC2 e RC4)
Algoritmo MAC (basato su MD5, SHA-1)
Algoritmo a chiave pubblica (RSA)
Entrambi i messaggi hanno "nonce" per prevenire attacchi di replay.
Phase 2 - Autenticazione del server e scambio di chiavi.
Il server invia il certificato. Il software client viene configurato con chiavi pubbliche di varie organizzazioni (CA) "attendibili" per controllare il certificato.
Il server invia la suite di cifratura scelta.
Il server può richiedere un certificato client. Di solito non è fatto.
Il server indica la fine di Server_hello .
Phase 3 - Autenticazione client e scambio di chiavi.
Il client invia il certificato, solo se richiesto dal server.
Invia anche il Pre-master Secret (PMS) crittografato con la chiave pubblica del server.
Il client invia anche il messaggio Certificate_verify se il certificato viene inviato da lui per dimostrare di avere la chiave privata associata a questo certificato. Fondamentalmente, il client firma un hash dei messaggi precedenti.
Phase 4 - Fine.
Il client e il server si inviano messaggi Change_cipher_spec l'uno all'altro per far sì che lo stato di cifratura in sospeso venga copiato nello stato corrente.
D'ora in poi, tutti i dati sono crittografati e protetti dall'integrità.
Il messaggio "Finished" da ciascuna estremità verifica che i processi di scambio e autenticazione delle chiavi siano stati eseguiti correttamente.
Tutte e quattro le fasi, discusse sopra, avvengono all'interno della creazione della sessione TCP. La creazione della sessione SSL inizia dopo TCP SYN / SYNACK e termina prima di TCP Fin.
Ripresa di una sessione disconnessa
È possibile riprendere una sessione disconnessa (tramite messaggio di avviso ), se il client invia un hello_request al server con le informazioni di session_id crittografate .
Il server quindi determina se il session_id è valido. Se convalidato, scambia ChangeCipherSpec e termina i messaggi con il client e riprende le comunicazioni protette.
Ciò evita il ricalcolo dei parametri di cifratura della sessione e salva l'elaborazione sul server e sul client.
Chiavi di sessione SSL
Abbiamo visto che durante la fase 3 dell'istituzione della sessione SSL, un segreto pre-master viene inviato dal client al server crittografato utilizzando la chiave pubblica del server. Il master secret e le varie chiavi di sessione vengono generati come segue:
Il master secret viene generato (tramite generatore di numeri pseudo casuali) utilizzando -
Il segreto del pre-master.
Due nonce (RA e RB) scambiate nei messaggi client_hello e server_hello.
Sei valori segreti vengono quindi derivati da questo segreto principale come:
Chiave segreta utilizzata con MAC (per i dati inviati dal server)
Chiave segreta utilizzata con MAC (per i dati inviati dal client)
Chiave segreta e IV utilizzati per la crittografia (dal server)
Chiave segreta e IV utilizzati per la crittografia (dal client)
Protocollo TLS
Al fine di fornire uno standard Internet aperto di SSL, IETF ha rilasciato il protocollo TLS (Transport Layer Security) nel gennaio 1999. TLS è definito come uno standard Internet proposto nella RFC 5246.
Le caratteristiche più importanti
Il protocollo TLS ha gli stessi obiettivi di SSL.
Consente alle applicazioni client / server di comunicare in modo sicuro autenticandosi, prevenendo le intercettazioni e resistendo alla modifica dei messaggi.
Il protocollo TLS si trova al di sopra dell'affidabile livello TCP di trasporto orientato alla connessione nello stack dei livelli di rete.
L'architettura del protocollo TLS è simile al protocollo SSLv3. Ha due sotto protocolli: il protocollo TLS Record e il protocollo TLS Handshake.
Sebbene SSLv3 e il protocollo TLS abbiano un'architettura simile, sono state apportate diverse modifiche all'architettura e al funzionamento in particolare per il protocollo di handshake.
Confronto tra protocolli TLS e SSL
Esistono otto differenze principali tra i protocolli TLS e SSLv3. Questi sono i seguenti:
Protocol Version - L'intestazione del segmento del protocollo TLS porta il numero di versione 3.1 per differenziare il numero 3 trasportato dall'intestazione del segmento del protocollo SSL.
Message Authentication- TLS utilizza un codice di autenticazione del messaggio hash con chiave (H-MAC). Il vantaggio è che H-MAC opera con qualsiasi funzione hash, non solo MD5 o SHA, come esplicitamente dichiarato dal protocollo SSL.
Session Key Generation - Esistono due differenze tra TLS e il protocollo SSL per la generazione del materiale chiave.
Il metodo per calcolare i segreti pre-master e master è simile. Ma nel protocollo TLS, il calcolo del master secret utilizza lo standard HMAC e l'output della funzione pseudocasuale (PRF) invece del MAC ad-hoc.
L'algoritmo per il calcolo delle chiavi di sessione e dei valori di avvio (IV) è diverso in TLS rispetto al protocollo SSL.
Messaggio del protocollo di avviso -
Il protocollo TLS supporta tutti i messaggi utilizzati dal protocollo di avviso SSL, ad eccezione del messaggio di avviso Nessun certificato reso ridondante. Il client invia un certificato vuoto nel caso in cui non sia richiesta l'autenticazione del client.
Molti messaggi di avviso aggiuntivi sono inclusi nel protocollo TLS per altre condizioni di errore come record_overflow, decode_error ecc.
Supported Cipher Suites- SSL supporta le suite di cifratura RSA, Diffie-Hellman e Fortezza. Il protocollo TLS supporta tutti i semi tranne Fortezza.
Client Certificate Types- TLS definisce i tipi di certificato da richiedere in un messaggio certificate_request . SSLv3 supporta tutti questi. Inoltre, SSL supporta alcuni altri tipi di certificato come Fortezza.
CertificateVerify e messaggi finiti -
In SSL, viene utilizzata una procedura di messaggio complessa per il messaggio certificate_verify . Con TLS, le informazioni verificate sono contenute nei messaggi di handshake stesso evitando così questa complessa procedura.
Il messaggio finito viene calcolato in modi diversi in TLS e SSLv3.
Padding of Data- Nel protocollo SSL, il riempimento aggiunto ai dati dell'utente prima della crittografia è la quantità minima richiesta per rendere la dimensione totale dei dati uguale a un multiplo della lunghezza del blocco della crittografia. In TLS, il riempimento può essere qualsiasi importo che si traduca in una dimensione dei dati che è un multiplo della lunghezza del blocco della crittografia, fino a un massimo di 255 byte.
Le differenze di cui sopra tra i protocolli TLS e SSLv3 sono riassunte nella tabella seguente.
Navigazione sicura - HTTPS
In questa sezione, discuteremo l'uso del protocollo SSL / TLS per eseguire la navigazione web sicura.
Definito da HTTPS
Il protocollo HTTP (Hyper Text Transfer Protocol) viene utilizzato per la navigazione web. La funzione di HTTPS è simile a HTTP. L'unica differenza è che HTTPS fornisce una navigazione web "sicura". HTTPS sta per HTTP su SSL. Questo protocollo viene utilizzato per fornire la connessione crittografata e autenticata tra il browser Web del client e il server del sito Web.
La navigazione sicura tramite HTTPS garantisce che i seguenti contenuti siano crittografati:
- URL della pagina web richiesta.
- Contenuto della pagina Web fornito dal server al client dell'utente.
- Contenuto dei moduli compilati dall'utente.
- Cookie stabiliti in entrambe le direzioni.
Funzionamento di HTTPS
Il protocollo dell'applicazione HTTPS utilizza in genere uno dei due comuni protocolli di sicurezza del livello di trasporto: SSL o TLS. Il processo di navigazione sicura è descritto nei seguenti punti.
Si richiede una connessione HTTPS a una pagina Web inserendo https: // seguito da URL nella barra degli indirizzi del browser.
Il browser Web avvia una connessione al server Web. L'uso di https richiama l'uso del protocollo SSL.
Un'applicazione, in questo caso browser, utilizza la porta di sistema 443 invece della porta 80 (utilizzata in caso di http).
Il protocollo SSL passa attraverso un protocollo di handshake per stabilire una sessione sicura come discusso nelle sezioni precedenti.
Il sito Web inizialmente invia il suo certificato SSL digitale al tuo browser. Alla verifica del certificato, l'handshake SSL procede allo scambio dei segreti condivisi per la sessione.
Quando un certificato digitale SSL affidabile viene utilizzato dal server, gli utenti vedono l'icona di un lucchetto nella barra degli indirizzi del browser. Quando un certificato di convalida esteso viene installato su un sito Web, la barra degli indirizzi diventa verde.
Una volta stabilita, questa sessione consiste in molte connessioni sicure tra il server web e il browser.
Utilizzo di HTTPS
L'utilizzo di HTTPS fornisce all'utente riservatezza, autenticazione del server e integrità dei messaggi. Consente una condotta sicura del commercio elettronico su Internet.
Impedisce l'intercettazione dei dati e nega il furto di identità che sono attacchi comuni a HTTP.
I browser Web e i server Web attuali sono dotati di supporto HTTPS. L'uso di HTTPS su HTTP, tuttavia, richiede una maggiore potenza di calcolo sul client e sul lato server per eseguire la crittografia e l'handshake SSL.
Protocollo Secure Shell (SSH)
Le caratteristiche salienti di SSH sono le seguenti:
SSH è un protocollo di rete che viene eseguito sopra il livello TCP / IP. È progettato per sostituire TELNET che forniva strumenti di accesso remoto non sicuri.
SSH fornisce una comunicazione client / server sicura e può essere utilizzato per attività come il trasferimento di file e la posta elettronica.
SSH2 è un protocollo prevalente che fornisce una migliore sicurezza delle comunicazioni di rete rispetto alla versione precedente SSH1.
Definito da SSH
SSH è organizzato in tre sotto-protocolli.
Transport Layer Protocol- Questa parte del protocollo SSH fornisce riservatezza dei dati, autenticazione del server (host) e integrità dei dati. Può facoltativamente fornire anche la compressione dei dati.
Server Authentication- Le chiavi host sono asimmetriche come le chiavi pubbliche / private. Un server utilizza una chiave pubblica per dimostrare la propria identità a un client. Il client verifica che il server contattato sia un host "noto" dal database che gestisce. Una volta che il server è stato autenticato, vengono generate le chiavi di sessione.
Session Key Establishment- Dopo l'autenticazione, il server e il client concordano la crittografia da utilizzare. Le chiavi di sessione vengono generate sia dal client che dal server. Le chiavi di sessione vengono generate prima dell'autenticazione dell'utente in modo che i nomi utente e le password possano essere inviati crittografati. Queste chiavi vengono generalmente sostituite a intervalli regolari (ad esempio, ogni ora) durante la sessione e vengono distrutte immediatamente dopo l'uso.
Data Integrity- SSH utilizza algoritmi MAC (Message Authentication Code) per il controllo dell'integrità dei dati. È un miglioramento rispetto al CRC a 32 bit utilizzato da SSH1.
User Authentication Protocol- Questa parte di SSH autentica l'utente sul server. Il server verifica che l'accesso sia concesso solo agli utenti previsti. Attualmente vengono utilizzati molti metodi di autenticazione come password digitate, Kerberos, autenticazione a chiave pubblica, ecc.
Connection Protocol - Fornisce più canali logici su una singola connessione SSH sottostante.
Servizi SSH
SSH fornisce tre servizi principali che consentono la fornitura di molte soluzioni sicure. Questi servizi sono descritti brevemente come segue:
Secure Command-Shell (Remote Logon)- Consente all'utente di modificare i file, visualizzare il contenuto delle directory e accedere alle applicazioni sul dispositivo connesso. Gli amministratori di sistema possono avviare / visualizzare / arrestare servizi e processi in remoto, creare account utente e modificare le autorizzazioni di file / directory e così via. Tutte le attività che sono possibili al prompt dei comandi di una macchina possono ora essere eseguite in modo sicuro dalla macchina remota utilizzando l'accesso remoto sicuro.
Secure File Transfer- SSH File Transfer Protocol (SFTP) è progettato come estensione per SSH-2 per il trasferimento sicuro dei file. In sostanza, è un protocollo separato stratificato sul protocollo Secure Shell per gestire i trasferimenti di file. SFTP crittografa sia il nome utente / password che i dati del file trasferiti. Utilizza la stessa porta del server Secure Shell, ovvero la porta di sistema n. 22.
Port Forwarding (Tunneling)- Consente di proteggere i dati da applicazioni basate su TCP / IP non protette. Dopo che il port forwarding è stato impostato, Secure Shell reindirizza il traffico da un programma (solitamente un client) e lo invia attraverso il tunnel crittografato al programma dall'altra parte (solitamente un server). Più applicazioni possono trasmettere dati su un singolo canale sicuro multiplex, eliminando la necessità di aprire molte porte su un firewall o router.
Vantaggi e limitazioni
I vantaggi e i limiti dell'utilizzo della sicurezza delle comunicazioni a livello di trasporto sono i seguenti:
Benefici
Transport Layer Security è trasparente per le applicazioni.
Il server è autenticato.
Le intestazioni del livello dell'applicazione sono nascoste.
È più fine dei meccanismi di sicurezza a livello 3 (IPsec) poiché funziona a livello di connessione di trasporto.
Limitazioni
Applicabile solo alle applicazioni basate su TCP (non UDP).
Le intestazioni TCP / IP sono chiare.
Adatto per la comunicazione diretta tra il client e il server. Non soddisfa le applicazioni protette che utilizzano catene di server (ad es. E-mail)
SSL non fornisce il non ripudio poiché l'autenticazione del client è facoltativa.
Se necessario, l'autenticazione del client deve essere implementata sopra SSL.
Sommario
Negli ultimi dieci anni su Internet è emerso un gran numero di applicazioni web. Molti portali di e-governance e di e-commerce sono online. Queste applicazioni richiedono che la sessione tra il server e il client sia sicura, fornendo riservatezza, autenticazione e integrità delle sessioni.
Un modo per mitigare un potenziale attacco durante la sessione di un utente è utilizzare un protocollo di comunicazione sicuro. In questo capitolo vengono discussi due di questi protocolli di comunicazione, SSL (Secure Sockets Layer) e TLS (Transport Layer Security). Entrambi questi protocolli funzionano a livello di trasporto.
Un altro protocollo del livello di trasporto, Secure Shell (SSH), progettato per sostituire TELNET, fornisce mezzi sicuri per la funzionalità di accesso remoto. È in grado di fornire vari servizi come Secure Command Shell e SFTP.
L'impiego della sicurezza a livello di trasporto ha molti vantaggi. Tuttavia, il protocollo di sicurezza progettato a questi livelli può essere utilizzato solo con TCP. Non forniscono protezione per la comunicazione implementata utilizzando UDP.