SSL

Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 13 decembrie 2019; verificările necesită 35 de modificări .

SSL ( Eng.  Secure Sockets Layer  - nivelul de socket securizate ) este un protocol criptografic care implică o conexiune mai sigură. Utilizează criptografia asimetrică pentru a autentifica cheile de schimb, criptarea simetrică pentru a păstra confidențialitatea, codurile de autentificare a mesajelor pentru integritatea mesajului. Protocolul a fost utilizat pe scară largă pentru mesageria instantanee și voce pe IP ( Voice over IP  - VoIP ) în aplicații precum e-mail , Internet fax etc. În 2014, guvernul SUA a raportat o vulnerabilitate în versiunea actuală a protocolului [1] . SSL ar trebui să fie retras în favoarea TLS (consultați CVE-2014-3566).

SSL a fost dezvoltat inițial de Netscape Communications pentru a adăuga protocolul HTTPS browserului lor web Netscape Navigator . Ulterior, pe baza protocolului SSL 3.0, a fost dezvoltat și adoptat standardul RFC , care a primit numele TLS .

Descriere

Protocolul SSL asigură o comunicare sigură prin următoarele două elemente:

SSL folosește criptografia asimetrică pentru a autentifica cheile de schimb, un cifru simetric pentru a menține confidențialitatea și coduri de autentificare a mesajelor pentru integritatea mesajului.

Protocolul SSL oferă un „canal securizat” care are trei proprietăți principale:

  1. Canalul este privat. Criptarea este folosită pentru toate mesajele după un dialog simplu care servește la determinarea cheii secrete.
  2. Canalul este autentificat. Partea de server a dialogului este întotdeauna autentificată, în timp ce partea client face acest lucru opțional.
  3. Canalul este de încredere. Transportul mesajelor include verificarea integrității.

Avantajul SSL este că este independent de protocolul aplicației. Protocoalele aplicației ( HTTP , FTP , TELNET etc.) pot funcționa peste protocolul SSL într-un mod complet transparent, adică SSL poate negocia algoritmul de criptare și cheia de sesiune și poate autentifica serverul înainte ca aplicația să primească sau să transmită primul octet al mesajului.

Istorie și dezvoltare

SSL 1.0, 2.0 și 3.0

Protocolul SSL a fost dezvoltat inițial de Netscape Communications . Versiunea 1.0 nu a fost niciodată lansată publicului. Versiunea 2.0 a fost lansată în februarie 1995, dar conținea multe defecte de securitate care au dus la dezvoltarea versiunii SSL 3.0 [2] . Versiunea SSL 3.0, lansată în 1996, a stat la baza creării TLS 1.0, un standard de protocol Internet Engineering Task Force ( IETF ) care a fost definit pentru prima dată în RFC 2246 în ianuarie 1999. Visa , Master Card , American Express și multe alte organizații sunt autorizate să utilizeze protocolul SSL în scopuri comerciale pe Internet. Astfel, SSL este extensibil în conformitate cu proiectul pentru a sprijini compatibilitatea înainte și înapoi și negocierea între conexiunile într-o rețea peer-to-peer. Din martie 2011, conform RFC 6176, clienții TLS nu trebuie să utilizeze protocolul SSL 2.0 atunci când solicită o conexiune la un server, iar serverele trebuie să respingă astfel de solicitări.

TLS 1.0

TLS 1.0 a fost definit pentru prima dată în RFC 2246 în ianuarie 1999 ca o actualizare la SSL 3.0. După cum se precizează în RFC, „diferențele dintre acest protocol și SSL 3.0 nu sunt critice, dar sunt semnificative pentru apariția incompatibilităților între TLS 1.0 și SSL 3.0”. TLS 1.0 include mijloace prin care implementarea unei conexiuni TLS la SSL 3.0 ar slăbi securitatea.

TLS 1.1

TLS 1.1 a fost introdus în RFC 4346 în aprilie 2006 [3] . Aceasta a fost o actualizare a TLS versiunea 1.0. Modificările semnificative ale acestei versiuni includ:

TLS 1.2

TLS 1.2 a fost anunțat în RFC 5246 în august 2008. Se bazează pe versiunea propusă anterior de TLS 1.1.

TLS 1.3

TLS 1.3 a fost recunoscut ca standard în RFC 8446 în august 2018.

Cum funcționează

SSL utilizează un mediu cu mai multe straturi pentru a asigura securitatea schimbului de informații. Confidențialitatea comunicării este prezentă datorită faptului că o conexiune securizată este deschisă doar utilizatorilor vizați.

Mediu stratificat

Protocolul SSL se află între două protocoale: protocolul pe care îl folosește programul client (HTTP, FTP, LDAP, TELNET etc.) și protocolul de transport TCP/IP. SSL protejează datele acționând ca un filtru pentru ambele părți și le transmite stratului de transport [4] [5] .

Funcționarea protocolului poate fi împărțită în două niveluri:

  1. Stratul protocol de strângere de mână
  2. Stratul de protocol de înregistrare

Primul strat, la rândul său, este format din trei subprotocoale:

  1. Protocol de strângere de mână
  2. Protocolul Cipher Spec
  3. Protocol de alertă

Protocolul de acordare a conexiunii este utilizat pentru a negocia datele de sesiune între client și server. Datele sesiunii includ:

Protocolul de acordare a conexiunii produce un lanț de schimb de date, care, la rândul său, începe autentificarea părților și convine asupra criptării, hashingului și compresiei. Următoarea etapă este autentificarea participanților, care se realizează și prin protocolul de confirmare a conexiunii.

Protocolul de modificare a parametrilor de criptare este utilizat pentru a modifica datele cheii (keyingmaterial) - informații care sunt utilizate pentru a crea chei de criptare. Protocolul constă dintr-un singur mesaj, în care serverul spune că expeditorul dorește să schimbe setul de chei.

Protocolul de avertizare conține un mesaj care indică părților o schimbare a stării sau o posibilă eroare. De obicei, un avertisment este trimis atunci când conexiunea este închisă și este primit un mesaj nevalid, mesajul nu poate fi decriptat sau utilizatorul anulează operațiunea.

Certificate digitale

Protocolul SSL utilizează certificate pentru a verifica dacă o cheie publică aparține proprietarului său real. Modalități de obținere a unui certificat SSL:

  1. Utilizați un certificat emis de CA
  2. Utilizați certificat autosemnat
  3. Utilizați un certificat „vid”.

Certificat autosemnat - un certificat creat de utilizatorul însuși - în acest caz, emitentul certificatului este același cu proprietarul certificatului. Un certificat „alb” este un certificat care conține informații fictive folosite ca temporar pentru a configura SSL și a verifica funcționalitatea acestuia într-un mediu dat.

Printre certificatele SSL, există certificate validate pe domeniu și certificate de validare extinsă .  Acesta din urmă asociază un nume de domeniu cu o persoană sau entitate reală.

Mecanisme pentru derivarea unei chei pentru sesiunea curentă în SSL/TLS

Există 4 algoritmi principali de generare a cheilor: RSA , Fixed Diffie-Hellman, Ephemeral Diffie-Hellman, Anonymous Diffie-Hellman

rsa

Când o cheie RSA privată este „pierdută”, criptoanalistul care o primește are posibilitatea de a decripta toate mesajele trecute și viitoarele înregistrate. Implementarea schimbului de chei în RSA este unidirecțională: toate informațiile necesare pentru a forma o cheie simetrică, care este creată în timpul etapei de strângere de mână, sunt trimise la server și criptate cu cheia publică a serverului. Dezvăluirea cheii private face posibilă aflarea cheii simetrice a acestei sesiuni.

Diffie-Hellman

Mecanismul Fixed Diffie-Hellman folosește o cheie publică permanentă, care este înregistrată în certificatul serverului. Aceasta înseamnă, de asemenea, că la fiecare nouă conexiune, clientul oferă partea sa din cheie. După schimbul de chei, se formează o nouă cheie simetrică pentru a schimba informații pentru sesiunea curentă. Prin dezvăluirea cheii private a serverului, criptoanalistul poate decripta mesajele înregistrate anterior, precum și toate mesajele viitoare. Acest lucru este posibil de mecanismul în sine. Deoarece criptoanalistul cunoaște cheia privată a serverului, va putea afla cheia simetrică a fiecărei sesiuni și nici măcar faptul că mecanismul de generare a cheii este bidirecțional nu va ajuta.
Mecanismul Anonymous Diffie-Hellman nu oferă garanții de confidențialitate, deoarece datele sunt transmise necriptate.
Singura opțiune care garantează securitatea mesajelor trecute și viitoare este Ephemeral Diffie-Hellman . Diferența față de metodele discutate anterior este că, cu fiecare nouă conexiune, o cheie unică este generată de server și client. Astfel, chiar dacă criptoanalistul obține cheia privată actuală, va putea decripta doar sesiunea curentă, dar nu și sesiunile anterioare sau viitoare.

Caracteristici de criptare

Există două modalități principale de criptare a datelor: criptare simetrică (cheie secretă partajată) și criptare asimetrică (pereche de chei publice/private).

SSL utilizează atât criptografia asimetrică, cât și simetrică.

Esența criptării asimetrice este că se utilizează o pereche de chei. Una dintre chei se numește publică (de regulă, este publicată în certificatul proprietarului însuși), iar a doua cheie se numește privată - este ținută secretă. Ambele chei sunt folosite în perechi: cheia publică este folosită pentru a cripta datele, iar cheia privată este folosită pentru a le decripta. Această relație vă permite să faceți două lucruri importante.

  1. Orice utilizator poate obține cheia publică și o poate folosi pentru a cripta date care pot fi decriptate doar de utilizatorul care deține cheia privată.
  2. Dacă proprietarul perechii de chei „criptează” (semnează) datele cu cheia sa privată, atunci toată lumea se poate asigura că datele au fost trimise de proprietarul cheii private și nu au fost modificate de o terță parte. Aceasta este baza semnăturilor digitale .

RSA  este unul dintre cei mai folosiți algoritmi de criptare asimetrică.

Cu criptarea simetrică , aceeași cheie este utilizată atât pentru a cripta, cât și pentru a decripta datele. Dacă părțile doresc să facă schimb de mesaje criptate într-un mod sigur, atunci ambele părți trebuie să aibă aceleași chei simetrice. Acest tip de criptare este utilizat pentru cantități mari de date (deoarece criptarea simetrică este mai rapidă). Algoritmii utilizați în mod obișnuit sunt DES , 3-DES , RC2 , RC4 și AES .

Protocolul SSL utilizează criptarea cu chei publice pentru autentificarea reciprocă a clientului și a serverului (folosind tehnologia de semnătură digitală), precum și pentru a genera o cheie de sesiune, care, la rândul său, este utilizată de algoritmi de criptare simetrică mai rapidă pentru a cripta o cantitate mare de date. .

Hashing

Valoarea hash este un identificator de mesaj, dimensiunea sa este mai mică decât dimensiunea mesajului original. Cei mai faimoși algoritmi hash sunt MD5 (Message Digest 5) care produce o valoare hash de 128 de biți, SHA-1 (Secure Hash Algorithm) care produce o valoare hash de 160 de biți, SHA-2 și SHA-3 . Rezultatul algoritmului de hashing este o valoare care este utilizată pentru a verifica integritatea transferului de date.

Nivel de înregistrare

Protocolul de la nivelul stratului de înregistrare primește date criptate de la programul client și le transferă la stratul de transport. Protocolul de înregistrare preia datele, le împarte în blocuri și realizează criptarea (decriptarea) datelor. În același timp, informațiile asupra cărora au fost convenite în timpul confirmării datelor sunt utilizate în mod activ.

Protocolul SSL permite criptarea cheilor simetrice folosind fie cifruri bloc, fie cifruri flux . Cifrurile bloc sunt utilizate în mod obișnuit în practică. Principiul de funcționare al unui cifru bloc este de a mapa un bloc de text simplu în același bloc de text cifrat. Acest cifru poate fi reprezentat ca un tabel care conține 2.128 de linii, fiecare linie conținând un bloc de text simplu M și blocul de text cifrat corespunzător C. Există un tabel similar pentru fiecare cheie.

Criptarea poate fi reprezentată ca o funcție

C = E ( Cheie , M ), unde M  este datele originale, Cheie  este cheia de criptare, C  este datele criptate.

De regulă, blocurile sunt mici (de obicei 16 octeți), așa că se pune întrebarea: cum să criptați un mesaj lung?
Primul mod pentru o astfel de criptare se numește ECB (Electronic Codebook) sau modul simplu de înlocuire. Esența sa este că împărțim mesajul original în blocuri (pentru aceiași 16 octeți) și criptăm fiecare bloc separat. Cu toate acestea, acest mod este rar folosit din cauza problemei păstrării caracteristicilor statistice ale textului sursă: 2 blocuri identice de text simplu după criptare se vor transforma în două blocuri identice de text cifrat.
Pentru a rezolva această problemă, a fost dezvoltat un al doilea mod - CBC (Cipher-block chaining). În acest caz, fiecare bloc de text cifrat nou este XORed cu rezultatul de criptare anterior. Primul bloc este XOR cu un vector de inițializare (Initialization Vector, IV). Totuși, toată teoria de mai sus este dezvoltată pentru un singur obiect mare, în timp ce SSL, fiind un protocol criptografic, trebuie să cripteze o serie de pachete. Într-o astfel de situație, există două moduri de a aplica CBC:

  1. Tratați fiecare mesaj ca pe un obiect separat, generând un nou vector de inițializare pentru el de fiecare dată
  2. Tratați toate mesajele ca pe un singur obiect mare, păstrând modul CBC între ele. În acest caz, ultimul bloc de criptare al mesajului anterior (n-1) va fi folosit ca vector de inițializare pentru mesajul n

Aplicație

La proiectarea aplicațiilor, SSL este implementat „sub” orice alt protocol de nivel de aplicație, cum ar fi HTTP , FTP , SMTP , NNTP și XMPP , oferind astfel „transparență” utilizării acestuia. Din punct de vedere istoric, SSL a fost folosit în principal cu protocoale de transport fiabile, cum ar fi Transmission Control Protocol (TCP). Cu toate acestea, a fost implementat și cu protocoale de transport de datagrame precum User Datagram Protocol (UDP) și Datagram Control Protocol (DCCP), a căror utilizare a fost standardizată, dând naștere termenului Datagram Transport Layer Security (DTLS).

Site-uri web

Utilizarea frecventă a protocolului SSL a dus la formarea protocolului HTTPS (Hypertext Transfer Protocol Secure), care acceptă criptarea. Datele care sunt transmise prin protocolul HTTPS sunt „împachetate” în protocolul criptografic SSL sau TLS , asigurând astfel protecția acestor date. Această metodă de protecție este utilizată pe scară largă în lumea Web pentru aplicații în care securitatea conexiunii este importantă, cum ar fi sistemele de plată. Spre deosebire de HTTP , HTTPS este implicit la portul TCP 443.

Suport pentru site-ul web pentru protocol [6]
Versiunea protocolului Siguranță Suport pentru site-ul web
SSL 2.0 Nu 4,9%
SSL 3.0 Nu 16,6%
TLS 1.0 Poate 94,7%
TLS 1.1 da 82,6%
TLS 1.2 85,5%

Browsere

De la începutul lui 2017, toate browserele web majore care acceptă SSL/TLS sunt:

Browsere care acceptă SSL/TLS
Browser Platforme TLS 1.0 TLS 1.1 TLS 1.2 TLS 1.3
Chrome 1-21 Android, iOS, Linux, Mac OS X, Windows (XP, Vista, 7, 8) da Nu Nu Nu
Chrome 29-53 Android, iOS, Linux, Mac OS X, Windows (XP, Vista, 7, 8,10) Da [7] Da [7] Da [8] Nu
Chrome 58+ Android, iOS, Linux, Mac OS X, Windows (XP, Vista, 7, 8,10) da da da da
Firefox 1-27 Linux, Mac OS X, Windows (XP, Vista, 7, 8) Da [9] Nu [10] Nu [11] Nu
Firefox 27-53 Linux, Mac OS X, Windows (XP, Vista, 7, 8) da da da Nu
Firefox 54+ Linux, Mac OS X, Windows (XP, Vista, 7, 8) da da da da
IE6 Windows XP) da Nu Nu Nu
IE 7 - 8 Windows (XP, Vista) da Nu Nu Nu
IE 8 - 9 Windows 7 da da da Nu
IE9 Windows Vista da Nu Nu Nu
IE 10+ Ferestre (7, 8) da da da Nu
Muchia 12-15 Windows 10 da da da Nu
Opera 5-7 Linux, Mac OS X, Windows Da [12] Nu Nu Nu
Opera 8-9 Linux, Mac OS X, Windows da Da [13] Nu Nu
Opera 10+ Linux, Mac OS X, Windows da da da Nu
Opera 44+ Linux, Mac OS X, Windows da da da da
Safari 4 Mac OS X, Windows (XP, Vista, 7), iOS 4.0 da Nu Nu Nu
Safari 5 Mac OS X, Windows (XP, Vista, 7) da Nu Nu Nu
Safari 7-10 iOS 5.0- da da da Nu

