LibreSSL | |
---|---|
![]() | |
Тип | библиотека функций |
Разработчик | OpenBSD Project[d] |
Написана на | Си[1] и ассемблер |
Операционная система | OpenBSD, FreeBSD, NetBSD, Linux, HP-UX, Solaris, OS X, Windows и другие[2] |
Первый выпуск | 11 июля 2014 |
Последняя версия |
|
Состояние | Актуальное |
Лицензия | ISC, Apache 1.0, 4-clause BSD и public domain |
Сайт | libressl.org |
LibreSSL — библиотека с реализацией протоколов SSL/TLS. Эта библиотека является продуктом команды OpenBSD, в рамках которого развивается форк OpenSSL, нацеленный на обеспечение высшего уровня безопасности. До основания форка была обнаружена уязвимость heartbleed в OpenSSL.
Из особенностей LibreSSL можно отметить ориентацию на качественную поддержку протоколов SSL/TLS с изъятием излишней функциональности, привлечением дополнительных средств защиты и проведением значительной чистки и переработки кодовой базы.
Проект OpenBSD разрабатывает нативную редакцию пакета LibreSSL собственно для OpenBSD и переносимой редакции для Unix-подобных систем.
После того, как в OpenSSL была обнаружена уязвимость Heartbleed, команда разработчиков OpenBSD провела аудит кода и пришла к выводу о необходимости создания и поддержки собственного форка библиотеки[4]. 11 апреля 2014 года был зарегистрирован домен libressl.org, а 22 апреля 2014 года объявлено о запуске проекта.
В течение первой недели разработчики удалили более 90000 строк кода на языке Си[5][6]. Удалению подвергся устаревший или неиспользуемый код, также была убрана поддержка устаревших и редко используемых в наше время операционных систем. Первоначально планировалось разрабатывать библиотеку LibreSSL как замену OpenSSL в операционной системе OpenBSD 5.6, а после того, как облегченная библиотека станет достаточно стабильной, портировать её на другие платформы[7][8].
17 мая 2014 года на конференции 2014 BSDCan Боб Бек представил доклад "LibreSSL: Первые 30 дней и что ждёт нас в будущем", в котором были описаны результаты первого месяца разработки, внесённые изменения и обнаруженные проблемы.[9]
5 июня 2014 были обнародованы некоторые уязвимости в OpenSSL. Хотя некоторым проектам сообщили об этих уязвимостях заранее[10], разработчики LibreSSL не были проинформированы; в результате Тео де Раадт обвинил разработчиков OpenSSL в преднамеренном сокрытии информации от проектов OpenBSD и LibreSSL[11].
20 июня 2014 компания Google создала ещё один форк OpenSSL под названием BoringSSL и объявила о намерении делиться патчами с проектом LibreSSL[12][13]. По просьбе разработчиков LibreSSL компания Google изменила лиценцию некоторых своих изменения на лицензию ISC[12][14]. 21 июня Тео де Раадт объявил о планах по выпуску переносимой версии библиотеки LibreSSL-portable[15]. 20 июня началось портирование кода на Linux[16], а 8 июля - на платформы OS X и Solaris[17].
11 июля 2014 года вышлая первая переносимая версия LibreSSL 2.0.0[18][19]. За первым релизом быстро последовали версии 2.0.1[20] (13 июля), 2.0.2[21] (16 июля), 2.0.3[22] (22 июля), 2.0.4[23] (3 августа) и 2.0.5[24] (5 августа), в которых были исправлены многие недостатки первой переносимой версии.
28 сентября 2014 Тед Унангст представил доклад "LibreSSL: более чем 30 дней спустя", в котором описаны достижения, проблемы и изменения, сделанные за несколько месяцев после доклада Боба Бека на конференции BSDCan[9][25].
Начиная с версии 2.1.0,[26], вышедшей 12 октября 2014 года, скорость внесения изменений в LibreSSL существенно упала, а библиотека стала рабочей альтернативой OpenSSL. Большинство изменений в версиях 2.1.x являются устранением уязвимостей, найденных в OpenSSL.
LibreSSL используется в качестве библиотеки по умолчанию для реализации TLS в следующих системах:
Некоторые из наиболее заметных и важных изменений связаны с заменой самописных функций по работе с памятью на функции стандартной библиотеки (например, strlcpy
, calloc
, asprintf
, reallocarray
и т.д.)[33][34]. Это позволит в дальнейшем находить ошибки, связанные с переполнением буфера, при помощи специальных инструментов анализа утечек памяти, а также исследовать сбои при помощи технологии ASLR, атрибута NX bit, «осведомителей» и т.п.
В логе системы контроля версий также наблюдаются исправления потенциальных двойных освобождений памяти[35]. Также внесено множество дополнительных проверок на соответствие размеров параметров, преобразований между беззнаковыми и знаковыми переменными, проверок значений указателей и возвращаемых значений.
В соответствии с общепринятыми практиками безопасного программирования, по умолчанию включены опции и флаги компилятора, направленные на обнаружение потенциальных проблем на этапе сборки (-Wall, -Werror, -Wextra, -Wuninitialized). Улучшена читаемость кода, что должно облегчить проверку кода в будущем. Исправление или удаление ненужных макросов и обёрток методов также улучшает читаемость кода и облегчает аудит.
В коде LibreSSL полностью устранена проблема 2038 года. Кроме того, для предотвращения удаления компилятором кода очистки памяти из оптимизированной сборки добавлены вызовы функций explicit_bzero
и bn_clear
, чтобы потенциальный атакующий не мог прочитать значения из ранее использованной памяти.
Небезопасная инициализация генератора псевдослучайных чисел начальными значениями была заменена на возможности, предоставляемые ядром операционной системы[36][37]. Среди других существенных нововведений стоит отметить поддержку нового поточного шифра ChaCha и кода аутентификации сообщений Poly1305, а также более безопасного набора эллиптических кривых (кривые brainpool из RFC 5639, до 512 бит).
В первой версии LibreSSL были добавлены следующие возможности: поддержка алгоритмов ChaCha и Poly1305, эллиптические кривые Brainpool и ANSSI, AEAD-режимы шифрования AES-GCM и ChaCha20-Poly1305.
В последующих версиях появилось следующее:[38]
В первоначальной версии LibreSSL некоторые возможности были по умолчанию отключены[27]. Реализация некоторых из этих возможностей была позднее удалена полностью, включая поддержку Kerberos, экспортного набора шифров, TLS сжатия, DTLS heartbeat, и SSL v2.
В более поздних версиях были дополнительно отключены следующие возможности:
В первом релизе LibreSSL в OpenBSD 5.6 было удалено большое количество кода, который посчитали небезопасным, ненужным или устаревшим[27].
Алгоритм Dual_EC_DRBG, который подозревают в наличие бэкдора[49], также подвергся уничтожению. Также были удалены неиспользуемые протоколы и небезопасные алгоритмы, включая поддержку стандарта FIPS 140-2[50], MD4/MD5[38] J-PAKE,[27] и SRP.[23]
Одной из причин критики OpenSSL является большое количество записей в системе отслеживания ошибок, которые остаются неисправленными в течение многих лет. Теперь эти старые ошибки исправляются в LibreSSL[51].
LibreSSL оказалась не подверженной многим уязвимостям, найденном в OpenSSL после ответвления форка. Примечательно, что ни одна из найденных за это время в OpenSSL уязвимостей высокой степени не применима к LibreSSL.
LibreSSL | OpenSSL | LibreSSL | OpenSSL | |
---|---|---|---|---|
Классификация | 1.0.1 | 1.0.2[52] | ||
Критическая | 0 | 0 | 0 | 0 |
Высокая | 0 | 4 | 0 | 2 |
Средняя | 14 | 25 | 12 | 17 |
Низкая | 4 | 11 | 3 | 6 |
Итого | 18 | 39 | 15 | 23 |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .