OpenSSL - OpenSSL

OpenSSL
OpenSSL logo.svg
Lets Encrypt R3 certificate detail screenshot.png
Разработчики) Проект OpenSSL
Первый выпуск 1998 ; 23 года назад (1998)
Стабильный выпуск 3.0.0 (7 сентября 2021 г .; 36 дней назад ) [±] (2021-09-07)
Репозиторий
Написано в C , сборка , Perl
Тип Библиотека криптографии
Лицензия Лицензия OpenSSL, v3.0 перешла на лицензию Apache License 2.0
Веб-сайт www .openssl .org

OpenSSL - это программная библиотека для приложений, которые защищают связь по компьютерным сетям от подслушивания или необходимости идентифицировать сторону на другом конце. Он широко используется интернет- серверами , включая большинство веб-сайтов HTTPS .

OpenSSL содержит реализацию протоколов SSL и TLS с открытым исходным кодом . Базовая библиотека , написанная на языке программирования C , реализует основные криптографические функции и предоставляет различные служебные функции. Доступны оболочки, позволяющие использовать библиотеку OpenSSL на различных компьютерных языках.

OpenSSL Software Foundation (OSF) представляет проект OpenSSL в большинстве юридических прав, включая лицензионные соглашения участников, управление пожертвованиями и так далее. OpenSSL Software Services (OSS) также представляет проект OpenSSL для контрактов на поддержку.

OpenSSL доступен для большинства Unix-подобных операционных систем (включая Linux , macOS и BSD ) и Microsoft Windows .

История проекта

Проект OpenSSL был основан в 1998 году для предоставления бесплатного набора инструментов шифрования кода, используемого в Интернете. Он основан на форке SSLeay Эрика Эндрю Янга и Тима Хадсона, разработка которого неофициально завершилась 17 декабря 1998 года, когда Янг и Хадсон начали работать в RSA Security . Первыми членами-учредителями были Марк Кокс, Ральф Энгельшалл, Стивен Хенсон, Бен Лори и Пол Саттон.

По состоянию на май 2019 года комитет управления OpenSSL состоял из 7 человек и 17 разработчиков с доступом к фиксации (многие из которых также входят в комитет управления OpenSSL). Штатных сотрудников (стипендиатов) всего два, остальные - волонтеры.

Бюджет проекта составляет менее одного миллиона долларов США в год, и он в основном зависит от пожертвований. Разработка TLS 1.3 спонсируется Akamai.

Выпуски основных версий

История выпусков OpenSSL
Версия Исходная дата выпуска Комментарий Последняя дополнительная версия
Old version, no longer maintained: 0.9.1 23 декабря 1998 г. (1998-12-23)
  • Официальный старт проекта OpenSSL
0.9.1c (23 декабря 1998 г.)
Old version, no longer maintained: 0.9.2 22 марта 1999 г. (1999-03-22)
  • Преемник 0.9.1c
0.9.2b (6 апреля 1999 г.)
Old version, no longer maintained: 0.9.3 25 мая 1999 г. (1999-05-25)
  • Преемник 0.9.2b
0.9.3a (27 мая 1999 г.)
Old version, no longer maintained: 0.9.4 9 августа 1999 г. (1999-08-09)
  • Преемник 0.9.3a
0.9.4 (9 августа 1999 г.)
Old version, no longer maintained: 0.9.5 28 февраля 2000 г. (2000-02-28)
  • Преемник 0.9.4
0.9.5a (1 апреля 2000 г.)
Old version, no longer maintained: 0.9.6 24 сентября 2000 г. (2000-09-24)
  • Преемник 0.9.5a
0,9,6 млн (17 марта 2004 г.)
Old version, no longer maintained: 0.9.7 31 декабря 2002 г. (2002-12-31)
  • Преемник 0,9,6м
0,9,7 млн ​​(23 февраля 2007 г.)
Old version, no longer maintained: 0.9.8 5 июля 2005 г. (2005-07-05)
  • Преемник 0,9,7м
0.9.8ж (3 декабря 2015)
Old version, no longer maintained: 1.0.0 29 марта 2010 г. (2010-03-29)
  • Преемник 0.9.8n