Specificații:

Utilizare și implementare

Inițial, rețelele private virtuale ( VPN ) bazate pe SSL au fost dezvoltate ca o tehnologie complementară și alternativă de acces la distanță bazată pe VPN IPsec . Cu toate acestea, factori precum fiabilitatea suficientă și costul scăzut au făcut această tehnologie atractivă pentru organizațiile VPN. SSL este, de asemenea, utilizat pe scară largă în e-mail.

Cea mai comună implementare a SSL este pachetul criptografic open source OpenSSL , bazat pe SSLeay scris de Eric Young. Cea mai recentă versiune de OpenSSL acceptă SSLv3. Pachetul este conceput pentru a crea și gestiona diferite tipuri de certificate . Include, de asemenea, o bibliotecă pentru suport SSL de către diverse programe. Biblioteca este utilizată, de exemplu, de modulul SSL din serverul HTTP Apache comun .

Specificația protocolului de înregistrare SSL

Format antet înregistrări SSL

Toate datele din SSL sunt trimise sub formă de înregistrări (înregistrări) - obiecte care constau dintr-un antet și o anumită cantitate de date. Fiecare antet de înregistrare conține 2 sau 3 octeți de cod de lungime. Dacă bitul cel mai semnificativ din primul octet al codului de lungime a înregistrării este 1, atunci înregistrarea nu are umplutură și lungimea totală a antetului este de 2 octeți, altfel înregistrarea conține o umplutură și lungimea totală a antetului este de 3 octeți. În cazul unui antet lung (3 octeți), al doilea cel mai semnificativ bit al primului octet are o semnificație specială. Dacă este egală cu 0 - înregistrarea este informațională, dacă este egală cu 1 - înregistrarea este o evadare de securitate. Codul lungimii înregistrării nu include numărul de octeți antet. Pentru un antet de 2 octeți, lungimea acestuia este calculată după cum urmează:

RECORD-LENGTH = ((octet[0] și 0x7F) << 8) | octet[1];

Aici byte[0] este primul octet primit și byte[1] este al doilea octet primit.
Pentru un antet de 3 octeți, lungimea înregistrării este calculată după cum urmează:

RECORD-LENGTH = ((octet[0] și 0x3F) <<8) | octet[1];
IS-ESCAPE = (octet[0] & 0x40) !=0;
PADDING = octet[2];

Valoarea PADDING specifică numărul de octeți adăugați de expeditor în înregistrarea originală. Datele de umplutură sunt utilizate pentru a face ca lungimea înregistrării să fie un multiplu al mărimii blocului de cifrare. Expeditorul adaugă PADDING după datele date și apoi le criptează pe toate, deoarece lungimea acestei matrice este un multiplu al mărimii blocului cifrului utilizat. Deoarece cantitatea de date transmise este cunoscută, antetul mesajului poate fi format ținând cont de cantitatea de PADDING . Destinatarul mesajului decriptează întreg câmpul de date și primește informațiile originale, apoi calculează valoarea reală a RECORD-LENGTH , în timp ce PADDING este eliminat din câmpul „date”.

Format de înregistrare a informațiilor SSL

Partea de date de înregistrare SSL constă din 3 componente:

  1. DATE MAC[MAC-SIZE]
  2. DATE REALE[N]
  3. PADDING-DATE[PADDING]

MAC-DATA  - codul de autentificare a mesajului
MAC-SIZE  - funcția algoritmului utilizat pentru calcularea sumei hash
ACTUAL-DATA  - datele efectiv transmise sau câmpul de date mesaj
PADDING-DATA  - PADDING date (cu criptare bloc)

MAC-DATA = HASH [ SECRET , ACTUAL-DATA , PADDING-DATA , SEQUENCE-NUMBER ]

Aici, SECRET este transmis mai întâi funcției hash, urmat de ACTUAL-DATA și PADDING-DATA , urmat de SEQUENCE-NUMBER  , un număr de secvență.
Valoarea SECRET depinde de cine trimite mesajul. Dacă clientul o face, atunci SECRET este egal cu CLIENT-WRITE-KEY . Dacă clientul primește mesajul, SECRET este egal cu CLIENT-READ-KEY .
Numărul de secvență este un cod de 32 de biți care este transmis funcției hash ca 4 octeți utilizând ordinea rețelei de la mare la scăzut. Numărul de ordine este contorul pentru server sau client. Pentru fiecare sens de transmisie se foloseste o pereche de contoare - pentru expeditor si pentru destinatar; de fiecare dată când este trimis un mesaj, contorul crește cu 1.
Receptorul mesajului folosește valoarea așteptată a numărului de secvență pentru a trimite MAC (tipul hash este determinat de parametrul CIPHER-CHOICE ). Valoarea MAC-DATA calculată trebuie să se potrivească cu valoarea transmisă. Dacă comparația eșuează, mesajul este considerat corupt, rezultând o eroare care provoacă închiderea conexiunii.
Verificarea finală a potrivirii este efectuată atunci când este utilizat un cifr de bloc. Cantitatea de date din mesaj ( RECORD-LENGTH ) trebuie să fie un multiplu al mărimii blocului de cifrare. Dacă această condiție nu este îndeplinită, mesajul este considerat corupt, rezultând o deconectare.

Pentru un antet de 2 octeți, lungimea maximă a mesajului este de 32767 de octeți, pentru un antet de 3 octeți este de 16383 de octeți. Mesajele de protocol de conversație SSL trebuie să corespundă înregistrărilor unice de protocol SSL, iar mesajele de protocol de aplicație pot ocupa mai multe înregistrări SSL.

Protocol de conversație SSL

Protocolul de conversație SSL conține 2 faze principale.

Faza 1

Prima fază este folosită pentru a stabili un canal de comunicare confidențial.
Această fază inițializează conexiunea atunci când ambii colegi fac schimb de mesaje „bună ziua”. Clientul trimite un mesaj CLIENT-HELLO . Serverul primește acest mesaj, îl procesează și trimite înapoi un mesaj SERVER-HELLO .
În acest moment, atât serverul, cât și clientul au suficiente informații pentru a ști dacă este necesară o nouă cheie principală. Dacă cheia nu este necesară, serverul și clientul trec la faza 2.
Când trebuie creată o nouă cheie principală , mesajul SERVER-HELLO al serverului conține deja suficiente date pentru ca clientul să genereze o cheie principală . Aceste date includ certificatul semnat de server, o listă de cifruri de bază și un ID de conexiune (un număr aleatoriu generat de server care este utilizat pe parcursul sesiunii). După ce clientul generează o cheie principală , acesta trimite serverului un mesaj CLIENT-MASTER-KEY sau un mesaj de eroare atunci când clientul și serverul nu se pot pune de acord asupra unui cifr de bază.
După determinarea cheii principale , serverul trimite clientului un mesaj SERVER-VERIFY , care autentifică serverul.

Faza 2

Faza 2 se numește faza de autentificare. Deoarece serverul este deja autentificat în prima fază, clientul este autentificat în a doua fază. Serverul trimite o cerere clientului, iar dacă clientul are informațiile necesare, trimite un răspuns pozitiv, dacă nu, un mesaj de eroare. Când un peer a autentificat un alt peer, acesta trimite un mesaj finalizat . În cazul unui client, mesajul CLIENT-FINISHED conține o formă criptată a CONNECTION-ID pe care serverul trebuie să o verifice. Dacă verificarea nu a reușit, serverul trimite un mesaj de EROARE .
Când unul dintre colegii a trimis un mesaj terminat , trebuie să accepte mesaje până când primește un mesaj finalizat de la celălalt peer și numai atunci când ambii colegi au trimis și primit mesaje terminate se va termina protocolul de conversație SSL. Din acest moment, protocolul de aplicare începe să funcționeze.

Protocol generic de mesagerie

