LibreSSL

LibreSSL
Логотип программы LibreSSL
Тип библиотека функций, шифрующее программное обеспечение и утилита
Разработчик OpenBSD Project[вд]
Написана на Си[3] и язык ассемблера
Операционные системы BSD[вд][4], GNU/Linux[4], GNU/Hurd[вд][4], UNIX, macOS[4] и Windows[4]
Дата выпуска 11 июля 2014
Последняя версия
Репозиторий github.com/libressl
Лицензия OpenSSL License[вд][4] и лицензия ISC[4]
Сайт libressl.org (англ.)
Логотип Викисклада Медиафайлы на Викискладе

LibreSSL — библиотека с реализацией протоколов SSL/TLS. Эта библиотека является продуктом команды OpenBSD, в рамках которого развивается форк OpenSSL, нацеленный на обеспечение высшего уровня безопасности. До основания форка была обнаружена уязвимость heartbleed в OpenSSL.

Из особенностей LibreSSL можно отметить ориентацию на качественную поддержку протоколов SSL/TLS с изъятием излишней функциональности, привлечением дополнительных средств защиты и проведением значительной чистки и переработки кодовой базы.

Проект OpenBSD разрабатывает нативную редакцию пакета LibreSSL собственно для OpenBSD и переносимую редакцию для Unix-подобных систем и Microsoft Windows.[5]

История

После того, как в OpenSSL была обнаружена уязвимость Heartbleed, команда разработчиков OpenBSD провела аудит кода и пришла к выводу о необходимости создания и поддержки собственного форка библиотеки[6]. 11 апреля 2014 года был зарегистрирован домен libressl.org, а 22 апреля 2014 года объявлено о запуске проекта.

В течение первой недели разработчики удалили более 90000 строк кода на языке Си[7][8]. Удалению подвергся устаревший или неиспользуемый код, также была убрана поддержка устаревших и редко используемых в наше время операционных систем. Первоначально планировалось разрабатывать библиотеку LibreSSL как замену OpenSSL в операционной системе OpenBSD 5.6, а после того, как облегченная библиотека станет достаточно стабильной, портировать её на другие платформы[9][10].

17 мая 2014 года на конференции 2014 BSDCan Боб Бек представил доклад "LibreSSL: Первые 30 дней и что ждёт нас в будущем", в котором были описаны результаты первого месяца разработки, внесённые изменения и обнаруженные проблемы.[11]

5 июня 2014 были обнародованы некоторые уязвимости в OpenSSL. Хотя некоторым проектам сообщили об этих уязвимостях заранее[12], разработчики LibreSSL не были проинформированы; в результате Тео де Раадт обвинил разработчиков OpenSSL в преднамеренном сокрытии информации от проектов OpenBSD и LibreSSL[13].

20 июня 2014 компания Google создала ещё один форк OpenSSL под названием BoringSSL и объявила о намерении делиться патчами с проектом LibreSSL[14][15]. По просьбе разработчиков LibreSSL компания Google изменила лицензию некоторых своих изменений на лицензию ISC[14][16]. 21 июня Тео де Раадт объявил о планах по выпуску переносимой версии библиотеки LibreSSL-portable[17]. 20 июня началось портирование кода на Linux[18], а 8 июля - на платформы OS X и Solaris[19].

11 июля 2014 года вышлая первая переносимая версия LibreSSL 2.0.0[20][21]. За первым релизом быстро последовали версии 2.0.1[22] (13 июля), 2.0.2[23] (16 июля), 2.0.3[24] (22 июля), 2.0.4[25] (3 августа) и 2.0.5[26] (5 августа), в которых были исправлены многие недостатки первой переносимой версии.

28 сентября 2014 Тед Унангст представил доклад "LibreSSL: более чем 30 дней спустя", в котором описаны достижения, проблемы и изменения, сделанные за несколько месяцев после доклада Боба Бека на конференции BSDCan[11][27].