1.0.0t (3 декабря 2015 г. )  (2015-12-03)
Old version, no longer maintained: 1.0.1 14 марта 2012 г. (2012-03-14)
  • Преемник 1.0.0h
  • Поддерживается до 31 декабря 2016 г.
  • RFC 6520 Поддержка контрольных сигналов TLS / DTLS
  • Поддержка SCTP
  • RFC 5705 экспортер ключевого материала TLS
  • RFC 5764 согласование DTLS-SRTP
  • Следующее согласование протокола
  • Подписи PSS в сертификатах, запросах и списках отзыва сертификатов (CRL)
  • Поддержка информации о получателе на основе пароля для CMS
  • Поддержка TLS 1.2 и TLS 1.1
  • Предварительная возможность FIPS 140 для непроверенного модуля 2.0 FIPS
  • Поддержка протокола защищенного удаленного пароля (SRP)
1.0.1u (22 сентября 2016 г. )  (2016-09-22)
Old version, no longer maintained: 1.0.2 22 января 2015 г. (2015-01-22)
  • Преемник 1.0.1л
  • Поддерживается до 31 декабря 2019 г. (долгосрочная поддержка)
  • Поддержка Suite B для TLS 1.2 и DTLS 1.2
  • Поддержка DTLS 1.2
  • Автоматический выбор эллиптической кривой (EC) TLS
  • API для настройки алгоритмов и кривых подписи, поддерживаемых TLS
  • API конфигурации SSL_CONF
  • Поддержка TLS Brainpool
  • Поддержка ALPN
  • Поддержка CMS для RSA-PSS , RSA-OAEP , ECDH и X9.42 DH
  • Поддержка FIPS 140
1.0.2u (20 декабря 2019 г. )  (2019-12-20)
Old version, no longer maintained: 1.1.0 25 августа 2016 г. (2016-08-25)
  • Преемник 1.0.2h
  • Поддерживается до 11 сентября 2019 г.
  • Поддержка BLAKE2 (RFC 7693)
  • Поддержка ChaCha20 - Poly1305 (RFC 7539)
  • Поддержка X25519 (RFC 7748)
  • Поддержка DANE и прозрачности сертификатов
  • Поддержка CCM Ciphersuites
  • Поддержка расширенного мастер-секрета
  • SSLv2 удален
  • Поддержка набора шифров Kerberos удалена
  • RC4 и 3DES удалены из наборов шифров по умолчанию в libssl
  • Удалите DSS, SEED, IDEA, CAMELLIA и AES-CCM из зашифрованного списка DEFAULT.
  • Из libssl удалена поддержка 40- и 56-битных шифров
  • Поддержка FIPS 140 удалена
1.1.0л (10 сентября 2019 )  (2019-09-10)
Older version, yet still maintained: 1.1.1 11 сентября 2018 г. (2018-09-11)
  • Преемник 1.1.0i
  • Поддерживается до 11 сентября 2023 г. (долгосрочная поддержка)
  • Поддержка TLS 1.3
  • Поддержка SHA-3
  • Поддержка X448 и Ed448 (RFC 7748)
  • Поддержка SipHash
  • Поддержка ARIA
  • Поддержка multi-prime RSA (RFC 8017)
  • Поддержка SM2 , SM3 и SM4
  • Сердцебиение удалено
  • Поддержка QNX удалена
постоянное развитие
Current stable version: 3.0.0 7 сентября 2021 г. (2021-09-07) постоянное развитие
Легенда:
Старая версия
Старая версия, все еще поддерживается
Последняя версия
Последняя предварительная версия
Будущий выпуск

Алгоритмы

OpenSSL поддерживает ряд различных криптографических алгоритмов:

Шифры
AES , Blowfish , Camellia , Chacha20 , Poly1305 , SEED , CAST-128 , DES , IDEA , RC2 , RC4 , RC5 , Triple DES , ГОСТ 28147-89 , SM4
Криптографические хеш-функции
MD5 , MD4 , MD2 , SHA-1 , SHA-2 , SHA-3 , RIPEMD-160 , MDC-2 , ГОСТ Р 34.11-94 , BLAKE2 , Whirlpool , SM3
Криптография с открытым ключом
RSA , DSA , обмен ключами Диффи – Хеллмана , Эллиптическая кривая , X25519 , Ed25519 , X448 , Ed448 , ГОСТ Р 34.10-2001 , SM2