Mai jos sunt câteva opțiuni pentru schimbul de mesaje în cadrul protocolului de conversație SSL. Clientul este C , serverul este S. „{smth}key” înseamnă că „smth” este criptat cu o cheie.

În absența unui ID de sesiune
client-bună ziua C®S: challenge, cipher_specs
server-bună ziua S ® C: id-conexiune,certificat_server,specificații_cifrare
client-cheie-master C®S: {master_key}server_public_key
client-finish C®S: {connection-id}client_write_key
server-verify S ® C: {challenge}server_write_key
server-finish S ® C: {new_session_id}server_write_key
ID-ul sesiunii găsit de client și server
client-bună ziua C®S: challenge, session_id, cipher_specs
server-bună ziua S ® C: connection-id, session_id_hit
client-finish C®S: {connection-id}client_write_key
server-verify S ® C: {challenge}server_write_key
server-finish S ® C: {session_id}server_write_key
ID-ul sesiunii și autentificarea clientului utilizate
client-bună ziua C®S: challenge, session_id, cipher_specs
server-bună ziua S ® C: connection-id, session_id_hit
client-finish C®S: {connection-id}client_write_key
server-verify S ® C: {challenge}server_write_key
Cerere-certificat S ® C: {auth_type ,challenge'}server_write_key
certificat de client C®S: {cert_type,client_cert,response_data}client_write_key
server-finish S ® C: {new_session_id}server_write_key

Autentificare și schimb de chei

SSL acceptă 3 tipuri de autentificare:

  • autentificarea ambelor părți (client - server),
  • autentificarea serverului cu un client neautentificat,
  • anonimatul deplin.

Dacă serverul este autentificat, atunci mesajul său de certificare trebuie să furnizeze lanțul de certificare corect care să conducă la un CA acceptabil. Mai simplu spus, serverul autentificat trebuie să furnizeze clientului un certificat valid. Fiecare parte este responsabilă pentru verificarea faptului că certificatul celeilalte părți nu a expirat sau a fost încă revocat. Ori de câte ori serverul se autentifică, canalul este rezistent (securizat) la o încercare de a intercepta date între serverul web și browser, dar o sesiune complet anonimă este în mod inerent vulnerabilă la un astfel de atac. Serverul anonim nu poate autentifica clientul. Scopul principal al procesului de schimb de chei este de a crea un secret client (pre_master_secret) cunoscut doar de client și server. Secretul (pre_master_secret) este folosit pentru a crea secretul partajat (master_secret). Secretul partajat este necesar pentru a crea un mesaj pentru a verifica certificatul, cheile de criptare, secretul MAC (cod de autentificare a mesajului) și mesajul terminat. Prin trimiterea mesajului finalizat, părțile indică faptul că cunosc secretul corect (pre_master_secret).

Schimb de chei anonime

O sesiune complet anonimă poate fi stabilită utilizând algoritmul RSA sau Diffie-Hellman pentru a genera cheile de schimb. În cazul utilizării RSA , clientul criptează secretul (pre_master_secret) folosind cheia publică a serverului necertificat. Clientul învață cheia publică din mesajul de schimb de chei de la server. Rezultatul este trimis într-un mesaj de schimb de chei de la client. Deoarece interceptorul nu cunoaște cheia privată a serverului, va fi imposibil pentru acesta să decripteze secretul (pre_master_secret). Când se utilizează algoritmul Diffie-Hellman , parametrii publici ai serverului sunt conținuți într-un mesaj de schimb de chei de la server și sunt trimiși către client într-un mesaj de schimb de chei. Un interceptor care nu cunoaște valorile private nu va putea găsi secretul (pre_master_secret).

Autentificare și schimb de chei folosind RSA

În acest caz, schimbul de chei și autentificarea serverului pot fi combinate. Cheia publică poate fi, de asemenea, conținută în certificatul serverului sau poate fi utilizată o cheie RSA temporară , care este trimisă în mesajul de schimb de chei de la server. Când este utilizată o cheie RSA temporară, mesajele de schimb sunt semnate de certificatul RSA sau DSS al serverului (???). Semnătura conține valoarea curentă a mesajului Client_Hello.random, astfel încât semnăturile vechi și cheile temporare vechi nu pot fi repetate. Serverul poate folosi cheia temporară RSA o singură dată pentru a crea o sesiune. După verificarea certificatului serverului, clientul criptează secretul (pre_master_secret) folosind cheia publică a serverului. După decodarea cu succes a secretului (pre_master_secret), este generat un mesaj „terminat”, demonstrând astfel serverului că cunoaște cheia privată corespunzătoare certificatului serverului.

Când RSA este utilizat pentru schimbul de chei, mesajul de verificare a certificatului clientului este utilizat pentru autentificarea clientului. Clientul semnează valoarea calculată din master_secret și din toate mesajele de protocol de handshake precedente. Aceste mesaje de strângere de mână conțin un certificat de server care se potrivește cu semnătura serverului cu un mesaj Server_Hello.random care se potrivește cu semnătura mesajului curent de strângere de mână (???).

Autentificare și schimb de chei folosind Diffie-Hellman

În acest caz, serverul poate suporta, de asemenea, un algoritm Diffie-Hellman specific pentru parametri sau poate folosi mesaje de schimb de chei de la server pentru a trimite un set de parametri temporari semnat cu certificate DSS sau RSA. Parametrii temporari sunt indexați cu un mesaj hello.random înainte de semnare pentru a preveni un atacator să repete parametrii vechi. În ambele cazuri, clientul poate verifica certificatul sau semnătura pentru a se asigura că parametrii aparțin serverului.

Dacă clientul are un certificat care conține parametrii algoritmului Diffie-Hellman , atunci certificatul conține și informațiile necesare pentru a finaliza schimbul de chei. În acest caz, clientul și serverul vor trebui să genereze aceleași rezultate Diffie-Hellman (pre_master_secret) de fiecare dată când stabilesc o conexiune. Pentru a preveni stocarea secretului (pre_master_secret) în memoria computerului mai mult decât este necesar, secretul ar trebui convertit în secretul partajat (master_secret) cât mai repede posibil. Setările clientului trebuie să fie compatibile cu cele acceptate de server pentru ca schimbul de chei să funcționeze.

Protocol de înregistrare

Protocolul Record Layer este un protocol stratificat. La fiecare nivel, mesajele includ câmpuri pentru lungime, descriere și validare. Protocolul de scriere primește mesajele care urmează să fie transmise, fragmentează datele în blocuri gestionabile, comprimă inteligent datele folosind un MAC (cod de autentificare a mesajelor), criptează și transmite rezultatul. Decriptează datele primite, verifică, despachetează, colectează și livrează la nivelurile superioare ale clientului.

Există patru protocoale de înregistrare:

  1. Protocol de strângere de mână;
  2. Protocol de alertă;
  3. Protocolul de modificare a specificațiilor de cifrare;
  4. Protocol de aplicație (protocol de date de aplicație);

Dacă o implementare SSL primește un tip de intrare pe care nu îl cunoaște, atunci acea intrare este pur și simplu ignorată. Orice protocol creat pentru a fi utilizat împreună cu SSL trebuie să fie bine gândit, deoarece va trebui să facă față atacurilor asupra acestuia. Rețineți că, din cauza tipului și lungimii înregistrării, protocolul nu este protejat prin criptare. Trebuie avut grijă pentru a minimiza traficul.

Protocol de strângere de mână

Un client și un server SSL sunt de acord să stabilească o conexiune folosind o procedură de strângere de mână. În timpul strângerii de mână, clientul și serverul convin asupra diferiților parametri care vor fi utilizați pentru a securiza conexiunea:

  1. Clientul trimite către server numărul versiunii SSL al clientului, algoritmii de criptare și compresie acceptați, date specifice sesiunii și alte informații de care serverul are nevoie pentru a comunica cu clientul folosind SSL.
  2. Serverul trimite clientului numărul versiunii SSL al serverului, algoritmul de compresie și criptare (selectat dintre cele trimise anterior de client), date specifice sesiunii și alte informații de care clientul are nevoie pentru a comunica cu serverul prin SSL. Serverul trimite, de asemenea, propriul certificat, care necesită autentificarea clientului. Odată autentificat, serverul solicită un certificat de client.
  3. Clientul folosește informațiile transmise de server pentru a se autentifica. Dacă serverul nu poate fi verificat, utilizatorul este avertizat că există o problemă și că criptarea și autentificarea conexiunii nu pot fi stabilite. Dacă serverul a trecut cu succes testul, atunci clientul trece la pasul următor.
  4. Folosind toate datele primite până acum din procedura de strângere de mână, clientul (în cooperare cu serverul) creează un secret de sesiune pre-shared, în funcție de cifrul folosit de la server, îl criptează folosind cheia publică a serverului (obținută de la serverul). certificat trimis la pasul 2) și apoi îl trimite la server.
  5. Dacă serverul a solicitat autentificarea clientului (un pas opțional de strângere de mână), clientul semnează, de asemenea, o altă bucată de date care este unică pentru acea strângere de mână și cunoscută atât de client, cât și de server. În acest caz, clientul trimite toate datele semnate și certificatul propriu al clientului către server împreună cu secretul pre-criptat.
  6. Serverul încearcă să autentifice clientul. Dacă clientul nu se poate autentifica, sesiunea se încheie. Dacă clientul poate fi autentificat cu succes, serverul își folosește cheia privată pentru a decripta pre-secretul și apoi parcurge o serie de pași (prin care parcurge și clientul) pentru a crea secretul principal.
  7. Atât clientul, cât și serverul folosesc secretul pentru a genera chei de sesiune, care sunt chei simetrice utilizate pentru a cripta și decripta informațiile schimbate în timpul unei sesiuni SSL. Are loc o verificare a integrității (adică pentru a detecta orice modificare a datelor între momentul în care au fost trimise și momentul în care au fost primite pe conexiunea SSL).
  8. Clientul trimite un mesaj către server informându-l că mesajele viitoare de la client vor fi criptate cu cheia de sesiune. Apoi trimite un mesaj separat, criptat, că partea de strângere de mână s-a încheiat.
  9. În cele din urmă, serverul trimite un mesaj clientului informându-l că mesajele viitoare de la server vor fi criptate cu cheia de sesiune. Apoi trimite un mesaj separat, criptat, că partea de strângere de mână s-a încheiat.

