Представлена новая техника скрытой идентификации системы и браузера
14.06.19
Группа исследователей из Грацского технического университета (Австрия), ранее известная разработкой методов атак 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, анализ особенностей работы с мышью и клавиатурой.
Opennet
14.06.19
Группа исследователей из Грацского технического университета (Австрия), ранее известная разработкой методов атак 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, анализ особенностей работы с мышью и клавиатурой.
Opennet