LibreSSL es una implementación de código abierto del protocolo Transport Layer Security (TLS). La implementación lleva el nombre de Secure Sockets Layer (SSL), el predecesor obsoleto de TLS, cuya compatibilidad se eliminó 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 , [5] [6] [7] [8] con el objetivo de modernizar la base de código , mejorar la seguridad y aplicar las mejores prácticas de desarrollo .[9] [10] [11]
Autor (es) original (es) | El proyecto OpenSSL |
---|---|
Desarrollador (es) | El proyecto OpenBSD |
Versión inicial | 2.0.0 / 11 de julio de 2014 |
Lanzamiento estable | 3.3.3 (3 de mayo de 2021 [2] [3] ) [±] |
Versión de vista previa | ninguno [±] |
Repositorio | |
Escrito en | C , montaje , Perl |
Sistema operativo | OpenBSD , FreeBSD , NetBSD , Linux , HP-UX , Solaris , macOS , Windows y otros [4] |
Tipo | Biblioteca de criptografía |
Licencia | Apache License 1.0, licencia BSD de 4 cláusulas , licencia ISC , dominio público |
Sitio web | www .libressl .org |
A partir de 2021, OpenBSD usa LibreSSL como la biblioteca SSL principal. Alpine Linux admitió LibreSSL como su biblioteca TLS principal durante tres años, hasta la versión 3.9.0 en enero de 2019. Gentoo admitió LibreSSL hasta febrero de 2021. [12]
Historia
Después de que se descubrió la vulnerabilidad de seguridad Heartbleed en OpenSSL , el equipo de OpenBSD auditó el código base y decidió que era necesario bifurcar OpenSSL para eliminar el código peligroso. [5] 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. [10] [13] Se eliminó el código no utilizado y se eliminó la compatibilidad con sistemas operativos obsoletos .
LibreSSL se desarrolló inicialmente como un reemplazo previsto para OpenSSL en OpenBSD 5.6, y se trasladó a otras plataformas una vez que una versión reducida de la biblioteca se estabilizó. [14] A abril de 2014[actualizar], el proyecto buscaba un "compromiso estable" de financiamiento externo. [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 de 2014, en la que describió el progreso realizado en el primer mes. [15] El 5 de junio de 2014, varios errores de OpenSSL se hicieron públicos. Si bien varios proyectos se notificaron con antelación, [16] LibreSSL no lo fue; Theo de Raadt acusó a los desarrolladores de OpenSSL de retener intencionalmente esta información de OpenBSD y LibreSSL. [17]
El 20 de junio de 2014, Google creó otra bifurcación de OpenSSL llamada BoringSSL y prometió intercambiar correcciones con LibreSSL. [18] [19] Google ya ha vuelto a otorgar la licencia a algunas de sus contribuciones bajo la licencia ISC , como lo solicitaron los desarrolladores de LibreSSL. [18] [20] El 21 de junio de 2014, Theo de Raadt dio la bienvenida a BoringSSL y describió los planes para LibreSSL-portable. [21] A partir del 8 de julio, comenzó la migración de código para macOS y Solaris , [22] mientras que la migración inicial a Linux comenzó el 20 de junio. [23]
Adopción
LibreSSL es el proveedor predeterminado de TLS para:
- Libélula BSD [24]
- OpenBSD [25]
- OpenELEC [26]
- Paquetes TrueOS [27] [28]
- Hipérbola GNU / Linux-libre [29]
- KISS Linux [30]
LibreSSL es un proveedor seleccionable de TLS para:
- Paquetes FreeBSD [31]
- Paquetes Gentoo [32] (el soporte cayó a partir de febrero de 2021 [33] [34] [35] )
- Paquetes OPNsense [36]
Cambios
Los cambios incluyen la sustitución de las llamadas de memoria a medida para aquellos en una biblioteca estándar (por ejemplo, strlcpy
, calloc
, asprintf
, reallocarray
, etc.). [37] [38] Este proceso puede ayudar más adelante a detectar errores de desbordamiento del búfer con herramientas de análisis de memoria más avanzadas o mediante la observación de fallas del programa (mediante ASLR , uso del bit NX , canarios de pila , etc.).
Las correcciones para posibles escenarios de doble libre también se han citado en los registros de confirmación de VCS (incluidas las asignaciones explícitas de valores de puntero nulo ). [39] También se han citado comprobaciones de cordura adicionales en los registros de confirmación relacionados con garantizar la longitud de argumentos, asignaciones de variables sin signo a firmado, valores de puntero y retornos de métodos.
Medidas proactivas
Para mantener una buena práctica de programación, se han habilitado de forma predeterminada una serie de opciones del compilador y banderas diseñadas para la seguridad para ayudar a detectar problemas potenciales para que puedan solucionarse antes (-Wall, -Werror, -Wextra, -Wuninitialized). También ha habido actualizaciones de legibilidad del código que ayudarán a los futuros colaboradores a verificar la corrección del programa ( KNF , espacios en blanco, ajuste de línea, etc.). La modificación o eliminación de macros y envoltorios de métodos innecesarios también ayuda con la legibilidad del código y la auditoría ( referencias a la biblioteca de abstracción de E / S y errores ).
Se realizaron cambios para garantizar que LibreSSL sea compatible con el año 2038 junto con el mantenimiento de la portabilidad para otras plataformas similares. Además, explicit_bzero
y bn_clear
se añadieron las llamadas para evitar que el compilador de optimización de ellos y evitar que los atacantes de la lectura de la memoria asignada previamente.
Criptográfico
Hubo cambios para ayudar a garantizar la siembra adecuada de métodos basados en el generador de números aleatorios mediante reemplazos de prácticas de siembra inseguras (aprovechando las características ofrecidas por el propio kernel de forma nativa). [40] [41] En términos de adiciones notables realizadas, OpenBSD ha agregado 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 de brainpool de RFC 5639, hasta 512 bits de fuerza).
Funciones agregadas
El lanzamiento inicial de LibreSSL agregó una serie de características: el algoritmo ChaCha y Poly1305 , las curvas elípticas Brainpool y ANSSI , y los modos AES-GCM y ChaCha20 - Poly1305 AEAD .
Las versiones posteriores agregaron lo siguiente: [42]
- 2.1.0: Claves EC efímeras automáticas [43]
- 2.1.2: Implementación de arc4random incorporada en macOS y FreeBSD [44]
- 2.1.2: Compatibilidad con el conjunto de cifrado GOST reelaborado
- 2.1.3: Soporte ALPN [45]
- 2.1.3: Conjuntos de cifrado SHA-256 Camellia
- 2.1.4: Soporte del lado del servidor de TLS_FALLBACK_SCSV [46]
- 2.1.4: certhash como reemplazo del script c_rehash
- 2.1.4: API X509_STORE_load_mem para cargar certificados desde la memoria (mejorar la compatibilidad con chroot)
- 2.1.4: Binarios experimentales de Windows
- 2.1.5: Actualización menor principalmente para mejorar el soporte de Windows, primeros binarios en funcionamiento de 32 y 64 bits [47]
- 2.1.6: libtls declarado estable y habilitado por defecto [48]
- 2.2.0: Compatibilidad con AIX y Cygwin [49]
- 2.2.1: Adición de EC_curve_nid2nist y EC_curve_nist2nid [50] de OpenSSL, compatibilidad inicial con Windows XP / 2003
- 2.2.2: Define LIBRESSL_VERSION_NUMBER, [51] métodos TLS_ * agregados como reemplazo de las llamadas al método SSLv23_ *, soporte de compilación de cmake
Antiguas características inseguras
La versión inicial de LibreSSL deshabilitó una serie de funciones de forma predeterminada. [25] Posteriormente se eliminó parte del código de estas funciones , incluidos Kerberos , cifrados de exportación de EE . UU. , Compresión TLS, 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 deshabilita el uso de SSL 3.0 de forma predeterminada. [52]
- 2.1.3: Autenticación de firma GOST R 34.10-94 [42] [45]
- 2.2.1: Eliminación de Dynamic Engine y compatibilidad con MDC-2DES [50]
- 2.2.2: Eliminación de SSL 3.0 del binario openssl, eliminación de las soluciones alternativas de Internet Explorer 6, motor RSAX. [51]
- 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 una serie de funciones que se consideraron inseguras, innecesarias o obsoletas como parte de OpenBSD 5.6. [25]
- En respuesta a Heartbleed , la funcionalidad de latido [53] fue una de las primeras características que se eliminaron
- Plataformas innecesarias ( Mac OS clásico , NetWare , OS / 2 , VMS , Windows de 16 bits , etc.)
- Soporte para plataformas que no existen, como big-endian i386 y amd64 [54]
- Soporte para compiladores antiguos
- Los motores IBM 4758 , Broadcom ubsec, Sureware, Nuron, GOST, GMP, CSwift, CHIL, CAPI, Atalla y AEP se eliminaron debido a la irrelevancia del hardware o la dependencia de bibliotecas que no son libres
- El OpenSSL PRNG se eliminó (y se sustituye con ChaCha20 aplicación basada de arc4random)
- Macros de preprocesador que se han considerado innecesarias o inseguras o que ya se han desaprobado en OpenSSL durante mucho tiempo (por ejemplo, des_old.h)
- Archivos antiguos innecesarios para lenguaje ensamblador , C y Perl (por ejemplo, EGD )
- MD2 , funcionalidad SEED
- SSL 3.0, SHA-0, DTLS1_BAD_VER
El algoritmo Dual EC DRBG , que se sospecha tiene una puerta trasera , [55] se eliminó junto con el soporte para el estándar FIPS 140-2 que lo requería. También se han eliminado los protocolos no utilizados y los algoritmos inseguros, incluido el soporte para FIPS 140-2 , [56] MD4 / MD5 [42] J-PAKE , [25] y SRP . [57]
Registro de errores
Una de las quejas de OpenSSL fue la cantidad de errores abiertos reportados en el rastreador de errores que no se corrigieron durante años. Los errores más antiguos ahora se están solucionando en LibreSSL. [58]
Ver también
- Comparación de implementaciones de TLS
- OpenSSH
Referencias
- ^ Cook, Brent (2 de mayo de 2017). "LibreSSL, casi dos años después" . InfoSec suroeste . YouTube . Consultado el 15 de septiembre de 2018 .
- ^ "3.3.3 Notas de la versión" . Consultado el 4 de mayo de 2021 .
- ^ "Lanzamientos de LibreSSL" . Consultado el 4 de mayo de 2021 .
- ^ "Lanzamientos de LibreSSL" .
- ^ a b Unangst, Ted (22 de abril de 2014). "Orígenes de libressl" . fuego antiaéreo . Consultado el 24 de abril de 2014 .
- ^ Kemer, 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 anunció 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 en LibreSSL" . Slashdot .
- ^ "LibreSSL" .
- ^ a b Seltzer, Larry (21 de abril de 2014). "OpenBSD se bifurca, pasa, corrige OpenSSL" . Día cero . ZDNet . Consultado el 21 de abril de 2014 .
- ^ Hessler, Peter (15 de abril de 2014). "OpenBSD ha iniciado una eliminación masiva y una limpieza de OpenSSL" . Diario de OpenBSD . Consultado el 24 de abril de 2014 .
- ^ "LibreSSL languidece en Linux [LWN.net]" . lwn.net . Consultado el 6 de enero de 2021 .
- ^ a b Brodkin, Jon (22 de abril de 2014). "Código OpenSSL más allá de la reparación, afirma el creador de la bifurcación" LibreSSL " . Ars Technica . Consultado el 24 de abril de 2014 .
- ^ McCallion, Jane (22 de abril de 2014). "Heartbleed: LibreSSL scrubs" irresponsable "código OpenSSL" . PC Pro . Archivado desde el original el 26 de junio de 2014 . Consultado 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" . Consultado el 17 de mayo de 2014 .
- ^ "Re: siete correcciones de seguridad de OpenSSL" . 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 defectos de OpenSSL" . openbsd-misc (lista de correo) . Consultado el 9 de junio de 2014 .
- ^ a b Langley, Adam (20 de junio de 2014). "BoringSSL (20 de junio de 2014)" . Imperialviolet.org . Consultado 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" . Archivado desde el original el 22 de junio de 2014 . Consultado el 21 de junio de 2014 .
- ^ de Raadt, Theo (21 de junio de 2014). "Boringssl y tal" . openbsd-tech (lista de correo) . Consultado el 28 de octubre de 2015 .
- ^ Beck, Bob (8 de julio de 2014). "OpenBSD - lib / libcrypto / crypto getentropy_osx.c getentropy_solaris.c" . Archivado desde el original el 22 de julio de 2014 . Consultado el 8 de julio de 2014 .
- ^ Beck, Bob (20 de junio de 2014). "OpenBSD - lib / libcrypto / crypto getentropy_linux.c" . Archivado desde el original el 9 de julio de 2014.
- ^ Marino, John. "[Beta] Cambie la base para usar bibliotecas privadas de LibreSSL" . Consultado el 9 de noviembre de 2018 .
- ^ a b c d Jacoutot, Antoine (1 de noviembre de 2014). "Lanzamiento de OpenBSD 5.6" . openbsd-publish (lista de correo) . Consultado el 28 de octubre de 2015 .
- ^ Raue, Stephan. "OpenELEC Mediacenter - [Beta] OpenELEC 6.0 Beta 2 lanzado" . Openelec.tv . Archivado desde el original el 26 de noviembre de 2015 . Consultado el 20 de agosto de 2015 .
- ^ "PC-BSD evoluciona a TrueOS" . Archivado desde el 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 . Consultado el 15 de octubre de 2015 .
- ^ "Lanzamiento de Milky Way v0.3" . Proyecto Hipérbola. 23 de septiembre de 2019 . Consultado el 23 de septiembre de 2019 .
- ^ "KISS Linux - Software" . Consultado el 6 de abril de 2021 .
- ^ "Agregar DEFAULT_VERSIONS = ssl = XXX" . Svnweb.freebsd.org .
- ^ "Proyecto: LibreSSL - Gentoo" . Wiki.gentoo.org .
- ^ Górny, Michał (5 de enero de 2021). "Se interrumpió 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?" . archives.gentoo.org . Consultado el 30 de marzo de 2021 .
- ^ "OPNsense versión 15.7 publicada" . OPNsense . Consultado el 15 de octubre de 2015 .
- ^ Orr, William (23 de abril de 2014). "Un resumen rápido de la última semana" . OpenSSL Valhalla Rampage . Consultado el 30 de abril de 2014 .[ fuente autoeditada? ]
- ^ "Confirmaciones Calloc de OpenBSD LibreSSL CVS" . Secure.freshbsd.org .
- ^ "OpenBSD LibreSSL CVS Double Free Commits" . Secure.freshbsd.org .
- ^ "Siembra insegura de OpenBSD LibreSSL CVS" . Secure.freshbsd.org .
- ^ "Siembra de kernel de OpenBSD LibreSSL CVS" . Secure.freshbsd.org . Archivado desde el original el 16 de septiembre de 2014.
- ^ a b c "ChangeLog portátil de LibreSSL" . LibreSSL.
- ^ Beck, Bob (12 de octubre de 2014). "LibreSSL 2.1.0 lanzado" . openbsd-publish (lista de correo) . Consultado el 28 de octubre de 2015 .
- ^ Beck, Bob (9 de diciembre de 2014). "LibreSSL 2.1.2 lanzado" . openbsd-publish (lista de correo) . Consultado el 28 de octubre de 2015 .
- ^ a b Cook, Brent (22 de enero de 2015). "LibreSSL 2.1.3 lanzado" . openbsd-publish (lista de correo) . Consultado el 28 de octubre de 2015 .
- ^ Cook, Brent (4 de marzo de 2015). "LibreSSL 2.1.4 lanzado" . openbsd-publish (lista de correo) . Consultado el 28 de octubre de 2015 .
- ^ Cook, Brent (17 de marzo de 2015). "LibreSSL 2.1.5 lanzado" . openbsd-publish (lista de correo) . Consultado el 28 de octubre de 2015 .
- ^ Cook, Brent (19 de marzo de 2015). "LibreSSL 2.1.6 lanzado" . openbsd-publish (lista de correo) . Consultado el 28 de octubre de 2015 .
- ^ Cook, Brent (11 de junio de 2015). "Liberado LibreSSL 2.1.7 y 2.2.0" . openbsd-publish (lista de correo) . Consultado el 28 de octubre de 2015 .
- ^ a b Cook, Brent (9 de julio de 2015). "LibreSSL 2.2.1 lanzado" . openbsd-publish (lista de correo) . Consultado el 28 de octubre de 2015 .
- ^ a b Cook, Brent (6 de agosto de 2015). "LibreSSL 2.2.2 lanzado" . openbsd-publish (lista de correo) . Consultado 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. "Elimina el soporte para i386 y amd64 de big-endian" . openbsd-cvs (lista de correo).
- ^ Perlroth, Nicole (10 de septiembre de 2013). "Gobierno anuncia pasos 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 de él) del módulo de objetos FIPS de LibreSSL" .
- ^ Beck, Bob (3 de agosto de 2014). "LibreSSL 2.0.4 lanzado" . openbsd-publish (lista de correo) . Consultado 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
- Página web oficial
- Código fuente de LibreSSL y libtls (OpenGrok)
- LibreSSL Portable en GitHub