Как я могу исправить / обойти уязвимость SSLv3 POODLE (CVE-2014-3566)?

155

После атаки BEAST и Ошибка в сердцебиении , теперь я слышал о новой уязвимости в SSL / TLS, называемой

задан gertvdijk 14.10.2014 в 23:49
источник

4 ответа

209

Фоновая информация

SSL предназначен для обеспечения уровня транспорта в Интернете. Для «Интернета», также известного как HTTP, вы будете знать это как HTTPS, но он также используется для других протоколов приложений. SSLv2 был первым широко используемым протоколом безопасности транспорта, но вскоре был обнаружен небезопасным. Преемники SSLv3 и TLSv1 теперь широко поддерживаются. TLSv1.1 и TLSv1.2 новее и получают большую поддержку. Большинство, если не все веб-браузеры, выпущенные с 2014 года, поддерживают его.

Недавнее открытие инженеров Google указывает, что SSLv3 больше не должен использоваться (например, SSLv2 устарел давно). Клиенты, которые не смогут подключиться к вашему сайту / службе, вероятно, очень ограничены. CloudFlare объявил , что менее 0,09% их посетителей по-прежнему полагаются на SSLv3.

Простое решение: отключить SSLv3.

Предоставляет ли Ubuntu какое-либо обновление?

Да, через usn-2385-1 с добавлением функции SCSV но это не полностью устраняет проблему , так как это не отключает SSLv3, и патч будет работать, только если обе стороны соединения были исправлены. Вы получите его через регулярные обновления безопасности в диспетчере пакетов.

Итак, все еще YOU должны сами принять меры, чтобы отключить SSLv3 (он настраивается). Будущие версии клиентов / браузеров скорее всего отключат SSLv3. Например. Firefox 34 сделает это.

Отключение SSLv3 полностью по умолчанию в Ubuntu на уровне реализации, вероятно, сломает некоторые вещи там также для использования SSL без HTTPS, что не так сильно уязвимо, поэтому я предполагаю, что поддерживающие не будут этого делать, и только этот патч SCSV будет приложенное.

Почему обновление SCSV в OpenSSL через usn-2385-1 не смягчает проблему?

Действительно, перестаньте задавать такие вопросы и просто пропустите несколько абзацев и отключите SSLv3. Но эй, если вы не уверены, здесь вы идете:

POODLE показывает, что SSLv3 с CBC-шифрами нарушен, реализация SCSV не изменяет этого. SCSV только гарантирует, что вы не откажетесь от какого-либо протокола TLS до любого более низкого протокола TLS / SSL по мере необходимости с помощью атаки Man-in-the-middle, необходимой для обычных случаев.

Если вам нужен доступ к некоторому серверу, который вообще не предлагает TLS, но только SSLv3, то у вашего браузера действительно нет выбора и ему нужно поговорить с сервером, используя SSLv3, который затем будет уязвим без какой-либо атаки с понижением .

Если вам нужен доступ к некоторому серверу, который предлагает TLSv1 + и SSLv3 тоже (что обескуражено), и вы хотите быть уверены, что ваше соединение не будет снижено до SSLv3 злоумышленником, тогда и сервер и клиенту нужен этот патч SCSV.

Для полного смягчения проблемы вы можете отключить SSLv3, и вы можете быть уверены, что вас не будут понижать. И вы не сможете разговаривать с серверами только с SSLv3.

Хорошо, так как отключить SSLv3?

См. ниже в разделах, относящихся к конкретным приложениям: Firefox, Chrome, Apache, Nginx и Postfix теперь включены.

Являются ли затронуты только серверы или клиенты?

Уязвимость существует, если и сервер, и клиент принимают SSLv3 (даже если оба из них способны TLSv1 / TLSv1.1 / TLS1.2 из-за атаки с понижением).

В качестве администратора сервера вы должны отключить SSLv3 сейчас для безопасности своих пользователей.

Как пользователь, вы должны отключить SSLv3 в своем браузере сейчас , чтобы защитить себя при посещении веб-сайтов, которые по-прежнему поддерживают SSLv3.

Является ли этот OpenSSL / GnuTLS / браузер конкретным?

Нет. Это ошибка протокола (дизайн), а не ошибка реализации. Это означает, что вы не можете его исправлять (если вы не меняете дизайн старого SSLv3).

И да, есть новый выпуск безопасности OpenSSL , но читайте ниже ( Но я действительно действительно нужна поддержка SSLv3 ... по причине X, Y, Z! ) о том, почему вам лучше сосредоточиться на отключении SSLv3 вообще.

