LibreSSL
— библиотека с реализацией протоколов
SSL
/
TLS
. Эта библиотека является продуктом команды
OpenBSD
, в рамках которого развивается
форк
OpenSSL
, нацеленный на обеспечение высшего уровня безопасности. До основания форка была обнаружена уязвимость
heartbleed
в
OpenSSL
.
Из особенностей LibreSSL можно отметить ориентацию на качественную поддержку протоколов
SSL
/
TLS
с изъятием излишней функциональности, привлечением дополнительных средств защиты и проведением значительной чистки и переработки кодовой базы.
Проект
OpenBSD
разрабатывает нативную редакцию пакета LibreSSL собственно для OpenBSD и переносимую редакцию для
Unix
-подобных систем и
Microsoft Windows
.
Содержание
История
После того, как в OpenSSL была обнаружена уязвимость Heartbleed, команда разработчиков OpenBSD провела аудит кода и пришла к выводу о необходимости создания и поддержки собственного
форка
библиотеки
. 11 апреля 2014 года был зарегистрирован домен libressl.org, а 22 апреля 2014 года объявлено о запуске проекта.
В течение первой недели разработчики удалили более 90000 строк кода на
языке Си
. Удалению подвергся устаревший или неиспользуемый код, также была убрана поддержка устаревших и редко используемых в наше время операционных систем. Первоначально планировалось разрабатывать библиотеку LibreSSL как замену OpenSSL в операционной системе OpenBSD 5.6, а после того, как облегченная библиотека станет достаточно стабильной, портировать её на другие платформы
.
17 мая 2014 года на конференции 2014 BSDCan
представил доклад "LibreSSL: Первые 30 дней и что ждёт нас в будущем", в котором были описаны результаты первого месяца разработки, внесённые изменения и обнаруженные проблемы.
5 июня 2014 были обнародованы некоторые уязвимости в OpenSSL. Хотя некоторым проектам сообщили об этих уязвимостях заранее
, разработчики LibreSSL не были проинформированы; в результате
Тео де Раадт
обвинил разработчиков OpenSSL в преднамеренном сокрытии информации от проектов OpenBSD и LibreSSL
.
20 июня 2014
компания Google
создала ещё один форк OpenSSL под названием
и объявила о намерении делиться
патчами
с проектом LibreSSL
. По просьбе разработчиков LibreSSL компания Google изменила лицензию некоторых своих изменений на
лицензию ISC
. 21 июня Тео де Раадт объявил о планах по выпуску
переносимой
версии библиотеки LibreSSL-portable
. 20 июня началось портирование кода на
Linux
, а 8 июля - на платформы
OS X
и
Solaris
.
11 июля 2014 года вышлая первая переносимая версия LibreSSL 2.0.0
. За первым релизом быстро последовали версии 2.0.1
(13 июля), 2.0.2
(16 июля), 2.0.3
(22 июля), 2.0.4
(3 августа) и 2.0.5
(5 августа), в которых были исправлены многие недостатки первой переносимой версии.
28 сентября 2014
представил доклад "LibreSSL: более чем 30 дней спустя", в котором описаны достижения, проблемы и изменения, сделанные за несколько месяцев после доклада Боба Бека на конференции BSDCan
.
Начиная с версии 2.1.0,
, вышедшей 12 октября 2014 года, скорость внесения изменений в LibreSSL существенно упала, а библиотека стала рабочей альтернативой OpenSSL. Большинство изменений в версиях 2.1.x являются устранением уязвимостей, найденных в OpenSSL.
Использование
LibreSSL используется в качестве библиотеки по умолчанию для реализации TLS в следующих системах:
Некоторые из наиболее заметных и важных изменений связаны с заменой самописных функций по работе с памятью на функции стандартной библиотеки (например,
strlcpy
,
calloc
,
asprintf
,
и т.д.)
. Это позволит в дальнейшем находить ошибки, связанные с
переполнением буфера
, при помощи специальных инструментов
анализа утечек памяти
, а также исследовать сбои при помощи технологии
ASLR
, атрибута
NX bit
, «
» и т.п.
В
логе
системы контроля версий
также наблюдаются исправления потенциальных двойных освобождений памяти
. Также внесено множество дополнительных проверок на соответствие размеров параметров, преобразований между беззнаковыми и знаковыми переменными, проверок значений указателей и возвращаемых значений.
Превентивные меры
В соответствии с общепринятыми практиками безопасного программирования, по умолчанию включены опции и флаги компилятора, направленные на обнаружение потенциальных проблем на этапе сборки (-Wall, -Werror, -Wextra, -Wuninitialized). Улучшена читаемость кода, что должно облегчить проверку кода в будущем. Исправление или удаление ненужных макросов и обёрток методов также улучшает читаемость кода и облегчает аудит.
В коде LibreSSL полностью устранена
проблема 2038 года
. Кроме того, для предотвращения удаления компилятором кода очистки памяти из оптимизированной сборки добавлены вызовы функций
explicit_bzero
и
bn_clear
, чтобы потенциальный атакующий не мог прочитать значения из ранее использованной памяти.
2.2.1: Добавлены эллиптические кривые EC_curve_nid2nist и EC_curve_nist2nid
из OpenSSL, первоначальная поддержка Windows XP/2003
2.2.2: Определена константа LIBRESSL_VERSION_NUMBER
, добавлены методы TLS_* как замена методам SSLv23_*, поддержка сборки при помощи cmake.
Старые небезопасные возможности
В первоначальной версии LibreSSL некоторые возможности были по умолчанию отключены
. Реализация некоторых из этих возможностей была позднее
полностью, включая поддержку
Kerberos
,
, TLS сжатия,
DTLS heartbeat
, и
SSL
v2.
В более поздних версиях были дополнительно отключены следующие возможности:
2.1.1: После выявления уязвимости POODLE в устаревшем протоколе
SSL
3.0, в LibreSSL этот протокол по умолчанию отключен
.
Удалены
движки
, Broadcom ubsec, Sureware, Nuron, GOST, GMP, CSwift, CHIL, CAPI, Atalla и AEP вследствие неактуальности аппаратного обеспечения или зависимости от несвободных библиотек
Алгоритм
Dual_EC_DRBG
, который подозревают в наличие
бэкдора
, также подвергся уничтожению. Также были удалены неиспользуемые протоколы и небезопасные алгоритмы, включая поддержку стандарта
,
MD4
/
MD5
,
и
SRP
.
Старые ошибки
Одной из причин критики OpenSSL является большое количество записей в
системе отслеживания ошибок
, которые остаются неисправленными в течение многих лет. Теперь эти старые ошибки исправляются в LibreSSL
.
Безопасность и наличие уязвимостей
LibreSSL оказалась не подверженной многим уязвимостям, найденном в OpenSSL после ответвления форка. Примечательно, что ни одна из найденных за это время в OpenSSL уязвимостей высокой степени не применима к LibreSSL.