LibreSSL
LibreSSL | |
---|---|
![]() | |
Тип | библиотека функций, шифрующее программное обеспечение и утилита |
Разработчик | OpenBSD Project[вд] |
Написана на | Си[2] и язык ассемблера |
Операционные системы | BSD[вд][3], GNU/Linux[3], GNU/Hurd[вд][3], UNIX, macOS[3] и Windows[3] |
Первый выпуск | 11 июля 2014 |
Последняя версия | |
Репозиторий | github.com/libressl-port… cvsweb.openbsd.org/src/l… |
Лицензия | OpenSSL License[вд][3] и лицензия ISC[3] |
Сайт | libressl.org (англ.) |
LibreSSL — библиотека с реализацией протоколов SSL/TLS. Эта библиотека является продуктом команды OpenBSD, в рамках которого развивается форк OpenSSL, нацеленный на обеспечение высшего уровня безопасности. До основания форка была обнаружена уязвимость heartbleed в OpenSSL.
Из особенностей LibreSSL можно отметить ориентацию на качественную поддержку протоколов SSL/TLS с изъятием излишней функциональности, привлечением дополнительных средств защиты и проведением значительной чистки и переработки кодовой базы.
Проект OpenBSD разрабатывает нативную редакцию пакета LibreSSL собственно для OpenBSD и переносимую редакцию для Unix-подобных систем и Microsoft Windows.[4]
История
После того, как в OpenSSL была обнаружена уязвимость Heartbleed, команда разработчиков OpenBSD провела аудит кода и пришла к выводу о необходимости создания и поддержки собственного форка библиотеки[5]. 11 апреля 2014 года был зарегистрирован домен libressl.org, а 22 апреля 2014 года объявлено о запуске проекта.
В течение первой недели разработчики удалили более 90000 строк кода на языке Си[6][7]. Удалению подвергся устаревший или неиспользуемый код, также была убрана поддержка устаревших и редко используемых в наше время операционных систем. Первоначально планировалось разрабатывать библиотеку LibreSSL как замену OpenSSL в операционной системе OpenBSD 5.6, а после того, как облегченная библиотека станет достаточно стабильной, портировать её на другие платформы[8][9].
17 мая 2014 года на конференции 2014 BSDCan Боб Бек представил доклад "LibreSSL: Первые 30 дней и что ждёт нас в будущем", в котором были описаны результаты первого месяца разработки, внесённые изменения и обнаруженные проблемы.[10]
5 июня 2014 были обнародованы некоторые уязвимости в OpenSSL. Хотя некоторым проектам сообщили об этих уязвимостях заранее[11], разработчики LibreSSL не были проинформированы; в результате Тео де Раадт обвинил разработчиков OpenSSL в преднамеренном сокрытии информации от проектов OpenBSD и LibreSSL[12].
20 июня 2014 компания Google создала ещё один форк OpenSSL под названием BoringSSL и объявила о намерении делиться патчами с проектом LibreSSL[13][14]. По просьбе разработчиков LibreSSL компания Google изменила лицензию некоторых своих изменений на лицензию ISC[13][15]. 21 июня Тео де Раадт объявил о планах по выпуску переносимой версии библиотеки LibreSSL-portable[16]. 20 июня началось портирование кода на Linux[17], а 8 июля - на платформы OS X и Solaris[18].
11 июля 2014 года вышлая первая переносимая версия LibreSSL 2.0.0[19][20]. За первым релизом быстро последовали версии 2.0.1[21] (13 июля), 2.0.2[22] (16 июля), 2.0.3[23] (22 июля), 2.0.4[24] (3 августа) и 2.0.5[25] (5 августа), в которых были исправлены многие недостатки первой переносимой версии.
28 сентября 2014 Тед Унангст представил доклад "LibreSSL: более чем 30 дней спустя", в котором описаны достижения, проблемы и изменения, сделанные за несколько месяцев после доклада Боба Бека на конференции BSDCan[10][26].
Начиная с версии 2.1.0,[27], вышедшей 12 октября 2014 года, скорость внесения изменений в LibreSSL существенно упала, а библиотека стала рабочей альтернативой OpenSSL. Большинство изменений в версиях 2.1.x являются устранением уязвимостей, найденных в OpenSSL.
Использование
LibreSSL используется в качестве библиотеки по умолчанию для реализации TLS в следующих системах:
- OpenBSD, начиная с версии 5.6[28]
- Void Linux, начиная с 6 августа 2014 года[29] (23 февраля 2021 года произошёл обратный переход на OpenSSL[30])
- PC-BSD, начиная с версии 10.1.2[31]
- как альтернатива в OPNsense, начиная с версии 15.7[32]
- OpenELEC, начиная с версии 6.0beta2[33]
- OS X, начиная с версии 10.11 El Capitan[34]
Изменения
Работа с памятью
Некоторые из наиболее заметных и важных изменений связаны с заменой самописных функций по работе с памятью на функции стандартной библиотеки (например, strlcpy
, calloc
, asprintf
, reallocarray
и т.д.)[35][36]. Это позволит в дальнейшем находить ошибки, связанные с переполнением буфера, при помощи специальных инструментов анализа утечек памяти, а также исследовать сбои при помощи технологии ASLR, атрибута NX bit, «осведомителей» и т.п.
В логе системы контроля версий также наблюдаются исправления потенциальных двойных освобождений памяти[37]. Также внесено множество дополнительных проверок на соответствие размеров параметров, преобразований между беззнаковыми и знаковыми переменными, проверок значений указателей и возвращаемых значений.
Превентивные меры
В соответствии с общепринятыми практиками безопасного программирования, по умолчанию включены опции и флаги компилятора, направленные на обнаружение потенциальных проблем на этапе сборки (-Wall, -Werror, -Wextra, -Wuninitialized). Улучшена читаемость кода, что должно облегчить проверку кода в будущем. Исправление или удаление ненужных макросов и обёрток методов также улучшает читаемость кода и облегчает аудит.
В коде LibreSSL полностью устранена проблема 2038 года. Кроме того, для предотвращения удаления компилятором кода очистки памяти из оптимизированной сборки добавлены вызовы функций explicit_bzero
и bn_clear
, чтобы потенциальный атакующий не мог прочитать значения из ранее использованной памяти.
Криптография
Небезопасная инициализация генератора псевдослучайных чисел начальными значениями была заменена на возможности, предоставляемые ядром операционной системы[38][39]. Среди других существенных нововведений стоит отметить поддержку нового поточного шифра ChaCha и кода аутентификации сообщений Poly1305, а также более безопасного набора эллиптических кривых (кривые brainpool из RFC 5639, до 512 бит).
Добавленные возможности
В первой версии LibreSSL были добавлены следующие возможности: поддержка алгоритмов ChaCha и Poly1305, эллиптические кривые Brainpool Архивная копия от 19 ноября 2015 на Wayback Machine и ANSSI Архивная копия от 8 декабря 2015 на Wayback Machine, AEAD-режимы шифрования AES-GCM и ChaCha20-Poly1305.
В последующих версиях появилось следующее:[40]
- 2.1.0: Автоматические эфемерные ключи на эллиптических кривых[27]
- 2.1.2: Поддержка встроенного ГПСЧ arc4random на OS X и FreeBSD[41]
- 2.1.2: Переработана поддержка шифра ГОСТ
- 2.1.3: Поддержка ALPN[42]
- 2.1.3: Поддержка SHA-256 Camellia cipher suites
- 2.1.4: Поддержка TLS_FALLBACK_SCSV на стороне сервера[43]
- 2.1.4: certhash как замена скрипта c_rehash
- 2.1.4: X509_STORE_load_mem API для загрузки сертификатов из памяти (улучшенная поддержка chroot)
- 2.1.4: Экспериментальная сборка для Windows
- 2.1.5: Улучшения поддержки Windows, первые работающие 32- и 64-битные сборки[44]
- 2.1.6: Библиотека libtls объявлена стабильной и включена по умолчанию[45]
- 2.2.0: Поддержка AIX и Cygwin[46]
- 2.2.1: Добавлены эллиптические кривые EC_curve_nid2nist и EC_curve_nist2nid[47] из OpenSSL, первоначальная поддержка Windows XP/2003
- 2.2.2: Определена константа LIBRESSL_VERSION_NUMBER[48], добавлены методы TLS_* как замена методам SSLv23_*, поддержка сборки при помощи cmake.
Старые небезопасные возможности
В первоначальной версии LibreSSL некоторые возможности были по умолчанию отключены[28]. Реализация некоторых из этих возможностей была позднее удалена полностью, включая поддержку Kerberos, экспортного набора шифров, TLS сжатия, DTLS heartbeat, и SSL v2.
В более поздних версиях были дополнительно отключены следующие возможности:
- 2.1.1: После выявления уязвимости POODLE в устаревшем протоколе SSL 3.0, в LibreSSL этот протокол по умолчанию отключен[49].
- 2.1.3: Убрана поддержка цифровой подписи ГОСТ Р 34.10-94[40][42]
- 2.2.1: Удалена поддержка динамического движка и MDC-2DES[47]
- 2.2.2: Удалена поддержка SSLv3 из бинарника openssl, удалена поддержка Internet Explorer 6, движка RSAX.[48]
- 2.3.0: Полностью удалена поддержка SSLv3, SHA-0 и DTLS1_BAD_VER
Убранные возможности
В первом релизе LibreSSL в OpenBSD 5.6 было удалено большое количество кода, который посчитали небезопасным, ненужным или устаревшим[28].
- В ответ на уязвимость Heartbleed, одной из первых удалённых возможностей была поддержка Heartbeat-пакетов[50]
- Поддержка ненужных платформ («классическая» Mac OS, NetWare, OS/2, VMS, 16-битная Windows и др.)
- Поддержка старых компиляторов
- Удалены движки IBM 4758, Broadcom ubsec, Sureware, Nuron, GOST, GMP, CSwift, CHIL, CAPI, Atalla и AEP вследствие неактуальности аппаратного обеспечения или зависимости от несвободных библиотек
- Генератор псевдослучайных чисел OpenSSL удалён (и заменён на arc4random)
- Макросы препроцессора Си, которые посчитали ненужными или небезопасными и которые были помечены как устаревшие ещё в OpenSSL (например, des_old.h)
- Старые ненужные файлы на языке ассемблера, Си и Perl (например, EGD)
- Поддержка MD2 и SEED
- SSLv3, SHA-0, DTLS1_BAD_VER
Алгоритм Dual EC DRBG, который подозревают в наличие бэкдора[51], также подвергся уничтожению. Также были удалены неиспользуемые протоколы и небезопасные алгоритмы, включая поддержку стандарта FIPS 140-2[52], MD4/MD5[40] J-PAKE,[28] и SRP.[24]
Старые ошибки
Одной из причин критики OpenSSL является большое количество записей в системе отслеживания ошибок, которые остаются неисправленными в течение многих лет. Теперь эти старые ошибки исправляются в LibreSSL[53].
Безопасность и наличие уязвимостей
LibreSSL оказалась не подверженной многим уязвимостям, найденном в OpenSSL после ответвления форка. Примечательно, что ни одна из найденных за это время в OpenSSL уязвимостей высокой степени не применима к LibreSSL.
LibreSSL | OpenSSL | LibreSSL | OpenSSL | |
---|---|---|---|---|
Классификация | 1.0.1 | 1.0.2[54] | ||
Критическая | 0 | 0 | 0 | 0 |
Высокая | 0 | 4 | 0 | 2 |
Средняя | 14 | 25 | 12 | 17 |
Низкая | 4 | 11 | 3 | 6 |
Итого | 18 | 39 | 15 | 23 |
Ссылки
- libressl.org — официальный сайт LibreSSL. Архивная копия от 14 апреля 2020 на Wayback Machine
Примечания
- ↑ Cook B. LibreSSL 3.9.2 Released (англ.) — 2024.
- ↑ The libressl Open Source Project on Open Hub: Languages Page — 2006.
- ↑ 1 2 3 4 5 6 7 Free Software Directory
- ↑ LibreSSL: Releases (неопр.). www.libressl.org. Дата обращения: 3 октября 2019. Архивировано 1 октября 2019 года.
- ↑ Unangst, Ted Origins of libressl (неопр.). flak (22 апреля 2014). Дата обращения: 24 апреля 2014. Архивировано 24 апреля 2014 года.
- ↑ Seltzer, Larry OpenBSD forks, prunes, fixes OpenSSL (неопр.). Zero Day. ZDNet (21 апреля 2014). Дата обращения: 21 апреля 2014. Архивировано 21 апреля 2014 года.
- ↑ Brodkin, Jon OpenSSL code beyond repair, claims creator of "LibreSSL" fork (неопр.). Ars Technica (22 апреля 2014). Дата обращения: 24 апреля 2014. Архивировано 19 августа 2014 года.
- ↑ McCallion, Jane Heartbleed: LibreSSL scrubs "irresponsible" OpenSSL code (неопр.). PC Pro (22 апреля 2014). Дата обращения: 23 апреля 2014. Архивировано из оригинала 26 июня 2014 года.
- ↑ Larabel, Michael OpenBSD Affirms That LibreSSL Will Be Portable (неопр.). Phoronix (9 мая 2014). Дата обращения: 30 мая 2014. Архивировано 8 декабря 2015 года.
- ↑ 1 2 Beck, Bob LibreSSL: The first 30 days, and what the Future Holds Slides (неопр.) (17 мая 2014). Дата обращения: 17 мая 2014. Архивировано 24 сентября 2015 года.
- ↑ "Re: OpenSSL seven security fixes". oss-sec (Mailing list). 2014-06-05. Архивировано 8 декабря 2015. Дата обращения: 9 июня 2014.
- ↑ de Raadt, Theo (2014-06-05). "Re: new OpenSSL flaws". openbsd-misc (Mailing list). Архивировано 16 августа 2014. Дата обращения: 9 июня 2014.
- ↑ 1 2 Langley, Adam BoringSSL (20 Jun 2014) (неопр.). ImperialViolet (20 июня 2014). Дата обращения: 21 июня 2014. Архивировано 1 июня 2018 года.
- ↑ Goodin, Dan Google unveils independent "fork" of OpenSSL called "BoringSSL" (неопр.). Ars Technica (20 июня 2014). Дата обращения: 21 июня 2014. Архивировано 23 июня 2014 года.
- ↑ Sing, Joel OpenBSD — lib/libssl/src/crypto/evp evp_aead.c e_chacha20poly1305.c (неопр.) (21 июня 2014). Дата обращения: 21 июня 2014. Архивировано из оригинала 22 июня 2014 года.
- ↑ de Raadt, Theo (2014-06-21). "Boringssl and such". openbsd-tech (Mailing list). Архивировано 22 июля 2014. Дата обращения: 28 октября 2015.
- ↑ Beck, Bob OpenBSD — lib/libcrypto/crypto getentropy_linux.c (неопр.) (20 июня 2014). Дата обращения: 28 ноября 2015. Архивировано из оригинала 9 июля 2014 года.
- ↑ Beck, Bob OpenBSD - lib/libcrypto/crypto getentropy_osx.c getentropy_solaris.c (неопр.) (8 июля 2014). Дата обращения: 28 ноября 2015. Архивировано из оригинала 22 июля 2014 года.
- ↑ Index of /pub/OpenBSD/LibreSSL (неопр.) (11 июля 2014). Дата обращения: 11 июля 2014. Архивировано 14 января 2016 года.
- ↑ Beck, Bob (2014-07-11). "First release of LibreSSL portable is available". openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 11 июля 2014.
- ↑ Beck, Bob (2014-07-13). "LibreSSL 2.0.1 released". openbsd-announce (Mailing list). Дата обращения: 28 октября 2015.
- ↑ Beck, Bob (2014-07-16). "LibreSSL portable 2.0.2 released". openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 28 октября 2015.
- ↑ Beck, Bob (2014-07-22). "LibreSSL 2.0.3 released". openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 28 октября 2015.
- ↑ 1 2 Beck, Bob (2014-08-03). "LibreSSL 2.0.4 released". openbsd-announce (Mailing list). Архивировано 23 марта 2019. Дата обращения: 28 октября 2015.
- ↑ Cook, Brent (2014-08-08). "LibreSSL 2.0.5 released". openbsd-announce (Mailing list). Дата обращения: 28 октября 2015.
- ↑ Unangst, Ted LibreSSL: More Than 30 Days Later (неопр.) (28 сентября 2014). Дата обращения: 9 июня 2014. Архивировано 28 сентября 2014 года.
- ↑ 1 2 Beck, Bob (2014-10-12). "LibreSSL 2.1.0 released". openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 28 октября 2015.
- ↑ 1 2 3 4 Jacoutot, Antoine (2014-11-01). "OpenBSD 5.6 Released". openbsd-announce (Mailing list). Архивировано 31 января 2016. Дата обращения: 28 октября 2015.
- ↑ LibreSSL enabled by default (неопр.). Void Linux. Дата обращения: 15 октября 2015. Архивировано из оригинала 8 декабря 2015 года.
- ↑ Switching back to OpenSSL (неопр.). voidlinux.org. Дата обращения: 12 сентября 2021. Архивировано 16 октября 2021 года.
- ↑ Mark VonFange. PC-BSD 10.1.2: an Interview with Kris Moore (неопр.). Official PC-BSD Blog. Дата обращения: 15 октября 2015. Архивировано 6 сентября 2015 года.
- ↑ OPNsense version 15.7 Released (неопр.). OPNsense. Дата обращения: 15 октября 2015. Архивировано 21 сентября 2015 года.
- ↑ [Beta] OpenELEC 6.0 Beta 2 released (неопр.). OpenELEC. Дата обращения: 15 октября 2015. Архивировано из оригинала 26 ноября 2015 года.
- ↑ Apple iOS 9: Security & Privacy Features (неопр.). Medium. — «OS X 10.11 ships with LibreSSL.» Дата обращения: 24 октября 2015. Архивировано из оригинала 25 ноября 2015 года.
- ↑ Orr, William A quick recap over the last week (неопр.). OpenSSL Valhalla Rampage (23 апреля 2014). Дата обращения: 30 апреля 2014. Архивировано 29 апреля 2014 года.
- ↑ OpenBSD LibreSSL CVS Calloc Commits (неопр.). Дата обращения: 28 ноября 2015. Архивировано 23 марта 2019 года.
- ↑ OpenBSD LibreSSL CVS Double Free Commits (неопр.). Дата обращения: 28 ноября 2015. Архивировано 23 марта 2019 года.
- ↑ OpenBSD LibreSSL CVS insecure seeding (неопр.).
- ↑ OpenBSD LibreSSL CVS Kernel Seeding (неопр.). Дата обращения: 28 ноября 2015. Архивировано из оригинала 16 сентября 2014 года.
- ↑ 1 2 3 LibreSSL-portable ChangeLog (неопр.). LibreSSL. Дата обращения: 28 ноября 2015. Архивировано 28 ноября 2015 года.
- ↑ Beck, Bob (2014-12-09). "LibreSSL 2.1.2 released". openbsd-announce (Mailing list). Архивировано 31 января 2016. Дата обращения: 28 октября 2015.
- ↑ 1 2 Cook, Brent (2015-01-22). "LibreSSL 2.1.3 released". openbsd-announce (Mailing list). Архивировано 31 января 2016. Дата обращения: 28 октября 2015.
- ↑ Cook, Brent (2015-03-04). "LibreSSL 2.1.4 released". openbsd-announce (Mailing list). Архивировано 31 января 2016. Дата обращения: 28 октября 2015.
- ↑ Cook, Brent (2015-03-17). "LibreSSL 2.1.5 released". openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 28 октября 2015.
- ↑ Cook, Brent (2015-03-19). "LibreSSL 2.1.6 released". openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 28 октября 2015.
- ↑ Cook, Brent (2015-06-11). "LibreSSL 2.1.7 and 2.2.0 released". openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 28 октября 2015.
- ↑ 1 2 Cook, Brent (2015-07-09). "LibreSSL 2.2.1 released". openbsd-announce (Mailing list). Архивировано 31 января 2016. Дата обращения: 28 октября 2015.
- ↑ 1 2 Cook, Brent (2015-08-06). "LibreSSL 2.2.2 released". openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 28 октября 2015.
- ↑ Beck, Bob LibreSSL 2.1.1 released (неопр.) (16 октября 2014). Дата обращения: 28 ноября 2015. Архивировано 23 марта 2019 года.
- ↑ OpenBSD LibreSSL CVS OPENSSL_NO_HEARTBEATS (неопр.).
- ↑ Perlroth, Nicole (2013-09-10). "Government Announces Steps to Restore Confidence on Encryption Standards". The New York Times. Архивировано 12 июля 2014. Дата обращения: 9 мая 2014.
- ↑ The future (or lack thereof) of LibreSSL’s FIPS Object Module (неопр.). Дата обращения: 28 ноября 2015. Архивировано 8 декабря 2015 года.
- ↑ Vallat, Miod (2014-11-10). "Re: CVS: cvs.openbsd.org: src". openbsd-cvs (Mailing list). Архивировано 23 марта 2019. Дата обращения: 28 октября 2015.
- ↑ Сумма с момента релиза 1.0.2