Могу ли я убить SSLv3 на уровне сети (брандмауэра)?

Хорошо, да, наверное. Я помещал это в отдельное сообщение в блоге для дальнейших мыслей и работы. У нас может быть какое-то волшебное правило iptables , которое вы можете использовать!

Мое сообщение в блоге: Как снять SSLv3 в своей сети с помощью iptables для POODLE?

Является ли это релевантным только для HTTPS или для IMAP / SMTP / OpenVPN и других протоколов с поддержкой SSL?

Текущий вектор атаки, как показывают исследователи, работает с управлением открытым текстом, отправленным на сервер, используя Javascript, который запускается на машине жертвы. Этот вектор не применяется к сценариям без HTTPS без использования браузера.

Кроме того, как правило, клиент SSL не разрешает переопределять сессию на SSLv3 (имея TLSv1 +, увиденный в режимах рукопожатия), но браузеры хотят быть очень обратной совместимостью, и они это делают. Комбинация с контролем открытого текста и определенным способом создания HTTP-заголовка делает его пригодным для использования.

Заключение: отключите SSLv3 для HTTPS сейчас , отключите SSLv3 для других сервисов в следующем окне службы.

Какое влияние? Нужно ли мне отзывать и восстанавливать сертификат сервера? (Как с Heartbleed)

Нет, вам не нужно поворачивать свои сертификаты для этого. Уязвимость обеспечивает восстановление открытого текста из данных сеанса, не предоставляет доступа к каким-либо секретам (ни ключ сеанса, ни ключ сертификата).

Злоумышленник, скорее всего, способен только украсть заголовочные заголовки, такие как сеансовые куки, чтобы выполнить захват сеанса . Дополнительным ограничением является необходимость полной (активной) атаки MitM .

Есть ли что-то еще, что я могу сделать для улучшения моей конфигурации SSL в целом?

Как пользователь, помимо отключения SSLv3 в вашем браузере, на самом деле. Ну, всегда устанавливайте последние обновления безопасности.

Для серверов следуйте руководству сервера TLS от Mozilla . И протестируйте с помощью теста Qualys SSL Labs . На самом деле не так сложно получить рейтинг A + на вашем сайте. Просто обновите свои пакеты и внесите рекомендации из руководства Mozilla.

Но мне действительно нужна поддержка SSLv3 ... по причине X, Y, Z! Теперь что?

Ну, есть патч, который обходит атаку с понижательной поддержкой клиентов с поддержкой TLSv1, называемую защитой от отказа SSLv3. Это также улучшит безопасность TLSv1 +, кстати (более сложная / невозможная атака понижения). Он предлагается в качестве backport из более поздней версии OpenSSL в консультационной программе Ubuntu Security usn-2385-1 .

Большой улов: для работы клиента и сервера нужен этот патч. Поэтому, по-моему, пока вы обновляете как клиентов, так и серверы, вы должны просто обновиться до TLSv1 + в любом случае.

Однако, пожалуйста, пожалуйста, просто удалите SSLv3 в своей сети. Постарайтесь повысить уровень безопасности и просто отключить SSLv3.

Я слышал о поддержке SCSV, чтобы устранить атаку по понижению протокола. Нужно ли мне это?

Только если вам действительно нужен SSLv3 по какой-то нечетной причине, но он также улучшает безопасность в TLSv1 +, так что да, я бы рекомендовал вам его установить. Ubuntu предоставляет обновление для этой функции в usn-2385-1 . Вы получите его через регулярные обновления безопасности в диспетчере пакетов.

Тестирование уязвимости для локально размещенных сайтов (например, intranet / offline).

Ваши серверы уязвимы, если они поддерживают SSLv3. Несколько вариантов:

  • С OpenSSL s_client:

    openssl s_client -connect <server>:<port> -ssl3
    

    Если соединение выполнено успешно, sslv3 включен. Если он не работает, он отключен. Когда он терпит неудачу, вы должны увидеть что-то вроде:

    error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
    
  • Использование nmap :

    nmap --script ssl-enum-ciphers -p 443 myhostname.tld
    

    Он должен вывести ' SSLv3: No supported ciphers found '. Настройте для вашего имени хоста / порта.

  • Использование cipherscan . Clone / загрузить двоичный файл и выполнить его:

    ./cipherscan myhostname.tld
    

    Он должен not перечислять что-либо с SSLv3 в столбце «протоколы».

