LibreSSL
Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de
versiunea revizuită pe 19 mai 2020; verificările necesită
3 modificări .
LibreSSL este o bibliotecă cu implementare a protocoalelor SSL / TLS . Această bibliotecă este un produs al echipei OpenBSD , care dezvoltă un furk al OpenSSL menit să ofere un nivel mai ridicat de securitate. Înainte de bifurcare, a fost descoperită o vulnerabilitate heartbleed în OpenSSL .
Printre caracteristicile LibreSSL, se poate remarca accentul pe suportul de înaltă calitate pentru protocoalele SSL / TLS cu eliminarea funcționalităților inutile, implicarea unor instrumente de protecție suplimentare și o curățare și reelaborare semnificativă a bazei de cod.
Proiectul OpenBSD dezvoltă o ediție nativă a pachetului LibreSSL pentru OpenBSD în sine și o ediție portabilă pentru sisteme similare Unix și Microsoft Windows . [patru]
Istorie
După ce vulnerabilitatea Heartbleed a fost descoperită în OpenSSL, echipa de dezvoltare OpenBSD a auditat codul și a concluzionat că este necesar să creeze și să mențină propriul furk al bibliotecii [5] . Pe 11 aprilie 2014 a fost înregistrat domeniul libressl.org, iar pe 22 aprilie 2014 s-a anunțat lansarea proiectului.
În prima săptămână, dezvoltatorii au eliminat peste 90.000 de linii de cod C [6] [7] . S-a eliminat codul învechit sau nefolosit, a eliminat și suportul pentru sistemele de operare învechite și rar utilizate în vremea noastră. Inițial, a fost planificat să se dezvolte biblioteca LibreSSL ca înlocuitor pentru OpenSSL în sistemul de operare OpenBSD 5.6, iar după ce biblioteca ușoară devine suficient de stabilă, să o port pe alte platforme [8] [9] .
Pe 17 mai 2014, la conferința BSDCan din 2014, Bob Beck a prezentat discursul „LibreSSL: First 30 days and what lies ahead”, care a descris rezultatele primei luni de dezvoltare, modificările efectuate și problemele constatate. [zece]
Pe 5 iunie 2014, unele vulnerabilități din OpenSSL au fost făcute publice. Deși unele proiecte au fost informate în prealabil despre aceste vulnerabilități [11] , dezvoltatorii LibreSSL nu au fost informați; ca urmare, Theo de Raadt a acuzat dezvoltatorii OpenSSL că au ascuns în mod deliberat informații din proiectele OpenBSD și LibreSSL [12] .
Pe 20 iunie 2014 , Google a creat un alt fork al OpenSSL numit BoringSSL și și-a anunțat intenția de a partaja patch-uri cu proiectul LibreSSL [13] [14] . La cererea dezvoltatorilor LibreSSL, Google a reautorizat unele dintre modificările aduse unei licențe ISC [13] [15] . Pe 21 iunie, Theo de Raadt a anunțat planurile de a lansa o versiune portabilă a bibliotecii portabile LibreSSL [16] . Pe 20 iunie a început portarea codului pe Linux [17] , iar pe 8 iulie - pe platformele OS X și Solaris [18] .
Pe 11 iulie 2014, a fost lansată prima versiune portabilă a LibreSSL 2.0.0 [19] [20] . Prima lansare a fost urmată rapid de versiunile 2.0.1 [21] (13 iulie), 2.0.2 [22] (16 iulie), 2.0.3 [23] (22 iulie), 2.0.4 [24] (3 august ). ) și 2.0.5 [25] (5 august), care au remediat multe dintre deficiențele primei versiuni portabile.
Pe 28 septembrie 2014, Ted Unangst a prezentat discursul „LibreSSL: peste 30 de zile mai târziu”, care descrie realizările, problemele și schimbările făcute în lunile de după discursul lui Bob Beck la conferința BSDCan [10] [26] .
Începând cu versiunea 2.1.0, [27] , lansată pe 12 octombrie 2014, viteza de a face modificări la LibreSSL a scăzut semnificativ, iar biblioteca a devenit o alternativă funcțională la OpenSSL. Majoritatea modificărilor din versiunile 2.1.x sunt remedieri pentru vulnerabilități găsite în OpenSSL.
Utilizare
LibreSSL este folosit ca bibliotecă implicită pentru implementarea TLS pe următoarele sisteme:
- OpenBSD din versiunea 5.6 [28]
- Void Linux , începând cu 6 august 2014 [29] (Mutat înapoi la OpenSSL [30] pe 23 februarie 2021 )
- PC-BSD din versiunea 10.1.2 [31]
- ca alternativă în OPNsense începând cu versiunea 15.7 [32]
- OpenELEC începând cu versiunea 6.0beta2 [33]
- OS X de la versiunea 10.11 El Capitan [34]
Modificări
Lucrul cu memoria
Unele dintre cele mai notabile și importante modificări sunt legate de înlocuirea funcțiilor de memorie auto-scrise cu funcții standard de bibliotecă (de exemplu, strlcpy, calloc, asprintf, reallocarrayetc.) [35] [36] . Acest lucru vă va permite să găsiți mai târziu erorile de depășire a memoriei tampon folosind instrumente speciale de analiză a scurgerilor de memorie , precum și să investigați defecțiunile folosind tehnologia ASLR , atributul de biți NX , „ denunțatori ” etc.
Jurnalul de control al versiunii arată , de asemenea, remedieri pentru potențialele libere duble [37] . Există, de asemenea, multe verificări suplimentare pentru potrivirea dimensiunilor parametrilor, conversii între variabile nesemnate și semnate, verificări pentru valorile pointerului și valorile returnate.
Măsuri preventive
În conformitate cu practicile de programare sigure în general acceptate, opțiunile și indicatoarele compilatorului sunt activate în mod implicit pentru a detecta potențiale probleme în etapa de construire (-Wall, -Werror, -Wextra, -Wuniinitialized). Lizibilitate îmbunătățită a codului, ceea ce ar trebui să faciliteze verificarea codului în viitor. Remedierea sau eliminarea macrocomenzilor inutile și a împachetărilor de metode îmbunătățește, de asemenea, lizibilitatea codului și facilitează auditarea.
Problema anului 2038 a fost complet rezolvată în codul LibreSSL . În plus, pentru a împiedica compilatorul să ștergă codul de curățare a memoriei din versiunea optimizată, funcția apelează explicit_bzeroși bn_clearau fost adăugate pentru a împiedica un potențial atacator să citească valori din memoria utilizată anterior.
Criptografie
Inițializarea nesigură a generatorului de numere pseudoaleatoare cu valori inițiale a fost înlocuită cu capabilitățile oferite de nucleul sistemului de operare [38] [39] . Alte inovații semnificative includ suportul pentru noul cifr de flux ChaCha și codul de autentificare a mesajelor Poly1305 , precum și un set mai sigur de curbe eliptice (curbe brainpool de la RFC 5639 , până la 512 biți).
Caracteristici adăugate
Următoarele caracteristici au fost adăugate în prima versiune a LibreSSL: suport pentru algoritmii ChaCha și Poly1305 , curbe eliptice Brainpool Arhivat 19 noiembrie 2015 la Wayback Machine și ANSSI Arhivat 8 decembrie 2015 la Wayback Machine , modurile de criptare AEAD AES-GCM și ChaCha20-Poly1305 .
În versiunile ulterioare au apărut următoarele: [40]
- 2.1.0: Taste automate efemere pe curbele eliptice [27]
- 2.1.2: Suport pentru arc4random PRNG încorporat pe OS X și FreeBSD [41]
- 2.1.2: Suport pentru cifră GOST reproiectat
- 2.1.3: Suport ALPN [42]
- 2.1.3: Suport pentru suitele de cifrare SHA-256 Camellia
- 2.1.4: Suport pentru TLS_FALLBACK_SCSV pe partea serverului [43]
- 2.1.4: certhash ca înlocuitor pentru scriptul c_rehash
- 2.1.4: API-ul X509_STORE_load_mem pentru încărcarea certificatelor din memorie (suport îmbunătățit pentru chroot)
- 2.1.4: Versiune experimentală pentru Windows
- 2.1.5: Windows acceptă îmbunătățiri, primele versiuni funcționale pe 32 de biți și 64 de biți [44]
- 2.1.6: libtls declarat stabil și activat implicit [45]
- 2.2.0: Suport pentru AIX și Cygwin [46]
- 2.2.1: S-au adăugat curbele eliptice EC_curve_nid2nist și EC_curve_nist2nid [47] din OpenSSL, suport inițial pentru Windows XP/2003
- 2.2.2: S-a definit constanta LIBRESSL_VERSION_NUMBER [48] , a adăugat metode TLS_* ca înlocuitor pentru metodele SSLv23_*, construiți suport cu cmake.
Vechile caracteristici nesigure
În versiunea originală a LibreSSL, unele funcții au fost dezactivate implicit [28] . Unele dintre aceste funcții au fost ulterior eliminate complet, inclusiv suport pentru Kerberos , suita de criptare de export , compresie TLS, ritm cardiac DTLS și SSL v2.
În versiunile ulterioare, următoarele caracteristici au fost dezactivate suplimentar:
- 2.1.1: După descoperirea vulnerabilității POODLE în protocolul SSL 3.0 depreciat, acest protocol este dezactivat implicit în LibreSSL [49] .
- 2.1.3: S-a eliminat suportul pentru semnătura digitală GOST R 34.10-94 [40] [42]
- 2.2.1: S-a eliminat suportul pentru motorul dinamic și MDC-2DES [47]
- 2.2.2: S-a eliminat suportul pentru SSLv3 din binarul openssl , a fost eliminat suportul pentru Internet Explorer 6, motorul RSAX. [48]
- 2.3.0: Suportul complet eliminat pentru SSLv3, SHA-0 și DTLS 1_BAD_VER
Caracteristici eliminate
Prima lansare a LibreSSL în OpenBSD 5.6 a eliminat o cantitate mare de cod care a fost considerat nesigur, inutil sau învechit [28] .
- Ca răspuns la vulnerabilitatea Heartbleed , una dintre primele caracteristici eliminate a fost suportul pentru pachetele Heartbeat [50]
- Suport pentru platforme inutile ("clasic" Mac OS , NetWare , OS / 2 , VMS , Windows pe 16 biți etc.)
- Suport pentru compilatoare mai vechi
- S-au eliminat motoarele IBM 4758 , Broadcom ubsec , Sureware , Nuron, GOST, GMP, CSwift, CHIL, CAPI, Atalla și AEP din cauza hardware-ului învechit sau a dependenței de biblioteci care nu sunt gratuite
- A fost eliminat generatorul de numere pseudo-aleatorie OpenSSL (și înlocuit cu arc4random)
- Macrocomenzi de preprocesor C care au fost considerate inutile sau nesigure și au fost depreciate în OpenSSL (de exemplu, des_old.h)
- Fișiere vechi nedorite în limbaj de asamblare , C și Perl (de exemplu , EGD )
- Suport MD2 și SEED
- SSLv3, SHA-0, DTLS1_BAD_VER
Algoritmul Dual_EC_DRBG , care este suspectat că are o ușă în spate [51] , a fost de asemenea distrus. De asemenea, au fost eliminate protocoalele neutilizate și algoritmii nesiguri, inclusiv suportul pentru FIPS 140-2 [52] , MD4 / MD5 [40] J-PAKE , [28] și SRP . [24]
Greșeli vechi
Un motiv pentru criticile la adresa OpenSSL este numărul mare de intrări din bug tracker-ul care rămân necorectate mulți ani. Aceste erori vechi sunt acum remediate în LibreSSL [53] .
Securitate și vulnerabilitate
LibreSSL s-a dovedit a fi imun la multe dintre vulnerabilitățile găsite în OpenSSL după ramura furk. Este de remarcat faptul că niciuna dintre vulnerabilitățile de nivel înalt găsite în OpenSSL până acum nu sunt aplicabile pentru LibreSSL.
| LibreSSL |
OpenSSL |
LibreSSL |
OpenSSL
|
Clasificare |
1.0.1 |
1.0.2 [54]
|
critic |
0 |
0 |
0 |
0
|
Înalt |
0 |
patru |
0 |
2
|
Mediu |
paisprezece |
25 |
12 |
17
|
Scăzut |
patru |
unsprezece |
3 |
6
|
Total |
optsprezece |
39 |
cincisprezece |
23
|
Link -uri
Note
- ↑ Cook B. Lansare LibreSSL 3.6.1 - 2022 .
- ↑ Proiectul libressl Open Source pe Open Hub: Pagina de limbi - 2006.
- ↑ 1 2 3 4 5 6 7 Director de software gratuit
- ↑ LibreSSL: Lansări . www.libressl.org. Preluat la 3 octombrie 2019. Arhivat din original la 1 octombrie 2019. (nedefinit)
- ↑ Unangst, Ted Origins of libressl . flak (22 aprilie 2014). Consultat la 24 aprilie 2014. Arhivat din original pe 24 aprilie 2014. (nedefinit)
- ↑ Seltzer, Larry OpenBSD furcă, prunează, repară OpenSSL . Zi zero . ZDNet (21 aprilie 2014). Consultat la 21 aprilie 2014. Arhivat din original pe 21 aprilie 2014. (nedefinit)
- ↑ Brodkin, Jon OpenSSL cod fără reparații, susține creatorul furcii „LibreSSL” . Ars Technica (22 aprilie 2014). Preluat la 24 aprilie 2014. Arhivat din original la 19 august 2014. (nedefinit)
- ↑ McCallion, Jane Heartbleed: LibreSSL șterge codul OpenSSL „iresponsabil” (link nu este disponibil) . PC Pro (22 aprilie 2014). Consultat la 23 aprilie 2014. Arhivat din original pe 26 iunie 2014. (nedefinit)
- ↑ Larabel, Michael OpenBSD afirmă că LibreSSL va fi portabil . Phoronix (9 mai 2014). Preluat la 30 mai 2014. Arhivat din original la 8 decembrie 2015. (nedefinit)
- ↑ 1 2 Beck, Bob LibreSSL: Primele 30 de zile și ceea ce are viitorul Diapozitive (17 mai 2014). Consultat la 17 mai 2014. Arhivat din original la 24 septembrie 2015. (nedefinit)
- ↑ Re: OpenSSL șapte remedieri de securitate . Lista de corespondență (5 iunie 2014). Data accesului: 9 iunie 2014. (nedefinit)
- ↑ de Raadt, Theo Re: noi defecte OpenSSL . Lista de corespondență (5 iunie 2014). Data accesului: 9 iunie 2014. (nedefinit)
- ↑ 12 Langley, Adam BoringSSL (20 iunie 2014) . Imperial Violet (20 iunie 2014). Consultat la 21 iunie 2014. Arhivat din original la 1 iunie 2018. (nedefinit)
- ↑ Goodin, Dan Google dezvăluie „furcătura” independentă a OpenSSL numită „BoringSSL” . Ars Technica (20 iunie 2014). Consultat la 21 iunie 2014. Arhivat din original pe 23 iunie 2014. (nedefinit)
- ↑ Sing, Joel OpenBSD - lib/libssl/src/crypto/evp evp_aead.c e_chacha20poly1305.c (downlink) (21 iunie 2014). Consultat la 21 iunie 2014. Arhivat din original pe 22 iunie 2014. (nedefinit)
- ↑ de Raadt, Theo Boringssl și altele . Lista de corespondență (21 iunie 2014). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ Beck, Bob OpenBSD - lib/libcrypto/crypto getentropy_linux.c (downlink) (20 iunie 2014). Data accesului: 28 noiembrie 2015. Arhivat din original pe 9 iulie 2014. (nedefinit)
- ↑ Beck, Bob OpenBSD - lib/libcrypto/crypto getentropy_osx.c getentropy_solaris.c (downlink) (8 iulie 2014). Data accesului: 28 noiembrie 2015. Arhivat din original pe 22 iulie 2014. (nedefinit)
- ↑ Index pentru /pub/OpenBSD/LibreSSL (11 iulie 2014). Consultat la 11 iulie 2014. Arhivat din original la 14 ianuarie 2016. (nedefinit)
- ↑ Beck, Bob Prima versiune a LibreSSL portabil este disponibilă . Lista de corespondență (11 iulie 2014). Preluat: 11 iulie 2014. (nedefinit)
- ↑ Beck, Bob LibreSSL 2.0.1 lansat . Lista de corespondență (13 iulie 2014). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ Beck, Bob LibreSSL portabil 2.0.2 lansat . Lista de corespondență (16 iulie 2014). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ Beck, Bob LibreSSL 2.0.3 lansat . Lista de corespondență (22 iulie 2014). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ 12 Beck , Bob LibreSSL 2.0.4 lansat . Lista de corespondență (3 august 2014). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ Cook, Brent LibreSSL 2.0.5 lansat . Lista de corespondență (8 august 2014). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ Unangst, Ted LibreSSL: More Than 30 Days Later (28 septembrie 2014). Consultat la 9 iunie 2014. Arhivat din original pe 28 septembrie 2014. (nedefinit)
- ↑ 12 Beck , Bob LibreSSL 2.1.0 lansat . Lista de corespondență (12 octombrie 2014). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ 1 2 3 4 Jacoutot, Antoine Lansarea OpenBSD 5.6 . Lista de corespondență (1 noiembrie 2014). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ LibreSSL activat implicit (downlink) . void linux. Data accesului: 15 octombrie 2015. Arhivat din original pe 8 decembrie 2015. (nedefinit)
- ↑ Trecerea înapoi la OpenSSL . voidlinux.org . Preluat la 12 septembrie 2021. Arhivat din original la 16 octombrie 2021. (nedefinit)
- ↑ Mark VonFang. PC-BSD 10.1.2: un interviu cu Kris Moore . Blogul oficial PC-BSD. Consultat la 15 octombrie 2015. Arhivat din original la 6 septembrie 2015. (nedefinit)
- ↑ OPNsense versiunea 15.7 lansată . OPNsense. Consultat la 15 octombrie 2015. Arhivat din original la 21 septembrie 2015. (nedefinit)
- ↑ [Beta OpenELEC 6.0 Beta 2 lansat] (downlink) . OpenELEC. Consultat la 15 octombrie 2015. Arhivat din original la 26 noiembrie 2015. (nedefinit)
- ↑ Apple iOS 9: Funcții de securitate și confidențialitate (link nu este disponibil) . mediu. - „OS X 10.11 este livrat cu LibreSSL.”. Consultat la 24 octombrie 2015. Arhivat din original la 25 noiembrie 2015. (nedefinit)
- ↑ Orr, William O scurtă recapitulare a ultimei săptămâni . OpenSSL Valhalla Rampage (23 aprilie 2014). Consultat la 30 aprilie 2014. Arhivat din original pe 29 aprilie 2014. (nedefinit)
- ↑ OpenBSD LibreSSL CVS Calloc Commits . Consultat la 28 noiembrie 2015. Arhivat din original la 23 martie 2019. (nedefinit)
- ↑ OpenBSD LibreSSL CVS Double Free Commits . Consultat la 28 noiembrie 2015. Arhivat din original la 23 martie 2019. (nedefinit)
- ↑ Seeding nesigur OpenBSD LibreSSL CVS . (nedefinit)
- ↑ OpenBSD LibreSSL CVS Kernel Seeding (link descendent) . Consultat la 28 noiembrie 2015. Arhivat din original la 16 septembrie 2014. (nedefinit)
- ↑ 1 2 3 Jurnalul modificărilor LibreSSL-portabil . LibreSSL. Data accesului: 28 noiembrie 2015. Arhivat din original pe 28 noiembrie 2015. (nedefinit)
- ↑ Beck, Bob LibreSSL 2.1.2 lansat . Lista de corespondență (9 decembrie 2014). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ 1 2 Cook, Brent LibreSSL 2.1.3 lansat . Lista de corespondență (22 ianuarie 2015). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ Cook, Brent LibreSSL 2.1.4 lansat . Lista de corespondență (4 martie 2015). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ Cook, Brent LibreSSL 2.1.5 lansat . Lista de corespondență (17 martie 2015). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ Cook, Brent LibreSSL 2.1.6 lansat . Lista de corespondență (19 martie 2015). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ Cook, Brent LibreSSL 2.1.7 și 2.2.0 au fost lansate . Lista de corespondență (11 iunie 2015). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ 1 2 Cook, Brent LibreSSL 2.2.1 lansat . Lista de corespondență (9 iulie 2015). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ 1 2 Cook, Brent LibreSSL 2.2.2 lansat . Lista de corespondență (6 august 2015). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ Beck, Bob LibreSSL 2.1.1 lansat (16 octombrie 2014). Consultat la 28 noiembrie 2015. Arhivat din original la 23 martie 2019. (nedefinit)
- ↑ OpenBSD LibreSSL CVS OPENSSL_NO_HEARTBEATS . (nedefinit)
- ↑ Perlroth, Nicole . Guvernul anunță pași pentru restabilirea încrederii în standardele de criptare (10 septembrie 2013). Arhivat din original pe 12 iulie 2014. Preluat la 9 mai 2014.
- ↑ Viitorul (sau lipsa acestuia) al Modulului de obiecte FIPS al LibreSSL . Consultat la 28 noiembrie 2015. Arhivat din original la 8 decembrie 2015. (nedefinit)
- ↑ Vallat, Miod Re: CVS: cvs.openbsd.org: src . Lista de corespondență (10 noiembrie 2014). Preluat: 28 octombrie 2015. (nedefinit)
- ↑ Suma de la lansarea 1.0.2
OpenBSD |
---|
Sistem de operare |
|
---|
furci |
|
---|
Proiecte asociate |
|
---|
oameni |
|
---|
Organizații și alte resurse |
- Fundația OpenBSD
- Plaid Tongue Devils
- Jurnalul
|
---|