Компания
37,17
рейтинг
20 октября 2014 в 09:25

Разное → Как защитить свой сервер от уязвимости POODLE SSLv3 перевод

Вводная информация


14 октября 2014 года в протоколе шифрования SSL версии 3 была выявлена уязвимость. Эта уязвимость, названная POODLE (Padding Oracle On Downgraded Legacy Encryption), позволяет злоумышленнику читать информацию, зашифрованную этой версией протокола, используя атаку man-in-the-middle.
Также SSLv3 является очень старой версией протокола, но тем не менее многие приложения поддерживают его и используют SSLv3 в случаях, когда недоступны другие более новые и лучшие варианты шифрования. Что важно, злоумышленник может нарочно требовать использования только SSLv3 на обоих сторонах соединения.
Уязвимости POODLE подвержены любые сервисы или клиенты, которые могут соединяться, используя SSLv3.
Более подробная информация по этой уязвимости опубликована здесь CVE-2014-3566.




Что такое уязвимость POODLE?


Этой уязвимости поддвержен SSL-протокол версии 3, который позволяет перехватить содержимое зашифрованное с помощью SSLv3.

Кто подвержен этой уязвимости?


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

Как это работает?


Если кратко, то уязвимость POODLE присутствует, потому что протокол SSLv3 некорректно проверяет содержимое, пересылаемое в зашифрованном виде.
Благодаря этому не происходит верификации со стороны получателя и атакующий может подменять данные и передавать к месту получения. При определенных условиях модифицированные данные могут быть приняты получателем без каких-либо предупреждений.
В среднем, каждый 256-й запрос будет принят получателем и позволит злоумышленнику расшифровать один байт. Это может быть повторено нужное количество раз. Любой злоумышленник, участвуя таким образом в пересылке данных с помощью этого протокола, сможет получить ключ к расшифровке данных за очень короткое время.

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


Должны быть предприняты действия, которые не позволят использовать SSLv3 ни в случае использования клиентских приложений, ни в случае серверных.
И серверы и клиенты должны отключить полностью поддержку SSLv3.
Проверить серверные приложения можно с помощью онлайн-сервиса: http://poodlebleed.com/.
Свой браузер на наличие уязвимости проверить можно здесь: https://www.poodletest.com/.

Как защитить популярные приложения


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

Firefox


В новой версии Firefox 33 эта уязвимость исключена. Но на всех остальных версиях следует произвести настройку браузера в about:config, установив параметр security.tls.version.min на значение “1”. Или с помощью расширения SSL Version Control.

Google Chome


Браузеры, созданные на базе Chromium, следует запускать с ключом “--ssl-version-min=tls1”

Internet Explorer


В настройках безопасности IE уберите галочку с параметра “SSLv3”.


Отключение SSLv3 в IE.

Safari


Разработчики веб-браузера Safari молниеносно отреагировали на эту проблему и выпустили обновление безопасности.

Веб-сервер Nginx


Для отключения SSLv3 в веб-сервере Nginx, следует найти параметр ssl_protocols. Он расположен в блоке server {} или http {}.
Конфигурационный файл Nging может быть расположен в разных директориях, в зависимости, от ОС или используемого дистрибутива на сервере. В основном, это
/usr/local/etc/nginx/nginx.conf во FreeBSD и
/etc/nginx/nginx.conf в Linux

Для отключения SSLv3, параметр ssl_protocols должен содержать похожие настройки:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Теперь следует дать команду серверу для применения изменений в конфигурационном файле:
# service nginx reload

Веб-сервер Apache


Отключить SSLv3 в веб-сервере Apache можно в параметре SSLProtocol, который используется при подключенном модуле mod_ssl.
Расположение конфигурационного файла, где находятся настройки модуля mod_ssl, так же могут и отличаются в зависимости от ОС и дистрибутива.
в Debian настройки расположены в файле /etc/apache2/mods-enabled/ssl.conf
в CentOS это может быть файл /etc/httpd/conf.d/ssl.conf
во FreeBSD — /usr/local/etc/apache22/httpd.conf

Если настройки SSL отсутствуют, следует добавить этот параметр.
Значение этого параметра должно содержать что-то типа этого:
SSLProtocol all -SSLv3 -SSLv2

После внесения изменений сохраните файл и перезагрузите Apache.

Сервер OpenVPN VPN


Все современные версии OpenVPN не поддерживают SSLv3. Данный сервис не подвержен этой уязвимости и никаких изменений в конфигурации делать не требуется.

Почтовый сервер Postfix


Если в параметрах Postfix настроено требование шифрования, это делается параметром
smtpd_tls_mandatory_protocols.

Этот параметр можно найти в основном конфигурационном файле Postfix
/etc/postfix/main.cf (Linux)
/usr/local/etc/postfix/main.cnf (FreeBSD)

Запретить использование шифрования SSLv3 для Postfix можно путем добавления значения “!SSLv3” в параметр, задающий возможные варианты шифрования:
smtpd_tls_mandatory_protocols=!SSLv2, !SSLv3

Сохраните конфигурационный файл и перезапустите Postfix:

Почтовый сервер Sendmail


Для отключения SSLv3 в почтовом сервере Sendmail следует открыть файл .mc, который расположен в директории /etc/mail/ и найти раздел LOCAL_CONFIG. В этом разделе поменять значение “+SSLv3” на “-SSLv3” у параметра SSLProtocol и добавить “!SSLv3” в SSLCipherSuite
SSLProtocol -ALL -SSLv2 -SSLv3 +TLSv1
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:!LOW:!SSLv2:!SSLv3

После этого пересоберите конфигурационный файл Sendmail и перезапустите его
# make install & make restart

