Атака SWEET32: Исследователи обнаружили новый способ взлома шифров 3DES и Blowfish
Исследователи информационной безопасности Картикеян Баргаван (Karthikeyan Bhargavan) и Гаетан Лоран (Gaëtan Leuren) разработали атаку на шифры 3DES и Blowfish. Например, с ее помощью можно получить использующиеся для аутентификации cookie из зашифрованного 3DES HTTPS-трафика, а также восстанавливать имена пользователей и пароли из зашифрованного с помощью Blowfish трафика, передаваемого через VPN.
Атака, которая получила название SWEET32, посвящен отдельный сайт, ее подробности и демо-видео исследователи планируют представить на конференции ACM Conference on Computer and Communications Security, которая в следующем месяце пройдет в Австрии. Мы собрали известную на данный момент информацию в своем материале.
В чем проблема
Криптографические протоколы вроде TLS, SSH, IPsec и OpenVPN используют алгоритмы блочного шифрования (AES, Triple-DES, Blowfish). Таким образом обеспечивается шифрование передаваемых между клиентом и сервером данных. Данные при этом разбиваются на блоки фиксированной длины, каждый из которых шифруется отдельно. Более старые шифры вроде Triple-DES и Blowfish используют размер блока равный 64 битам, а AES использует размер блока 128 бит.
Короткая длина блока делает шифр уязвимым к «атакам дня рождения». Исследователи заявляют о том, что подобные атаки встречаются для 64-битных шифров протоколов TLS и OpenVPN. Подобные алгоритмы шифрования используются огромным количеством ресурсов в интернете.
SWEET32 — это атака поиска коллизий в режиме сцепления блоков с использованием обратной связи CBC. Например, злоумышленник, который может мониторить долго существующие Triple-DES HTTPS-соединения между браузером и сайтом, имеет возможность восстановить HTTP-cookies — для этого нужно будет сохранить 785 гигабайт трафика.
Перехват защищенного трафика
На практике это позволяет расшифровывать HTTPS-соединения — при условии, что токен аутентификации передается в каждом запросе. Благодаря тому, что возможно предугадать содержание заголовков сообщений (или наличию возможности их контроля) злоумышленник может сгенерировать большое число запросов с некоторым количеством заранее предсказуемых данных в ответах и, в результате, попытаться расшифровать нужные сессии и узнать токен.
В ходе PoC-атаки исследователям удалось сделать это меньше чем за два дня с помощью специального JavaScript-кода для генерации трафика.
С точки зрения вычислительной сложности атака SWEET32 сравнима с недавними атаками на шифр RC4. Кроме того, исследователям удалось осуществить похожие атаки на VPN-сессии, использующие 64-битные шифры — к примеру, на практике эта ситуация может встретиться в случае применения OpenVPN, который настроен на использование Blowfish.
Насколько все серьезно
Важным требованием для осуществления атаки является необходимость отправки большого количества запросов с помощью одного и того же TLS-соединения — это является серьезным сдерживающим фактором для практического проведения подобных атак. Таким образом, атакующий должен найти клиента и сервер, которые не только общаются, например, с помощью Triple-DES, но и обмениваются большим количеством HTTP-запросов внутри одного TLS-соединения без выпуска новых ключей.
Такая ситуация возможна — все зависит от сервера, поскольку все протестированные браузеры (Firefox, Chrome, Opera) используют TLS-соединение до тех пор, пока сервер держит его открытым. В свою очередь, многие HTTP-серверы закрывают TLS-соединение по достижению определенного лимита переданного трафика, даже если оно еще остается активным. К примеру, Apache и Nginx ограничивают число запросов, которые можно отправить в рамках одного соединения, числом 100. Но, к примеру, у IIS при использовании стандартных настроек подобных лимитов нет.
В итоге общее число серверов, которые принимают большое количество запросов по одному соединению, остается большим, пишут исследователи. Исследователи просканировали веб-серверы из каталога Alexa — для этого использовался инструмент cipherscan. Выяснилось, что 86%, поддерживающих TLS, включают Triple-DES в качестве одного из используемых шифров.
Были выявлены 11483 разных HTTPS-северов, 226 (1.9%) из которых обмениваются с клиентами данными с помощью Triple-DES. 72 из этих серверов (0.6% от общего числа) держали соединение открытым как минимум для 800 тысяч запросов. Это значит, что длительность тестовой атаки не говорит о ее нереализуемости — около 0,6% HTTPS-соединений в интернете уязвимы перед ней.
PoC-атака
Ниже представлен код атаки SWEET32. Для ее осуществления используются веб-воркеры, генерирующие XmlHttpRequests.
Содержание файла attack.html:
Файл worker.js:
var url = "https://10.0.0.1/index.html";
var xhr = new XMLHttpRequest;
// Expand URL to ~4kB using a query string
// Alternatively, force a large cookie
url += "?";
var x = 10000000;
for (var i=0; i<=500; i++) {
url += x++;
}
while(true) {
xhr.open("HEAD", url, false);
xhr.withCredentials = true;
xhr.send();
xhr.abort();
}
В ходе эксперимента «захват» зашифрованных пакетов проводился с помощью tcpdump, а для извлечения блоков шифротекста применялась программа на C++, использующая libpcap.
В случаях атаки на HTTPS и VPN каждый запрос отправляется в отдельной зашифрованной записи, содержащей обычный текст в фиксированной позиции. Это позволяет атакующему знать, к какому блоку открытого текста относится блок шифротекста (и, например, соответствующим образом назначать cookie до лимита блокировки). После сохранения необходимого объёма трафика программа на C++ сортирует блоки шифротекста для выявления коллизий. На расшифровку сохраненного трафика у исследователей ушло около четырех часов.
Как защититься
Исследователи рекомендуют отказаться от использования 64-битных «legacy-шифров» блочного шифрования. Если же это по какой-то причине невозможно, то снизить вероятность ее успешного проведения можно следующим образом:
Веб-серверы и VPN должны быть настроены на предпочтение 128-битных шифров. Согласно данным исследователей, около 1,1% процента из 100 тысяч самых популярных сайтов каталога Alexa и 0,5% из миллиона самых популярных поддерживают AES, но предпочитают использовать 3DES.
Веб-браузеры должны использовать 3DES в качестве «fallback-only» шифра во избежание ситуации, при которой он используется в общении с серверами, поддерживающими AES.
TLS-библиотеки и приложения должны ограничивать длину TLS-сессий для 64-битных шифров. Сделать это можно с помощью механизма повторной установки соединения.
Пользователи OpenVPN могут изменить используемый шифр с «дефолтного» Blowfish на AES. Если сделать этого нельзя, то необходимо принудительно инициировать повторный выпуск ключей с помощью функции reneg-bytes 64000000.