ADG Оставить заявку
Блог Информационная безопасность 5 мин чтения

POODLE (CVE-2014-3566): SSLv3 отключаем везде, без исключений

14 октября Google опубликовал POODLE - атаку на SSLv3. К вечеру отключили протокол на всех серверах. Единственная проблема - IE6, который без SSLv3 не умеет в HTTPS.

Контекст момента

14 октября 2014 команда Google опубликовала CVE-2014-3566 (POODLE) - атаку на протокол SSLv3, позволяющую расшифровывать зашифрованный трафик; единственная защита - полный отказ от SSLv3

14 октября вышла публикация от Google: CVE-2014-3566, POODLE - Padding Oracle On Downgraded Legacy Encryption. Атака на SSLv3, которая позволяет расшифровать зашифрованный трафик при наличии позиции man-in-the-middle. Не теоретически - практически, с рабочим PoC.

Реакция у нас была похожа на Shellshock: сначала прочитали, потом быстро оценили масштаб, потом начали отключать.

Что такое POODLE и почему это серьёзно

SSLv3 - протокол 1996 года. TLS 1.0, 1.1, 1.2 давно пришли ему на смену. Проблема в том, что SSLv3 до сих пор включён на большинстве серверов и браузеров как запасной вариант - на случай если клиент и сервер не договорятся о более новом протоколе.

Атака работает так: злоумышленник в роли посредника принудительно инициирует fallback до SSLv3 (это называется protocol downgrade), после чего эксплуатирует структурный дефект блочного шифрования в CBC-режиме. SSLv3 не проверяет содержимое padding-байт - это позволяет с помощью серии запросов по одному байту восстановить открытый текст. Классика padding oracle.

Патча нет. Не в том смысле, что «ещё не вышел» - а в том смысле, что SSLv3 принципиально дырявый протокол. Не конкретная реализация, не конкретная библиотека - сам протокол. Единственное исправление - отключить SSLv3 полностью.

Как отключали

У нас на тот момент nginx и Apache на клиентских серверах - всё через managed-поддержку. После августовского прохода по SSL-конфигурациям SSLv3 на части серверов уже был отключён, но не везде.

На nginx директива простая:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

SSLv3 просто не упоминается - он не включается. Перезапуск, проверка через openssl s_client -ssl3:

openssl s_client -ssl3 -connect example.com:443

Должно вернуть handshake failure. Если вернуло успешное рукопожатие - SSLv3 ещё активен.

На Apache:

SSLProtocol all -SSLv2 -SSLv3

Перезапуск apache2/httpd, та же проверка.

Прошлись по всем серверам за несколько часов. Там, где конфигурации были унифицированы через Ansible, ушло быстро - одно изменение в шаблоне, прогон по всем хостам. Где конфиги были «ручные» - чуть дольше, но к вечеру закрыли.

Где всё осложнилось: IE6

Вот тут началось неприятное. SSLv3 - это не просто «старый протокол, никто не пользуется». Это родной протокол Internet Explorer 6, который по умолчанию не умеет ничего новее. IE6 на Windows XP - TLS 1.0 там есть, но отключён по умолчанию. SSLv3 - включён. При отключении SSLv3 на сервере IE6 банально не может открыть HTTPS-сайт.

У нескольких наших клиентов IE6 в статистике - не ноль. Не большой процент, но не ноль. Преимущественно корпоративные пользователи с зафиксированным образом Windows XP, который никто не обновляет по политике «работает - не трогай».

Разговор с клиентами был примерно такой: «SSLv3 нужно отключить, потому что атака реальная и патча не существует. При этом пользователи на IE6 потеряют доступ к HTTPS». Двое из трёх сказали «отключайте, мы разберёмся с IE6 отдельно». Один попросил подождать несколько дней, пока не уточнит у своего IT-отдела, сколько именно машин затронуто и можно ли им включить TLS 1.0 вручную.

Включить TLS 1.0 в IE6 можно через реестр или через настройки Internet Explorer - «Свойства браузера» - «Дополнительно» - «Безопасность» - «Использовать TLS 1.0». Технически это решает проблему. Практически - у корпоративного клиента с сотней машин это означает либо массовое изменение групповой политики, либо обход каждой машины.

Что думаем про это

Честно говоря, POODLE вызвал меньше паники, чем Shellshock, при том что технически это тоже критическая проблема. Возможно, потому что «отключить протокол» - это понятная и конечная операция, в отличие от «найти все CGI-скрипты на всех серверах». Один конфиг-параметр, перезапуск, готово.

Но история с IE6 напоминает, что безопасность часто упирается не в технические ограничения, а в пользовательскую базу. С технической точки зрения SSLv3 мёртв - убить его элементарно. С операционной - у части клиентов это значит «нужно что-то делать с несколькими десятками рабочих станций прямо сейчас».

После августовского прохода по SSL мы уже знали, что IE6 и Windows XP - это живая проблема у части клиентов. Тогда отключение TLSv1.0 тоже задели именно из-за них. Повторяется паттерн: самое сложное в Security Hardening - не правка конфига на сервере, а обработка хвостов на клиентской стороне.

Текущий статус

На всех серверах, где клиенты дали добро, SSLv3 отключён. На одном сервере пока ждём ответа по IE6. Проверка через ssllabs показывает «This server is not vulnerable to the POODLE attack» - хороший индикатор.

Сервер, где IE6-вопрос ещё открыт, пока держим SSLv3 включённым - это осознанное временное решение, не упущение. Дедлайн на решение по IE6 поставили на следующую неделю: либо мигрируем браузер, либо принимаем риск с документированным обоснованием.

Про то, как дальше разворачивается история с IE6 у этого клиента - отдельный разговор.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.