IMAP и POP3 сервер Dovecot


Для отключения SSLv3 в Dovecot, потребуется внести изменения в параметр ssl_protocols. В зависимости от ОС или дистрибутива, этот параметр может находиться как в основном файле, так и в подключаемом:
/etc/dovecot/conf.d/10-ssl.conf (Linux)
/usr/local/etc/dovecot.conf

Отключите SSLv3:
ssl_protocols = !SSLv3 !SSLv2

Сохраните файл и перезапустите сервис.

Заключение


Если поддержка SSLv3 не отключена и даже если по умолчанию используется более сильное шифрование, POODLE уязвимость будет присутствовать и создавать потенциальную угрозу. Проверьте все свои сервисы, которые могут использовать SSL/TLS в любом виде и отключите поддержку SSLv3.
Автор: @vadim_s_sabinich Justin Ellingwood
FirstVDS
рейтинг 37,17

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

  • 0
    Разработчики веб-браузера Safari молниеносно отреагировали на эту проблему и выпустили обновление безопасности.


    Yosemite, однако, уязвим.
  • 0
    Спасибо за статью.

    Я тут вспомнил, что в свое время для openfire покупал ssl сертификат.
    Оказалось:
    Порт 5222 текстовый / TLS.
    Порт 5223 хоть и SSL, но при этом сам пакет OpenSSL не используется.
    Вместо OpenSSL там используется bouncycastle.
    Вот чего только не узнаешь.

  • +6
    # service nginx restart

    В большинстве случаев стоит делать service xxx reload, где это только возможно, чтобы не портить клиентам жизнь, а также не останавливать и не запускать всего демона целиком. По крайней мере, хотя бы если изменяется только конфигурация.

    Команда service является, грубо говоря, оберткой для скриптов из /etc/init.d, где опция restart обычно отправляет демону SIGTERM, после чего заново стартует процесс. Это верно по крайней мере для Debian, где в init-скрипте nginx используется дефолтный сигнал для остановки, и Ubuntu, где сигнал явно указан. У nginx SIGTERM повлечет за собой quick shutdown, при котором все соединения будут разорваны, и демон будет всеми силами пытаться умереть как можно быстрее. Плюс, ничего особо не изменилось, кроме одной строчки в конфиге, так что это тот самый случай, когда лучше сделать reload, ибо старые воркеры будут потихоньку умирать по мере завершения обработки запросов, а новые начнут запускаться уже с новой конфигурацией.
    • 0
      Да, это дельное замечание. Внес изменения в публикацию.
  • 0
    Рецепт для dovecot работает только с версии 2.1 и выше, для версий ниже 2.1 придется лезть в исходники.
  • 0
    Для Courier IMAP/POP3 (ну, мало ли, есть любители вроде меня):

    файлы /etc/courier/imapd-ssl и /etc/courier/pop3d-ssl:

    TLS_PROTOCOL="TLS1_1:TLS1:TLS1_2"
    TLS_STARTTLS_PROTOCOL="TLS1_1:TLS1:TLS1_2"
    TLS_CIPHER_LIST="!SSLv3:TLSv1:!SSLv2:HIGH:!LOW:!MEDIUM:!EXP:!NULL@STRENGTH"
    • +1
      В статье я остановился только на тех сервисах, которые пользуются бОльшей популярностью на наших серверах и/или входят в состав дисковых шаблонов с ISPmanager. Но Ваш комментарий будет полезен для любителей экзотики ;-)
  • +2
    Тут недавно открыл для себя рекомендации mozilla, для настройки SSL на серверах. В качестве сухой выдержки, максимальную защиту в ущерб некоторой совместимости дает следующий конфиг nginx:
    server {
        listen 443;
        ssl on;
    
        # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
        ssl_certificate /path/to/signed_cert_plus_intermediates;
        ssl_certificate_key /path/to/private_key;
        ssl_session_timeout 5m;
        ssl_session_cache shared:SSL:50m;
    
        # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
        ssl_dhparam /path/to/dhparam.pem;
    
        # Intermediate configuration. tweak to your needs.
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        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:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
        ssl_prefer_server_ciphers on;
     
        ssl_ecdh_curve secp384r1;
    
        # Enable this if your want HSTS (recommended)
        # add_header Strict-Transport-Security max-age=15768000;
     
        # OCSP Stapling ---
        # fetch OCSP records from URL in ssl_certificate and cache them
        ssl_stapling on;
        ssl_stapling_verify on;
        ## verify chain of trust of OCSP response using Root CA and Intermediate certs
        ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;
        resolver <IP DNS resolver>;
     
        ....
    }
    


    Если им следовать для постфикса, то у меня получилось что-то типа:
    smtpd_tls_security_level = may
    smtpd_tls_auth_only = yes
    smtpd_tls_mandatory_ciphers = high
    smtpd_tls_CApath = /etc/ssl/certs
    smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
    smtpd_tls_dh1024_param_file = /etc/postfix/dhparam.pem
    
    smtp_tls_security_level = may
    smtp_tls_note_starttls_offer = yes
    smtp_tls_loglevel = 1
    smtp_tls_mandatory_ciphers = high
    smtp_tls_CApath = /etc/ssl/certs
    smtp_tls_mandatory_protocols=!SSLv2,!SSLv3
    
    tls_high_cipherlist = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-S
    HA256: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-SHA
    384: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:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
    
  • 0
    Еще бы кто-нибудь рассказал 1С-никам, как теперь дружить с нашим TLS-only веб-сервером
  • +1
    Могу порекомендовать сервис SSL Server Test от Qualys: www.ssllabs.com/ssltest. Возможно, узнаете много нового про хорошие практики в настройке SSL.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разное