В настоящее время датчики внешней освещенности можно обнаружить практически в любом смартфоне, планшете или ноутбуке. В силу их широкого распространения специалисты World Wide Web Consortium (W3C) даже создали специальный API, которой позволяет сайтам (через браузер) взаимодействовать с этими датчиками, и такие браузеры как Chrome и Firefox уже поддерживают данный API.
В прошлом месяце специалисты компании Google вообще предложили исключить из системы разрешений браузера датчики внешней освещенности, наряду с гироскопом, магнитометром и датчиками акселерометра. По сути, было предложено разрешить сайтам использовать эти датчики, не спрашивая разрешения пользователя. По мнению инженеров Google, это вполне логичный шаг, ведь мобильные приложения не спрашивают разрешения перед использованием датчиков, так почему должны браузеры?
Что не так с этим предложением Google рассказал и наглядно продемонстрировал эксперт в области информационной безопасности Лукаш Олейник (Lukasz Olejnik). В своем блоге исследователь пишет, что созданный W3C API может использоваться для похищения данных из браузеров. Так, атакующий может заманить жертву на вредоносный сайт, а затем узнать, какие URL пользователь посещал ранее. Все атака строится на данных, полученных от датчиков внешней освещенности, ведь они фиксируют даже незначительные изменения и могут «заметить» даже изменение цвета ссылок (после посещения сайта цвет ссылки обычно меняется).
Наглядный proof-of-concept исследователя показывает, что атакующий может создать сайт, который продемонстрирует жертве список популярных доменных имен, одно за другим. Если пользователь уже посещал одну из ссылок, экран становится белым, если же пользователь еще не был на сайте, экран обращается черным. Исследователь пишет, что за восемь минут и двадцать секунд атакующий может успеть показать устройству жертвы 1000 популярных ссылок.
Также Олейник продемонстрировал атаку, которая позволяет атакующему извлечь cross-origin изображения и фреймы, к примеру, QR-коды, которые нередко используются для восстановления аккаунтов. Впрочем, существенным минусом данного вектора атаки является скорость: на чтение QR-кода размером 20x20 уйдет три минуты и двадцать секунд, а изображению размером 64x64 пикселя и вовсе потребуется больше получаса.
Столь странное поведение устройства определенно вызовет подозрения у пользователя, поэтому эксперт предлагает, к примеру, осуществлять атаку ночью, используя screen.keepAwake API, чтобы во время работы эксплоита дисплей оставался включен.
Олейник пишет, что избежать всего описанного легко: достаточно ограничить частоту снятия показаний датчиков. Но будет еще лучше, если разработчики браузеров ограничат точность показаний сенсоров, установив лимит в строго заданных пределах, что сделает невозможным хоят бы распознавание изменившегося цвета ссылок.