Назад | Перейти на главную страницу

Как исправить уязвимость 'застревания' в Apache (httpd)

Недавно была опубликована новая уязвимость в Diffie-Hellman, неофициально называемая «затор», для которой эта страница были собраны предложения о том, как противостоять уязвимости:

У нас есть три рекомендации по правильному развертыванию Diffie-Hellman для TLS:

  1. Отключите экспорт комплектов шифров. Несмотря на то, что современные браузеры больше не поддерживают экспортные комплекты, атаки FREAK и Logjam позволяют злоумышленнику-посреднику обмануть браузеры, заставив их использовать шифрование экспортного уровня, после чего TLS-соединение может быть расшифровано. Экспортные шифры - это пережиток политики эпохи 1990-х годов, которая препятствовала экспорту надежных криптографических протоколов из США. Никакие современные клиенты не полагаются на экспортные пакеты, и их отключение не имеет большого значения.
  2. Разверните (эфемерный) алгоритм Диффи-Хеллмана с эллиптической кривой (ECDHE). Обмен ключами Диффи-Хеллмана с эллиптической кривой (ECDH) позволяет избежать всех известных возможных криптоаналитических атак, и современные веб-браузеры теперь предпочитают ECDHE исходному конечному полю Диффи-Хеллмана. Алгоритмы дискретного журнала, которые мы использовали для атаки на стандартные группы Диффи-Хеллмана, не получают такого сильного преимущества от предварительных вычислений, и отдельные серверы не нуждаются в создании уникальных эллиптических кривых.
  3. Создайте сильную и уникальную группу Diffie Hellman. Несколько фиксированных групп используются миллионами серверов, что делает их оптимальной целью для предварительного вычисления и потенциального подслушивания. Администраторы должны создавать уникальные 2048-битные или более сильные группы Диффи-Хеллмана, используя «безопасные» простые числа для каждого веб-сайта или сервера.

Какие практические шаги мне следует предпринять для защиты моего сервера в соответствии с приведенными выше рекомендациями?

Из статья, которую вы связали, есть три рекомендуемых шага для защиты от этой уязвимости. В принципе, эти шаги применимы к любому программному обеспечению, которое вы можете использовать с SSL / TLS, но здесь мы рассмотрим конкретные шаги по их применению к Apache (httpd), поскольку это рассматриваемое программное обеспечение.

  1. Отключить экспорт комплектов шифров

Рассмотрение изменений конфигурации, которые мы внесем в п. 2. ниже (!EXPORT ближе к концу SSLCipherSuite строка, как мы отключим экспорт комплектов шифров)

  1. Развертывание (эфемерного) эллиптической кривой Диффи-Хеллмана (ECDHE)

Для этого вам нужно отредактировать несколько настроек в ваших файлах конфигурации Apache, а именно: SSLProtocol, SSLCipherSuite, SSLHonorCipherOrder иметь "лучшие практики" настройки. Достаточно чего-то вроде следующего:

SSLProtocol             all -SSLv2 -SSLv3

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-SHA256:AES256-SHA256: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

Примечание: относительно чего SSLCipherSuite настройки для использования, это всегда меняется, и рекомендуется обратиться к таким ресурсам, как вот этот чтобы проверить наличие последней рекомендованной конфигурации.

3. Создайте сильную и уникальную группу Диффи Хеллмана.

Для этого вы можете запустить

openssl dhparam -out dhparams.pem 2048.

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

Чтобы использовать эти вновь созданные dhparams в Apache из Документация Apache:

Чтобы сгенерировать пользовательские параметры DH, используйте команду openssl dhparam. В качестве альтернативы вы можете добавить следующее стандартные 1024-битные параметры DH из RFC 2409, раздел 6.2 в соответствующий файл SSLCertificateFile:

(курсив мой)

за которым следует стандартный 1024-битный параметр DH. Из этого мы можем сделать вывод, что настраиваемые параметры DH могут быть просто добавлены к соответствующему SSLCertificateFile обсуждаемый.

Для этого запустите что-то похожее на следующее:

cat /path/to/custom/dhparam >> /path/to/sslcertfile

В качестве альтернативы, согласно Подраздел Apache статьи, которую вы изначально связали, вы также можете указать созданный вами пользовательский файл dhparams, если вы предпочитаете не изменять сам файл сертификата, таким образом:

SSLOpenSSLConfCmd DHParameters "/path/to/dhparams.pem"

в зависимости от того, какие конфигурации Apache относятся к вашей конкретной реализации SSL / TLS - обычно в conf.d/ssl.confили conf.d/vhosts.conf но это будет отличаться в зависимости от того, как вы настроили Apache.

Стоит отметить, что согласно эта ссылка,

До Apache 2.4.7 параметр DH всегда был равен 1024 битам и не настраивался пользователем. Это было исправлено в mod_ssl 2.4.7, который Red Hat обратно портировал в свой дистрибутив RHEL 6 Apache 2.2 с httpd-2.2.15-32.el6.

В Debian Wheezy обновите apache2 до 2.2.22-13 + deb7u4 или новее и openssl до 1.0.1e-2 + deb7u17. Вышеупомянутый SSLCipherSuite не работает идеально, вместо этого используйте следующее в соответствии с этот блог:

SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384: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-DSS-AES128-SHA256:DHE-DSS-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:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA256:!DHE-RSA-CAMELLIA128-SHA:!DHE-RSA-CAMELLIA256-SHA

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

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

На основе патча Winni Neessen я опубликовал исправление для Apache / 2.2.22 (Debian Wheezy, возможно, также можно использовать в Ubuntu): https://flo.sh/debian-wheezy-apache2-logjam-fix/ - Спасибо. за ваш отзыв.

Вместо того чтобы идти по сложному маршруту, описанному выше, рассмотрите переход на nginx в качестве основного программного обеспечения веб-сервера (а не только кеширования или прокси). Очевидно, что с точки зрения безопасности он больше соответствует текущим стандартам, чем старые механизмы apache. Используя репозиторий nginx, он дает вам более современный и стабильный движок веб-сервера, чем apache.

Я полностью переключился. Сэкономил мне много времени на решение проблем, связанных с TLS, и - для наших конфигураций - он также освободил много оперативной памяти за один раз. Фактически, я нашел использование nginx удивительно простым и понятным по сравнению с мириадами сложностей конфигурации httpd / apache, к которым я привык. Может быть, дело вкуса, я достаточно свободно владел httpd / apache rewrite / config / maintenance до того, как обратился, и это было проще, чем я ожидал. Соответствующая свежая информация о конфигурации nginx доступна в Интернете, а его база пользователей огромна, очень активна и удобна для поддержки. https://news.netcraft.com/wp-content/uploads/2018/11/wpid-wss-top-1m-share.png