( Идеальная прямая секретность поддерживается с помощью эллиптической кривой Диффи – Хеллмана, начиная с версии 1.0.)

Проверка FIPS 140

FIPS 140 - это федеральная программа США по тестированию и сертификации криптографических модулей. Ранний сертификат FIPS 140-1 для OpenSSL FOM 1.0 был отозван в июле 2006 года, «когда возникли вопросы о взаимодействии проверенного модуля с внешним программным обеспечением». Модуль был повторно сертифицирован в феврале 2007 года, прежде чем уступить место FIPS 140-2. OpenSSL 1.0.2 поддерживает использование объектного модуля OpenSSL FIPS (FOM), который был создан для доставки утвержденных FIPS алгоритмов в среде, утвержденной FIPS 140-2. OpenSSL неоднозначно решил классифицировать архитектуру 1.0.2 как «End of Life» или «EOL» с 31 декабря 2019 года, несмотря на возражения, что это была единственная версия OpenSSL, которая в настоящее время доступна с поддержкой режима FIPS. В результате EOL многие пользователи не смогли должным образом развернуть FOM 2.0 и перестали соответствовать требованиям, поскольку не обеспечили расширенную поддержку для архитектуры 1.0.2, хотя сам FOM оставался валидированным еще восемь месяцев.

Объектный модуль FIPS 2.0 оставался подтвержденным FIPS 140-2 в нескольких форматах до 1 сентября 2020 года, когда NIST отказался от использования FIPS 186-2 для стандарта цифровой подписи и обозначил все несовместимые модули как «Исторические». Это обозначение включает предупреждение для федеральных агентств о том, что они не должны включать модуль в какие-либо новые закупки. Все три проверки OpenSSL были включены в список устаревших: объектный модуль OpenSSL FIPS (сертификат № 1747), OpenSSL FIPS Object Module SE (сертификат № 2398) и OpenSSL FIPS Object Module RE (сертификат № 2473). Многие проверки и клоны на основе OpenSSL под частной торговой маркой, созданные консультантами, также были перемещены в Исторический список, хотя некоторые проверенные FIPS модули с заменой совместимости избежали устаревания, например, BoringCrypto от Google и CryptoComply от SafeLogic.

OpenSSL 3.0 восстановил режим FIPS и прошел тестирование FIPS 140-2, но со значительными задержками: усилия были впервые начаты в 2016 году при поддержке SafeLogic и дальнейшей поддержке со стороны Oracle в 2017 году, но процесс оказался непростым. 20 октября 2020 г. поставщик OpenSSL FIPS 3.0 был добавлен в список проверок реализации CMVP, что отражает официальное взаимодействие с лабораторией тестирования для проведения проверки FIPS 140-2. Это привело к множеству сертификатов в последующие месяцы.

Лицензирование

OpenSSL получил двойную лицензию по лицензии OpenSSL и SSLeay, что означает, что можно использовать условия любой из этих лицензий. Лицензия OpenSSL - это лицензия Apache License 1.0, а лицензия SSLeay имеет некоторое сходство с лицензией BSD с 4 пунктами . Поскольку лицензией OpenSSL была лицензия Apache License 1.0, но не Apache License 2.0, она требует, чтобы фраза «этот продукт включает программное обеспечение, разработанное OpenSSL Project для использования в OpenSSL Toolkit», появлялась в рекламных материалах и любых других распространяемых материалах (разделы 3 и 6 настоящего документа). Лицензия OpenSSL). Из-за этого ограничения лицензия OpenSSL и лицензия Apache License 1.0 несовместимы с GNU GPL . Некоторые разработчики GPL добавили в свои лицензии исключение OpenSSL, которое конкретно разрешает использование OpenSSL в их системе. GNU Wget и climm используют такие исключения. Некоторые пакеты (например, Deluge ) явно изменяют лицензию GPL, добавляя дополнительный раздел в начале лицензии, документирующий исключение. Другие пакеты используют LGPL -licensed GnuTLS , BSD -licensed Ботан , или MPL -licensed НСС , которые выполняют ту же задачу.

