Protocoale de securitate SSL/TLS și SSH

1. Introducere

1.1 Definirea temei

Acest proiect dorește să ofere răspunsuri pertinente asupra nivelului de securitate din internet precum și prezentarea celor mai folosite și răspândite protocoale de securitate: SSL/TLS și SSH.

1.2 Contextul problemei

Internetul a deschis o mulțime de oportunități odată cu expansiunea rapidă la nivel global. Aproape orice lucru ne leagă de internet în zilele noastre. Oamenii pot face achiziții și tranzacții on-line. Putem reporni orice sistem informatic sau program de pe un alt calculator direct de la computerul personal.
Deoarece există multe vulnerabilități, hackeri pot obține ilegal informații personale (date bancare, CNP, parole, fișe medicale, etc.) și accesul la programele și documentele personale. Prin urmare, nevoia de securitate web este mai importantă ca niciodată în acest moment.

1.3 Definirea protocoalelor

1.3.1 SSL (Secure Sockets Layer) este un acronim care reprezintă un protocol web dezvoltat de compania Netscape pentru a transmite fără risc documente private prin Internet. Pentru a cripta datele, SSL utilizează un sistem criptografic cu două chei: una publică, cunoscută de oricine, și una privată, secretă, cunoscută numai de destinatarul mesajului. Au fost oferite mai multe actualizări ale prezentului protocol, astăzi versiunea cea mai nouă fiind SSL 3.0, devenită standard. Versiunea 3.0 este suportată de majoritatea serverelor Web, fiind folosită în continuare de foarte multe persoane .
1.3.2 TLS (Transport Layer Security) – este succesorul protocolului SSL. Chiar dacă există anumite diferențe între TLS și SSL, protocoalele sunt foarte asemănătoare. Obiectivul protocolului TLS este de a opri interceptarea “mesajului fals”, acesta oferind un pachet complect de securitate criptografică între informațiile confidențiale transmise între servere. Două mari avantajele ale protocolului TLS sunt independența și transparența.
1.3.3 Secure Shell (SSH) este un protocol de rețea criptografic care permite ca datele să fie transferate folosind un canal securizat între dispozitive dintr-o anumită rețea. Cele două mari versiuni ale protocolului sunt SSH1 și SSH2 . Protocolul SSH este folosit cu precădere în sistemele de operare linux, unix și windows. SSH a fost dezvoltat din dorința de a înlocui vechiul protocol Telnet și al altor protocoale nesigure de acces de la distanță, care trimit informația, în special parola, în clartext, făcând posibilă descoperirea ei prin analiza traficului. Criptarea folosita de SSH intenționează să asigure confidențialitatea și integritatea datelor transmise printr-o rețea nesigură cum este Internetul

2. Analiza detaliată

2.1 Protocolul SSL/TLS

Scopul principal al protocolului SSL/TLS este de a oferi intimitate și fiabilitate între două aplicații care comunică între ele. SSL/TLS criptează datele cu caracter sensibil ale utilizatorului atunci când sunt trimise spre un server web de-a lungul unei rețele nesigure.
Protocolul SSL/TLS este compus din două straturi. Primul strat denumit Handshake protocol ( strângere de mână) conține la rândul său alte trei subprotocoale: Handshake, Change Cipher Spec și Alert. Al doilea strat este definit de protocolul Record .
A) Handshake protocol

a.1) Handshake – Acest subprotocol este folosit pentru schimbul de informații inițiale dintre client și server. Informațiile schimbate între client și server constă în ID-ul de sesiune, certificarea peer, specificațiile cifrului, algoritmul de compresie utilizat și informația confidențială care este folosită pentru a genera o cheie

a.2) Change Cipher Spec – Este folosit pentru a partaja informațiile criptate între client și server. Acesta transmite informații în cealaltă parte a sesiunii SSL/TLS referitoare la modul de trimitere a unui nou set de chei criptografice.

