Протокол HSTS позволил отследить посещенные веб-ресурсы

28/10/2015 00:09

На конференции Toorcon продемонстрирован новый вид атаки на браузеры, позволяющей выяснить какие сайты пользователь посещал ранее. Атака применима к сайтам, на которых включена поддержка протокола HSTS для автоматизации проброса на области HTTPS при запросе ресурса с использованием протокола HTTP, и проявляется даже если пользователь очистил историю посещений. Для демонстрации уязвимости подготовлена специальная страница, анализирующая открытие в прошлом некоторых популярных ресурсов. Проблема успешно проявляется в Firefox и Chrome, но также затрагивает и другие браузеры, поддерживающие HSTS. В Tor Browser проблема не проявляется из-за ограничения точности таймера. Техника атаки основывается на том, что CSP запросив несуществующее изображение на сайте с использованием протокола HTTP, в случае если на этом сайте выставлен флаг HSTS и сайт открывался ранее, его параметры HSTS прокэшированы и ответ будет возвращён после одного запроса (URL сразу будет запрошен по HTTPS, минуя запрос по HTTP). Если сайт не был открыт ранее, вначале будет выполнен запрос по HTTP, а затем, после получения заголовка HSTS, браузер отправит повторный запрос с использованием HTTPS, т.е. операция займёт ощутимо больше времени. Оценив время задержки кодом на JavaScript можно с достаточно большой вероятностью определить открывал пользователь проверяемый сайт ранее или нет. Интересно, что разработчикам Chrome около года назад сообщили о похожем методе определения факта открытия сайтов и данная проблема до сих пор не решена. Если обратиться к 443 порту сайта по протоколу HTTP (http://example.com:443), такое обращение приведёт к ошибке, если сайт не открывался ранее. Если же сайт был открыт в прошлом и использует флаг HSTS, то браузер автоматически заменит ссылку на https://example.com:443 и запрос будет выполнен успешно. Ещё одна уязвимость связана с работой механизма привязки открытых ключей (HPKP, HTTP Public Key Pinning), позволяющего явно определить сертификаты каких удостоверяющих центров допустимо использовать для заданного сайта. Данный механизм можно использовать в Chrome или Firefox для отслеживания посетителей без применения cookie. Используя HPKP под видом сертификата можно выполнить привязку произвольного идентификатора, уникального для каждого посетителя. В дальнейшем эта привязка может применяться для достоверного определения повторного посещения сайта данным пользователем по аналогии с тем как для идентификации используются cookie. Особенность состоит в том, что привязка сохраняется независимо от удаления cookie, а удаление HPKP-записей является неочевидным действием, требующим обращения к внутренней странице (chrome://net-internals/#hpkp) для конкретного домена (список доменов с привязкой посмотреть нельзя).
Источник