Отключение SSLv3 для уязвимости POODLE
Недавно была найдена уязвимость в SSL в протоколе 3.0 и имеет имя -POODLE .
Протокол SSL 3.0 делает возможным использование шифров в режиме CBC (CBC-mode), что позволяет человеку использовать атаку с использованием стеков padding-oracle. Эти атаки нацелены на шифры CBC, чтобы получить обычный текст из зашифрованной информации.
Для того, чтобы решить эту проблему, мы должны отключить SSLv3 для всех приложений которые использую данное шифрование. К сожалению нет никакого способа, чтобы выполнить данное исправление это для всего сервера сразу. Вам нужно будет редактировать каждый индивидуальный файл конфигурации. И я в своей теме «Отключение SSLv3 для уязвимости POODLE» расскажу как можно защитится от данной уязвимости и на готовых примерах покажу как этого добиться.
Отключения SSLv3
Большинство людей не отключают SSLv3, потому что они не используют SSLv3 соединения через SSL/TLS. А это не правильно и его нужно отключить принудительно до того как исправят данную уязвимость.
Тестирование (проверка) на использование SSLv3
Есть несколько способов чтобы определить, работает ли SSL с использованием SSLv3. Простой способ состоит в использовании клиента командной строки OpenSSL, выполните следующую команду:
# openssl s_client -connect linux-notes.org:443 -ssl3
И получим вывод:
CONNECTED(00000003) depth=3 /C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority verify error:num=19:self signed certificate in certificate chain verify return:0 --- Certificate chain 0 s:/description=Free SSL Cert apply URL: https://buy.wosign.com/free/CN=linux-notes.org i:/C=CN/O=WoSign CA Limited/CN=WoSign CA Free SSL Certificate G2 1 s:/C=CN/O=WoSign CA Limited/CN=WoSign CA Free SSL Certificate G2 i:/C=CN/O=WoSign CA Limited/CN=Certification Authority of WoSign 2 s:/C=CN/O=WoSign CA Limited/CN=Certification Authority of WoSign i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority 3 s:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority --- Server certificate -----BEGIN CERTIFICATE----- MIIE+DCCA+CgAwIBAgIQO6cNB4khKE+AtdpJnb+wkjANBgkqhkiG9w0BAQsFADBV 1fPUrqQHToex/ydRLeDQeK/vXrlEMQMuVgzbPQ== -----END CERTIFICATE----- subject=/description=Free SSL Cert apply URL: https://buy.wosign.com/free/CN=linux-notes.org issuer=/C=CN/O=WoSign CA Limited/CN=WoSign CA Free SSL Certificate G2 --- No client certificate CA names sent --- SSL handshake has read 7085 bytes and written 308 bytes --- New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : SSLv3 Cipher : DHE-RSA-AES256-SHA Session-ID: 07D1105D9D66491B07BFF48CCEBE74DD7F041CB785F925D8C250559AD409067F Session-ID-ctx: Master-Key: 5156660580D734635222A27C8492098A328020136FD50761C6FC426100F1B6F91BBD9D416E6DD009DBE9316529BDE1EB Key-Arg : None Start Time: 1433626802 Timeout : 7200 (sec) Verify return code: 0 (ok) ---
Не забудьте заменить linux-notes.com на имя вашего домена или IP-адрес, и порт 443 на любого альтернативный который может быть с использован для подключения по SSL. Проверьте выход для текста:
# routines:SSL3_READ_BYTES:sslv3 alert handshake failure
Видим:
-bash: routines:SSL3_READ_BYTES:sslv3: command not found
Если вы видите что данная служба не поддерживает SSLv3. Это безопасно от уязвимости. Как у меня в примере выше, был включен SSLv3, то стоит ее выключить.
Выключенный SSLv3 выглядит так:
CONNECTED(00000003) 33685:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:1145:SSL alert number 40 33685:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.20.2/src/ssl/s3_pkt.c:566:
Небольшой и удобный bash- скрипт для проверки poodle уязвимости:
#!/bin/bash ret=$(echo Q | timeout 5 openssl s_client -connect "${1-`hostname`}:${2-443}" -ssl3 2> /dev/null) if echo "${ret}" | grep -q 'Protocol.*SSLv3'; then if echo "${ret}" | grep -q 'Cipher.*0000'; then echo "SSL 3.0 disabled" else echo "SSL 3.0 enabled" fi else echo "SSL disabled or other error" fi
Думаю что все понятно.
Отключение SSLv3
К сожалению, нет простого способа сделать это. Так же, нет патча для установки и единственный способ решить эту проблему — отключить SSLv3 в любом приложении которые могут его использовать.
Уязвимость POODLE работает, только если браузер клиента и подключение сервера поддерживают SSLv3. Поэтому, отключив SSLv3 на вашей системе, вы также защиты своего клиента (ов) от данной уязвимости.
Отключение SSLv3 для Apache
Если вы работаете с веб-сервер Apache что в настоящее время позволяет использовать SSLv3, вам нужно будет изменить конфигурацию Apache.
На Debian и Ubuntu файл конфигурации лежит в/etc/apache2/mods-available/ssl.conf.
На CentOS/RedHat/Fedora файл конфигурации лежит в/etc/httpd/conf.d/ssl.conf.
Вам нужно будет добавить следующую строку в конфигурацию Apache с другими директивами SSL.
[...] SSLProtocol All -SSLv2 -SSLv3 SSLHonorCipherOrder on #Если вы предпочитаете не использовать RC4: #ssl_ciphers "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 !RC4"; # ssl_ciphers "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 +RC4 RC4"; [...]
Это позволит использовать все протоколы, кроме SSLv2 и SSLv3 (тоесть — SSLv1). Вы можете проверить ваши изменения конфигурации с помощью команды:
# apachectl configtest
Затем вам нужно будет перезапустить Apache.
В Ubuntu и Debian:
# service apache2 restart
В CentOS/RedHat/Fedora:
# systemctl restart httpd
Отключение SSLv3 для Apache on cPanel/WHM
Cpanel / WHM не позволяют редактировать файлы конфигурации Apache, и перезаписать большинство изменений, которые вносятся в них. Тем не менее, CPanel / WHM делет возможность конфигурирования SSL шифров для Apache на панели управления.
Для того, чтобы изменить шифров Apache, выполните следующие действия:
В WHM, введите Apache в поле поиска в левой боковой панели. Вы увидите конфигурацию Apache в списке меню. После нажатия на конфигурацию Apache, перейдите к глобальной конфигурации.
Пример этого показан ниже.
ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-SSLv3:-EXP:!kEDH
После сохранения страницы, вам будет предложено восстановить и перезапустить Apache. Изменения должны вступить в силу после того, как Apache был восстановлен заново.
Отключение SSLv3 для NGINX
Если вы работаете с веб-сервером NGINX, что в настоящее время тоже поддерживает использование SSLv3, необходимо изменить конфигурацию NGINX (nginx.conf). Вам нужно будет добавить следующую строку в ваш директивы сервера:
# vim /etc/nginx/nginx.conf
И прописать:
[...] ssl_session_cache shared:SSL:10m; ssl_session_timeout 5m; ssl on; ssl_certificate /etc/nginx/ssl/linux-notes.org.crt; ssl_certificate_key /etc/nginx/ssl/linux-notes.org.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_dhparam /etc/nginx/ssl/dhparam.pem; 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-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!aECDH:EDH-DSS-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:kEECDH+AES128:kEECDH:kEDH:kRSA+AES128:kEDH+3DES:!LOW:!SEED:!IDEA:!SRP:!SSLv2:!SSLv3:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:!RC4:RC4:EECDH+AESGCM:AES256+EECDH:AES256+EDH:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-DES-CBC3-SHA:EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:!3DES:!DSS:RC4-MD5:RC4-SHA:DES-CBC-SHA:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:EXP-RC4-MD5:EXP-DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:DES-CBC3-MD5:DHE-DSS-AES128-SHA:RC2-CBC-MD5:DES-CBC-SHA:DES-CBC-MD5:EXP-RC2-CBC-MD5:EXP-RC2-CBC-MD5:ECDH-ECDSA-RC4-SHA:ECDH-ECDSA-AES128-SHA:ECDH-ECDSA-AES256-SHA:ECDH-RSA-RC4-SHA:ECDH-RSA-AES128-SHA:ECDH-RSA-AES256-SHA:ECDHE-ECDSA-RC4-SHA:ECDHE-RSA-RC4-SHA:ECDH-ECDSA-DES-CBC3-SHA:ECDH-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:NULL-MD5:NULL-SHA:IDEA-CBC-SHA:EXP-ADH-RC4-MD5:ADH-RC4-MD5:EXP-ADH-DES-CBC-SHA:ADH-DES-CBC-SHA:ADH-DES-CBC3-SHA:KRB5-DES-CBC-SHA:KRB5-RC4-SHA:KRB5-IDEA-CBC-SHA:KRB5-DES-CBC-MD5:KRB5-DES-CBC3-MD5:KRB5-RC4-MD5:KRB5-IDEA-CBC-MD5:EXP-KRB5-DES-CBC-SHA:EXP-KRB5-RC2-CBC-SHA:EXP-KRB5-RC4-SHA:EXP-KRB5-DES-CBC-MD5:EXP-KRB5-RC2-CBC-MD5:EXP-KRB5-RC4-MD5'; keepalive_timeout 70; fastcgi_param SSL_VERIFIED $ssl_client_verify; fastcgi_param SSL_CLIENT_SERIAL $ssl_client_serial; fastcgi_param SSL_CLIENT_CERT $ssl_client_cert; fastcgi_param SSL_DN $ssl_client_s_dn; add_header Strict-Transport-Security max-age=15768000; [...]
Настройка параметров DHE.
# cd /etc/nginx/ssl/ && openssl dhparam -out dhparam.pem 2048
Мои готовые конфиги лежат на сайте.
Это приведет к отключению SSLv3 на NGINX. Если вы не в состоянии найти директиву сервера в nginx.conf, вы, можете найти файл конфигурации VirtualHost.
Вы также должны перезагрузить сервер NGINX:
# service nginx restart
Отключение SSLv3 для Hiawatha
Если вы используете веб-сервер Hiawatha, то скорее всего, что SSLv3 уже по умолчанию отключена. Но если по какой-то причине вы используете старую версию, вы можете использовать параметр MinSSLversion в hiawatha.conf:
[...] MinSSLversion = TLS1.0 # or TLS1.1 or TLS1.2 [...]
Затем перезагрузите Hiawatha.
Например, в Debian или Ubuntu:
# service hiawatha restart
Например, в CentOS/Fedora/RedHat:
# service hiawatha restart
Отключение SSLv3 для Postfix SMTP
Если ваша установка Postfix настроена на использования оппортунистического SSL, который означает, что шифрование не применяется и обычный текст принят, вам не нужно ничего менять. Однако, если вы работаете Postfix в режиме обязательного с использованием SSL, вы должны будете настроить конфигурацию и отразить следующие изменения:
[...] smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3 [...]
Отредактируем данную настрйку:
# vim /etc/postfix/main.cf
Это заставит Postfix SMTP не использовать SSLv3 или SSLv2. Вы также должны перезапустить Postfix:
# service postfix restart
Отключение SSLv3 для Dovecot
Это будет работать только с версией 2.1 и выше. Добавьте следующую строку в:
# vim /etc/dovecot/local.conf
или новый файл в:
# /etc/dovecot/conf.d/10-ssl.conf
И прописываем:
[...] ssl_protocols = !SSLv2 !SSLv3 [...]
Перезапускаем Dovecot:
# service dovecot restart
Если вы работаете с версией Dovecot меньше чем 2.1, вам нужно будет редактировать исходный код Dovecot.
Отключение SSLv3 для 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
Отключение SSLv3 для HAProxy
Для того, чтобы отключить SSLv3 в HAProxy, вы должны использовать HAProxy 1.5+, а SSL не поддерживается в более ранних версиях HAProxy.
Отредактируйте файл:
# vim /etc/haproxy.cfg
Найдите строку, которая начинается с привязки и относится к порту 443 (SSL). Добавьте эту строку с не-SSLv3.
Пример будет следующий:
[...] bind :443 ssl crt <crt> ciphers <ciphers> no-sslv3 [...]
Перезапускаем сервер HAproxy:
# service haproxy restart
Отключение SSLv3 для OpenVPN
На данный момент, OpenVPN не поддерживает SSLv3. Поэтому, он не подвержен данную уязвимость и никаких изменений в конфигурационных файлах делать не нужно.
Проверить ваш сайт на уязвимость, можно тут:
https://www.ssllabs.com/ssltest/index.html
Для примера, я свой сервер настроил достаточно безопасно, но хотя нужно кое-что доработать:
Отключение SSLv3 для уязвимости POODLE завершена.