В грядущей версии Chrome 136 будет исправлена существующая уже 23 года side-channel проблема, позволяющая отслеживать историю просмотров пользователя. Эта старая атака строится на считывании цветов ссылок на страницах, что позволяет узнать, посещал ли человек тот или иной сайт ранее.
История проблемы
Как правило, сайты состоят из HTML-файлов, описывающих структуру страницы, файлов JavaScript, содержащих код интерактивных функций, и CSS-файлов, описывающих стиль страницы. CSS включает в себя псевдокласс :visited, который может применяться к якорям (<a>) или элементам области, имеющим свойство href.
Если в файле CSS присутствует :visited, браузер отображает ссылки на ранее посещенные страницы указанным цветом, в зависимости от наличия этих адресов в файле истории браузера.
Уже много лет издатели и третьи лица, способные запускать скрипты, используют эту технику, показывая посетителю на странице ссылки и проверяя, какой цвет его браузер устанавливает для них.
Когда эта техника появилась впервые, ее использовали при помощи скрипта, который перебирал все ссылки на странице, используя window.getComputedStyle, и фиксировал цвет, используемый для их отображения. Если посещенная страница содержала ссылку, и браузер пользователя отображал ее фиолетовым цветом, владелец сайта или поставщик скрипта получали доступ к этой информации.
Защиту от таких атак начали создавать еще около 15 лет назад, хотя в итоге появились другие способы проверки информации о цвете ссылок, помимо getComputedStyle.
Все началось с того, что еще 23 года назад, 28 мая 2002 года Дэвид Бэрон (David Baron), ныне занимающий в Google должность инженера-программиста, который тогда работал в Mozilla, сообщил о соответствующей уязвимости в Firefox. За несколько месяцев до этого исследователь Эндрю Кловер (Andrew Clover) опубликовал детали proof-of-concept атаки, связанной с цветом URL, в списке рассылки Bugtraq. В своей работе он ссылался на статью «Timing Attacks on Web Privacy», написанную специалистами из Принстона Эдвардом Фелтеном (Edward Felten) и Майклом Шнайдером (Michael Schneider) в 2000 году.
Однако потребовалось еще около восьми лет, чтобы люди осознали, что цвет ссылок действительно представляет собой серьезную проблему для конфиденциальности. Так, в апреле 2009 года в сети появился сайт под названием StartPanic (архивная версия). Он демонстрировал, что по цвету ссылки можно узнать историю браузера посетителя, и призывал привлечь к этой проблеме внимание разработчиков Apple, Microsoft, Mozilla и Opera, чтобы избавиться от нее.
Спустя еще почти год, в феврале 2010 года появился еще один ныне несуществующий сайт haveyourfriendsbeenthere.com (архивная версия), который рекламировался как способ «Посмотреть, на какие непристойные сайты заглядывали ваши друзья!».
В марте 2010 года вышеупомянутый исследователь Девид Барон опубликовал в своем блоге новую статью с описанием проблемы и предложением конкретных мер по ее устранению.
Вскоре после этого инженеры Mozilla опубликовали собственный пост о проблеме, предупредив, что разница в цветах по умолчанию для посещенных (color: #551A8B;) и непосещенных (color: #0000EE;) ссылок может считываться сайтами, отображающими ссылки.
Тогда создатели Firefox пообещали реализовать в своем браузере защиту, описанную ранее Бароном. Например, метод window.getComputedStyle стал возвращать одно и то же значение независимо от того, была ли посещена ссылка или нет.
Также в мае 2010 года на воркшопе Web 2.0 Security and Privacy 2010 была представлена работа исследователей Артура Янца (Artur Janc) и Лукаша Олейника (Lukasz Olejnik), в которой так же рассматривались возможности использования CSS для выявления истории браузера.
Увы, уже в 2011 году стало ясно, что предложенных Бароном мер защиты оказалось недостаточно. В статье под названием «Я все еще знаю, где вы были прошлым летом», опубликованной исследователями из Университета Карнеги-Меллон, были продемонстрированы сразу шесть эксплоитов для обхода защиты и слива чужой истории просмотров.
Новое решение
После описанных событий прошло больше 10 лет. И хотя вопросы конфиденциальности данных по-прежнему беспокоят исследователей и простых пользователей, больше внимания привлекает, к примеру, история местоположений и данные о местоположении с мобильных устройств. А проблемы, связанные с конфиденциальность истории браузера давно отошли на второй план.
Однако на прошлой неделе инженер Google Кайра Сиверс (Kyra Seevers) сообщила в блоге компании, что грядущий релиз Chrome 136 (выпуск запланирован на 23 апреля 2025 года), «станет первым крупным браузером, который оставит подобные атаки в прошлом».
«Такие атаки могут раскрыть, какие ссылки уже посещал пользователь, что приведет к утечке подробностей о его активности в интернете, — объясняет Сиверс. — Эта проблема существует более 20 лет, и разработчики браузеров принимали различные временные меры для смягчения подобных атак на раскрытие истории. Но эти меры лишь замедляют атаки, но не устраняют проблему полностью».
Нужно отметить, что ранее разработчики дважды помечали связанные с этой проблемой баг-репорты в Chromium пометкой «не будет исправлено».
Упомянутый выше Лукаш Олейник поприветствовал ожидаемое решение этой древней проблемы в своем блоге.
«Было предложено новое решение: разделение истории посещенных ссылок, — объясняет эксперт. — Этот подход кардинально меняет то, как браузеры хранят и раскрывают данные о посещенных ссылках. Вместо ведения глобального списка, браузеры будут хранить историю в изолированных сегментах с разделением по тройному ключу [сайт-источник, фрейм и адрес назначения]».
То есть эти ключи (URL ссылки, домен сайта и происхождение фрейма, отображающего ссылку) должны совпадать, чтобы ссылка могла быть стилизована с помощью :visited. Таким образом, сайты не смогут оценивать статус посещения других сайтов, поскольку соответствующие домены не будут совпадать.
«В двух словах, разделение — это хранение ссылок с дополнительной информацией о том, где они были нажаты, — в свою очередь объясняет Сиверс. — В Chrome это: URL ссылки, домен сайта-источника и происхождение фрейма. При включении разделения ваша история перестает быть глобальным списком, который может быть запрошен любым сайтом. Вместо этого история посещений дробится на разделы в зависимости от контекста, из которого вы перешли по ссылке».
По словам Олейника, такой подход наглядно демонстрирует эволюцию архитектуры браузеров.
«Это нарушит продолжавшуюся десятилетиями гонку вооружений между инженерами, занимающимися вопросами конфиденциальности, и злоумышленниками, — пишет он. — Это большой шаг вперед в создании более приватного и ответственного веба для всех пользователей».