Acest lucru finalizează strângerea de mână și începe o conexiune sigură, care este criptată și decriptată folosind datele cheii. Dacă oricare dintre cele de mai sus nu reușește, atunci strângerea de mână SSL a eșuat și conexiunea nu este creată.

Protocol pentru modificarea parametrilor de criptare

Există un protocol de modificare a parametrilor de criptare pentru a semnala trecerea la modul de criptare. Protocolul conține un singur mesaj care este criptat și comprimat pe conexiunea stabilită în prezent. Mesajul este format dintr-un singur bit cu valoarea 1.

struct { enum { change_cipher_spec ( 1 ), ( 255 ) } tip ; } ChangeCipherSpec ;

Un mesaj de modificare a cifrului este trimis de către client și server pentru a notifica partea care primește faptul că scrierile ulterioare vor fi protejate conform noului CipherSpec și cheilor negociate. Acceptarea acestui mesaj determină receptorul să instruiască stratul de scriere să copieze imediat starea de citire în așteptare în starea de citire curentă. Imediat după trimiterea acestui mesaj, expeditorul trebuie să instruiască stratul de scriere să schimbe modul de scriere înapoi în modul de scriere curent. Mesajul de schimbare a cifrului este trimis în timpul strângerii de mână, după ce parametrii de securitate au fost transferați, dar înainte ca mesajul „terminat” să fie trimis.

Protocol de alarmă

Unul dintre tipurile de validare acceptate în protocolul SSL de scriere este protocolul de alarmă. Mesajul de alarmă transmite dificultățile întâlnite în mesaj și o descriere a alarmei. Un mesaj de alarmă de nivel critic întrerupe imediat conexiunea. În acest caz, alte conexiuni corespunzătoare sesiunii pot continua, dar identificatorul de sesiune trebuie invalidat. Ca și alte mesaje, mesajul de alarmă este criptat și comprimat de îndată ce este indicată starea curentă a conexiunii.

Protocolul de aplicare

Mesajul aplicației de date funcționează la nivel de înregistrare. Este fragmentat, comprimat și criptat pe baza stării curente a conexiunii. Mesajele sunt considerate transparente pentru stratul de înregistrare.

Securitate

SSL 2.0

Există o serie de atacuri care pot fi făcute împotriva protocolului SSL. Cu toate acestea, SSL este rezistent la aceste atacuri, cu condiția ca utilizatorul să folosească doar servere de încredere pentru a procesa informații. SSL 2.0 este vulnerabil în unele situații [23] :

  1. Chei criptografice identice sunt utilizate pentru autentificarea și criptarea mesajelor;
  2. SSL 2.0 are un design MAC slab care folosește o funcție hash MD5 cu un prefix secret, făcându-l vulnerabil la atac;
  3. SSL 2.0 nu are protecție pentru protocolul de strângere de mână, ceea ce înseamnă că atacurile „man-in-the-middle” pot rămâne nedetectate;
  4. SSL 2.0 folosește o conexiune TCP închisă pentru a indica sfârșitul datelor. Aceasta înseamnă că este posibil următorul atac: un atacator falsifică pur și simplu un FIN TCP, lăsând destinatarul fără un mesaj despre sfârșitul transferului de date (această eroare a fost remediată în SSL 3.0);
  5. SSL 2.0 presupune un singur service desk și un domeniu fix, ceea ce contravine caracteristicii standard de găzduire partajată pe serverele web.

SSL 2.0 este dezactivat implicit în browserele care încep cu Internet Explorer 7 [24] , Mozilla Firefox 2 [25] , Opera 9.5 [26] și Safari .

SSL 3.0

Pe 14 octombrie 2014 a fost identificată o vulnerabilitate CVE-2014-3566, numită POODLE (Padding Oracle On Downgraded Legacy Encryption). Această vulnerabilitate permite unui atacator să efectueze un atac Man-in-the-Middle asupra unei conexiuni criptate folosind SSL 3.0. Vulnerabilitatea POODLE este o vulnerabilitate în protocol și nu în nici una dintre implementările acestuia, astfel încât toate conexiunile criptate cu SSL v3 sunt afectate de aceasta.

Există și alte puncte slabe în SSL 3.0. De exemplu, jumătate din cheia principală care este setată depinde în întregime de funcția hash MD5, care nu este rezistentă la coliziuni și, prin urmare, nu este considerată sigură [27] .

Tipuri de posibile atacuri

Dicţionar attack

Acest tip de atac este efectuat atunci când atacatorul are o idee despre ce tip de mesaje sunt trimise.
Un criptoanalist poate forma o bază de date în care cheile sunt șiruri de text simplu criptate. Pe baza bazei de date create, puteți determina cheia de sesiune corespunzătoare unui anumit bloc de date.

În general, astfel de atacuri sunt posibile pentru SSL. Dar SSL încearcă să contracareze aceste atacuri folosind chei de sesiune mari - clientul generează o cheie care este mai lungă decât este permisă de restricțiile de export, o parte din care este trimisă la server în text clar, iar restul este combinată cu partea secretă pentru a obține o cheie suficient de lungă (de exemplu, 128 de biți, așa cum este cerut de RC4). Modul de a bloca atacurile de text simplu este de a face cantitatea de text necesară inacceptabil de mare. Fiecare bit adăugat la lungimea cheii de sesiune dublează dimensiunea dicționarului. Folosirea unei chei de sesiune de 128 de biți face ca dimensiunea dicționarului să depășească cu mult posibilitățile tehnice moderne (soluția ar necesita un număr de atomi care nu se găsește în întregul univers). Un alt mod prin care SSL poate contracara acest atac este prin utilizarea lungimii maxime posibile a cheilor (în cazul non-export). Consecința acestui lucru este că cea mai simplă și ieftină metodă de atac este un atac frontal al cheii, dar pentru o cheie de 128 de biți, costul dezvăluirii acesteia poate fi considerat infinit.

Reflection Attack

Atacatorul înregistrează sesiunea de comunicare dintre server și client. Mai târziu, încearcă să stabilească o conexiune cu serverul prin redarea mesajelor înregistrate de client. Dar SSL respinge acest atac cu un identificator unic de conexiune (IC) special. Desigur, teoretic, o terță parte nu poate prezice IS deoarece se bazează pe un set de evenimente aleatorii. Cu toate acestea, un atacator cu resurse mari ar putea înregistra un număr mare de sesiuni și ar putea încerca să preia sesiunea „corectă” pe baza nonce -ului pe care serverul l-a trimis în mesajul Server_Hello . Dar non -urile SSL au o lungime de cel puțin 128 de biți, ceea ce înseamnă că un atacator trebuie să scrie 264 de non -uri pentru a avea 50% șanse de a ghici. Dar 2 64 este un număr suficient de mare pentru a face aceste atacuri lipsite de sens.

