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

DROWN официально: сканируем 12 клиентов, находим 23 уязвимых сервера

1 марта 2016 опубликован DROWN (CVE-2016-0800) - треть HTTPS-серверов в мире уязвима. Хроника реагирования за 8 часов: инвентаризация, 23 сервера с SSLv2, исправление.

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

Публичное раскрытие DROWN (CVE-2016-0800) 1 марта 2016 показало, что треть HTTPS-серверов в мире уязвима через SSLv2 на любом сервере с тем же ключом

Сегодня в 12:00 UTC исследователи опубликовали полный disclosure по DROWN. Мы знали, что это случится - в феврале проводили превентивную проверку по предупреждению из закрытого канала. Тогда прошлись по собственной инфраструктуре и части клиентов. Сегодня пришло время пройтись по всем двенадцати.

Официальные цифры в пресс-релизе выглядят неприятно: по оценке исследователей, 33% HTTPS-серверов в мире подвержены атаке. Механика: если хоть один сервер принимает SSLv2-соединения и использует тот же приватный ключ, что и TLS-сервер, - атакующий может с достаточным числом запросов расшифровать TLS-сессию. Тот самый «забытый почтовый сервер» из угла - полноценный вектор атаки на основной HTTPS.

Как выглядело утро

Публикация пришлась на первую половину дня. К 13:00 уже была полная картина по механике атаки, работающий PoC в academic-варианте и гора ссылок в профильных чатах. Клиенты начали писать примерно в то же время - кто-то сам прочитал, кому-то переслали коллеги.

Решили не ждать, пока поток вопросов станет неуправляемым, и запустили проверку по всем двенадцати клиентам сразу. Логика простая: лучше мы первые сообщим о проблеме с готовым планом исправления, чем клиент узнает из новостей и позвонит в панике.

Инвентаризация: что и как проверяли

Инструментарий - тот же, что и в феврале. Nmap с ssl-enum-ciphers по всем SSL-портам: 443, 8443, 465, 993, 995, 8080 где применимо. Параллельно - ansible-скрипт по серверам с ssh-доступом, который вытаскивает конфигурацию ssl_protocols из nginx и dovecot.

Порты выбраны не случайно. Веб на 443 обычно в порядке - его трогают чаще, конфигурация свежее. Почтовые порты - отдельная история: Dovecot и Postfix с дефолтными настройками образца 2011-2013 года, которые никто не пересматривал, потому что «почта работает, не трогай».

Полный прогон по двенадцати клиентам занял около двух часов - с учётом ручной проверки результатов и разбора пограничных случаев.

Что нашли

Итого 23 сервера с активным SSLv2. Распределение оказалось предсказуемым:

  • Почтовые серверы - 14 штук. Dovecot без явного указания ssl_protocols, Postfix с дефолтным smtpd_tls_protocols. Одни и те же настройки, скопированные из одного и того же мануала несколько лет назад.
  • Балансировщики и VPN-устройства - 5 штук. Железо с прошивками 2012-2014 года. Самая неудобная категория: обновить конфигурацию через web-интерфейс иногда недостаточно - протокол продолжает отвечать вне зависимости от настроек интерфейса.
  • Старые Apache и IIS - 4 штуки. Apache с httpd.conf без явного SSLProtocol, Windows Server 2003/2008 без registry-патча для отключения SSLv2.

Веб-серверы на nginx с явным ssl_protocols - в порядке почти везде. Февральская работа не пропала зря: несколько серверов, которые мы исправили тогда, сегодня показали чисто.

Восемь часов реагирования

13:00 - 15:00. Сканирование и сортировка результатов. Приоритет расставили по критичности: сначала серверы, где SSLv2 включён на том же IP и с тем же сертификатом, что и основной HTTPS - это максимальный риск по модели DROWN. Потом - серверы с тем же ключом на другом порту. Потом - всё остальное.

15:00 - 17:00. Исправление Linux-серверов. Для Dovecot: ssl_protocols = !SSLv2 !SSLv3 в 10-ssl.conf, reload. Для Postfix: smtpd_tls_protocols = !SSLv2,!SSLv3 в main.cf, reload. Для Apache: SSLProtocol all -SSLv2 -SSLv3 в конфиге виртуального хоста. Рестарт, проверка nmap, следующий сервер. Рутина, но рутина с дедлайном.

17:00 - 19:00. Железо. Три из пяти устройств закрыли обновлением прошивки или правкой конфигурации через CLI - там это работало корректно в отличие от web-интерфейса. Два устройства - тупик: вендор не выпустил обновление, и web-интерфейс врёт о состоянии SSLv2. Временное решение: ограничить доступ к этим устройствам на уровне firewall, поставить задачу вендору на обновление прошивки, зафиксировать как открытый риск.

19:00 - 21:00. Отчёты клиентам. Для каждого - что нашли, что исправили, что осталось открытым и почему, что нужно сделать с оборудованием. Не шаблон, а конкретика по каждой позиции.

Что это значит на практике

23 уязвимых сервера на 12 клиентах - это не катастрофа и не халтура с нашей стороны. Это нормальный срез реальной инфраструктуры, которая накапливалась годами. SSLv2 никто специально не включал - он просто оставался включённым по умолчанию там, где конфигурацию не трогали.

Характерная деталь: ни один из 23 серверов не был «главным» веб-сервером клиента. Все - второй, третий эшелон: почта, мониторинг, vpn, резервный балансировщик. Именно там настройки безопасности обновляют реже всего, и именно там DROWN находит себе место.

Полный технический аудит инфраструктуры включает проверку всех ssl-портов, не только 443. Сегодняшний день хорошо показал, почему это важно.

По двум устройствам с железом без обновления - ждём ответа от вендоров. Это открытые позиции, которые придётся закрыть отдельно.

Контакт

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

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