Представлена новая техника скрытой идентификации системы и браузера
14 июня 2019 года
Группа исследователей из Грацского технического университета (Австрия), ранее известная разработкой методов атак MDS, NetSpectre и Throwhammer, раскрыла сведения о новой технике анализа по сторонним каналам, позволяющей определить точную версию браузера, используемую операционную систему, архитектуру CPU и применение дополнений для борьбы со скрытой идентификацией.
Для определения указанных параметров достаточно выполнения в браузере подготовленного исследователями JavaScript кода. На практике метод может применяться не только в качестве дополнительного источника для косвенной идентификации пользователя, но и для определения параметров системного окружения для целевого применения эксплоитов с учётом ОС, архитектуры и браузера. Метод эффективен в том числе при применении браузеров с реализацией механизмов блокировки скрытой идентификации, таких как Tor Browser. Исходные тексты прототипа кода с реализацией метода опубликованы под лицензией MIT.
Определение производится на основе выделения свойственных для разных браузеров шаблонов состояния свойств в JavaScript и характеристик времени выполнения операций, зависящих от особенностей работы JIT, CPU и механизмов выделения памяти. Определение свойств производится через генерацию списка всех объектов, доступных из JavaScript. Как оказалось число объектов напрямую коррелирует с браузерным движком и его версией.
function getProperties(o) { var result = []; while (o !== null) { result = result.concat(Reflect.ownKeys(o)); o = Object.getPrototypeOf(o); } return result; }
Например, для Firefox заявлена поддержка 2247 свойств, в то время как реальное число рекурсивно определённых свойств составляет 15709 (в Tor Browser - 15639), для Chrome заявлено 2698 свойств, а реально предлагается 13570 (в Chrome для Android - 13119). Число и значения свойств меняются от версии к версии браузера и при применении различных операционных систем.
Значения и наличие тех или иных свойств можно использовать для определения типа ОС. Например, в Kubuntu свойство window.innerWidth выставляется в значение 1000, а в Windows 10 - в 1001. В Windows доступно свойство window.navigator.activeVRDisplays, а в Linux его нет. Для Android предоставляется множество специфичных вызовов, но нет window.SharedWorker. Для идентификации операционной системы также предлагается использовать анализ параметров WebGL, состояние которых зависит от драйверов. Кроме того, вызов WEBGL_debug_renderer_infoextension позволяет получить информацию о движке отрисовки OpenGL, который для каждой операционной системы разный.
Для определения CPU применяется оценка различий во времени выполнения различных типовых блоков кода, обработка которых зависит от архитектуры набора команд с учётом поведения JIT (определяется сколько регистров CPU будет задействовано и в каких случаях JIT сгенерирует эффективный код с оптимизациями и вовлечением расширенных инструкций, а когда нет). Для определения типа системы распределения памяти и операционной системы также измеряется различие времени выделения памяти для различных структур, по которым можно судить о размере блоков памяти.
Определённые в ходе выполнения скрипта параметры сравниваются с эталонными значениями, свойственными для заранее протестированных окружений. В ходе проверки разработанная техника позволила точно определить 40 различных тестовых окружений, определив версии используемых браузеров, производителя CPU, применяемую операционную систему и факт запуска на реальном оборудовании или в виртуальной машине.
Отдельно отмечается возможность определения браузерных дополнений и даже отдельных настроек дополнений, в том числе дополнений предназначенных для блокирования методов скрытой идентификации или активности приватного режима просмотра. В контексте предложенного метода подобные дополнения становятся ещё одним источником данных для идентификации. Дополнения определяются через оценку искажений параметров исходного окружения, вносимых дополнениями.
Из иных методов идентификации можно отметить учёт таких косвенных данных, как разрешение экрана, список поддерживаемых MIME-типов, специфичные параметры в заголовках ( HTTP/2 и HTTPS), анализ установленных плагинов и шрифтов, доступность определённых Web API, специфичные для видеокарт особенности отрисовки при помощи WebGL и Canvas, манипуляции с CSS, анализ особенностей работы с мышью и клавиатурой.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.