Atacul protocolului de strângere de mână

Un atacator poate încerca să influențeze schimbul de strângere de mână, astfel încât părțile să aleagă diferiți algoritmi de criptare, și nu pe cei pe care îi aleg de obicei. Deoarece multe implementări acceptă criptarea exportată, iar unele chiar acceptă criptarea 0 sau MAC, aceste atacuri sunt de mare interes.

Pentru un astfel de atac, un atacator trebuie să falsifice rapid unul sau mai multe mesaje de strângere de mână. Dacă se întâmplă acest lucru, clientul și serverul vor calcula diferite valori hash pentru mesajul de strângere de mână. Ca urmare, părțile nu vor accepta mesaje „ terminate ” una de la cealaltă . Fără a cunoaște secretul, atacatorul nu va putea remedia mesajul terminat , astfel încât atacul poate fi detectat.

Hacking conexiuni SSL în interiorul centrului de date

Cel mai notoriu incident de piratare în masă a informațiilor protejate prin protocoale SSL a fost efectuat de agenții FBI folosind sistemele Carnivore și NarusInsight , ceea ce a dus la un proces din partea organizației pentru drepturile omului Electronic Frontier Foundation împotriva AT&T, care a instalat aceste complexe pentru a sparge criptografic. informatii protejate.

În ciuda protestului public ridicat din Statele Unite ale acestui caz și a anchetei la nivelul Comitetului Constituțional al Camerei Reprezentanților, nu a existat nicio piratare tehnologică a protocolului SSL de către agenții FBI . Carnivore și NarusInsight au fost instalate chiar în centrul de date , unde existau servere care efectuează conexiuni SSL cu clienți la distanță. NarusInsight a recuperat complet informațiile criptate ascultând nu o conexiune SSL, ci traficul intern între serverele de aplicații din cadrul centrului de date însuși, după ce datele primite prin SSL au fost decriptate chiar de server, care le-a primit de la utilizatori externi.

Totuși, acest incident a arătat că SSL nu poate fi un mijloc de încredere de protecție criptografică a datelor serverului de pe Internet, deoarece serviciile speciale pot instala sisteme de ascultare precum NarusInsight sau SORM-2 [28] în centrul de date. Orice tip de criptografie, care implică faptul că cheile pentru cifruri se află la serverul destinatarului din centrul de date, este spart automat de către sniffer -ii serviciilor de informații prin injectarea lor în destinatar însuși. Mai mult, datele sunt complet reconstruite conform procedurilor care sunt reglementate în prezent și actelor legislative, cum ar fi „ Patriot Act ”. Mai mult, aceste acte legislative interzic, până la urmărirea penală a proprietarilor de centre de date, eliminarea sniffer-urilor serviciului de informații din partea internă a serverelor destinatare. Cu aceste sisteme în vigoare, SSL poate asigura doar o conexiune între doi utilizatori de pe Internet, nu o conexiune SSL la un site Web extern.

Atacul BEAST

Pe 23 septembrie 2011, cercetătorii thailandezi Duong și Giuliano Rizzo, folosind un applet Java, au demonstrat o „dovadă de concept” numită Beast („Browser Exploit Against SSL/TLS”) indicând o vulnerabilitate în TLS 1.0 [29] [30] . Anterior, această vulnerabilitate, care a fost descoperită inițial de Phillip Rogaway [31] în 2002, era practic imposibil de demonstrat de către cineva. Vulnerabilitatea TLS 1.1 a fost raportată în 2006.
Atacul se bazează pe mai multe ipoteze, dar, după cum s-a dovedit, este foarte posibil să le implementăm. În primul rând, criptoanalistul trebuie să poată intercepta traficul transmis de browser . În al doilea rând, este necesar să forțați cumva utilizatorul să transfere date prin același canal de comunicare securizat . Să se stabilească o conexiune sigură între computerele lui Bob ( B ) și Alice ( A ). Să presupunem că al-lea bloc al mesajului care a venit la noi conține informații secrete (de exemplu, o parolă).

C i = E ( Cheie , M i xor C i-1 ), unde C i este blocul criptat, M i  este textul secret

Să presupunem că parola A  este P . Putem verifica dacă presupunerea noastră este corectă:

Deci, am reușit să interceptăm vectorul de inițializare, care este folosit pentru a cripta primul bloc al următorului mesaj, dar acesta este și ultimul bloc al mesajului anterior (în formă criptată) - IV . Am interceptat și C i-1 . Folosind aceste date, formăm un mesaj astfel încât primul bloc să devină egal cu următorul:

M1 = C i- 1 xor IV xor P

Dacă criptoanalistul poate transmite mesajul pe același canal securizat, atunci primul bloc al noului mesaj va arăta astfel:

C 1 = E ( Cheie , M 1 xor IV ) = E ( Cheie , ( C i-1 xor IV xor P ) xor P ) xor IV ) = E ( Cheie , ( C i-1 xor P )) = C i

Rezultă că dacă P = M , atunci primul bloc criptat al noului mesaj C 1 va fi egal cu C i interceptat anterior .

În practică, apare o problemă: blocul M  are 16 octeți, chiar dacă îi cunoaștem pe toți, cu excepția a doi octeți, avem nevoie de 2-15 încercări pentru a ghici restul. Dacă nu știm nimic?
De aici concluzia că această practică poate funcționa dacă criptoanalistul are un număr limitat de ipoteze despre valoarea lui M , sau mai degrabă majoritatea conținutului acestui bloc. Următoarea presupunere este că criptoanalistul poate controla locația datelor în bloc, de exemplu știind că parola are n caractere. Știind acest lucru, criptoanalistul aranjează parola în așa fel încât doar 1 caracter să intre în primul bloc, iar restul (n-1) în următorul - adică primii 15 octeți conțin date cunoscute. Și pentru a ghici un personaj, un atacator va avea nevoie de 256 de încercări în cel mai rău caz.

Vulnerabilitatea era cunoscută mult mai devreme, dar dezvoltatorii utilitarului sunt primii care au reușit să implementeze toate condițiile pentru acest atac. Și anume:

  1. Criptanalistul are capacitatea de a asculta conexiunile de rețea inițiate de browserul computerului atacat
  2. Criptanalistul are capacitatea de a injecta un agent în browserul victimei
  3. Agentul are capacitatea de a trimite cereri HTTPS arbitrare

Iată o listă cu diferite tehnologii și pluginuri de browser care pot efectua injecția de agent în browserul victimei: API-ul Javascript XMLHttpRequest, API-ul HTML5 WebSocket, API-ul Flash URLRequest, API-ul Java Applet URLConnection și API-ul Silverlight WebClient.

Atacul RC4

În 2013, a avut loc o conferință în Singapore, unde profesorul Dan Bernstein a prezentat o nouă tehnică de cracare a protocoalelor SSL/TLS folosind cifrul RC4, care a fost propusă în 2011 ca o apărare împotriva BEAST. O vulnerabilitate găsită în RC4 este legată de lipsa aleatoriei în fluxul de biți care a amestecat mesajul. După ce a transmis de mai multe ori același mesaj, a fost dezvăluit un număr suficient de modele repetate pentru a restabili textul original. Pentru un atac, o cantitate imensă de date va trebui să fie condusă prin cifr. În implementarea prezentată, hacking-ul a durat până la 32 de ore, dar posibilitatea de optimizare a procesului nu a fost exclusă. Dar acest atac este greu de implementat în practică. Creatorii susțin că sunt necesare 256 de texte cifrate pentru a recupera 80 de octeți din 256 .

Dezvăluirea cifrurilor

După cum știți, SSL depinde de diferiți parametri criptografici. Criptarea cheii publice RSA este necesară pentru transferul cheii și autentificarea server/client. Cu toate acestea, diverși algoritmi criptografici sunt utilizați ca cifră. Astfel, dacă se efectuează un atac cu succes asupra acestor algoritmi, atunci SSL nu mai poate fi considerat sigur. Un atac asupra anumitor sesiuni de comunicare se face prin înregistrarea sesiunii, iar apoi, în timp, se selectează cheia de sesiune sau cheia RSA.

