На прошлой неделе стало известно о критической уязвимости последнего из линейки протоколов SSL — SSLv3. В двух словах, злоумышленник может встроиться между принимающей и передающей стороной, использующей защищенный канал с шифрованием по протоколу TLS, форсировать использование SSLv3, а затем применить атаку по вектору BEAST. Это опасно тем, что сводит на нет использование защищенного соединения и позволяет узнать зашифрованные данные (например, cookie).
Масштаб бедствия
По данным NetCraft только 3% систем полностью защищены, остальные 97% потенциально уязвимы.
Техническая информация
Полная техническая информация доступна в PDF, и сопутствующая информация о проблеме — CVE-2014-3566.
Для осуществления атаки необходимо, чтобы достаточно время было доступно некоторая неизменная часть HTTP-запроса (например, содержащая cookie): сервер продолжал принимать ранее отправленный запрос как валидный. Это достигается достаточно большим временем жизни cookie (или любого другого авторизационного ключа), в течение которого будет осуществлена атака. Если время жизни cookie или авторизационного ключа меньше времени, необходимого для атаки, это сводит на нет ее эффективность (перехваченный единожды зашифрованный пакет нельзя расшифровать за время жизни содержащейся в нем информации).
Однако для проведения атаки необходимо не так много времени: 1 байт данных можно расшифровать, максимум, за 256 запросов. Если принять длину cookie за 32 байта, и ограничить мощность атака 1000 запросами в минуту, то потребуется около 4 минут, чтобы полностью взломать секретную информацию. Увеличение длины секретного ключа до 256 символов (например, уникальный ключ и уникальное значение cookie) и уменьшение времени жизни неактивной cookie (например, до 15 минут), а также привязка cookie к одному IP позволяют свести на нет эффективность атаки: потребуется 65 тысяч запросов, которые атакующий будет не в состоянии провести за 15 минут.
Предотвращение угрозы
Есть и более простой способ: переход на TLS без возможности использовать SSL любых версий. К сожалению, некоторые браузеры (например, Internet Explorer 6 с настройками по умолчанию, хотя есть возможность его включить) или плагины (например, Java 6) не поддерживают TLS, поэтому сайт для них может стать полностью недоступным.
Для Apache в конфигурацию нужно добавить в конфигурацию директиву SSLProtocol All -SSLv2 -SSLv3
(либо дополнить ее -SSLv3
), потом перезагрузить Apache.
Для nginx необходимо проверить директиву ssl_protocols
и исключить из нее все упоминания SSL (например, следующим образом: ssl_protocols TLSv1 TLSv1.1 TLVv1.2;
). После этого перезагрузить nginx.
Для пользователей достаточно зайти в настройки браузера и отключить использование SSL всех версий.