Специалисты из компании Context Information Security разработали весьма неординарную технику атаки с использованием новой функции requestAnimationFrame() в стандарте HTML5. Эта функция возвращает информацию о времени выполнения операций в браузере с точностью до миллионных долей секунды. Используя ее, можно определить цвет отдельных пикселов на экране жертвы и прочитать текст, что создает угрозу утечки приватной информации.
Новая функция создана для четкого контроля фреймрейта в браузере пользователя. Например, если отрисовка каждого кадра не превышает 16 миллисекунд, то мы может поддерживать четкий фреймрейт 60 кадров/с.
Другими словами, новая функция позволяет веб-разработчику синхронизировать выполнение JavaScript со скоростью отрисовки анимации в браузере. Очень полезная и удобная вещь.
Хакеры из Context Information Security описали целый класс «атак по времени» (timing attacks) с использованием этой новой функции. Например, ее можно использовать для детектирования события redraw в браузере, которое появляется при смене цвета посещенного URL. Если применить CSS-свойство text-shadow, то можно замедлить redraw до такой степени, что оно будет детектироваться с помощью requestAnimationFrame() при смене фреймов. Таким образом, мы получаем персональные сведения об истории серфинга пользователя.
Применяя SVG-фильтры из спецификаций CSS Filter Effects к пикселам на веб-странице, можно получить информацию о пикселах на экране, проанализировав время наложения фильтров. В теории, вредоносный веб-сайт может загрузить во фрейме другой сайт, где пользователь уже залогинен, и осуществить считывание приватной информации с веб-страницы.
Опять же, чтобы requestAnimationFrame() обеспечил достаточную точность распознавания, нужно максимально замедлить процесс выполнения фильтров. Для этого фрагмент оригинального фрейма (в левом верхнем углу) увеличивают в несколько раз (правый верхний угол), затем переводят в черно-белый режим (слева внизу), откуда берут каждый пиксел и обрабатывают его фильтром по отдельности как одноцветную картинку 100х100 пикселов.
Обработку черного и белого цвета фильтр осуществляет с большой разницей по времени, которая и детектируется с помощью requestAnimationFrame(). Ниже показан результат распознавания.
Если знать размер шрифта на странице, то можно совместить этот метод с работой системы OCR, и тогда техника позволит довольно быстро «просканировать» всю страницу. В противном случае, техника работает довольно медленно: прогон фильтра на каждом пикселе занимает около 0,1-0,2 с, то есть сканирование страницы 1024х768 «в лоб» займет 20-40 часов, что не очень приемлемо в реальных условиях.
Как вариант, можно сканировать не сам HTML, а исходный текст веб-страницы, который после аутентификации может содержать персональную информацию. В редакторе исходного кода используется стандартный шрифт, так что можно подключить систему OCR и ускоренное распознавание. Например, в Firefox под Windows используется шрифт Courier размером 13px, так что для распознавания каждого отдельного символа достаточно узнать значения буквально нескольких пикселов. Исследователям удалось добиться скорости распознавания 1 символ в секунду.
Разработчики браузеров уже уведомлены об уязвимостях (баг в Firefox, баг в Chrome).