Atacul omului din mijloc

Cunoscut și ca atac MitM (Man-in-the-Middle). Implica participarea a trei părți: serverul, clientul și atacatorul între ele. În această situație, un atacator poate intercepta toate mesajele care urmează în ambele direcții și le poate înlocui. Atacatorul pare să fie serverul clientului și clientul serverului. În cazul schimbului de chei Diffie-Hellman, acest atac este eficient, deoarece integritatea informațiilor primite și sursa acesteia nu pot fi verificate. Cu toate acestea, un astfel de atac nu este posibil folosind protocolul SSL [32] , deoarece certificatele autentificate de o autoritate de certificare [33] sunt folosite pentru autentificarea sursei (de obicei serverul) .

Atacul va avea succes dacă:

  • Serverul nu are un certificat semnat.
  • Clientul nu verifică certificatul serverului.
  • Utilizatorul ignoră mesajul că certificatul nu a fost semnat de CA sau mesajul că certificatul nu se potrivește cu cel din cache [34] .

Acest tip de atac poate fi găsit în organizațiile mari care folosesc firewall -ul Microsoft Forefront TMG sau serverul proxy Blue Coat Proxy SG . În acest caz, „intrusul” este situat la marginea rețelei organizației și înlocuiește certificatul original cu al său. Acest atac devine posibil datorită capacității de a specifica serverul proxy în sine ca o autoritate de certificare de încredere (fie ca rădăcină, fie ca copil al rădăcinii corporative). De obicei, o astfel de procedură de implementare este transparentă pentru utilizator datorită muncii utilizatorilor corporativi în mediul Active Directory. Acest instrument poate fi folosit atât pentru a controla informațiile transmise, cât și pentru a fura datele personale transmise folosind o conexiune HTTPS securizată.

Cea mai controversată problemă este conștientizarea utilizatorului cu privire la posibilitatea interceptării datelor, deoarece în cazul înlocuirii unui certificat rădăcină nu vor fi afișate mesaje de securitate, iar utilizatorul se va aștepta la confidențialitatea datelor transmise.

În plus, atunci când utilizați Forefront TMG ca proxy SSL, există posibilitatea unui al doilea atac MitM pe partea de Internet, deoarece certificatul original nu va fi transferat utilizatorului, iar Forefront TMG poate fi configurat să accepte și apoi să se înlocuiască pe sine. -certificate semnate sau revocate. Pentru a vă proteja împotriva unui astfel de atac, este necesar să interziceți complet lucrul cu servere web ale căror certificate conțin erori, ceea ce va duce cu siguranță la incapacitatea de a lucra cu protocolul HTTPS cu multe site-uri.

Blue Coat Proxy SG este protejat de al doilea atac MitM: sistemul vă permite să configurați politica astfel încât în ​​cazul unui certificat de server web neîncrezător, sistemul să emită și un certificat semnat nu de un lanț de încredere, ci de un auto temporar. -una semnata.

THC-SSL-DOS

Pe 24 octombrie 2011, The Hacker's Choice (THC) a lansat utilitarul THC-SSL-DOS, care poate fi folosit pentru a efectua atacuri DoS pe serverele SSL. Acest utilitar exploatează o vulnerabilitate în caracteristica de renegociere SSL, care a fost concepută inițial pentru a face SSL mai sigur. Revalidarea permite serverului să creeze o nouă cheie privată printr-o conexiune SSL existentă. Această caracteristică este activată implicit pe majoritatea serverelor. Stabilirea unei conexiuni securizate, precum și efectuarea revalidării SSL, necesită de câteva ori mai multe resurse pe partea serverului decât pe partea clientului, adică dacă clientul trimite multe cereri de revalidare SSL, acest lucru epuizează resursele de sistem ale serverului.

Potrivit unui participant THC, un atac de succes necesită un laptop cu utilitarul instalat și acces la Internet. Programul a fost publicat în domeniul public, deoarece omologul său a apărut în rețea în urmă cu câteva luni. De asemenea, potrivit dezvoltatorilor, un atac poate fi efectuat chiar dacă serverul nu acceptă funcția de revalidare, deși acest lucru va necesita modificarea metodei de atac. În acest caz, sunt stabilite multe conexiuni TCP pentru noul handshake SSL, dar sunt necesari mai mulți roboți pentru un atac eficient.
Ca o apărare, unii dezvoltatori de software recomandă stabilirea unor reguli specifice pentru a termina o conexiune cu un client care efectuează o operațiune de revalidare de mai mult de un anumit număr de ori pe secundă.

SSLstrip

În 2009, la o conferință Black Hat din Washington DC, Moxie Marlinspike, un hacker independent, a demonstrat un nou instrument , SSLstrip, care poate extrage informații importante, păcălindu-i pe utilizatori să creadă că se află pe o pagină securizată atunci când nu sunt. Acest lucru poate fi realizat prin conversia paginilor în mod normal securizate prin SSL în omologii lor nesiguri, înșelând atât serverul, cât și clientul. Utilitarul funcționează deoarece multe site-uri care utilizează protecție SSL au o pagină de pornire nesigură. Ele criptează doar acele secțiuni în care sunt transmise informații importante. Și când utilizatorul face clic pe pagina de autorizare, utilitarul înlocuiește răspunsul site-ului prin schimbarea https în http. SSLstrip folosește următoarele tehnici: în primul rând, în rețeaua locală este instalat un server proxy care are un certificat valid - de aici utilizatorul continuă să vadă https în bara de adrese, în al doilea rând, se folosește o tehnică pentru a crea URL -uri lungi care conțin false '/ ' în bara de adrese - acest lucru este necesar pentru a evita conversia caracterelor de către browsere. Pentru a dovedi că sistemul a funcționat, Moxxi a rulat SSLstrip pe un server care deservește rețeaua Tor și, în 24 de ore, a scos 254 de parole de la utilizatorii Yahoo , Gmail , Ticketmaster, PayPal și LinkedIn .

Tratarea erorilor în protocolul SSL

În protocolul SSL, gestionarea erorilor este foarte simplă. Când este detectată o eroare, cel care a descoperit-o trimite un mesaj despre aceasta partenerului său. Erorile fatale necesită ca serverul și clientul să închidă conexiunea [35] . Protocolul SSL definește următoarele erori:

  1. Unsupported_Certificate_Type_Error : Această eroare apare atunci când clientul/serverul primește un tip de certificat care nu este acceptat. Eroarea poate fi recuperată (numai pentru autentificarea clientului).
  2. No_Cipher_Error : apare o eroare când serverul nu poate găsi o dimensiune a cheii sau un cifr care este, de asemenea, acceptat de client. Eroarea este irecuperabilă.
  3. Bad_Certificate_Error : Această eroare apare atunci când certificatul este considerat rău de partea care o primește. Aceasta înseamnă că fie semnătura certificatului este incorectă, fie valoarea acestuia este incorectă. Eroarea poate fi recuperată (numai pentru autentificarea clientului).
  4. No_Certificate_Error : Dacă este trimis un mesaj Request_Certificate, atunci această eroare poate fi returnată deoarece clientul nu are un certificat. Remediem eroarea.

Algoritmi utilizați în SSL

Vezi și

