Как и обещали, на конференции по информационной безопасности Ekoparty 2012 хакеры Джулиано Риццо (Juliano Rizzo) и Тай Дуонг (Thai Duong) представили эксплойт CRIME, способный расшифровать трафик TLS после исполнения атакующим скрипта в браузере пользователя. Ранее предполагалось, что подобная атака возможна с помощью эксплуатации функции компрессии заголовков с помощью zlib.

Главный специалист по криптографии в компании Google Адам Лэнгли (Adam Langley) подробно объясняет в своём блоге, как такое возможно, на примере zlib-шифрования заголовков в протоколе SPDY, потому что здесь используется абсолютно такой же метод компрессии, что и в случае с cookie в TLS.

В таблице показано содержимое заголовка SPDY. Библиотека zlib использует для компрессии две функции: или «выдать указанные байты», или «вернуться назад на x байтов и продублировать y байтов оттуда». На диаграмме красный текст отображает байты первого типа, а чёрный текст — байты второго типа, которые дублируются из предыдущего текста. Дублирующиеся символы подчёркнуты тёмно-синий чертой, а серая линия показывает, откуда они взяты. При наведении мышкой серая линия становится лучше видна. Светло-синей чертой подчёркнуты символы, которые взяты из словаря. Протокол SPDY предусматривает поставку такого словаря, чтобы zlib мог лучше сжимать трафик.

Авторы эксплойта CRIME могут определить, где в зашифрованном файле находятся cookies, потому что в этом месте zlib лучше сожмёт трафик, ссылаясь на предыдущий блок. CRIME позволяет с помощью нескольких запросов побайтово подбирать содержимое cookies, наблюдая за значениями, которые выдаёт zlib. Если вы «угадали», то это будет заметно по уменьшившемуся размеру пакета. Собственно, так и работает эксплойт, расшифровывая значение cookies по 4-6 запросов на каждый байт base64. Очевидно, что атакующему требуется возможность просматривать трафик с компьютера жертвы, а также возможность выполнять много запросов из его браузера. Это возможно с помощью инъекции скрипта на какую-нибудь веб-страницу, которую загрузит пользователь.

Разработчики браузеров Chrome и Firefox были заранее предупреждены об этой уязвимости и в качестве временной меры отключили сжатие заголовков SPDY в версиях Chrome 21 и Firefox 15. Более того, браузер Chrome вовсе отключил компрессию TLS, где возможна точно такая же атака.

Чтобы избежать атаки, нужно каждый cookie помещать в новый контейнер, который сжимается без ссылки на предыдущие данные: разработчики Google планируют реализовать подобный механизм в новой версии SPDY/4.



Оставить мнение