LibreSSL
Originalförfattare | OpenSSL - projektet |
---|---|
Utvecklare | OpenBSD - projektet |
Initial release | 2.0.0 / 11 juli 2014 |
Stabil frisättning | |
Förhandsgranska release | 3.6.0 (5 oktober 2022 | )
Förvar | |
Skrivet i | C , montering , Perl |
Operativ system | OpenBSD , FreeBSD , NetBSD , Linux , HP-UX , Solaris , macOS , Windows och andra |
Typ | Kryptografi bibliotek |
Licens | Apache-1.0 , BSD-4-klausul , ISC , allmän egendom |
Hemsida |
LibreSSL är en öppen källkodsimplementering av TLS-protokollet ( Transport Layer Security) . Implementeringen är uppkallad efter Secure Sockets Layer (SSL), den föråldrade föregångaren till TLS, för vilken stöd togs bort i version 2.3.0. OpenBSD - projektet klaffade LibreSSL från OpenSSL 1.0.1g i april 2014 som ett svar på säkerhetssårbarheten Heartbleed , med målen att modernisera kodbasen , förbättra säkerheten och tillämpa bästa praxis för utveckling .
Historia
Efter att Heartbleed - säkerhetssårbarheten upptäcktes i OpenSSL granskade OpenBSD - teamet kodbasen och beslutade att det var nödvändigt att splittra OpenSSL för att ta bort farlig kod. Domänen libressl.org registrerades den 11 april 2014; projektet tillkännagav namnet den 22 april 2014. Under den första utvecklingsveckan togs mer än 90 000 rader med C-kod bort. Oanvänd kod togs bort och stöd för föråldrade operativsystem ( Classic Mac OS , NetWare , OS/2 , 16-bitars Windows ) och vissa äldre operativsystem ( OpenVMS ) togs bort.
LibreSSL utvecklades ursprungligen som en avsedd ersättning för OpenSSL i OpenBSD 5.6, och portades till andra plattformar när en avskalad version av biblioteket var stabil. Från och med april 2014 sökte projektet ett "stabilt engagemang" av extern finansiering. Den 17 maj 2014 presenterade Bob Beck "LibreSSL: The First 30 Days, and What The Future Holds" under BSDCan-konferensen 2014, där han beskrev framstegen under den första månaden. Den 5 juni 2014 blev flera OpenSSL-buggar offentliga. Medan flera projekt anmäldes i förväg, var LibreSSL det inte; Theo de Raadt anklagade OpenSSL-utvecklarna för att avsiktligt undanhålla denna information från OpenBSD och LibreSSL.
Den 20 juni 2014 skapade Google en annan fork av OpenSSL som heter BoringSSL och lovade att utbyta korrigeringar med LibreSSL. Google har redan återlicensierat en del av sina bidrag under ISC-licensen , som det begärdes av LibreSSL-utvecklarna. Den 21 juni 2014 välkomnade Theo de Raadt BoringSSL och beskrev planerna för LibreSSL-portable. Från och med den 8 juli började kodporteringen för macOS och Solaris , medan den första porteringen till Linux började den 20 juni.
Från och med 2021 använder OpenBSD LibreSSL som det primära SSL-biblioteket. Alpine Linux stödde LibreSSL som sitt primära TLS-bibliotek i tre år, fram till release 3.9.0 i januari 2019. Gentoo stödde LibreSSL fram till februari 2021. Python 3.10 tappar LibreSSL-stödet efter att ha stöds sedan Python 3.4.3 (2015).
Adoption
LibreSSL är standardleverantören av TLS för:
LibreSSL är standardleverantören av TLS för dessa numera nedlagda system:
- Öppna ELEC
- TrueOS- paket
LibreSSL är en valbar leverantör av TLS för:
- FreeBSD- paket
- Gentoo -paket (supporten avbröts från och med februari 2021)
- OPNsense- paket (kommer att tas bort efter 22.7)
Ändringar
Ändringar inkluderar utbyte av anpassade minnesanrop till sådana i ett standardbibliotek (till exempel strlcpy
, calloc
, asprintf
, reallocarray
, etc.). [ självpublicerad källa? ] Denna process kan senare hjälpa till att fånga buffertspillfel med mer avancerade verktyg för minnesanalys eller genom att observera programkrascher (via ASLR , användning av NX-biten , stack kanariefåglar , etc.).
Fixar för potentiella dubbelfria scenarier har också citerats i VCS commit-loggarna (inklusive explicita tilldelningar av nollpekarvärden) . Det har också nämnts extra förnuftskontroller i commit -loggarna för att säkerställa längdargument, osignerade till-signerade variabeltilldelningar , pekvärden och metodreturer.
Proaktiva åtgärder
För att upprätthålla god programmeringspraxis har ett antal kompilatoralternativ och flaggor som är designade för säkerhet aktiverats som standard för att hjälpa till att upptäcka potentiella problem så att de kan åtgärdas tidigare (-Wall, -Werror, -Wextra, -Wuninitialized). Det har också funnits kodläsbarhetsuppdateringar som hjälper framtida bidragsgivare att verifiera programmets korrekthet ( KNF , blanksteg, radomslutning, etc.). Modifiering eller borttagning av onödiga metodomslag och makron hjälper också till med kodläsbarhet och granskning ( referenser till fel- och I/O-abstraktionsbibliotek) .
Ändringar gjordes för att säkerställa att LibreSSL kommer att vara år 2038-kompatibel tillsammans med bibehållen portabilitet för andra liknande plattformar. Dessutom explicit_bzero
och bn_clear
anrop till för att förhindra kompilatorn från att optimera dem och förhindra angripare från att läsa tidigare allokerat minne.
Kryptografisk
Det gjordes ändringar för att hjälpa till att säkerställa korrekt sådd av slumptalsgeneratorbaserade metoder via ersättningar av osäkra seedningsmetoder (att dra nytta av funktioner som erbjuds av själva kärnan ). När det gäller anmärkningsvärda tillägg har OpenBSD lagt till stöd för nyare och mer välrenommerade algoritmer ( ChaCha- strömchiffer och Poly1305 meddelandeautentiseringskod) tillsammans med en säkrare uppsättning elliptiska kurvor (brainpool-kurvor från RFC 5639, upp till 512 bitars styrka).
Tillagda funktioner
Den första utgåvan av LibreSSL lade till ett antal funktioner: ChaCha- och Poly1305 -algoritmen, Brainpool- och ANSSI- elliptiska kurvor och AES-GCM och ChaCha20-Poly1305 AEAD -lägena.
Senare versioner lade till följande:
- 2.1.0: Automatiska tillfälliga EC-nycklar.
- 2.1.2: Inbyggd arc4random implementering på macOS och FreeBSD.
- 2.1.2: Omarbetat stöd för GOST- chiffersvit.
- 2.1.3: ALPN- stöd.
- 2.1.3: Stöd för SHA-256 och Camellia chiffersviter.
- 2.1.4: TLS_FALLBACK_SCSV stöd på serversidan.
- 2.1.4: certhash som ersättning för c_rehash-skriptet.
- 2.1.4: X509_STORE_load_mem API för att ladda certifikat från minnet (förbättra chroot-stöd).
- 2.1.4: Experimentella Windows -binärfiler .
- 2.1.5: Mindre uppdatering främst för att förbättra Windows-stödet, först arbetade 32- och 64-bitars binärer.
- 2.1.6: libtls förklaras stabil och aktiverad som standard.
- 2.2.0: AIX och Cygwin- stöd.
- 2.2.1: Tillägg av EC_curve_nid2nist och EC_curve_nist2nid från OpenSSL, initialt stöd för Windows XP /2003.
- 2.2.2: Definierar LIBRESSL_VERSION_NUMBER, tillagda TLS_*-metoder som ersättning för SSLv23_*-metodanropen, cmake build-stöd.
Gamla osäkra funktioner
Den första utgåvan av LibreSSL inaktiverade ett antal funktioner som standard. En del av koden för dessa funktioner togs senare bort , inklusive Kerberos , US-Export-chiffer , TLS-komprimering, DTLS-hjärtslag , SSL v2 och SSL v3 .
Senare versioner inaktiverade fler funktioner:
- 2.1.1: Efter upptäckten av POODLE -sårbarheten i det äldre SSL 3.0- protokollet inaktiverar LibreSSL nu användningen av SSL 3.0 som standard.
- 2.1.3: GOST R 34.10-94 signaturautentisering.
- 2.2.1: Borttagning av Dynamic Engine och MDC-2DES-stöd
- 2.2.2: Borttagning av SSL 3.0 från openssl-binären, borttagning av lösningar för Internet Explorer 6, RSAX-motor.
- 2.3.0: Komplett borttagning av SSL 3.0, SHA-0 och DTLS 1_BAD_VER.
Kodborttagning
Den första utgåvan av LibreSSL har tagit bort ett antal funktioner som ansågs osäkra, onödiga eller utfasade som en del av OpenBSD 5.6.
- Som svar på Heartbleed var hjärtslagsfunktionen en av de första funktionerna som togs bort.
- Stöd för föråldrade plattformar ( Classic Mac OS , NetWare , OS/2 , 16-bitars Windows ) togs bort.
- Stödet för vissa äldre plattformar ( OpenVMS ) togs bort.
- Stöd för plattformar som inte finns, som big-endian i386 och amd64 .
- Stöd för gamla kompilatorer.
- Motorerna IBM 4758 , Broadcom ubsec, Sureware, Nuron, GOST, GMP, CSwift, CHIL, CAPI, Atalla och AEP togs bort på grund av irrelevans för hårdvara eller beroende av icke-fria bibliotek.
- OpenSSL PRNG togs bort (och ersattes med ChaCha20 -baserad implementering av arc4random).
- Förbehandlare makron som har ansetts onödiga eller osäkra eller som redan har blivit utfasade i OpenSSL under lång tid (t.ex. des_old.h).
- Äldre onödiga filer för assemblerspråk , C och Perl (t.ex. EGD ).
- MD2 , SEED- funktionalitet.
- SSL 3.0, SHA-0, DTLS1_BAD_VER
Dual EC DRBG- algoritmen, som misstänks ha en bakdörr , den skars ut tillsammans med stöd för FIPS 140-2 -standarden som krävde . Oanvända protokoll och osäkra algoritmer har också tagits bort, inklusive stöd för FIPS 140-2 , MD4 / MD5 J-PAKE och SRP .
Bugg eftersläpning
Ett av klagomålen från OpenSSL var antalet öppna buggar som rapporterats i felspåraren som inte åtgärdats i flera år. Äldre buggar fixas nu i LibreSSL.