На конференции Toorcon 2015 независимая исследовательница Ян Жу (Yan Zhu) продемонстрировала эксплуатацию двух багов, при помощи которых можно отслеживать активность миллионов пользователей Google Chrome и Mozilla Firefox. Эксплуатируя баги, можно узнать, какие ресурсы пользователь посещал ранее (даже если жертва регулярно чистит историю браузера), а также подсадить ему аналог cookie, который продолжит отслеживать активность, даже после удаления cookie обыкновенных.
Основная проблема была обнаружена в механизме HSTS, который применяется для активации форсированного защищенного соединения через протокол HTTPS. Сайты, поддерживающие HSTS, заставляют браузер пользователя принудительно устанавливать соединение через HTTPS, вместо HTTP. Данный механизм активно применяют в своей работе банки, облачные сервисы и другие «чувствительные» ресурсы.
Ян Жу продемонстрировала, что защиту HSTS можно использовать совсем не по назначению. При желании, администраторы сайта могут злоупотребить использованием механизма и узнать, какие ресурсы ранее посещали их пользователи.
Атака осуществляется через несуществующие, встроенные в тело защищенного HSTS сайта, картинки. Используя JavaScript можно замерить время задержки, которое понадобится для возникновения ошибки. Таким образом можно определить, открывал пользователь некий конкретный сайт ранее или нет. Если пользователь уже бывал на сайте, время задержки составит несколько миллисекунд. Если нет -- задержка будет больше. Баг точно работает для браузеров Firefox и Chrome, хотя исследовательница утверждает, что другие браузеры, поддерживающие HSTS, тоже под угрозой. Также сообщается, что проблеме не подвержен Tor Browser.
Вторая уязвимость, о которой рассказала Жу, отлично сочетается с вышеописанной. Баг был обнаружен в работе механизма привязки открытых ключей HPKP (HTTP Public Key Pinning), который, равно как и HSTS, был создан для повышения безопасности пользователей. HPKP известен как средство для привязки сертификатов, созданное для борьбы с фальшивками. Он позволяет веб-сайту установить специфические HTTPS параметры, которые браузер должен принимать для всех защищенных соединений в будущем. Механизм также позволяет закрепить несколько сертификатов.
Администраторы сайта могут использовать HPKP во вред, закрепляя за каждым пользователем уникальный текст-идентификатор, вместо сертификата. Текст может считываться сайтом при последующих посещениях, то есть будет использоваться вместо cookie, чтобы следить за пользователем. Даже если удалить сами cookie, такой «сертификат» все равно останется.
По сообщению Mozilla, баг не работает в Firefox, так что единственным уязвимым для атаки браузером, похоже, является Chrome. Чтобы избавиться от слежки через HPKP, в адресной строке Chrome нужно набрать: chrome://net-internals/#hpkp
и удалить конкретный домен из списка. Впрочем, список доменов с привязкой посмотреть нельзя, что не очень удобно.
В качестве proof-of-concept исследовательница создала сайт http://zyan.scripts.mit.edu/sniffly/, который с радостью покажет пользователю подробную историю его веб-серфинга, рассказав, какие сайты юзер посещал, а какие нет. Исходный код своего эксплоита Жу разместила на GitHub и назвала его Sniffly.
Полное видео презентации исследовательницы с конференции Toorcon:
Фото: Yuri Samoilov