a.3) Alert – Sunt mesaje de alertă care indică o schimbare a statutului sesiunii sau o stare de eroare. Există o mare varietate de alerte care notifică clientul sau serverul web implicat în sesiunea SSL/TLS despre modul și condițiile de funcționare. Alertele sunt trimise de obicei atunci când conexiunea este închisă, nu este primit un anumit mesaj, sau nu poate fi decriptat un alt mesaj.

Stratul Handshake
Protocolul Handshake folosește certificatul x509 pentru procesul de autentificare, certificat care oferă „dovezi” despre identitatea părții care deține certificatul precum și despre cheia privată corespunzătoare. Astfel de certificate digitale sunt eliberate de o autoritate de sine stătătoare. Certificatele conțin perioada de valabilitate, cheia publică, semnătura digitală și serial number-ul distinct.
Autoritatea CA confirmă identitatea solicitantului, iar mai apoi îi emite acestuia certificatul digital solicitat. De asemena autoritatea poate reînnoi sau revoca un anumit certificat digital.

Criptarea
Protocolul SSL/TLS folosește două tipuri distincte de chei criptografice:
a) Cheia simetrică – aceeași cheie este folosită atât pentru criptarea cât și pentru decriptarea mesajului. Dacă cele două părți doresc să facă schimb de mesaje criptate în siguranță, trebuie să dețină o copie a aceeași cheie simetrice. Acest timp de cheie se folosește în cazul criptării unor cantități mari de date, deoarece calculul de criptare și decriptare este mult mai rapid față de cheia asimetrică.
b) Cheia asimetrică (sau cheia publică) – această cheie este obținută printr-un proces matematic mai complex. Una dintre chei este făcută publică de autoritatea CA în certificatul digital atribuit titularului, iar cealaltă cheie este privată nefiind dezvăluită nimănui. Aceste chei funcționează împreună formând o cheie principală, iar dacă o cheie ( publică) este folosită pentru criptarea datelor, cealaltă cheie ( privată) este folosită pentru decriptarea acestora și vice-versa .
B) Stratul Record
La acest nivel, protocolul record (înregistrare) primește și criptează toate datele provenite din stratul aplicației și îl pregătește pentru expedierea în următorul strat. (stratul transport). Datele sunt prelucrate, iar mai apoi fragmentate în dimensiuni apropiate algoritmului de criptare, li se atribuie adresa unică MAC, iar mai apoi sunt criptate (sau decriptate) folosind informațiile care au fost negociate în timpul protocolului Handshake .

În imaginea de mai jos se poate observa organizarea interna a protocolului TLS/SSL și modul de funcționare al acestuia
organizarea-protocolului-ssl-tls
Figura 1 Organizarea protocolului SSL/TLS

2.2 Protocolul SSH

Scopul principal al protocolului SSH este de a îmbunătăți securitatea, pe de Internet. Acesta încearcă să facă acest lucru prin securizarea canalului prin care sunt transmise informațiile între participanți. Pentru a asigura confidențialitatea și integritatea informațiilor interschimbate, SSH se folosește de criptarea cu chei asimetrice. Utilizatorul deține o pereche de chei: una publică și una privată. În timp ce cheia publică se trimite stației de la distanță (eng. remote) cu care se dorește comunicarea, cea privată rămâne tot timpul pe stația locală și trebuie protejată de public. De ce cheia publică trebuie trimisă stației de la distanță? Pentru ca aceasta să o poată folosi la decriptarea datelor primite în format securizat .
Protocolul SSH este format din trei componente majore: Transport Layer – protocol care prevede autentificarea serverului, confidențialitatea și integritatea perfectă a secretului. La nivelul acestui strat, dacă utilizatorul are o cheie care a fost compromisă din varii motive aceasta nu afectează securizarea sesiunilor anterioare. User Authentication– protocol care autentifică clientul care dorește să folosească tunelul în conexiunea cu serverul. Connection Protocol – acest protocol multiplexează tunelul criptat în mai multe canale logice. Aceste canale sunt deasupra conexiunii SSH.
În imaginea de mai jos se poate observa organizarea internă a protocolului SSH:
organizarea-protocolului-ssh
Figura 2 Organizarea protocolului SSH

2.3 Exemple de sistem

2.3.1 Comunicarea dintre client și server folosind protocolul SSL/TLS