OpenSSL объявил в августе 2015 года, что потребует от большинства участников подписать лицензионное соглашение участника (CLA), и что OpenSSL в конечном итоге будет перелицензирован в соответствии с условиями Apache License 2.0 . Этот процесс начался в марте 2017 года и был завершен в 2018 году.

7 сентября 2021 года OpenSSL 3.0.0 был выпущен под лицензией Apache License 2.0.

Заметные уязвимости

Отказ в обслуживании: парсинг ASN.1

В OpenSSL 0.9.6k есть ошибка, из-за которой определенные последовательности ASN.1 запускали большое количество рекурсий на компьютерах Windows, обнаруженную 4 ноября 2003 г. Windows не могла правильно обрабатывать большие рекурсии, поэтому OpenSSL в результате вызывал сбой. Возможность отправлять произвольное большое количество последовательностей ASN.1 может привести к сбою OpenSSL.

Уязвимость сшивания OCSP

При создании рукопожатия клиент мог отправить неверно отформатированное сообщение ClientHello, что привело к синтаксическому анализу OpenSSL больше, чем конец сообщения. Проект CVE присвоил идентификатор CVE - 2011-0014 , это затронуло все версии OpenSSL от 0.9.8h до 0.9.8q и OpenSSL 1.0.0 до 1.0.0c. Поскольку анализ мог привести к чтению неверного адреса памяти, злоумышленник мог вызвать DoS . Также было возможно, что некоторые приложения раскрывают содержимое проанализированных расширений OCSP , что приводит к тому, что злоумышленник может читать содержимое памяти, полученное после ClientHello.

Уязвимость ASN.1 BIO

При использовании функций базового ввода / вывода (BIO) или функций на основе ФАЙЛОВ для чтения ненадежных данных формата DER OpenSSL уязвим. Эта уязвимость была обнаружена 19 апреля 2012 г., и ей был присвоен идентификатор CVE CVE - 2012-2110 . Хотя это не влияет напрямую на код SSL / TLS OpenSSL, любое приложение, использующее функции ASN.1 (особенно d2i_X509 и d2i_PKCS12), также не было затронуто.

Атака восстановления открытого текста SSL, TLS и DTLS

При обработке наборов шифров CBC в SSL, TLS и DTLS OpenSSL оказался уязвимым для атаки по времени во время обработки MAC. Надхем Альфардан и Кенни Патерсон обнаружили проблему и опубликовали свои выводы 5 февраля 2013 г. Уязвимости был присвоен идентификатор CVE CVE - 2013-0169 .

Предсказуемые закрытые ключи (для Debian)

Генератор псевдослучайных чисел OpenSSL получает энтропию с помощью сложных методов программирования. Чтобы инструмент анализа Valgrind не выдавал связанных предупреждений, сопровождающий дистрибутива Debian применил патч к варианту Debian пакета OpenSSL, который непреднамеренно сломал его генератор случайных чисел, ограничив общее количество закрытых ключей, которые он мог сгенерировать, до 32 768. Сломанная версия была включена в выпуск Debian от 17 сентября 2006 г. (версия 0.9.8c-1), а также поставила под угрозу другие дистрибутивы на основе Debian, например Ubuntu . Готовые к использованию эксплойты легко доступны.

Об ошибке сообщил Debian 13 мая 2008 г. В дистрибутиве Debian 4.0 (etch) эти проблемы были исправлены в версии 0.9.8c-4etch3, а исправления для дистрибутива Debian 5.0 (lenny) были предоставлены в версии 0.9.8g. -9.

Heartbleed

Логотип, представляющий ошибку Heartbleed