Note

  1. US-CERT. TA14-290A: Vulnerabilitatea protocolului SSL 3.0 și atacul POODLE  (engleză) (octombrie 2014). Arhivat din original pe 6 noiembrie 2014.
  2. PROTOCOLUL SSL  . Netscape Corporation. Preluat la 20 mai 2013. Arhivat din original la 14 iunie 1997.
  3. Dierks, T. și E. Rescorla. Protocolul Transport Layer Security (TLS) Versiunea 1.1 , RFC 4346  . Data accesului: 9 mai 2013. Arhivat din original pe 9 februarie 2012.
  4. Prezentare generală a criptării SSL/TLS Microsoft TechNet . Actualizat la 31 iulie 2003.
  5. SSL/TLS în detaliu Microsoft TechNet . Actualizat la 31 iulie 2003.
  6. SSL Pulse (link descendent) . Preluat la 27 aprilie 2017. Arhivat din original la 15 mai 2017. 
  7. ↑ 1 2 SSL/TLS Overview  (engleză)  (downlink) (6 august 2008). Preluat la 9 mai 2013. Arhivat din original la 3 iulie 2013.
  8. Numărul 90392: Fără suport TLS 1.2 (SHA-2)  ( 27 iunie 2013). Preluat la 15 iulie 2015. Arhivat din original la 3 august 2013.
  9. Securitate în Firefox 2  (engleză)  (downlink) (6 august 2008). Preluat la 9 mai 2013. Arhivat din original la 23 iulie 2012.
  10. Bug 733647 - Implementați TLS 1.1 (RFC 4346) în Gecko (Firefox, Thunderbird), activat implicit  ( 6 martie 2012). Preluat la 9 mai 2013. Arhivat din original la 30 mai 2013.
  11. Bug 480514 - Implementarea suportului pentru TLS 1.2 (RFC 5246)  ( 17 martie 2010). Preluat la 9 mai 2013. Arhivat din original la 31 mai 2013.
  12. „Changelog pentru Opera 5.x pentru Windows” Arhivat 19 octombrie 2014 la Wayback Machine la Opera.com
  13. „Changelog pentru Opera [8] Beta 2 pentru Windows” Arhivat 23 noiembrie 2005 la Wayback Machine la Opera.com
  14. Microsoft. Secure Channel  (engleză) (5 septembrie 2012). Preluat la 9 mai 2013. Arhivat din original la 17 aprilie 2013.
  15. Microsoft. MS-TLSP Anexa A  (engleză) (27 februarie 2009). Preluat la 9 mai 2013. Arhivat din original la 17 aprilie 2013.
  16. Yngve Nysæter Pettersen. Nou în Opera Presto 2.2: Suport TLS 1.2  ( 25 februarie 2009). Preluat la 9 mai 2013. Arhivat din original la 17 aprilie 2013.
  17. „Changelog pentru Opera 9.0 pentru Windows” Arhivat 31 august 2006 la Wayback Machine la Opera.com
  18. Adrian, Dimcev. Browsere/biblioteci/servere comune și suitele de criptare asociate  implementate . Proiectul TLS Cipher Suites . Preluat la 9 mai 2013. Arhivat din original la 17 aprilie 2013.
  19. Apple. Features  (engleză) (10 iunie 2009). Preluat la 9 mai 2013. Arhivat din original la 17 aprilie 2013.
  20. Apple. Notă tehnică TN2287 - Probleme de interoperabilitate iOS 5 și TLS 1.2  ( 14 octombrie 2011). Consultat la 9 mai 2013. Arhivat din original pe 8 septembrie 2010.
  21. Liebowitz, Matt. Apple emite patch-uri  uriașe de securitate pentru software . NBCNews.com (13 octombrie 2011). Preluat la 9 mai 2013. Arhivat din original la 17 aprilie 2013.
  22. MWR Info Security. Aventuri cu iOS UIWebviews  ( 16 aprilie 2012). Preluat la 9 mai 2013. Arhivat din original la 17 aprilie 2013. , secțiunea „HTTPS (SSL/TLS)”
  23. Joris Claessens, Valentin Dem, Danny De Cock, Bart Preneel, Joos Vandewalle. Despre securitatea sistemelor bancare electronice online de astăzi  (ing.) 253–265 (2002). Consultat la 11 mai 2013. Arhivat din original la 17 octombrie 2015.
  24. Lawrence Eric. IEBlog : Îmbunătăţiri viitoare HTTPS în Internet Explorer 7 Beta 2  . Bloguri MSDN (25 noiembrie 2007). Consultat la 11 mai 2013. Arhivat din original la 17 aprilie 2013.
  25. Mozilla Corporation . Bugzilla@Mozilla - Bug 236933 - Dezactivați SSL2 și alte cifruri slabe  . Preluat la 11 mai 2013. Arhivat din original la 14 februarie 2017.
  26. „Opera 9.5 pentru Windows Changelog” Arhivat 26 iunie 2009 la Wayback Machine la Opera.com : „SSL v2 dezactivat și cifruri slabe”.
  27. Institutul Național de Standarde și Tehnologie. Ghid de implementare pentru FIPS PUB 140-2 și Programul de validare a modulelor criptografice  ( decembrie 2010). Preluat la 11 mai 2013. Arhivat din original la 17 aprilie 2013.
  28. Igor Savciuk. E SORM, iubito. Partea 1. Posibilitățile instrumentelor moderne de criptare  // „BIT. Business&Information Technologies»  : Jurnal. - M . : SRL "Editura" Polozhevets și partenerii ", 2014. - Emisiune. 1 , nr 34 . — ISSN 2313-8718 . Arhivat 28 octombrie 2020.
  29. Dan Goodin. Hackerii încalcă criptarea SSL folosită de milioane de site-uri  (engleză) (19 septembrie 2011). Preluat la 11 mai 2013. Arhivat din original la 17 aprilie 2013.
  30. Y Combinator comentează această problemă  ( 20 septembrie 2011). Preluat la 11 mai 2013. Arhivat din original la 17 aprilie 2013.
  31. Security of CBC Ciphersuites in SSL/TLS: Problems and Countermeasures  ( 20 mai 2004). Preluat la 11 mai 2013. Arhivat din original la 30 iunie 2012.
  32. Eric Rescorla. Înțelegerea atacului de renegociere TLS  . Ghicirea educată (5 noiembrie 2009). Preluat la 11 mai 2013. Arhivat din original la 28 aprilie 2013.
  33. Simon Josephson. GnuTLS 2.10.0 a fost lansat  . Note de lansare GnuTLS (25 iunie 2010). Preluat la 11 mai 2013. Arhivat din original la 28 aprilie 2013.
  34. Adrian Dimcev. SSL/TLS 101 aleatoriu - derulări ale versiunii SSL/TLS și  browsere . SSL/TLS aleatoriu 101 . Preluat la 11 mai 2013. Arhivat din original la 28 aprilie 2013.
  35. Kaspar Brand. Gazde virtuale SSL bazate pe nume: cum să rezolvi problema  ( 18 aprilie 2007). Preluat la 20 mai 2013. Arhivat din original la 3 august 2012.
  36. Christopher Allen, Tim Dierks. Protocol SSL - Traducere - versiunea 1.0 . Certicom . Semenov Yu. A. Consultat la 20 mai 2013. Arhivat din original pe 11 iulie 2012.
  37. David Wagner. Analiza protocolului SSL  3.0 . Universitatea din California. Preluat la 24 mai 2013. Arhivat din original la 31 octombrie 2014.

Literatură

Cărți
  • Pouyan Sepehrdad. Descoperirea și exploatarea noilor părtiniri în RC4. — 1-st. - Springer Berlin Heidelberg, 2011. - T. 1. - S. 24. - 91 p. - ISBN 978-3-642-19573-0 .
  • Joris Claessens. Securitatea calculatoarelor și criptografia industrială. — 3-t. - Leuven-Heverlee, Belgia, 2002. - T. 1. - S. 253-265. — 287 p. — ISBN 0167-4048.
  • John Viega. Securitatea rețelei cu OpenSSL. — 1-st. - O'Reilly Media, SUA, 15 iunie 2002. - Vol. 1. - 386 pagini p. - ISBN 978-0596002701 .
  • Eric Rescorla. SSL și TLS: proiectarea și construirea de sisteme securizate. — 1-st. - Addison-Wesley Professional, 27 octombrie 2000. - Vol. 1. - 528 pagini p. — ISBN 978-0201615982 .
  • Stefan Thomas. Elemente esențiale SSL și TLS: Securizarea Web-ului. — 1-st. - Wiley, 11 februarie 2000. - T. 1. - 224 pagini p. — ISBN 978-0471383543 .
Articole
  • Descrierea protocoalelor SSL/TLS // 3. - CRYPTO-PRO LLC., 2002. - P. 49.
  • Semenov Yu.A. Protocolul SSL. Nivel de conector sigur. - 2000. - Nr. 1 .
  • E. Rescorla. Protocolul Transport Layer Security (TLS) Versiunea 1.2 // 1-st. - RTFM, Inc., august 2008. - Nr. 1 . — P. 101.
  • P. Karlton. Protocolul Secure Sockets Layer (SSL) Versiunea 3.0 // 1-st. - RTFM, Inc., august 2011. - Nr. 1 . — P. 67.
  • T. Dierks. Secure Sockets Layer (SSL) // 1-st. - RTFM, Inc., august 2008. - Nr. 1 . — P. 207.

Link -uri