Protocolul SSL permite schimbul de înregistrări; fiecare înregistrare poate fi, în mod opțional, compresată, criptată și asignată cu un cod de autentificare al mesajului (MAC). Fiecare înregistrare are un câmp numit content_type care specifică care protocol este folosit.
Când conexiunea demarează, nivelul înregistrare încapsulează un alt protocol, de tip handshake protocol, pentru care câmpul content_type are valoarea 22.
Clientul trimite și primește mai multe structuri de handshake:

  • Trimite un mesaj ClientHello în care specifică lista de metode de criptare care sunt suportate, metodele de compresie și cea mai actuală versiune a protocolului cunoscută. De asemenea transmite o secvență aleatoare de biți care va fi folosită ulterior.
  • Primește mai apoi un ServerHello, în care serverul alege parametrii conexiunii din mulțimea de opțiuni oferită de client mai devreme.
  • Când parametrii conexiunii sunt cunoscuți, clientul și serverul schimbă certificatele (în funcție de algoritmul de codare pentru chei publice ales). Aceste certificate sunt în prezent de tip X.509, dar exista de asemenea un document care specifică utilizarea certificatelor bazate pe OpenPGP.
  • Serverul poate solicita un certificat clientului, astfel încât conexiunea să fie mutual autentificată.
  • Clientul și serverul negociază un secret comun numit “master secret”, existând aici opțiunea folosirii rezultatului schimbului Diffie-Hellman, sau mai simplu prin criptarea secretului cu cheia privată și decriptarea acesteia cu cheia privata a partenerului. Toate datele legate de chei sunt derivate din acest “master secret” (și de valori generate aleator de către client sau de către server), care sunt schimbate atent prin funcția atent proiectată de “Funcții pseudoaleatore” .

TLS/SSL au o varietate de măsuri de securitate:

  • Numerotarea tuturor înregistrărilor cu numere de secvență în MAC-uri.
  • Folosirea unui mecanism de sumarizare a mesajului extins prin folosirea unei chei (ca numai dacă se cunoaște cheia să poți verifica MAC. Acest lucru este specificat în RFC 2104).
  • Protecție împotriva unor tipuri cunoscute de atacuri (incluzând atacuri de tip “man in the middle”), precum cele de tip forțare la folosirea a unor versiuni mai vechi (și mai puțin sigure) ale protocolului, sau versiuni mai puțin sigure ale algoritmilor de codare.
  • Mesajul care încheie handshake (“Finished”) care trimite un hash all tuturor datelor schimbate între cele două părți.
  • Funcțiile pseudoaleatore împart datele în două jumătăți și le procesează cu doi algoritmi diferiți de hash (MD5 și SHA), și apoi face un XOR între ele. În acest fel se protejează și în cazul în care pentru unul dintre aceste două algoritme se găsește o vulnerabilitate.

În imaginea de mai jos se poate urmări modul de comunicare dintre un Client și un Server folosind protocolul SSL/TLS:
comunicarea-client-server-prin-protocolul-ssl-tls
Figura 3 Comunicarea dintre client și server cu ajutorul protocolului SSL/TLS

2.3.2 Comunicarea dintre client și server folosind protocolul SSH

Primul pas constă în autentificarea clientului spre server. Întotdeauna clientul este cel care inițiază conexiunea. După ce serverul este autentificat, iar clientul este sigur de identitatea serverului, se formează un canal securizat simetric între client și server.
Acest canal securizat va fi utilizat pentru schimbul de chei, parole și alte lucruri.

  • Se realizează conexiunea TCP spre portul 22 ( port oficial asignat protocolului SSH). În acest pas clientul obține informații referitoare la versiunea protocolului suportată de server și versiunea protocolului SSH. În cazul în care clientul nu suportă versiunea SSH a serverului conexiunea va înceta.
  • După decizia clientului de a continua conexiunea se trece la Protocolul Binary Pacher, protocol care conține un pachet cu o lungime de 32 biți.
  • În pasul următorul serverul preia inițiativa și trimite clientului identitatea sa, sub forma unei chei publice. Această cheie este creată în timpul instalară serverului openssh.
  • În cazul în care clientul realizează pentru prima dată conexiunea cu serverul respectiv, acesta va fi informat printr-un mesaj de avertizare despre identitatea serverului. (unele programe permit înregistrarea acestei identității în memoria chase)
  • Clientul mai primește o informație referitoare la cheia serverului. Această cheie este regenerată la fiecare oră. Dimensiunea standard a cheii este de 789 biți.
  • Clientul trimite un răspuns serverului prin procedeul denumit checkbytes 8 biți, iar la final serverul furnizează clientului informațiile despre metoda de criptare și informațiile despre autentificare.
  • În funcție de lista cu algoritmi de criptate suportată de server, clientul va crea o cheie simetrică pe care o va trimite serverului. Aceasta cheie simetrică va fi folosită pentru procesul de criptare și decriptare a datelor trimise prin canal în timpul sesiunii. Tot în acest pas clientul va executa o dublă criptare. Prima criptare este realizată de serverul gazdă iar a doua criptare este executată de cheia serverului. Prin acest procedeul se asigură nivelul de securitate optim, deoarece în cazul în care cheia de la serverul host este compromisă mesajul tot nu va putea fi descifrat fiind păstrat în siguranță de a doua criptare.
  • După dezvăluirea identității a serverului către client, a venit momentul ca clientul să se autentifice pe server. După ce clientul trimite cheia dublă criptată va așteaptă mesajul de confirmare venit din partea serverului. Mesaj care confirmă faptul că serverul este capabil să decripteze informațiile primite de la client.
  • Autentificarea clientului este realizată într-un canal criptat. Există mai multe metode care pot fi utilizate de client în vederea autentificării:
  • Cheia publică – aceasta este considerată de protocolul SSH cea mai puternică metodă de autentificare. Se crează o cheie publică și se trimite spre server. Informațiile criptate de cheia publică pot fi decriptate cu ajutorul cheii private. După recepționarea serverului a cheii publice generate de către client va genera un șir de 256 de biți pe care îl va trimite clientului. Clientul se va folosi de cheia privată pentru a decripta șirul trimis de server iar apoi va genera o valoare hash md5 pe care o va trimite serverului. Dacă server-ul va decripta valoarea trimisă de client autentificarea este realizată cu succes.
  • Parola – Este cea mai folosită metodă de autentificare în protocolul SSH. Clientul trimite serverului o parola (care este criptată cu ajutorul cheii simetrice) iar dacă mecanismul de autentificare al serverului recunoaște parola, clientului îi este aprobat accesul conexiunii.
  • Rhosts – Această metodă este recomandată dacă se dorește „trecerea cu vederea” verificarea parolei. Se utilizează fișierul /.ssh/hnown_hosts pentru autentificarea serverului și fișierul /.rhosts pentru autentificarea clientului. În cazul setării prealabile a acestor fișiere se elimină în bună măsură furnizarea parolei în mod interactiv.

2.4 Concluzii

Aceste două protocoale sunt cele mai răspândite în acest moment la nivel global, fiind considerate foarte bune pentru securizarea informațiilor cu caracter sensibil. Fiecare protocol se axează pe un anumit segment, astfel SSL/TLS se folosește cu precădere în cazul autentificări pe o platformă online web-server (e-commerce) iar protocolul SSH se folosește în cazul unei inițierii unei sesiuni de lucru între un client și un server.
Chiar dacă sunt considerate protocoale sigure, atât SSL/TLS cât și SSH prezintă anumite vulnerabilități. În cazul protocolului SSL/TLS cele mai multe vulnerabilități au fost descoperite nu în „interiorul” protocolului ci mai degrabă datorită factorilor externi. Astfel, de cele mai multe ori în cazul lacunelor de securitate s-a descoperit că nu protocolul în sine a falimentat ci certificatele digitale contrafăcute de persoane rău intenționate, combinate cu slaba informare a utilizatorului privitoare la acest procedeu de autentificare. Practic utilizatorul era momit să își introducă credințialele într-o pagină fantomă care din punct de vedere al design-ului era asemănătoare cu pagina legitimă.
Un alt caz de vulnerabilitate este evidențiat de folosirea unei rețele publice sau slab securizate de Wi-Fi. Datele transmise prin protocoalele mai sus amintite pot fi interceptate într-o rețea slab securizată de către o persoană rău intenționată cu ajutorul anumitor programe.
Folosirea acestor protocoale de securitate oferă un nivel ridicat de protecție al datelor cu caracter sensibil, dar nu elimină total riscurile de interceptare a acestor date către terțe dispozitive (web server, server, etc.). Informarea și conștientizarea riscurilor la care se expune un utilizator atunci când dorește să „iasă” în internet, reduc dramatic numărul cazurilor de compromitere a datelor.