Версии OpenSSL 1.0.1 через 1.0.1f имеют сильную обработку памяти ошибка в их реализации TLS Heartbeat расширения , которые могут быть использованы для выявления до 64  Кбайт памяти приложения с каждым сердцебиением ( CVE - 2014-0160 ). Считывая память веб-сервера, злоумышленники могут получить доступ к конфиденциальным данным, включая закрытый ключ сервера . Это может позволить злоумышленникам декодировать ранее перехваченные сообщения, если используемый протокол шифрования не обеспечивает идеальную прямую секретность . Знание закрытого ключа также может позволить злоумышленнику организовать атаку типа «злоумышленник в середине» против любых будущих сообщений. Уязвимость также может выявить незашифрованные части конфиденциальных запросов и ответов других пользователей, включая файлы cookie сеанса и пароли, которые могут позволить злоумышленникам перехватить личность другого пользователя службы.

На момент раскрытия информации 7 апреля 2014 года около 17% или полмиллиона защищенных веб-серверов Интернета, сертифицированных доверенными органами, считались уязвимыми для атаки. Однако Heartbleed может повлиять как на сервер, так и на клиента.

Уязвимость внедрения CCS

Уязвимость CCS Injection Vulnerability ( CVE - 2014-0224 ) - это уязвимость обхода безопасности, которая возникает из-за слабости методов OpenSSL, используемых для ввода ключей.

Эту уязвимость можно использовать с помощью атаки «человек посередине», при которой злоумышленник может расшифровать и изменить транзитный трафик. Удаленный злоумышленник, не прошедший проверку подлинности, может воспользоваться этой уязвимостью, используя специально созданное рукопожатие для принудительного использования слабого ключевого материала. Успешная эксплуатация может привести к состоянию обхода безопасности, когда злоумышленник может получить доступ к потенциально конфиденциальной информации. Атака возможна только между уязвимым клиентом и сервером.

Клиенты OpenSSL уязвимы во всех версиях OpenSSL до версий 0.9.8za, 1.0.0m и 1.0.1h. Известно, что серверы уязвимы только в OpenSSL 1.0.1 и 1.0.2-beta1. Пользователям серверов OpenSSL до 1.0.1 рекомендуется выполнить обновление в качестве меры предосторожности.

Клиент Hello sigalgs DoS

Эта уязвимость ( CVE - 2015-0291 ) позволяет любому получить сертификат, прочитать его содержимое и точно изменить его, чтобы злоупотребить уязвимостью, вызывающей сбой сертификата на клиенте или сервере. Если клиент подключается к серверу OpenSSL 1.0.2 и повторно согласовывает с недопустимым расширением алгоритмов подписи, происходит разыменование нулевого указателя. Это может вызвать DoS-атаку на сервер.

Исследователь Stanford Security Дэвид Рамос использовал личный эксплойт и представил его команде OpenSSL, которая затем исправила проблему.

OpenSSL классифицировал ошибку как проблему высокой степени серьезности, отметив, что версия 1.0.2 была признана уязвимой.

Атака восстановления ключа на малые подгруппы Диффи – Хеллмана

Эта уязвимость ( CVE - 2016-0701 ) позволяет при определенных обстоятельствах восстановить закрытый ключ Диффи – Хеллмана сервера OpenSSL. Исследователь Adobe System Security Антонио Сансо в частном порядке сообщил об уязвимости.

OpenSSL классифицировал ошибку как проблему высокой степени серьезности, отметив, что уязвимой оказалась только версия 1.0.2.

Вилки

Агломерированный SSL

В 2009 году, разочаровавшись в исходном API OpenSSL, Марко Пирбум, в то время разработчик OpenBSD, разветвил исходный API, создав агломерированный SSL (assl), который повторно использует OpenSSL API под капотом, но обеспечивает гораздо более простой внешний интерфейс. С тех пор он устарел в связи с форком LibreSSL около 2016 года.

LibreSSL

В апреле 2014 года в результате Heartbleed , члены OpenBSD проекта раздвоенный OpenSSL начиная с 1.0.1g ветви, чтобы создать проект под названием LibreSSL . За первую неделю сокращения кодовой базы OpenSSL из форка было удалено более 90 000 строк кода C.

BoringSSL

В июне 2014 года Google анонсировал собственный форк OpenSSL, получивший название BoringSSL. Google планирует сотрудничать с разработчиками OpenSSL и LibreSSL. С тех пор Google разработал новую библиотеку Tink на основе BoringSSL.

Смотрите также

Примечания

использованная литература

внешние ссылки