браузер Firefox

Откройте about:config , найдите security.tls.version.min и установите значение 1 . Затем перезапустите браузер, чтобы удалить все открытые SSL-соединения.

Firefox с версии 34 будет отключать SSLv3 по умолчанию и, следовательно, не требует никаких действий ( источник ). Однако, на момент написания, 33 только что выпущен и 34 установлен на 25 ноября.

Google Chrome (Linux)

Отредактируйте файл /usr/share/applications/google-chrome.desktop , например

sudo nano /usr/share/applications/google-chrome.desktop

Изменить все строки , начиная с Exec= , чтобы включить --ssl-version-min=tls1 .

например. строка типа

Exec=/usr/bin/google-chrome-stable %U

становится

Exec=/usr/bin/google-chrome-stable --ssl-version-min=tls1 %U

Затем убедитесь, что вы полностью закрываете браузер (приложения Chrome могут держать ваш браузер активным в фоновом режиме!).

Примечание. Возможно, вам придется повторить это обновление пакета google-chrome, перезаписав этот файл .desktop launcher. Браузер Google Chrome или Chromium с отключенным SSLv3 по-прежнему не объявлен на момент написания.

Apache HTTPD Server

Если вы используете веб-сервер Apache, который в настоящее время разрешает SSLv3, вам нужно будет отредактировать конфигурацию Apache. В системах Debian и Ubuntu файл /etc/apache2/mods-available/ssl.conf . В CentOS и Fedora файл находится /etc/httpd/conf.d/ssl.conf .Вам нужно будет добавить следующую строку в конфигурацию Apache с другими директивами SSL.

SSLProtocol All -SSLv2 -SSLv3

Это позволит использовать все протоколы, кроме SSLv2 и SSLv3.

Пока вы на нем, вы можете рассмотреть возможность улучшения конфигурации ciphersuite для вашего веб-сервера, как описано в сервере TLS от Mozilla руководство . Добавьте, например:

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLCompression          off
# Read up on HSTS before you enable it (recommended)
# Header add Strict-Transport-Security "max-age=15768000"

Затем проверьте правильность новой конфигурации (нет опечаток и т. д.):

sudo apache2ctl configtest

И перезапустите сервер, например.

sudo service apache2 restart

В CentOS и Fedora:

systemctl restart httpd

Дополнительная информация: документация Apache

Теперь протестируйте его: если ваш сайт общедоступен, протестируйте его, используя инструмент SSL Labs Qualys .

Сервер Nginx

Если вы используете Nginx, просто добавьте следующую строку в свою конфигурацию из других директив SSL:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Пока вы находитесь на нем, вы можете рассмотреть возможность улучшения конфигурации ciphersuite для вашего веб-сервера, как описано в сервере TLS от Mozilla руководство . Добавьте, например:

ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
# Read up on HSTS before you enable it (recommended)
# add_header Strict-Transport-Security max-age=15768000;

И перезапустите сервер, например.

sudo service nginx restart

Ссылка: Документация Nginx

Теперь протестируйте его: если ваш сайт доступен публично, его можно проверить, используя инструмент SSL Labs Qualys .

Веб-сервер Lighttpd

версии Lighttpd & gt; 1.4.28 поддерживают параметр конфигурации для отключения SSLv2 и v3. Выпуски Lighttpd до 1.4.28 позволяют отключить SSLv2 ТОЛЬКО. Обратите внимание, что Ubuntu 12.04 LTS и более ранняя установка в лучшем свете lighttpd v1.4.28, и поэтому для этих дистрибутивов недоступно простое исправление. Поэтому это исправление должно использоваться только для версий Ubuntu более 12.04.

Для Ubuntu версии 12.04 или Debian 6 обновленный пакет lighttpd доступен из репозитория openSUSE: Ссылка

Пакет предназначен для Debian 6 (сжатие), но работает также с 12.04 (точным)

Измените /etc/lighttpd/lighttpd.conf , чтобы добавить следующие строки после директивы ssl.engine = "enable"

ssl.use-sslv2          = "disable"
ssl.use-sslv3          = "disable"

Затем вы должны перезапустить службу lighttpd с помощью sudo service lighttpd restart и выполнить проверку подлинности ssl3, как описано в предыдущих разделах, чтобы убедиться, что изменение было успешно выполнено.

Взято из Ссылка .

Postfix SMTP