Начиная с версии 2.1.0,[28], вышедшей 12 октября 2014 года, скорость внесения изменений в LibreSSL существенно упала, а библиотека стала рабочей альтернативой OpenSSL. Большинство изменений в версиях 2.1.x являются устранением уязвимостей, найденных в OpenSSL.

Использование

LibreSSL используется в качестве библиотеки по умолчанию для реализации TLS в следующих системах:

  1. OpenBSD, начиная с версии 5.6[29]
  2. Void Linux, начиная с 6 августа 2014 года[30] (23 февраля 2021 года произошёл обратный переход на OpenSSL[31])
  3. PC-BSD, начиная с версии 10.1.2[32]
  4. как альтернатива в OPNsense, начиная с версии 15.7[33]
  5. OpenELEC, начиная с версии 6.0beta2[34]
  6. OS X, начиная с версии 10.11 El Capitan[35]

Изменения

Работа с памятью

Некоторые из наиболее заметных и важных изменений связаны с заменой самописных функций по работе с памятью на функции стандартной библиотеки (например, strlcpy, calloc, asprintf, reallocarray и т.д.)[36][37]. Это позволит в дальнейшем находить ошибки, связанные с переполнением буфера, при помощи специальных инструментов анализа утечек памяти, а также исследовать сбои при помощи технологии ASLR, атрибута NX bit, «осведомителей» и т.п.

В логе системы контроля версий также наблюдаются исправления потенциальных двойных освобождений памяти[38]. Также внесено множество дополнительных проверок на соответствие размеров параметров, преобразований между беззнаковыми и знаковыми переменными, проверок значений указателей и возвращаемых значений.

Превентивные меры

В соответствии с общепринятыми практиками безопасного программирования, по умолчанию включены опции и флаги компилятора, направленные на обнаружение потенциальных проблем на этапе сборки (-Wall, -Werror, -Wextra, -Wuninitialized). Улучшена читаемость кода, что должно облегчить проверку кода в будущем. Исправление или удаление ненужных макросов и обёрток методов также улучшает читаемость кода и облегчает аудит.

В коде LibreSSL полностью устранена проблема 2038 года. Кроме того, для предотвращения удаления компилятором кода очистки памяти из оптимизированной сборки добавлены вызовы функций explicit_bzero и bn_clear, чтобы потенциальный атакующий не мог прочитать значения из ранее использованной памяти.

Криптография

Небезопасная инициализация генератора псевдослучайных чисел начальными значениями была заменена на возможности, предоставляемые ядром операционной системы[39][40]. Среди других существенных нововведений стоит отметить поддержку нового поточного шифра ChaCha и кода аутентификации сообщений Poly1305, а также более безопасного набора эллиптических кривых (кривые brainpool из RFC 5639, до 512 бит).

Добавленные возможности

В первой версии LibreSSL были добавлены следующие возможности: поддержка алгоритмов ChaCha и Poly1305, эллиптические кривые Brainpool Архивная копия от 19 ноября 2015 на Wayback Machine и ANSSI Архивная копия от 8 декабря 2015 на Wayback Machine, AEAD-режимы шифрования AES-GCM и ChaCha20-Poly1305.

В последующих версиях появилось следующее:[41]

  • 2.1.0: Автоматические эфемерные ключи на эллиптических кривых[28]
  • 2.1.2: Поддержка встроенного ГПСЧ arc4random на OS X и FreeBSD[42]
  • 2.1.2: Переработана поддержка шифра ГОСТ
  • 2.1.3: Поддержка ALPN[43]
  • 2.1.3: Поддержка SHA-256 Camellia cipher suites
  • 2.1.4: Поддержка TLS_FALLBACK_SCSV на стороне сервера[44]
  • 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-битные сборки[45]
  • 2.1.6: Библиотека libtls объявлена стабильной и включена по умолчанию[46]
  • 2.2.0: Поддержка AIX и Cygwin[47]
  • 2.2.1: Добавлены эллиптические кривые EC_curve_nid2nist и EC_curve_nist2nid[48] из OpenSSL, первоначальная поддержка Windows XP/2003
  • 2.2.2: Определена константа LIBRESSL_VERSION_NUMBER[49], добавлены методы TLS_* как замена методам SSLv23_*, поддержка сборки при помощи cmake.

