image

SSLv2, протокол шифрования от Netscape, вышедший в 1995 году и потерявший актуальность уже в 1996, казалось бы, в 2016 году должен быть отключен во всем ПО, использующем SSL/TLS-шифрование, особенно после уязвимостей POODLE в SSLv3, позволяющей дешифровать 1 байт за 256 запросов, и FREAK, связанной с ослабленными (экспортными) версиями шифров.

И если клиентское ПО (например, браузеры) давно не поддерживает подключения по протоколу SSLv2, и, с недавнего времени, и SSLv3, то с серверным ПО не все так однозначно.

Группа исследователей из Тель-Авивского университета, Мюнстенского университета прикладных наук, Рурского университета в Бохуме, Университета Пенсильвании, Мичиганского университета, Two Sigma, Google, проекта Hashcat и OpenSSL обнаружили уязвимость под названием DROWN — Decrypting RSA using Obsolete and Weakened eNcryption, которая позволяет дешифровать TLS-трафик клиента, если на серверной стороне не отключена поддержка протокола SSLv2 во всех серверах, оперирующих одним и тем же приватным ключом.

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

Почему это возможно?

Несмотря на то, что у большинства веб-серверов протокол SSLv2 отключен по умолчанию, и его никто не будет включать намеренно, данная атака позволяет дешифровать TLS-трафик, имея доступ к любому серверу, поддерживающему SSLv2, и использующему такой же приватный ключ, что и веб-сервер. Часто можно встретить использование одного и того же сертификата для веб-сервера и почтового сервера, а также для FTPS.

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

Атака возможна вследствие утечки информации о корректности расшифровки пакета в протоколе SSLv2. Используя атаку Данэля Блейхенбахера и отправляя перехваченные клиентские пакеты с зашифрованным 48-битным предварительным секретом (pre-master secret), хакер сможет полностью расшифровать одну из примерно 900 TLS-сессий клиента. Для выполнения атаки требуется послать около 40000 запросов на сервер с включенным SSLv2, подбирая ключ для слабого симметричного шифрования на каждое отправленное сообщение.

Исследователям удалось восстановить TLS-сессию клиента в течение 8 часов, используя 200 машин Amazon EC2: 150 типа g2.2xlarge c nVidia GPU, и 50 g2.8xlarge с 4 nVidia GPU. Стоимость такой атаки составила $440.

Исследователи отмечают, что в версиях OpenSSL, вышедших с 2010 по январь 2016 год, допущена досадная ошибка, связанная с экспортными шифрами.

В 2010 году разработчики OpenSSL приняли решение по умолчанию отключить все ослабленные шифры, но не отключать полностью SSLv2. Таким образом, казалось бы, хоть SSLv2 и оставался технически включенным, использовать его с ослабленными шифрами было бы нельзя. К сожалению, в коде была допущена ошибка, фактически отключающая проверку, и позволяя указать серверу любой экспортный шифр. Ошибку исправили только версии OpenSSL, вышедшей в январе 2016.

«Частный» DROWN

Кроме общего случая, существует и заметно более быстрый частный случай атаки, эксплуатирующий другую ошибку в OpenSSL, которая оставалась незамеченной как минимум с начала проекта OpenSSL (1998 год), а может быть еще и SSLeay (1995 год), и была случайно исправлена во время исследования другой проблемы 4 марта 2015 года.
Уязвимость позволяет восстанавливать master secret побайтово, совершая всего 1920 запросов к серверу для восстановления 128-битного ключа.

Атака настолько вычислительно простая, что ее возможно совершить на обычном компьютере за минуту.

Данной атаке подвержено около 9% серверов из списка Alexa Top Million.

Помимо всего прочего, атаку можно осуществить в том числе на протокол QUIC — транспортный протокол, использующий UDP, созданный Google.

TLS-сессии, использующие эфемерные ключи, тоже уязвимы, однако требуют вмешательство в сессию в виде «человека посередине».

Как защититься?

Если вы используете OpenSSL 1.0.2 (без буквы), 1.0.1l или более ранние, вам необходимо немедленно обновить его. Если есть возможность, лучше использовать самую последнюю версию OpenSSL 1.0.2g и 1.0.1s, из которых исключена поддержка SSLv2. В ином случае, отключайте поддержку SSLv2 в используемом вами ПО самостоятельно.

Если вы используете веб-сервер Apache, необходимо отключить поддержку протокола SSLv2 (и за одно и SSLv3, чтобы веб-сервер не оставался уязвимым к атаке POODLE):
SSLProtocol All -SSLv2 -SSLv3

Для nginx достаточно оставить включенными только протоколы TLS:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2

Почтовый сервер Postfix в версиях 2.9.14, 2.10.8, 2.11.6, 3.0.2 и более новых по умолчанию настроен без поддержки SSLv2. Если у вас более старая версия, воспользуйтесь примером конфигурации со страницы исследователей.

Если у вас нет возможности отключить поддержку SSLv2 (например, на встроенном устройстве), убедитесь, чтобы этот сервер использовал уникальный приватный ключ, не используемый где-либо еще.

Если вы используете Linux, вам может быть полезна утилита needrestart, которая определяет сервисы, использующие старые версии библиотек, и перезапускает их.

Ссылки

Веб-сайт уязвимости
Академическая публикация
Неинтерактивное средство проверки (проверяет сайт по базе, которая собиралась до опубликовывания информации об уязвимости)
Сканер-приложение, проверяющее наличие поддержки SSLv2 и уязвимости OpenSSL
Информация об уязвимости на openssl.org
Подробности на Ars Technica и технические подробности от криптографа Мэттью Грина

Комментарии (5)


  1. nikitasius
    02.03.2016 12:12
    +3

    Если кто-то переехал на новый постфик со старым конфигом, или у кого-то старый патченый кое как постфикс, то протоколы отрубаются вот так в main.cf:
    smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3

    И хорошая подсказка, где лежат шифры в статье про logjam. По аналогии открываем, ищем протоколы, убираем 2й и 3й SSL.


  1. MrPrayer
    02.03.2016 14:07
    +1

    Подробности на ArcTechnica

    Ars Technica, через S и с пробелом. Ну или arstechnica.com.


    1. ValdikSS
      02.03.2016 14:08

      Исправлено.


  1. andvgal
    02.03.2016 14:51

    Если я правильно понял, ещё вчера накатывая на сервера обновления Debian из security всего-лишь со средним уровнем необходимости, то реально уязвимы были только те, кто из каких-то соображений поддерживал допотопные клиенты, т.к. большинство уже давно зарубили эти алгоритмы шифрования.

    UPD:

    Чтобы вырванным из контекста не получилось
    openssl (1.0.1k-3+deb8u4) jessie-security; urgency=medium

    • Fix CVE-2016-0797
    • Fix CVE-2016-0798
    • Fix CVE-2016-0799
    • Fix CVE-2016-0702
    • Fix CVE-2016-0705
    • Disable EXPORT and LOW ciphers: The DROWN attack (CVE-2016-0800)
      makes use of those, and SLOTH attack (CVE-2015-7575) can make use of them
      too.


  1. VBart
    04.03.2016 11:14

    Для nginx достаточно оставить включенными только протоколы TLS:
    В nginx SSLv2 по-умолчанию был отключен ещё в 0.8.19 (т.е. больше 6 лет назад). И ничего делать не нужно, если только вы сами явно не включили его зачем-то.