LibreSSL es una implementación de código abierto del protocolo Transport Layer Security (TLS). La implementación recibe su nombre de Secure Sockets Layer (SSL), el predecesor obsoleto de TLS, para el cual se eliminó el soporte en la versión 2.3.0. El proyecto OpenBSD bifurcó LibreSSL de OpenSSL 1.0.1g en abril de 2014 como respuesta a la vulnerabilidad de seguridad Heartbleed , [ 6 ] [ 7 ] [ 8 ] [ 9 ] con los objetivos de modernizar el código base , mejorar la seguridad y aplicar las mejores prácticas de desarrollo . [ 10 ] [ 11 ] [ 12 ]
Historia
Después de que se descubrió la vulnerabilidad de seguridad Heartbleed en OpenSSL , el equipo de OpenBSD auditó el código fuente y decidió que era necesario bifurcar OpenSSL para eliminar el código peligroso. [ 6 ] El dominio libressl.org se registró el 11 de abril de 2014; el proyecto anunció el nombre el 22 de abril de 2014. En la primera semana de desarrollo, se eliminaron más de 90 000 líneas de código C. [ 11 ] [ 13 ] Se eliminó el código no utilizado y se eliminó la compatibilidad con sistemas operativos obsoletos ( Mac OS clásico , NetWare , OS/2 , Windows de 16 bits ) y algunos sistemas operativos más antiguos ( OpenVMS ). [ 14 ]
LibreSSL se desarrolló inicialmente como un reemplazo previsto para OpenSSL en OpenBSD 5.6, y se adaptó a otras plataformas una vez que una versión simplificada de la biblioteca fue estable. [ 15 ] A partir de abril de 2014 , el proyecto buscaba un "compromiso estable" de financiación externa. [ 13 ] El 17 de mayo de 2014, Bob Beck presentó "LibreSSL: Los primeros 30 días y lo que depara el futuro" durante la conferencia BSDCan 2014, en la que describió el progreso realizado en el primer mes. [ 16 ] El 5 de junio de 2014, se hicieron públicos varios errores de OpenSSL. Si bien varios proyectos fueron notificados con anticipación, [ 17 ] LibreSSL no lo fue; Theo de Raadt acusó a los desarrolladores de OpenSSL de retener intencionalmente esta información a OpenBSD y LibreSSL. [ 18 ]
El 20 de junio de 2014, Google creó otra bifurcación de OpenSSL llamada BoringSSL y prometió intercambiar correcciones con LibreSSL. [ 19 ] [ 20 ] Google ya ha vuelto a licenciar algunas de sus contribuciones bajo la licencia ISC , como lo solicitaron los desarrolladores de LibreSSL. [ 19 ] [ 21 ] El 21 de junio de 2014, Theo de Raadt dio la bienvenida a BoringSSL y describió los planes para LibreSSL-portable. [ 22 ] A partir del 8 de julio, comenzó la portabilidad del código para macOS y Solaris , [ 23 ] mientras que la portabilidad inicial a Linux comenzó el 20 de junio. [ 24 ]
A partir de 2021, OpenBSD utiliza LibreSSL como biblioteca TLS principal. Alpine Linux fue compatible con LibreSSL como su biblioteca TLS principal durante tres años, hasta la versión 3.9.0 en enero de 2019. Gentoo fue compatible con LibreSSL hasta febrero de 2021. [ 25 ] Python 3.10 dejó de ser compatible con LibreSSL [ 26 ] después de haber sido compatible desde Python 3.4.3 (2015). [ 27 ]
Adopción
LibreSSL es el proveedor predeterminado de TLS para:
- Dragonfly BSD [ 28 ]
- OpenBSD [ 14 ]
- Hipérbola GNU/Linux-libre [ 29 ]
- OpenSSH en Windows
LibreSSL era el proveedor predeterminado de TLS para estos sistemas, ahora descontinuados:
LibreSSL es un proveedor de TLS seleccionable para:
Cambios
Relacionado con la memoria
Los cambios incluyen el reemplazo de llamadas de memoria personalizadas por otras en una biblioteca estándar (por ejemplo, strlcpy, calloc, asprintf, reallocarray, etc.). [ 40 ] [ 41 ] Este proceso puede ayudar más adelante a detectar errores de desbordamiento de búfer con herramientas de análisis de memoria más avanzadas o al observar fallos del programa (a través de ASLR , uso del bit NX , canarios de pila , etc.).
También se han citado correcciones para posibles escenarios de doble liberación de memoria en los registros de confirmación de VCS (incluidas asignaciones explícitas de valores de puntero nulo ). [ 42 ] También se han citado comprobaciones de integridad adicionales en los registros de confirmación relacionadas con garantizar argumentos de longitud, asignaciones de variables sin signo a con signo , valores de puntero y retornos de métodos.
Medidas proactivas
Para mantener buenas prácticas de programación, se han habilitado por defecto varias opciones y banderas del compilador diseñadas para la seguridad, que ayudan a detectar posibles problemas para que puedan corregirse cuanto antes (-Wall, -Werror, -Wextra, -Wuninitialized). También se han implementado mejoras en la legibilidad del código que facilitan a los futuros colaboradores la verificación de la corrección del programa (KNF, espacios en blanco, ajuste de línea, etc.). La modificación o eliminación de envoltorios de métodos y macros innecesarios también contribuye a la legibilidad y auditoría del código (referencias a bibliotecas de abstracción de errores y E/S ).
Se realizaron cambios para garantizar la compatibilidad de LibreSSL con el año 2038, manteniendo la portabilidad a otras plataformas similares. Además, explicit_bzerose bn_clearañadieron llamadas para evitar que el compilador las optimice y para impedir que los atacantes lean la memoria previamente asignada.
Criptográfico
Se realizaron cambios para garantizar la correcta inicialización de los métodos basados en generadores de números aleatorios mediante la sustitución de prácticas de inicialización inseguras (aprovechando las características que ofrece el propio kernel de forma nativa). [ 43 ] [ 44 ] En cuanto a las adiciones notables, OpenBSD ha añadido soporte para algoritmos más nuevos y de mayor reputación ( cifrado de flujo ChaCha y código de autenticación de mensajes Poly1305 ) junto con un conjunto más seguro de curvas elípticas (curvas brainpool de RFC 5639, de hasta 512 bits de seguridad).
Características añadidas
La versión inicial de LibreSSL añadió varias características: el algoritmo ChaCha y Poly1305 , las curvas elípticas Brainpool y ANSSI , y los modos AEAD AES-GCM y ChaCha20-Poly1305 .
Las versiones posteriores añadieron lo siguiente: [ 45 ]
- 2.1.0: Claves EC efímeras automáticas . [ 46 ]
- 2.1.2: Implementación integrada de arc4random en macOS y FreeBSD. [ 47 ]
- 2.1.2: Se ha revisado la compatibilidad con el conjunto de cifrado GOST .
- 2.1.3: Soporte ALPN . [ 48 ]
- 2.1.3: Compatibilidad con los conjuntos de cifrado SHA-256 y Camellia .
- 2.1.4: Soporte del lado del servidor para TLS_FALLBACK_SCSV . [ 49 ]
- 2.1.4: certhash como reemplazo del script c_rehash.
- 2.1.4: API X509_STORE_load_mem para cargar certificados desde la memoria (mejora la compatibilidad con chroot).
- 2.1.4: Binarios experimentales de Windows .
- 2.1.5: Actualización menor principalmente para mejorar la compatibilidad con Windows, primero funcionan los binarios de 32 y 64 bits . [ 50 ]
- 2.1.6: libtls se declara estable y habilitado por defecto. [ 51 ]
- 2.2.0: Compatibilidad con AIX y Cygwin . [ 52 ]
- 2.2.1: Adición de EC_curve_nid2nist y EC_curve_nist2nid [ 53 ] de OpenSSL, soporte inicial para Windows XP /2003.
- 2.2.2: Define LIBRESSL_VERSION_NUMBER, [ 54 ] se agregaron TLS_*methods como reemplazo de las llamadas a SSLv23_*method, soporte de compilación de cmake .
Características antiguas e inseguras
La versión inicial de LibreSSL deshabilitó varias funciones por defecto. [ 14 ] Parte del código de estas funciones se eliminó posteriormente , incluidos Kerberos , los cifrados US-Export , la compresión TLS, el latido DTLS , SSL v2 y SSL v3 .
Las versiones posteriores deshabilitaron más funciones:
- 2.1.1: Tras el descubrimiento de la vulnerabilidad POODLE en el protocolo SSL 3.0 heredado , LibreSSL ahora desactiva el uso de SSL 3.0 por defecto. [ 55 ]
- 2.1.3: Autenticación de firma GOST R 34.10-94 . [ 45 ] [ 48 ]
- 2.2.1: Eliminación del soporte para Dynamic Engine y MDC-2DES [ 53 ]
- 2.2.2: Eliminación de SSL 3.0 del binario openssl, eliminación de soluciones alternativas para Internet Explorer 6, motor RSAX. [ 54 ]
- 2.3.0: Eliminación completa de SSL 3.0, SHA-0 y DTLS 1_BAD_VER.
Eliminación de código
La versión inicial de LibreSSL ha eliminado varias características que se consideraban inseguras, innecesarias o en desuso como parte de OpenBSD 5.6.
- En respuesta a Heartbleed , la funcionalidad de latido cardíaco [ 56 ] fue una de las primeras características que se eliminaron.
- Se eliminó la compatibilidad con plataformas obsoletas ( Mac OS clásico , NetWare , OS/2 , Windows de 16 bits ).
- Se eliminó la compatibilidad con algunas plataformas antiguas ( OpenVMS ).
- Soporte para plataformas que no existen, como big-endian i386 y amd64 . [ 57 ]
- Compatibilidad con compiladores antiguos.
- Los motores IBM 4758 , Broadcom ubsec, Sureware, Nuron, GOST, GMP, CSwift, CHIL, CAPI, Atalla y AEP fueron eliminados debido a la irrelevancia del hardware o a su dependencia de bibliotecas no libres .
- Se eliminó el generador de números pseudoaleatorios de OpenSSL (y se reemplazó por una implementación de arc4random basada en ChaCha20 ).
- Macros de preprocesador que se han considerado innecesarias o inseguras, o que ya habían sido descontinuadas en OpenSSL hace mucho tiempo (por ejemplo, des_old.h).
- Archivos antiguos innecesarios para lenguaje ensamblador , C y Perl (por ejemplo, el demonio de recolección de entropía).
- Funcionalidad MD2 , SEED .
- SSL 3.0, SHA-0, DTLS1_BAD_VER
El algoritmo Dual EC DRBG , del que se sospecha que tiene una puerta trasera , [ 58 ] se eliminó junto con el soporte para el estándar FIPS 140-2 que lo requería. También se eliminaron protocolos no utilizados y algoritmos inseguros, incluido el soporte para FIPS 140-2 , [ 59 ] MD4 / MD5 , [ 45 ] J-PAKE , [ 14 ] y SRP . [ 60 ]
Lista de errores pendientes
Una de las quejas sobre OpenSSL era la cantidad de errores abiertos reportados en el sistema de seguimiento de errores que llevaban años sin corregirse. Los errores más antiguos ahora se están corrigiendo en LibreSSL. [ 61 ]
Véase también
Referencias
- ↑ Cook, Brent (2 de mayo de 2017). "LibreSSL, casi dos años después" . InfoSec Southwest . YouTube . Consultado el 15 de septiembre de 2018 .
- ↑ "LibreSSL 4.1.2 y 4.2.1 publicados" . 31 de octubre de 2025. Consultado el 3 de noviembre de 2025 .
- ↑ "LibreSSL" . Consultado el 14 de marzo de 2024 .
- ↑ "LibreSSL Releases" . Consultado el 14 de marzo de 2024 .
- ↑ "Lanzamientos de LibreSSL" .
- 1 2 Unangst, Ted (22 de abril de 2014). "Orígenes de libressl" . flak . Recuperado el 24 de abril de 2014 .
- ↑ Kerner, Sean Michael (22 de abril de 2014). "Después de Heartbleed, OpenSSL se bifurca en LibreSSL" . eWeek . Consultado el 24 de abril de 2014 .
- ↑ "Ya no es solo una limpieza: se anuncia el proyecto LibreSSL" . Slashdot . 22 de abril de 2014. Consultado el 24 de abril de 2014 .
- ↑ M, Constantine (17 de mayo de 2014). Soulskill (ed.). "Actualización de estado de 30 días sobre LibreSSL" . Slashdot .
- ↑ "LibreSSL" .
- 1 2 Seltzer, Larry (21 de abril de 2014). "OpenBSD bifurca, poda y corrige OpenSSL" . Zero Day . ZDNet . Recuperado el 21 de abril de 2014 .
- ↑ Hessler, Peter (15 de abril de 2014). "OpenBSD ha comenzado una masiva simplificación y limpieza de OpenSSL" . OpenBSD Journal . Recuperado el 24 de abril de 2014 .
- 1 2 Brodkin, Jon (22 de abril de 2014). "El código de OpenSSL está más allá de toda reparación, afirma el creador de la bifurcación "LibreSSL"" . Ars Technica . Recuperado el 24 de abril de 2014 .
- 1 2 3 4 Jacoutot, Antoine (1 de noviembre de 2014). "OpenBSD 5.6 Released" . openbsd-announce (Lista de correo) . Recuperado el 28 de octubre de 2015 .
- ↑ McCallion, Jane (22 de abril de 2014). "Heartbleed: LibreSSL elimina el código "irresponsable" de OpenSSL" . PC Pro . Archivado del original el 26 de junio de 2014. Recuperado el 23 de abril de 2014 .
- ↑ Beck, Bob (17 de mayo de 2014). "LibreSSL: Los primeros 30 días y lo que depara el futuro" (Diapositivas) . Recuperado el 17 de mayo de 2014 .
- ↑ "Re: OpenSSL siete correcciones de seguridad" . oss-sec (Lista de correo). 5 de junio de 2014. Consultado el 9 de junio de 2014 .
- ↑ de Raadt, Theo (5 de junio de 2014). "Re: nuevos fallos de OpenSSL" . openbsd-misc (Lista de correo) . Recuperado el 9 de junio de 2014 .
- 1 2 Langley, Adam (20 de junio de 2014). "BoringSSL (20 de junio de 2014)" . Imperialviolet.org . Recuperado el 21 de junio de 2014 .
- ↑ Goodin, Dan (20 de junio de 2014). "Google presenta una "bifurcación" independiente de OpenSSL llamada "BoringSSL"" . Ars Technica . Consultado el 21 de junio de 2014 .
- ↑ Sing, Joel (21 de junio de 2014). "OpenBSD — lib/libssl/src/crypto/evp evp_aead.c e_chacha20poly1305.c" . Recuperado el 21 de junio de 2014 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ de Raadt, Theo (21 de junio de 2014). "Boringssl y demás" . openbsd-tech (Lista de correo) . Recuperado el 28 de octubre de 2015 .
- ↑ Beck, Bob (8 de julio de 2014). "OpenBSD - lib/libcrypto/crypto getentropy_osx.c getentropy_solaris.c" . Archivado del original el 22 de julio de 2014. Recuperado el 8 de julio de 2014 .
- ↑ Beck, Bob (20 de junio de 2014). "OpenBSD — lib/libcrypto/crypto getentropy_linux.c" .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ "LibreSSL languidece en Linux [ LWN.net ] " . lwn.net . Consultado el 6 de enero de 2021 .
- ↑ "PEP 644 -- Requiere OpenSSL 1.1.1 o posterior" .
- ↑ "Registro de cambios — Documentación de Python 3.4.10" .
- ↑ Marino, John. " [ Beta ] Cambiar la base para usar bibliotecas privadas de LibreSSL" . Recuperado el 9 de noviembre de 2018 .
- ↑ "Lanzamiento de Milky Way v0.3" . Hyperbola Project. 23 de septiembre de 2019. Consultado el 23 de septiembre de 2019 .
- ↑ Raue, Stephan. "OpenELEC Mediacenter - [ Beta ] OpenELEC 6.0 Beta 2 lanzado" . Openelec.tv . Archivado del original el 26 de noviembre de 2015. Recuperado el 20 de agosto de 2015 .
- ↑ "PC-BSD evoluciona hacia TrueOS" . Archivado del original el 16 de septiembre de 2016. Consultado el 16 de septiembre de 2016 .
- ↑ VonFange, Mark. "PC-BSD 10.1.2: una entrevista con Kris Moore" . Blog oficial de PC-BSD. Archivado del original el 6 de septiembre de 2015. Consultado el 15 de octubre de 2015 .
- ↑ "Añadir DEFAULT_VERSIONS=ssl=XXX" . Svnweb.freebsd.org .
- ↑ "Proyecto:LibreSSL - Gentoo" . Wiki.gentoo.org . Archivado del original el 18 de octubre de 2016. Consultado el 17 de octubre de 2016 .
- ↑ Górny, Michał (5 de enero de 2021). "Se suspendió el soporte de LibreSSL" . www.gentoo.org . Consultado el 30 de marzo de 2021 .
- ↑ Górny, Michał (31 de diciembre de 2020). "Error 762847 - dev-libs/libressl: eliminación" . bugs.gentoo.org . Consultado el 30 de marzo de 2021 .
- ↑ Górny, Michał (28 de diciembre de 2020). " [ gentoo-dev ] [ RFC ] ¿Descontinuar el soporte de LibreSSL?" . archivos.gentoo.org . Consultado el 30 de marzo de 2021 .
- ↑ "OPNsense versión 15.7 publicada" . OPNsense. Archivado del original el 21 de septiembre de 2015. Consultado el 15 de octubre de 2015 .
- ↑ "OPNsense versión 22.7 publicada" . OPNsense . Consultado el 5 de agosto de 2022 .
- ↑ Orr, William (23 de abril de 2014). "Un breve resumen de la última semana" . OpenSSL Valhalla Rampage . Recuperado el 30 de abril de 2014 .
- ↑ "OpenBSD LibreSSL CVS Calloc Commits" . Secure.freshbsd.org .
- ↑ "OpenBSD LibreSSL CVS Double Free Commits" . Secure.freshbsd.org .
- ↑ "Inserción insegura de CVS LibreSSL en OpenBSD" . Secure.freshbsd.org .
- ↑ "Inserción del kernel de OpenBSD LibreSSL CVS" . Secure.freshbsd.org .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - 1 2 3 "LibreSSL-portable ChangeLog" . LibreSSL. 15 de octubre de 2021.
- ↑ Beck, Bob (12 de octubre de 2014). "LibreSSL 2.1.0 lanzado" . openbsd-announce (Lista de correo) . Recuperado el 28 de octubre de 2015 .
- ↑ Beck, Bob (9 de diciembre de 2014). "LibreSSL 2.1.2 lanzado" . openbsd-announce (Lista de correo) . Recuperado el 28 de octubre de 2015 .
- 1 2 Cook, Brent (22 de enero de 2015). "LibreSSL 2.1.3 lanzado" . openbsd-announce (Lista de correo) . Recuperado el 28 de octubre de 2015 .
- ↑ Cook, Brent (4 de marzo de 2015). "LibreSSL 2.1.4 lanzado" . openbsd-announce (Lista de correo) . Consultado el 28 de octubre de 2015 .
- ↑ Cook, Brent (17 de marzo de 2015). "LibreSSL 2.1.5 lanzado" . openbsd-announce (Lista de correo) . Consultado el 28 de octubre de 2015 .
- ↑ Cook, Brent (19 de marzo de 2015). "LibreSSL 2.1.6 lanzado" . openbsd-announce (Lista de correo) . Consultado el 28 de octubre de 2015 .
- ↑ Cook, Brent (11 de junio de 2015). "LibreSSL 2.1.7 y 2.2.0 publicados" . openbsd-announce (Lista de correo) . Consultado el 28 de octubre de 2015 .
- 1 2 Cook, Brent (9 de julio de 2015). "LibreSSL 2.2.1 lanzado" . openbsd-announce (Lista de correo) . Recuperado el 28 de octubre de 2015 .
- 1 2 Cook, Brent (6 de agosto de 2015). "LibreSSL 2.2.2 lanzado" . openbsd-announce (Lista de correo) . Recuperado el 28 de octubre de 2015 .
- ↑ Beck, Bob (16 de octubre de 2014). "LibreSSL 2.1.1 lanzado" . openbsd-tech (Lista de correo).
- ↑ "OpenBSD LibreSSL CVS OPENSSL_NO_HEARTBEATS" .
- ↑ Miod Vallat. "Eliminar el soporte para big-endian i386 y amd64" . openbsd-cvs (Lista de correo).
- ↑ Perlroth, Nicole (10 de septiembre de 2013). "El gobierno anuncia medidas para restaurar la confianza en los estándares de cifrado" . The New York Times . Consultado el 9 de mayo de 2014 .
- ↑ "El futuro (o la falta del mismo) del módulo de objetos FIPS de LibreSSL" .
- ↑ Beck, Bob (3 de agosto de 2014). "LibreSSL 2.0.4 lanzado" . openbsd-announce (Lista de correo) . Recuperado el 28 de octubre de 2015 .
- ↑ Vallat, Miod (10 de noviembre de 2014). "Re: CVS: cvs.openbsd.org: src" . openbsd-cvs (Lista de correo) . Consultado el 28 de octubre de 2015 .
Enlaces externos
- Sitio web oficial
- Código fuente de LibreSSL y libtls (OpenGrok)
- LibreSSL Portable en GitHub
- Software de 2014
- Bibliotecas de C (lenguaje de programación)
- Software criptográfico
- Software de seguridad gratuito
- Software libre programado en C
- OpenBSD
- Bifurcaciones de software
- Implementación de la seguridad de la capa de transporte