Слабые cipher suites: как найти и отключить небезопасные шифры TLS
Слабые cipher suites: как найти и отключить небезопасные шифры TLS
Cipher suite — набор криптографических алгоритмов, который клиент и сервер согласуют во время TLS-handshake: обмен ключами, аутентификация, симметричное шифрование, MAC. Устаревшие наборы (RC4, 3DES, EXPORT, NULL, MD5) снижают оценку SSL Labs до B или F, делают сайт уязвимым к атакам POODLE, BEAST, SWEET32, и являются провалом PCI DSS. Разберём, как найти слабые шифры и заменить их на современный safe-профиль.
Что такое «слабый» cipher suite
Cipher suite в TLS 1.2 имеет вид: ECDHE-RSA-AES128-GCM-SHA256, что означает:
- ECDHE — обмен ключами (forward secrecy).
- RSA — аутентификация сервера.
- AES128-GCM — симметричный шифр.
- SHA256 — хеш для MAC.
«Слабым» считается набор, у которого хоть один компонент устарел:
- Обмен ключами без forward secrecy: RSA key exchange (нет ECDHE/DHE).
- Старые шифры: RC4, 3DES, DES, EXPORT-grade, NULL (без шифрования).
- Слабые хеши: MD5, SHA1 в MAC.
- Блочные шифры с CBC подвержены padding oracle атакам (BEAST, Lucky13).
- Размер ключа: ключи меньше 128 бит считаются недостаточными.
Известные атаки на слабые шифры
- POODLE (2014): атака на SSLv3 с CBC. Решение — отключить SSLv3.
- SWEET32 (2016): коллизии в 64-bit блочных шифрах (3DES, Blowfish). Решение — отключить 3DES.
- RC4 biases (2013-2015): восстановление открытого текста из повторяющихся RC4-шифрованных сообщений. Решение — отключить RC4.
- BEAST (2011): атака на CBC в TLS 1.0. Решение — TLS 1.2+ с AEAD.
- FREAK (2015), Logjam (2015): downgrade-атаки на EXPORT-grade. Решение — отключить EXPORT.
- ROBOT (2017): восстановление RSA-ключа через padding oracle. Решение — отключить RSA key exchange.
TLS 1.3 (см. TLS 1.3 vs 1.2) изначально исключает все уязвимые наборы. Проблема только в TLS 1.2 и ниже.
Как проверить свои cipher suites
nmap:
nmap --script ssl-enum-ciphers -p 443 example.com
Вывод покажет все поддерживаемые cipher suites по версиям TLS с пометками «weak» рядом с проблемными.
testssl.sh:
docker run --rm -ti drwetter/testssl.sh example.com
Онлайн: SSL Checker enterno.io, SSL Labs, Mozilla Observatory.
Mozilla профили: Modern, Intermediate, Old
Mozilla поддерживает три рекомендованных профиля:
- Modern: TLS 1.3 only, совместимо с 90% клиентов. Для API документацию и современных сервисов.
- Intermediate (рекомендуется): TLS 1.2 + 1.3, совместимо с 99% клиентов, без слабых шифров.
- Old: TLS 1.0+, для legacy (Windows XP, старые Android). Избегать.
Генератор конфигов: ssl-config.mozilla.org — выбираете сервер, профиль, версии OpenSSL, получаете готовый кусок конфига.
Безопасная конфигурация nginx (Intermediate)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:\
ECDHE-RSA-AES128-GCM-SHA256:\
ECDHE-ECDSA-AES256-GCM-SHA384:\
ECDHE-RSA-AES256-GCM-SHA384:\
ECDHE-ECDSA-CHACHA20-POLY1305:\
ECDHE-RSA-CHACHA20-POLY1305:\
DHE-RSA-AES128-GCM-SHA256:\
DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# TLS 1.3 cipher suites (OpenSSL 1.1.1+)
ssl_conf_command Ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256;
# Forward secrecy parameters
ssl_ecdh_curve X25519:prime256v1:secp384r1;
Все эти шифры — AEAD (Authenticated Encryption with Associated Data), они не уязвимы к padding oracle атакам. Блочных CBC-шифров нет.
Apache (Intermediate профиль)
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
Что именно отключить
Явный черный список OpenSSL:
!aNULL — без аутентификации
!eNULL — без шифрования
!EXPORT — export-grade (40/56 бит)
!DES — DES
!3DES — 3DES (уязвим к SWEET32)
!RC4 — RC4 (известные атаки)
!MD5 — MD5 (коллизии)
!PSK — pre-shared keys (если не используете)
!SRP — редкий, уязвим
!CAMELLIA — опционально, предпочитайте AES
В современных дистрибутивах эти шифры уже отключены в OpenSSL на этапе компиляции. Но всё равно полезно указать явно.
PCI DSS и регуляторные требования
PCI DSS 4.0 (с 2024 года):
- TLS 1.0 и 1.1 запрещены.
- SSLv2 / SSLv3 запрещены.
- Слабые шифры (RC4, 3DES, MD5) запрещены.
- Регулярный vulnerability scan — обязательное требование (SAQ A, SAQ D).
Несоответствие — риск потери possibility принимать платёжные карты.
Проверка после изменений
nginx -t && systemctl reload nginx.- SSL Checker enterno.io — оценка A или A+.
- SSL Labs — отсутствие «weak ciphers», forward secrecy «Yes», HSTS, grade A+.
- Протестируйте совместимость со старыми клиентами (iOS 12, Android 7, Windows 10).
- Мониторьте через Enterno.io Monitors — alert если оценка упадёт после деплоя.
Часто задаваемые вопросы
Нужно ли перечислять TLS 1.3 cipher suites в ssl_ciphers?
Нет. TLS 1.3 использует отдельную директиву (ssl_conf_command Ciphersuites в nginx с OpenSSL 1.1.1+). Настройки ssl_ciphers применяются только к TLS 1.2 и ниже.
Что делать, если старый клиент не поддерживает современные шифры?
Если это редкий edge case — игнорируйте. Если много легаси-клиентов — используйте Mozilla Old профиль временно, мигрируйте клиентов, потом ужесточайте.
ChaCha20 лучше, чем AES-GCM?
На CPU с аппаратным AES (AES-NI) AES-GCM быстрее. На мобильных без AES-NI (старые ARM) ChaCha20 быстрее. Порядок ECDHE-RSA-CHACHA20-POLY1305 перед AES в ssl_ciphers даёт мобильным преимущество.
Зачем отключать SSL session tickets в TLS 1.2?
Session tickets шифруются ключом сервера, который редко ротируется — это ослабляет forward secrecy. В TLS 1.3 механизм переработан и безопасен. В 1.2 — либо ротируйте ключ часто, либо отключите (ssl_session_tickets off;).
Заключение
Слабые cipher suites — наследие старых серверных шаблонов, которые «работают, не трогай». Обновить конфиг до Mozilla Intermediate — 10 минут работы и годы защиты от новых атак. Проверьте текущую конфигурацию через SSL Checker enterno.io и защитите от регрессии через Monitors. Связанные темы: миграция на TLS 1.3, HSTS.
Mozilla SSL Config — ssl-config.mozilla.org. TLS 1.2 cipher suites — RFC 5246. NIST рекомендации — SP 800-52 Rev 2.
Проверьте ваш сайт прямо сейчас
Проверить →