Реализация протоколов TLS с открытым исходным кодом; ответвление от OpenSSL в 2014 году
LibreSSL — это реализация протокола Transport Layer Security (TLS) с открытым исходным кодом . Реализация названа в честь Secure Sockets Layer (SSL), устаревшего предшественника TLS, поддержка которого была удалена в версии 2.3.0. Проект OpenBSD отделил LibreSSL от OpenSSL 1.0.1g в апреле 2014 года в ответ на уязвимость безопасности Heartbleed , [5] [6] [7] [8] с целью модернизации кодовой базы , улучшения безопасности и применения лучших практик разработки . [9] [10] [11]
История
После обнаружения уязвимости безопасности Heartbleed в OpenSSL команда OpenBSD провела аудит кодовой базы и решила, что необходимо создать ответвление OpenSSL для удаления опасного кода. [5] Домен libressl.org был зарегистрирован 11 апреля 2014 года; проект объявил название 22 апреля 2014 года. За первую неделю разработки было удалено более 90 000 строк кода на языке C. [10] [12] Неиспользуемый код был удален, а поддержка устаревших операционных систем ( Classic Mac OS , NetWare , OS/2 , 16-битная Windows ) и некоторых старых операционных систем ( OpenVMS ) была удалена. [13]
LibreSSL изначально разрабатывался как предполагаемая замена OpenSSL в OpenBSD 5.6 и был портирован на другие платформы, как только урезанная версия библиотеки стала стабильной. [14] По состоянию на апрель 2014 года [обновлять]проект искал «стабильное обязательство» внешнего финансирования. [12] 17 мая 2014 года Боб Бек представил «LibreSSL: первые 30 дней и что нас ждет в будущем» во время конференции BSDCan 2014 года, в которой он описал прогресс, достигнутый за первый месяц. [15] 5 июня 2014 года несколько ошибок OpenSSL стали общедоступными. Хотя несколько проектов были уведомлены заранее, [16] LibreSSL — нет; Тео де Раадт обвинил разработчиков OpenSSL в намеренном сокрытии этой информации от OpenBSD и LibreSSL. [17]
20 июня 2014 года Google создала еще одну версию OpenSSL под названием BoringSSL и пообещала обменяться исправлениями с LibreSSL. [18] [19] Google уже перелицензировала некоторые из своих вкладов под лицензией ISC , как того потребовали разработчики LibreSSL. [18] [20] 21 июня 2014 года Тео де Раадт приветствовал BoringSSL и изложил планы по LibreSSL-portable. [21] Начиная с 8 июля началось портирование кода для macOS и Solaris , [22] в то время как первоначальное портирование на Linux началось 20 июня. [23]
По состоянию на 2021 год OpenBSD использует LibreSSL в качестве основной библиотеки TLS. Alpine Linux поддерживал LibreSSL в качестве основной библиотеки TLS в течение трех лет, до выпуска 3.9.0 в январе 2019 года. Gentoo поддерживал LibreSSL до февраля 2021 года. [24] В Python 3.10 LibreSSL был удален [25] после поддержки с Python 3.4.3 (2015). [26]
Принятие
LibreSSL является поставщиком TLS по умолчанию для:
LibreSSL является поставщиком TLS по умолчанию для следующих систем, поддержка которых в настоящее время прекращена:
LibreSSL — это выбираемый поставщик TLS для:
- Пакеты FreeBSD [32]
- Пакеты Gentoo [33] (поддержка прекращена с февраля 2021 г. [34] [35] [36] )
- Пакеты OPNsense [37] (будут удалены после 22.7 [38] )
- macOS
Изменения
Связанные с памятью
Изменения включают замену пользовательских вызовов памяти на вызовы из стандартной библиотеки (например, strlcpy
, calloc
, asprintf
, reallocarray
, и т. д.). [39] [ самостоятельно опубликованный источник? ] [40] Этот процесс может помочь позже отлавливать ошибки переполнения буфера с помощью более продвинутых инструментов анализа памяти или путем наблюдения за сбоями программы (через ASLR , использование бита NX , стековых канареек и т. д.).
Исправления для потенциальных сценариев двойного освобождения также были указаны в журналах коммитов VCS (включая явное назначение значений нулевых указателей ). [41] В журналах коммитов также были указаны дополнительные проверки работоспособности, связанные с обеспечением аргументов длины, назначениями переменных без знака в знаковые , значениями указателей и возвратами методов.
Проактивные меры
Для поддержания хорошей практики программирования ряд опций компилятора и флагов, разработанных для обеспечения безопасности, были включены по умолчанию, чтобы помочь обнаружить потенциальные проблемы, чтобы их можно было исправить раньше (-Wall, -Werror, -Wextra, -Wuninitialized). Также были обновления читаемости кода , которые помогают будущим участникам в проверке корректности программы ( KNF , пробелы, переносы строк и т. д.). Изменение или удаление ненужных оболочек методов и макросов также помогает с читаемостью кода и аудитом ( ссылки на библиотеки абстракций ошибок и ввода-вывода ).
Изменения были внесены для обеспечения совместимости LibreSSL с 2038 годом, а также для сохранения переносимости на другие подобные платформы. Кроме того, были добавлены вызовы explicit_bzero
и bn_clear
для предотвращения их оптимизации компилятором и предотвращения чтения ранее выделенной памяти злоумышленниками.
Криптографический
Были внесены изменения, помогающие обеспечить правильное заполнение методов на основе генератора случайных чисел посредством замены небезопасных методов заполнения (используя возможности, предлагаемые самим ядром изначально). [42] [43] Что касается значимых дополнений, OpenBSD добавила поддержку новых и более надежных алгоритмов ( потоковый шифр ChaCha и код аутентификации сообщений Poly1305 ), а также более безопасный набор эллиптических кривых (кривые Brainpool из RFC 5639, до 512 бит в силе).
Добавлены функции
В первоначальный выпуск LibreSSL был добавлен ряд функций: алгоритм ChaCha и Poly1305 , эллиптические кривые Brainpool и ANSSI, а также режимы AES-GCM и ChaCha20-Poly1305 AEAD .
В более поздних версиях было добавлено следующее: [44]
- 2.1.0: Автоматические эфемерные ключи EC. [45]
- 2.1.2: Встроенная реализация arc4random на macOS и FreeBSD. [46]
- 2.1.2: Переработана поддержка набора шифров ГОСТ .
- 2.1.3: Поддержка ALPN . [47]
- 2.1.3: Поддержка наборов шифров SHA-256 и Camellia .
- 2.1.4: Поддержка TLS_FALLBACK_SCSV на стороне сервера. [48]
- 2.1.4: certhash как замена скрипту c_rehash.
- 2.1.4: API X509_STORE_load_mem для загрузки сертификатов из памяти (улучшенная поддержка chroot).
- 2.1.4: Экспериментальные двоичные файлы Windows .
- 2.1.5: Незначительное обновление, в основном для улучшения поддержки Windows, первые рабочие 32- и 64-битные двоичные файлы. [49]
- 2.1.6: libtls объявлен стабильным и включенным по умолчанию. [50]
- 2.2.0: Поддержка AIX и Cygwin . [51]
- 2.2.1: Добавление EC_curve_nid2nist и EC_curve_nist2nid [52] из OpenSSL, начальная поддержка Windows XP /2003.
- 2.2.2: Определяет LIBRESSL_VERSION_NUMBER, [53] добавлены методы TLS_* в качестве замены вызовам методов SSLv23_*, поддержка сборки cmake .
Старые небезопасные функции
Первоначальный выпуск LibreSSL отключил ряд функций по умолчанию. [13] Часть кода для этих функций была позже удалена, включая Kerberos , шифры US-Export , сжатие TLS, DTLS heartbeat , SSL v2 и SSL v3 .
В более поздних версиях отключено больше функций:
- 2.1.1: После обнаружения уязвимости POODLE в устаревшем протоколе SSL 3.0 LibreSSL теперь отключает использование SSL 3.0 по умолчанию. [54]
- 2.1.3: Проверка подлинности подписи ГОСТ Р 34.10-94 . [44] [47]
- 2.2.1: Удаление Dynamic Engine и поддержки MDC-2DES [52]
- 2.2.2: Удаление SSL 3.0 из исполняемого файла openssl, удаление обходных путей Internet Explorer 6, движок RSAX. [53]
- 2.3.0: Полное удаление SSL 3.0, SHA-0 и DTLS 1_BAD_VER.
Удаление кода
В первоначальном выпуске LibreSSL был удален ряд функций, которые считались небезопасными, ненужными или устаревшими в составе OpenBSD 5.6.
- В ответ на Heartbleed функциональность сердцебиения [55] была удалена одной из первых.
- Поддержка устаревших платформ ( Classic Mac OS , NetWare , OS/2 , 16-битная Windows ) была прекращена.
- Поддержка некоторых старых платформ ( OpenVMS ) была прекращена.
- Поддержка несуществующих платформ, таких как big-endian i386 и amd64 . [56]
- Поддержка старых компиляторов.
- Движки IBM 4758 , Broadcom ubsec, Sureware, Nuron, GOST, GMP, CSwift, CHIL, CAPI, Atalla и AEP были удалены из-за неактуальности оборудования или зависимости от несвободных библиотек.
- Генератор псевдослучайных чисел OpenSSL был удален (и заменен на реализацию arc4random на основе ChaCha20 ).
- Макросы препроцессора , которые были сочтены ненужными или небезопасными или уже давно устарели в OpenSSL (например, des_old.h).
- Старые ненужные файлы для языков ассемблера , C и Perl (например, EGD ).
- MD2 , функциональность SEED .
- SSL 3.0, SHA-0, DTLS1_BAD_VER
Алгоритм Dual EC DRBG , который, как подозревают, имеет бэкдор , [ 57] был вырезан вместе с поддержкой стандарта FIPS 140-2, который требовал [ необходима цитата ] его. Неиспользуемые протоколы и небезопасные алгоритмы также были удалены, включая поддержку FIPS 140-2 , [58] MD4 / MD5 [44] J-PAKE , [13] и SRP . [59]
Отставание в устранении ошибок
Одной из жалоб на OpenSSL было количество открытых ошибок, сообщенных в баг-трекере, которые оставались неисправленными в течение многих лет. Более старые ошибки теперь исправляются в LibreSSL. [60]
Смотрите также
Ссылки
- ^ "LibreSSL 4.0.0 Released". 14 октября 2024 г. Получено 15 октября 2024 г.
- ^ "LibreSSL" . Получено 14 марта 2024 г. .
- ^ "LibreSSL Releases" . Получено 14 марта 2024 г. .
- ^ «Выпуски LibreSSL».
- ^ ab Unangst, Ted (22 апреля 2014 г.). "Origins of libressl". flak . Получено 24 апреля 2014 г. .
- ^ Кернер, Шон Майкл (22 апреля 2014 г.). «После Heartbleed OpenSSL разветвляется на LibreSSL». eWeek . Получено 24 апреля 2014 г.
- ^ «Not Just a Cleanup Any More: Анонсирован проект LibreSSL». Slashdot . 22 апреля 2014 г. Получено 24 апреля 2014 г.
- ↑ M, Constantine (17 мая 2014 г.). Soulskill (ред.). «30-дневное обновление статуса LibreSSL». Slashdot .
- ^ "LibreSSL".
- ^ ab Seltzer, Larry (21 апреля 2014 г.). "OpenBSD разветвляется, сокращается, исправляет OpenSSL". Zero Day . ZDNet . Получено 21 апреля 2014 г. .
- ^ Хесслер, Питер (15 апреля 2014 г.). «OpenBSD начала масштабную очистку и очистку OpenSSL». OpenBSD Journal . Получено 24 апреля 2014 г.
- ^ ab Brodkin, Jon (22 апреля 2014 г.). «Код OpenSSL не подлежит восстановлению, утверждает создатель форка «LibreSSL»». Ars Technica . Получено 24 апреля 2014 г.
- ^ abcd Жакуто, Антуан (1 ноября 2014 г.). "OpenBSD 5.6 Released". openbsd-announce (список рассылки) . Получено 28 октября 2015 г.
- ^ МакКаллион, Джейн (22 апреля 2014 г.). «Heartbleed: LibreSSL очищает «безответственный» код OpenSSL». PC Pro . Архивировано из оригинала 26 июня 2014 г. Получено 23 апреля 2014 г.
- ^ Бек, Боб (17 мая 2014 г.). «LibreSSL: первые 30 дней и что нас ждет в будущем» . Получено 17 мая 2014 г.
- ^ "Re: OpenSSL seven security fixes". oss-sec (список рассылки). 5 июня 2014 г. Получено 9 июня 2014 г.
- ^ de Raadt, Theo (5 июня 2014 г.). "Re: новые уязвимости OpenSSL". openbsd-misc (список рассылки) . Получено 9 июня 2014 г.
- ^ ab Langley, Adam (20 июня 2014 г.). "BoringSSL (20 июня 2014 г.)". Imperialviolet.org . Получено 21 июня 2014 г. .
- ^ Гудин, Дэн (20 июня 2014 г.). "Google представляет независимую "ветвь" OpenSSL под названием "BoringSSL"". Ars Technica . Получено 21 июня 2014 г.
- ↑ Sing, Joel (21 июня 2014 г.). "OpenBSD — lib/libssl/src/crypto/evp evp_aead.c e_chacha20poly1305.c". Архивировано из оригинала 22 июня 2014 г. Получено 21 июня 2014 г.
- ^ de Raadt, Theo (21 июня 2014 г.). "Boringssl и т. п.". openbsd-tech (список рассылки) . Получено 28 октября 2015 г.
- ^ Бек, Боб (8 июля 2014 г.). "OpenBSD - lib/libcrypto/crypto getentropy_osx.c getentropy_solaris.c". Архивировано из оригинала 22 июля 2014 г. Получено 8 июля 2014 г.
- ↑ Бек, Боб (20 июня 2014 г.). "OpenBSD — lib/libcrypto/crypto getentropy_linux.c". Архивировано из оригинала 9 июля 2014 г.
- ^ "LibreSSL томится на Linux [LWN.net]". lwn.net . Получено 6 января 2021 г. .
- ^ «PEP 644 — Требуется OpenSSL 1.1.1 или более новая версия».
- ^ «Журнал изменений — Документация Python 3.4.10».
- ^ Марино, Джон. "[Бета] Переключение базы на использование частных библиотек LibreSSL" . Получено 9 ноября 2018 г.
- ^ "Milky Way v0.3 release". Hyperbola Project. 23 сентября 2019 г. Получено 23 сентября 2019 г.
- ^ Рауэ, Стефан. "OpenELEC Mediacenter - [Beta] OpenELEC 6.0 Beta 2 released". Openelec.tv . Архивировано из оригинала 26 ноября 2015 года . Получено 20 августа 2015 года .
- ^ "PC-BSD эволюционирует в TrueOS". Архивировано из оригинала 16 сентября 2016 года . Получено 16 сентября 2016 года .
- ^ VonFange, Mark. "PC-BSD 10.1.2: интервью с Крисом Муром". Официальный блог PC-BSD . Получено 15 октября 2015 г.
- ^ "Добавить DEFAULT_VERSIONS=ssl=XXX". Svnweb.freebsd.org .
- ^ "Проект:LibreSSL - Gentoo". Wiki.gentoo.org .
- ↑ Горный, Михал (5 января 2021 г.). «Поддержка LibreSSL прекращена». www.gentoo.org . Проверено 30 марта 2021 г.
- ↑ Горный, Михал (31 декабря 2020 г.). «Ошибка 762847 — dev-libs/libressl: Удаление». bugs.gentoo.org . Проверено 30 марта 2021 г.
- ↑ Горный, Михал (28 декабря 2020 г.). «[gentoo-dev] [RFC] Прекращение поддержки LibreSSL?». archives.gentoo.org . Проверено 30 марта 2021 г.
- ^ "OPNsense версии 15.7 выпущен". OPNsense . Получено 15 октября 2015 .
- ^ "OPNsense версия 22.7 выпущена". OPNsense . Получено 5 августа 2022 г. .
- ↑ Орр, Уильям (23 апреля 2014 г.). «Краткий обзор событий прошлой недели». OpenSSL Valhalla Rampage . Получено 30 апреля 2014 г.
- ^ "OpenBSD LibreSSL CVS Calloc Commits". Secure.freshbsd.org .
- ^ "OpenBSD LibreSSL CVS Double Free Commits". Secure.freshbsd.org .
- ^ "Небезопасное раздача OpenBSD LibreSSL CVS". Secure.freshbsd.org .
- ^ "OpenBSD LibreSSL CVS Kernel Seeding". Secure.freshbsd.org . Архивировано из оригинала 16 сентября 2014 г.
- ^ abc "LibreSSL-portable ChangeLog". LibreSSL. 15 октября 2021 г.
- ^ Бек, Боб (12 октября 2014 г.). "LibreSSL 2.1.0 выпущен". openbsd-announce (список рассылки) . Получено 28 октября 2015 г.
- ^ Бек, Боб (9 декабря 2014 г.). "LibreSSL 2.1.2 выпущен". openbsd-announce (список рассылки) . Получено 28 октября 2015 г.
- ^ ab Cook, Brent (22 января 2015 г.). "LibreSSL 2.1.3 выпущен". openbsd-announce (список рассылки) . Получено 28 октября 2015 г.
- ↑ Кук, Брент (4 марта 2015 г.). "LibreSSL 2.1.4 выпущен". openbsd-announce (список рассылки) . Получено 28 октября 2015 г.
- ↑ Кук, Брент (17 марта 2015 г.). «LibreSSL 2.1.5 выпущен». openbsd-announce (список рассылки) . Получено 28 октября 2015 г.
- ↑ Кук, Брент (19 марта 2015 г.). «LibreSSL 2.1.6 выпущен». openbsd-announce (список рассылки) . Получено 28 октября 2015 г.
- ↑ Кук, Брент (11 июня 2015 г.). «LibreSSL 2.1.7 и 2.2.0 выпущены». openbsd-announce (список рассылки) . Получено 28 октября 2015 г.
- ^ ab Cook, Brent (9 июля 2015 г.). "LibreSSL 2.2.1 выпущен". openbsd-announce (список рассылки) . Получено 28 октября 2015 г.
- ^ ab Cook, Brent (6 августа 2015 г.). "LibreSSL 2.2.2 выпущен". openbsd-announce (список рассылки) . Получено 28 октября 2015 г.
- ^ Бек, Боб (16 октября 2014 г.). «LibreSSL 2.1.1 выпущен». openbsd-tech (список рассылки).
- ^ "OpenBSD LibreSSL CVS OPENSSL_NO_HEARTBEATS".
- ^ Миод Валлат. "Удалить поддержку big-endian i386 и amd64". openbsd-cvs (список рассылки).
- ^ Перлрот, Николь (10 сентября 2013 г.). «Правительство объявляет о шагах по восстановлению доверия к стандартам шифрования». The New York Times . Получено 9 мая 2014 г.
- ^ «Будущее (или его отсутствие) модуля объектов FIPS LibreSSL».
- ^ Бек, Боб (3 августа 2014 г.). "LibreSSL 2.0.4 выпущен". openbsd-announce (список рассылки) . Получено 28 октября 2015 г.
- ^ Валлат, Миод (10 ноября 2014 г.). "Re: CVS: cvs.openbsd.org: src". openbsd-cvs (список рассылки) . Получено 28 октября 2015 г.
Внешние ссылки
- Официальный сайт
- Исходный код LibreSSL и libtls (OpenGrok)
- LibreSSL Portable на GitHub