Старые небезопасные возможности

В первоначальной версии LibreSSL некоторые возможности были по умолчанию отключены[29]. Реализация некоторых из этих возможностей была позднее удалена полностью, включая поддержку Kerberos, экспортного набора шифров, TLS сжатия, DTLS heartbeat, и SSL v2.

В более поздних версиях были дополнительно отключены следующие возможности:

  • 2.1.1: После выявления уязвимости POODLE в устаревшем протоколе SSL 3.0, в LibreSSL этот протокол по умолчанию отключен[50].
  • 2.1.3: Убрана поддержка цифровой подписи ГОСТ Р 34.10-94[41][43]
  • 2.2.1: Удалена поддержка динамического движка и MDC-2DES[48]
  • 2.2.2: Удалена поддержка SSLv3 из бинарника openssl, удалена поддержка Internet Explorer 6, движка RSAX.[49]
  • 2.3.0: Полностью удалена поддержка SSLv3, SHA-0 и DTLS1_BAD_VER

Убранные возможности

В первом релизе LibreSSL в OpenBSD 5.6 было удалено большое количество кода, который посчитали небезопасным, ненужным или устаревшим[29].

  • В ответ на уязвимость Heartbleed, одной из первых удалённых возможностей была поддержка Heartbeat-пакетов[51]
  • Поддержка ненужных платформ («классическая» 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, который подозревают в наличие бэкдора[52], также подвергся уничтожению. Также были удалены неиспользуемые протоколы и небезопасные алгоритмы, включая поддержку стандарта FIPS 140-2[53], MD4/MD5[41] J-PAKE,[29] и SRP.[25]

Старые ошибки

Одной из причин критики OpenSSL является большое количество записей в системе отслеживания ошибок, которые остаются неисправленными в течение многих лет. Теперь эти старые ошибки исправляются в LibreSSL[54].

Безопасность и наличие уязвимостей

LibreSSL оказалась не подверженной многим уязвимостям, найденном в OpenSSL после ответвления форка. Примечательно, что ни одна из найденных за это время в OpenSSL уязвимостей высокой степени не применима к LibreSSL.

LibreSSL OpenSSL LibreSSL OpenSSL
Классификация 1.0.1 1.0.2[55]
Критическая 0 0 0 0
Высокая 0 4 0 2
Средняя 14 25 12 17
Низкая 4 11 3 6
Итого 18 39 15 23

Ссылки

Примечания

  1. LibreSSL 4.1.2 and 4.2.1 released — 2025.
  2. v4.3.2 — 2026.
  3. The libressl Open Source Project on Open Hub: Languages Page — 2006.
  4. 1 2 3 4 5 6 7 Free Software Directory
  5. LibreSSL: Releases. www.libressl.org. Дата обращения: 3 октября 2019. Архивировано 1 октября 2019 года.
  6. Unangst, Ted. Origins of libressl. flak (22 апреля 2014). Дата обращения: 24 апреля 2014. Архивировано 24 апреля 2014 года.
  7. Seltzer, Larry. OpenBSD forks, prunes, fixes OpenSSL. Zero Day. ZDNet (21 апреля 2014). Дата обращения: 21 апреля 2014. Архивировано 21 апреля 2014 года.
  8. Brodkin, Jon. OpenSSL code beyond repair, claims creator of "LibreSSL" fork. Ars Technica (22 апреля 2014). Дата обращения: 24 апреля 2014. Архивировано 19 августа 2014 года.
  9. McCallion, Jane. Heartbleed: LibreSSL scrubs "irresponsible" OpenSSL code. PC Pro (22 апреля 2014). Дата обращения: 23 апреля 2014. Архивировано из оригинала 26 июня 2014 года.
  10. Larabel, Michael. OpenBSD Affirms That LibreSSL Will Be Portable. Phoronix (9 мая 2014). Дата обращения: 30 мая 2014. Архивировано 8 декабря 2015 года.
  11. 1 2 Beck, Bob. LibreSSL: The first 30 days, and what the Future Holds Slides (17 мая 2014). Дата обращения: 17 мая 2014. Архивировано 24 сентября 2015 года.
  12. Re: OpenSSL seven security fixes. oss-sec (Mailing list). 5 июня 2014. Архивировано 8 декабря 2015. Дата обращения: 9 июня 2014.
  13. de Raadt, Theo (5 июня 2014). Re: new OpenSSL flaws. openbsd-misc (Mailing list). Архивировано 16 августа 2014. Дата обращения: 9 июня 2014.
  14. 1 2 Langley, Adam. BoringSSL (20 Jun 2014). ImperialViolet (20 июня 2014). Дата обращения: 21 июня 2014. Архивировано 1 июня 2018 года.
  15. Goodin, Dan. Google unveils independent "fork" of OpenSSL called "BoringSSL". Ars Technica (20 июня 2014). Дата обращения: 21 июня 2014. Архивировано 23 июня 2014 года.
  16. Sing, Joel. OpenBSD — lib/libssl/src/crypto/evp evp_aead.c e_chacha20poly1305.c (недоступная ссылка — история) (21 июня 2014). Дата обращения: 21 июня 2014.
  17. de Raadt, Theo (21 июня 2014). Boringssl and such. openbsd-tech (Mailing list). Архивировано 22 июля 2014. Дата обращения: 28 октября 2015.
  18. Beck, Bob. OpenBSD — lib/libcrypto/crypto getentropy_linux.c (недоступная ссылка — история) (20 июня 2014). Дата обращения: 28 ноября 2015.
  19. Beck, Bob. OpenBSD - lib/libcrypto/crypto getentropy_osx.c getentropy_solaris.c (8 июля 2014). Дата обращения: 28 ноября 2015. Архивировано из оригинала 22 июля 2014 года.
  20. Index of /pub/OpenBSD/LibreSSL (11 июля 2014). Дата обращения: 11 июля 2014. Архивировано 14 января 2016 года.
  21. Beck, Bob (11 июля 2014). First release of LibreSSL portable is available. openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 11 июля 2014.
  22. Beck, Bob (13 июля 2014). LibreSSL 2.0.1 released. openbsd-announce (Mailing list). Архивировано 12 декабря 2024. Дата обращения: 28 октября 2015.
  23. Beck, Bob (16 июля 2014). LibreSSL portable 2.0.2 released. openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 28 октября 2015.
  24. Beck, Bob (22 июля 2014). LibreSSL 2.0.3 released. openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 28 октября 2015.
  25. 1 2 Beck, Bob (3 августа 2014). LibreSSL 2.0.4 released. openbsd-announce (Mailing list). Архивировано 23 марта 2019. Дата обращения: 28 октября 2015.
  26. Cook, Brent (8 августа 2014). LibreSSL 2.0.5 released. openbsd-announce (Mailing list). Дата обращения: 28 октября 2015.
  27. Unangst, Ted. LibreSSL: More Than 30 Days Later (28 сентября 2014). Дата обращения: 9 июня 2014. Архивировано 28 сентября 2014 года.
  28. 1 2 Beck, Bob (12 октября 2014). LibreSSL 2.1.0 released. openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 28 октября 2015.
  29. 1 2 3 4 Jacoutot, Antoine (1 ноября 2014). OpenBSD 5.6 Released. openbsd-announce (Mailing list). Архивировано 31 января 2016. Дата обращения: 28 октября 2015.
  30. LibreSSL enabled by default. Void Linux. Дата обращения: 15 октября 2015. Архивировано из оригинала 8 декабря 2015 года.
  31. Switching back to OpenSSL. voidlinux.org. Дата обращения: 12 сентября 2021. Архивировано 16 октября 2021 года.
  32. Mark VonFange. PC-BSD 10.1.2: an Interview with Kris Moore. Official PC-BSD Blog. Дата обращения: 15 октября 2015. Архивировано 6 сентября 2015 года.
  33. OPNsense version 15.7 Released. OPNsense. Дата обращения: 15 октября 2015. Архивировано 21 сентября 2015 года.
  34. [Beta] OpenELEC 6.0 Beta 2 released. OpenELEC. Дата обращения: 15 октября 2015. Архивировано из оригинала 26 ноября 2015 года.
  35. Apple iOS 9: Security & Privacy Features. Medium. — «OS X 10.11 ships with LibreSSL.» Дата обращения: 24 октября 2015. Архивировано из оригинала 25 ноября 2015 года.
  36. Orr, William. A quick recap over the last week. OpenSSL Valhalla Rampage (23 апреля 2014). Дата обращения: 30 апреля 2014. Архивировано 29 апреля 2014 года.
  37. OpenBSD LibreSSL CVS Calloc Commits. Дата обращения: 28 ноября 2015. Архивировано 23 марта 2019 года.
  38. OpenBSD LibreSSL CVS Double Free Commits. Дата обращения: 28 ноября 2015. Архивировано 23 марта 2019 года.
  39. OpenBSD LibreSSL CVS insecure seeding.
  40. OpenBSD LibreSSL CVS Kernel Seeding (недоступная ссылка — история). Дата обращения: 28 ноября 2015.
  41. 1 2 3 LibreSSL-portable ChangeLog. LibreSSL. Дата обращения: 28 ноября 2015. Архивировано 28 ноября 2015 года.
  42. Beck, Bob (9 декабря 2014). LibreSSL 2.1.2 released. openbsd-announce (Mailing list). Архивировано 31 января 2016. Дата обращения: 28 октября 2015.
  43. 1 2 Cook, Brent (22 января 2015). LibreSSL 2.1.3 released. openbsd-announce (Mailing list). Архивировано 31 января 2016. Дата обращения: 28 октября 2015.
  44. Cook, Brent (4 марта 2015). LibreSSL 2.1.4 released. openbsd-announce (Mailing list). Архивировано 31 января 2016. Дата обращения: 28 октября 2015.
  45. Cook, Brent (17 марта 2015). LibreSSL 2.1.5 released. openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 28 октября 2015.
  46. Cook, Brent (19 марта 2015). LibreSSL 2.1.6 released. openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 28 октября 2015.
  47. Cook, Brent (11 июня 2015). LibreSSL 2.1.7 and 2.2.0 released. openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 28 октября 2015.
  48. 1 2 Cook, Brent (9 июля 2015). LibreSSL 2.2.1 released. openbsd-announce (Mailing list). Архивировано 31 января 2016. Дата обращения: 28 октября 2015.
  49. 1 2 Cook, Brent (6 августа 2015). LibreSSL 2.2.2 released. openbsd-announce (Mailing list). Архивировано 18 февраля 2018. Дата обращения: 28 октября 2015.
  50. Beck, Bob. LibreSSL 2.1.1 released (16 октября 2014). Дата обращения: 28 ноября 2015. Архивировано 23 марта 2019 года.
  51. OpenBSD LibreSSL CVS OPENSSL_NO_HEARTBEATS.
  52. Perlroth, Nicole (10 сентября 2013). Government Announces Steps to Restore Confidence on Encryption Standards. The New York Times. Архивировано 12 июля 2014. Дата обращения: 9 мая 2014.
  53. The future (or lack thereof) of LibreSSL’s FIPS Object Module. Дата обращения: 28 ноября 2015. Архивировано 8 декабря 2015 года.
  54. Vallat, Miod (10 ноября 2014). Re: CVS: cvs.openbsd.org: src. openbsd-cvs (Mailing list). Архивировано 23 марта 2019. Дата обращения: 28 октября 2015.
  55. Сумма с момента релиза 1.0.2

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.