Для «оппортунистического SSL» (политика шифрования не применяется, а обычная также приемлема), вам ничего не нужно менять. Даже SSLv2 лучше обычного, поэтому, если вам нужно защитить свой сервер, вы все равно должны использовать режим «обязательный SSL».

Для уже настроенного режима «обязательный SSL» просто добавьте / измените параметр smtpd_tls_mandatory_protocols для входящего и smtp_tls_mandatory_protocols для исходящих подключений:

smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
smtp_tls_mandatory_protocols=!SSLv2,!SSLv3

Необязательно, если вы хотите отключить SSLv3 для оппортунистического шифрования (хотя это и не нужно, как объяснялось выше), сделайте так:

smtpd_tls_protocols=!SSLv2,!SSLv3
smtp_tls_protocols=!SSLv2,!SSLv3

и перезапустите Postfix:

sudo service postfix restart

Sendmail

(Неверное редактирование анонимным пользователем, мне не удобно с Sendmail, пожалуйста, проверьте.)

Эти параметры настроены в разделе LOCAL_CONFIG вашего sendmail.mc

LOCAL_CONFIG
O CipherList=HIGH
O ServerSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3 +SSL_OP_CIPHER_SERVER_PREFERENCE
O ClientSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3

Dovecot

В Dovecot v2.1 + добавьте следующее к вашему /etc/dovecot/local.conf (или новому файлу в /etc/dovecot/conf.d ):

ssl_protocols = !SSLv2 !SSLv3

и перезапустите Dovecot:

sudo service dovecot restart

Для более старых версий вам необходимо исправить исходный код .

Курьер-imap (imapd-ssl)

Courier-imap позволяет SSLv3 по умолчанию на Ubuntu 12.04 и других. Вы должны отключить его и вместо этого использовать STARTTLS, чтобы заставить TLS. Измените файл конфигурации /etc/courier/imapd-ssl , чтобы отобразить следующие изменения.

IMAPDSSLSTART=NO
IMAPDSTARTTLS=YES
IMAP_TLS_REQUIRED=1
TLS_PROTOCOL=TLS1
TLS_STARTTLS_PROTOCOL=TLS1
TLS_CIPHER_LIST="<take those from the Mozilla TLS Server guide!>"

HAProxy Server

SSL поддерживается в HAProxy & gt; = 1.5.

Отредактируйте файл /etc/haproxy.cfg и найдите строку bind . Добавить no-sslv3 . Например:

bind :443 ssl crt <crt> ciphers <ciphers> no-sslv3

Ссылка: HAProxy Documentation

OpenVPN

Появляется без изменений ( источник ).

  

OpenVPN использует TLSv1.0 или (с & gt; = 2.3.3), необязательно TLSv1.2 и, таким образом, не влияет на POODLE.

Кукольный

Puppet использует SSL через HTTPS, но он не используется клиентами «браузера», а только агенты Puppet, которые не уязвимы к показанному вектору атаки.Однако лучше всего отключить SSLv3.

Моя рекомендация - использовать stephenrjohnson / puppetmodule Модуль Puppet для настройки вашего мастера марионеток, в котором Я убил SSLv3 некоторое время назад.

    
ответ дан gertvdijk 14.10.2014 в 23:49
источник
4

Возможно, не для Ubuntu, но для того, чтобы обойти уязвимость Poodle в Node.js, вы можете установить secureOptions в require('constants').SSL_OP_NO_SSLv3 при создании сервера https или tls.

См. Ссылка для дополнительной информации

    
ответ дан 3rdEden 15.10.2014 в 08:59
0

«Исправление» для курьера отключает tls 1.1 и tls 1.2. Кажется, что не существует способа запуска курьера с tls 1.1 или выше. Проверка PCI на вашем сервере может вернуться с рекомендацией:

Настройте серверы SSL / TLS только для использования TLS 1.1 или TLS 1.2, если они поддерживаются. Настройте серверы SSL / TLS только для поддержки наборов шифров, которые не используют блочные шифры.

    
ответ дан PrgWiz 27.02.2015 в 14:45
-1

Так как уязвимость POODLE является конструктивным недостатком самого протокола, а не ошибкой реализации, патчей не будет. Единственный способ смягчить это - отключить SSLv3 на сервере apache. Добавьте ниже строки в ssl.conf и выполните изящный перезапуск apache.

SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
    
ответ дан Lal Krishna 15.10.2014 в 22:55

Ознакомьтесь с другими вопросами по меткам