Атака Sweet32¶
Атака Sweet32 — это атака по стороннему каналу, направленная на компрометацию симметричных блочных шифров с размером блока 64 бита, работающих в режиме сцепления блоков (CBC). Атака позволяет злоумышленнику, имеющему возможность перехватывать и инжектировать зашифрованный трафик, восстановить содержимое сеансовых cookie или других секретных данных, передаваемых по протоколам HTTPS и OpenVPN. Уязвимость была публично раскрыта 24 августа 2016 года исследователями Кираном Паттерсоном (Kieran Paterson) и Юлианом Вальде (Julian Walde) из компании INRIA (Франция) и впоследствии получила идентификатор CVE-2016-2183 (для протокола SSL/TLS) и CVE-2016-6329 (для OpenVPN).
¶История
¶Предпосылки
Атака Sweet32 относится к классу атак, известных как «атаки на день рождения» (birthday attacks), которые эксплуатируют парадокс дней рождения в криптографии. Суть парадокса заключается в том, что вероятность коллизии (совпадения) двух случайных значений растёт быстрее, чем интуитивно ожидается. Для блочного шифра с размером блока n бит коллизия в зашифрованном тексте возникает в среднем после обработки примерно 2<sup>n/2</sup> блоков. Для 64-битного блока это значение составляет около 2<sup>32</sup> блоков, или примерно 32 гигабайта данных. При достаточно высокой скорости передачи данных (например, в корпоративных сетях или при использовании VPN) такой объём может быть накоплен в течение нескольких часов.
¶Открытие и публикация
Исследователи из INRIA, работавшие над анализом безопасности протоколов VPN, обнаружили, что OpenVPN, использующий 64-битные шифры (например, Blowfish или 3DES), может быть атакован через сбор статистики коллизий. В ходе экспериментов они продемонстрировали, что при активном перехвате трафика и инжекции собственных запросов (например, через внедрение JavaScript-кода на веб-страницу) можно заставить браузер жертвы генерировать большое количество зашифрованных запросов, содержащих фиксированные секретные данные (например, cookie). После накопления достаточного числа коллизий злоумышленник может восстановить исходное содержимое cookie, используя метод «встречи посередине» (meet-in-the-middle) или путём анализа разности между коллизиями.
24 августа 2016 года исследователи опубликовали детали атаки, а также присвоили ей кодовое название Sweet32 (отсылка к 32-битному ключу, который использовался в некоторых реализациях, но фактически атака связана с 64-битным блоком). В тот же день были выпущены патчи для OpenSSL (версия 1.0.2h, 1.0.1t) и OpenVPN (версия 2.3.12), которые отключали поддержку 64-битных шифров по умолчанию.
¶Механизм атаки
¶Условия для успешной атаки
Для проведения атаки Sweet32 необходимо выполнение следующих условий:
- Использование блочного шифра с размером блока 64 бита (например, Blowfish, 3DES, IDEA, CAST-128).
- Режим работы шифра — CBC (Cipher Block Chaining) или аналогичный, где коллизии в зашифрованном тексте могут быть использованы для восстановления открытого текста.
- Возможность злоумышленника перехватывать и инжектировать трафик (например, через атаку «человек посередине» (MITM) в незащищённой сети Wi-Fi или через вредоносное ПО на стороне клиента).
- Возможность заставить жертву генерировать большое количество зашифрованных запросов (например, путём внедрения JavaScript-кода, который каждые несколько миллисекунд отправляет запросы к целевому сайту).
¶Этапы атаки
- Сбор данных: Злоумышленник перехватывает зашифрованный трафик между клиентом и сервером. Для ускорения процесса он может инжектировать в веб-страницу жертвы скрипт, который многократно отправляет запросы к целевому сайту, содержащие фиксированное значение (например, сеансовый cookie). Каждый запрос шифруется с использованием одного и того же ключа сессии.
- Накопление коллизий: По мере передачи большого объёма данных (более 2<sup>32</sup> блоков, то есть более 32 ГБ) с высокой вероятностью возникают коллизии — два разных открытых текста, зашифрованных одним и тем же ключом, дают одинаковый зашифрованный блок. Злоумышленник записывает все зашифрованные блоки и ищет совпадения.
- Восстановление секрета: Если коллизия обнаружена, злоумышленник знает, что два разных открытых текста (например, два разных запроса, содержащих cookie) дали одинаковый шифротекст. Используя свойства режима CBC, он может вычислить разность между этими открытыми текстами, а затем, зная один из них (например, через инжекцию известного значения), восстановить второй. В случае cookie злоумышленник получает полное значение сеансового токена.
¶Практическая реализация
В лабораторных условиях атака Sweet32 была продемонстрирована на реальных системах. Для восстановления 16-байтового cookie (128 бит) требовалось около 2<sup>32</sup> запросов, что при скорости 1 Гбит/с занимало примерно 6–8 часов. При более низкой скорости (например, 100 Мбит/с) время увеличивалось до нескольких суток. Однако в корпоративных сетях с высокой пропускной способностью (10 Гбит/с и выше) атака могла быть выполнена за десятки минут.
¶Уязвимые протоколы и реализации
¶Протоколы
- SSL/TLS: Атака затрагивает все версии протокола (SSL 3.0, TLS 1.0, 1.1, 1.2), если в наборе шифров присутствуют 64-битные блочные шифры. В TLS 1.3 (опубликован в 2018 году) поддержка таких шифров была удалена.
- OpenVPN: Атака применима к OpenVPN при использовании шифров Blowfish (по умолчанию в версиях до 2.3.12) или 3DES.
- IPsec: Некоторые реализации IPsec с 64-битными шифрами также были уязвимы, хотя практическая демонстрация не проводилась.
¶Программное обеспечение
- OpenSSL: Версии до 1.0.2h (для 1.0.2) и 1.0.1t (для 1.0.1) по умолчанию поддерживали 64-битные шифры.
- OpenVPN: Версии до 2.3.12 использовали Blowfish в качестве алгоритма по умолчанию.
- GnuTLS: Версии до 3.4.12 также были уязвимы.
- NSS (Network Security Services): Используется в Firefox и других продуктах Mozilla; уязвимость была устранена в версии 3.26.
¶Меры противодействия
¶Обновление программного обеспечения
Основной мерой защиты является отключение поддержки 64-битных блочных шифров. После публикации атаки все основные поставщики программного обеспечения выпустили обновления:
- OpenSSL: В версиях 1.0.2h и 1.0.1t 64-битные шифры были помечены как «слабые» и отключены по умолчанию.
- OpenVPN: В версии 2.3.12 алгоритм Blowfish был заменён на AES-256-GCM в качестве шифра по умолчанию.
- Браузеры: Google Chrome, Mozilla Firefox и Microsoft Edge вскоре после публикации атаки перестали поддерживать 64-битные шифры на стороне клиента.
¶Рекомендации по настройке
- Использовать только шифры с размером блока 128 бит (AES) или более.
- Отключить поддержку 3DES, Blowfish, IDEA, CAST-128 и других 64-битных алгоритмов на стороне сервера.
- Для OpenVPN явно указать в конфигурационном файле
cipher AES-256-GCM. - Для веб-серверов (Apache, Nginx) настроить список разрешённых шифров, исключив все 64-битные.
¶Ограничение объёма передаваемых данных
Если отключение 64-битных шифров невозможно (например, из-за совместимости со старым оборудованием), можно ограничить максимальный объём данных, передаваемых за одну сессию, до 2<sup>32</sup> блоков (32 ГБ). Это снижает вероятность коллизии, но не устраняет её полностью.
¶Критика и ограничения
¶Практическая сложность
Хотя атака Sweet32 была теоретически обоснована и продемонстрирована в лабораторных условиях, её практическая реализация в реальных сетях сопряжена с рядом трудностей:
- Необходимость большого объёма данных: Для успешной атаки требуется передача десятков гигабайт трафика, что в обычных веб-сессиях (например, при просмотре сайтов) маловероятно. Атака эффективна только в сценариях, где злоумышленник может активно генерировать трафик (например, через внедрение JavaScript).
- Требование к пропускной способности: При низкой скорости сети (менее 100 Мбит/с) время атаки может превышать несколько суток, что делает её нецелесообразной.
- Необходимость MITM-позиции: Злоумышленник должен находиться между клиентом и сервером, что в современных сетях (с использованием HSTS и HPKP) затруднено.
¶Альтернативные атаки
Sweet32 не является единственной атакой на 64-битные шифры. Ранее были известны атаки на основе коллизий (например, атака на CBC в режиме «счётчика»), но Sweet32 стала первой, которая продемонстрировала практическую возможность восстановления cookie в реальных условиях. После её публикации интерес к 64-битным шифрам резко снизился, и они были выведены из употребления.
¶Влияние на индустрию
Атака Sweet32 ускорила процесс отказа от устаревших криптографических алгоритмов. К 2017 году большинство крупных веб-сайтов и VPN-сервисов перестали поддерживать 3DES и Blowfish. В спецификации TLS 1.3 (RFC 8446, 2018 год) 64-битные шифры были полностью исключены. В OpenVPN версии 2.4 и выше AES-256-GCM стал единственным рекомендуемым шифром.
¶Источники
- CVE-2016-2183 (SSL/TLS) и CVE-2016-6329 (OpenVPN).
- Публикация исследователей INRIA: «Sweet32: Birthday attacks on 64-bit block ciphers in TLS and OpenVPN» (2016).
- Документация OpenSSL 1.0.2h (2016).
- RFC 8446 «The Transport Layer Security (TLS) Protocol Version 1.3» (2018).
