Русская Википедия:LibreSSL

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Перевести Шаблон:Карточка программы

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

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

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

История

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

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

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

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

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

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

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

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

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

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

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

Изменения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ссылки

Примечания

Шаблон:Примечания

Шаблон:OpenBSD

  1. Шаблон:Cite web
  2. Шаблон:Cite web
  3. Шаблон:Cite web
  4. Шаблон:Cite web
  5. Шаблон:Cite web
  6. Шаблон:Cite web
  7. 7,0 7,1 Шаблон:Cite web
  8. Шаблон:Cite mailing list
  9. Шаблон:Cite mailing list
  10. 10,0 10,1 Шаблон:Cite web
  11. Шаблон:Cite web
  12. Шаблон:Cite web
  13. Шаблон:Cite mailing list
  14. Шаблон:Cite web
  15. Шаблон:Cite web
  16. Шаблон:Cite web
  17. Шаблон:Cite mailing list
  18. Шаблон:Cite mailing list
  19. Шаблон:Cite mailing list
  20. Шаблон:Cite mailing list
  21. 21,0 21,1 Шаблон:Cite mailing list
  22. Шаблон:Cite mailing list
  23. Шаблон:Cite web
  24. 24,0 24,1 Шаблон:Cite mailing list
  25. 25,0 25,1 25,2 25,3 Шаблон:Cite mailing list
  26. Шаблон:Cite web
  27. Шаблон:Cite web
  28. Шаблон:Cite web
  29. Шаблон:Cite web
  30. Шаблон:Cite web
  31. Шаблон:Cite web
  32. Шаблон:Cite web
  33. Шаблон:Cite web
  34. Шаблон:Cite web
  35. Шаблон:Cite web
  36. Шаблон:Cite web
  37. 37,0 37,1 37,2 Шаблон:Cite web
  38. Шаблон:Cite mailing list
  39. 39,0 39,1 Шаблон:Cite mailing list
  40. Шаблон:Cite mailing list
  41. Шаблон:Cite mailing list
  42. Шаблон:Cite mailing list
  43. Шаблон:Cite mailing list
  44. 44,0 44,1 Шаблон:Cite mailing list
  45. 45,0 45,1 Шаблон:Cite mailing list
  46. Шаблон:Cite web
  47. Шаблон:Cite web
  48. Шаблон:Cite news
  49. Шаблон:Cite web
  50. Шаблон:Cite mailing list