2.5 Bibliografie

1. Transport Layer Securiry, http://en.wikipedia.org/wiki/Transport_Layer_Security
2. T. Dierks, Ianuarie 1999, Protocolul TLS, pag 4, https://www.ietf.org/rfc/rfc2246.txt
3. Holly Lynne Mckinlei, Ghidul începătorului, protocolul SSL/TLS, http://www.sans.org/reading-room/whitepapers/protocols/ssl-tls-beginners-guide-1029
4. SSL/TLS protocolul Handshake, http://msdn.microsoft.com/en-us/library/windows/desktop/aa380513(v=vs.85).aspx
5. Criptarea în protocolul SSL/TLS, https://www.digicert.com/ssl-cryptography.htm
6. Stratul Record în protocolul SSL/TSL, http://www.slashroot.in/record-protocol-ssl-and-tls
7. Organizarea protocolului SSL/TLS, http://blogs.msdn.com/b/kaushal/archive/2013/08/03/ssl-handshake-and-https-bindings-on-iis.aspx
8. Introducere în protocolul SSH, https://www.eldos.com/security/articles/1945.php?page=all
9. Bazele protocolului SSH, William Stallings, Internet jurnal protocol, vol.12, http://www.cisco.com/web/about/ac123/ac147/archived_issues/ipj_12-4/124_ssh.html
10. Mecanismul de funcționare a protocolului SSL/TLL, http://ro.wikipedia.org/wiki/Transport_Layer_Security#Mecanismul_de_functionare
11. Modul de funcționare a protocolului SSH, Sarath Pillai, blog post, 2013, http://www.slashroot.in/secure-shell-how-does-ssh-work
12. Concluzii despre protocolul SSL/TLS, John Couzin, blog post, 2011, https://johncouzins.wordpress.com/2011/08/17/conclusion-on-ssltls/

Ionut Sandu

Despre autor: Ionuț Sandu este un blogger entuziast, pasionat de IT. Pe blogul lui, JonTECH.ro, apar constant cele mai interesante articole din domeniul tehnologiei. Ionuț a mai scris două articole științifice despre Cloud Computing și Protocoale de Securitate SSL/TLS și SSH.

4 Responses

  1. Stefan says:

    Salut, sunt putin pe dinafara dar apreciez oamenii care informeaza/lucreaza pentru ca altii sa invete lucruri la care nici nu s-au gandit.
    Te-am vazut la TV si m-ai impresionat.
    Rasfoind site-ul tau pot sa spun FELICITARI si totodata MULTUMESC ca oferi foarte multa informatie pretioasa GRATIS.
    Toate cele bune.

    • Ionut Sandu says:

      Buna ziua. Va mulțumesc pentru cuvintele încurajatoare. Oamenii ca si dumneavoastră imi dau putere sa ma ocup de acest blog cu zâmbetul pe buze. O zi excelenta!

  2. Skale Web says:

    Folosirea certificatelor SSL este esentiala pentru comunicatiile sau prelucrarea datelor pe internet, in special in contextul GDPR. In plus ofera siguranta utilizatorilor.

  1. February 20, 2015

    […] și americani au spart rețeaua internă a unui mare producător de cartele SIM, furând cheile criptografice  folosite la securizarea apelurilor și a mesajelor. Agenția Națională de Securitate (NSA) și […]

Leave a Reply

Your email address will not be published. Required fields are marked *