Обнаружение виртуальной машины¹ в браузере
¹ - программная и/или аппаратная система, эмулирующая аппаратное обеспечение некоторой платформы.
Вступление
Обнаружение виртуальной машины (ВM) не является чем-то необычным. Вредоносные программы делают это уже более десяти лет. Со временем методы расширились, поскольку были придуманы новые способы избежать обнаружения ВМ.
Некоторое время назад мы с другом работали над проектом, связанным с эксплойтом доставки через веб-приложение в целях перенаправления. Мне нужен был способ сделать отпечатки пальцев (В прямом смысле) посетителей сайта и хэшировать эти данные, чтобы я мог искать потенциальных повторных посетителей. При исследовании отпечатков пальцев я наткнулся на что-то довольно интересное. Я искал код, который собирал информацию о возможностях WebGL. Я быстро понял, что некоторая информация о дактилоскопии (Способ опознания человека по отпечаткам пальцев, основанный на неповторимости рисунка кожи) может быть полезна для обнаружения виртуальных машин. В этом конкретном случае строка «VMWare» содержалась в информации WebGL. После еще одного тестирования я также обнаружил, что VirtualBox сообщает о такой же информации.
Когда я понял, что потенциально возможно обнаружить виртуальные машины из браузера, я начал копать глубже и искать другие исследования, связанные с этим открытием. Я нашел довольно хорошо изученную академическую статью [1], связанную с отслеживанием пользователей в разных браузерах. Это дало мне некоторые другие потенциальные методы, которые можно было бы применить к обнаружению виртуальных машин.
Конечная цель этого исследования - создать несколько методов обнаружения виртуальных машин. Многократные методы приводят к намного более точному обнаружению. Поскольку некоторые методы более склонны к ложному срабатыванию, чем другие, для определения возможностей может быть применена система взвешивания. Это позволяет нам генерировать оценку достоверности обнаружения. Это может помочь объяснить неточности некоторых методов обнаружения. Учитывая достаточное количество тестов и данных, можно будет прийти к разумному пороговому (критическому) значению. Если браузер набирает баллы выше порогового значения, он, скорее всего, будет находиться внутри виртуальной машины. В качестве альтернативы, если браузер получил оценку ниже порогового значения, он может рассматриваться как работающий на физическом оборудовании.
Методы
Теперь, когда я рассмотрел некоторую справочную информацию и историю, приведшую к этому сообщению в блоге, мы можем начать копаться в существующих методах.
Как упоминалось ранее во введении, WebGL может предоставить много информации о реализации OpenGL, включая информацию о поставщике. Расширение WEBGL_debug_renderer_info [2] может использоваться для запроса отладочной информации, такой как поставщик WebGL.
Кроме того, доступность расширения можно запросить с помощью метода getExtension в контексте WebGL. Я не полностью исследовал эту возможность, но возможно можно обнаружить определенные реализации WebGL, предоставляемые виртуальными машинами, на основе доступных расширений. Хотя эта идея, вероятно, очень склонна к ложному положению.
Ниже приведен скриншот с [3] WebGLReport сайта, посвященного дактилоскопии WebGL.
Теперь важно отметить, что это зависит от того, как настроена виртуальная машина. Например, в Virtual Box установка графического контроллера в разделе Display для VMSVGA приведет к тому, что WebGL будет использовать реализации OpenGL на основе процессора, которые зависят от браузера. Тем не менее, это может быть полезным показателем того, что компьютер работает на виртуальной машине, поскольку большинство современного оборудования имеет встроенные графические процессоры и может предоставить доступ к OpenGL. Просто помните, что реализации OpenGL на базе процессора не обязательно означают, что это виртуальная машина.
На этом скриншоте показан Google Chrome, использующий рендер реализации OpenGL на базе процессора Google SwiftShader [4] .
Еще один метод, используемый в обычных вредоносных программах, заключается в определении ширины и высоты экрана. Этого можно добиться и в Javascript. Кроме того, глубина цвета и биты на пиксель являются другими потенциально хорошими индикаторами, связанными с дисплеем.
Более подробную информацию об объекте на экране можно найти в [5] (Рекомендации в конце статьи) .
Можем ли мы определить объем оперативной памяти на клиенте? Снова используя Javascript, мы можем приблизительно определить объем оперативной памяти, доступной в браузере. Здесь нужно отметить одну причуду: браузер будет сообщать значения ОЗУ только в гигабайтах (ГБ). Он также имеет причуду, когда он будет сообщать только до 8 ГБ и всего 256 МБ (0,25 ГБ). Однако эти диапазоны значений все еще достаточны для использования в качестве метода обнаружения виртуальных машин. В наши дни большинство физических рабочих станций имеют как минимум 8 ГБ оперативной памяти. Обнаружение меньшего объема ОЗУ, такого как 2 ГБ или менее, было бы хорошим индикатором того, что браузер клиента находится в виртуальной машине. Спецификация для Памяти Устройства может быть найдена в [6] (Также в рекомендациях в конце статьи).
Наконец, последний метод, который я расскажу, определяет количество ядер процессора. Это достигается путем одновременной атаки нескольких веб-служб. Во время тестирования этой техники я обнаружил, что она очень точная. Я проверил эту концепцию на демонстрационном сайте [7] Core Estimator. Небольшое количество ядер ЦП может быть хорошим индикатором виртуальной машины и использовалось вредоносным ПО. Core Estimator также предоставляет библиотеки Javascript на github [8] .
Заключение
В этом блоге рассказывается о четырех уникальных возможностях обнаружения виртуальных машин, которые можно выполнить с помощью Javascript. Когда я впервые открыл эти методы, моей первоначальной мыслью было применить концепции к обнаружению виртуальных машин. Надеемся, что все смогут найти что-то полезное для применения этих методов.
Интересно видеть, что ученые и другие исследователи применяли одни и те же концепции к вопросам снятия отпечатков пальцев и конфиденциальности.
Рекомендации
Переведено специально для XSS
neopaket
Оригинальная статья: https://bannedit.github.io/Virtual-...html#Virtual-Machine-Detection-In-The-Browser
¹ - программная и/или аппаратная система, эмулирующая аппаратное обеспечение некоторой платформы.
Вступление
Обнаружение виртуальной машины (ВM) не является чем-то необычным. Вредоносные программы делают это уже более десяти лет. Со временем методы расширились, поскольку были придуманы новые способы избежать обнаружения ВМ.
Некоторое время назад мы с другом работали над проектом, связанным с эксплойтом доставки через веб-приложение в целях перенаправления. Мне нужен был способ сделать отпечатки пальцев (В прямом смысле) посетителей сайта и хэшировать эти данные, чтобы я мог искать потенциальных повторных посетителей. При исследовании отпечатков пальцев я наткнулся на что-то довольно интересное. Я искал код, который собирал информацию о возможностях WebGL. Я быстро понял, что некоторая информация о дактилоскопии (Способ опознания человека по отпечаткам пальцев, основанный на неповторимости рисунка кожи) может быть полезна для обнаружения виртуальных машин. В этом конкретном случае строка «VMWare» содержалась в информации WebGL. После еще одного тестирования я также обнаружил, что VirtualBox сообщает о такой же информации.
Когда я понял, что потенциально возможно обнаружить виртуальные машины из браузера, я начал копать глубже и искать другие исследования, связанные с этим открытием. Я нашел довольно хорошо изученную академическую статью [1], связанную с отслеживанием пользователей в разных браузерах. Это дало мне некоторые другие потенциальные методы, которые можно было бы применить к обнаружению виртуальных машин.
Конечная цель этого исследования - создать несколько методов обнаружения виртуальных машин. Многократные методы приводят к намного более точному обнаружению. Поскольку некоторые методы более склонны к ложному срабатыванию, чем другие, для определения возможностей может быть применена система взвешивания. Это позволяет нам генерировать оценку достоверности обнаружения. Это может помочь объяснить неточности некоторых методов обнаружения. Учитывая достаточное количество тестов и данных, можно будет прийти к разумному пороговому (критическому) значению. Если браузер набирает баллы выше порогового значения, он, скорее всего, будет находиться внутри виртуальной машины. В качестве альтернативы, если браузер получил оценку ниже порогового значения, он может рассматриваться как работающий на физическом оборудовании.
Методы
Теперь, когда я рассмотрел некоторую справочную информацию и историю, приведшую к этому сообщению в блоге, мы можем начать копаться в существующих методах.
Как упоминалось ранее во введении, WebGL может предоставить много информации о реализации OpenGL, включая информацию о поставщике. Расширение WEBGL_debug_renderer_info [2] может использоваться для запроса отладочной информации, такой как поставщик WebGL.
Код:
var canvas = document.createElement('canvas');
var gl = canvas.getContext('webgl');
var debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
var vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
console.log(vendor);
console.log(renderer);
Кроме того, доступность расширения можно запросить с помощью метода getExtension в контексте WebGL. Я не полностью исследовал эту возможность, но возможно можно обнаружить определенные реализации WebGL, предоставляемые виртуальными машинами, на основе доступных расширений. Хотя эта идея, вероятно, очень склонна к ложному положению.
Ниже приведен скриншот с [3] WebGLReport сайта, посвященного дактилоскопии WebGL.
Теперь важно отметить, что это зависит от того, как настроена виртуальная машина. Например, в Virtual Box установка графического контроллера в разделе Display для VMSVGA приведет к тому, что WebGL будет использовать реализации OpenGL на основе процессора, которые зависят от браузера. Тем не менее, это может быть полезным показателем того, что компьютер работает на виртуальной машине, поскольку большинство современного оборудования имеет встроенные графические процессоры и может предоставить доступ к OpenGL. Просто помните, что реализации OpenGL на базе процессора не обязательно означают, что это виртуальная машина.
На этом скриншоте показан Google Chrome, использующий рендер реализации OpenGL на базе процессора Google SwiftShader [4] .
Еще один метод, используемый в обычных вредоносных программах, заключается в определении ширины и высоты экрана. Этого можно добиться и в Javascript. Кроме того, глубина цвета и биты на пиксель являются другими потенциально хорошими индикаторами, связанными с дисплеем.
Код:
var width = screen.width;
var height = screen.height;
var color_depth = screen.colorDepth;
var bitspp = screen.pixelDepth;
Более подробную информацию об объекте на экране можно найти в [5] (Рекомендации в конце статьи) .
Можем ли мы определить объем оперативной памяти на клиенте? Снова используя Javascript, мы можем приблизительно определить объем оперативной памяти, доступной в браузере. Здесь нужно отметить одну причуду: браузер будет сообщать значения ОЗУ только в гигабайтах (ГБ). Он также имеет причуду, когда он будет сообщать только до 8 ГБ и всего 256 МБ (0,25 ГБ). Однако эти диапазоны значений все еще достаточны для использования в качестве метода обнаружения виртуальных машин. В наши дни большинство физических рабочих станций имеют как минимум 8 ГБ оперативной памяти. Обнаружение меньшего объема ОЗУ, такого как 2 ГБ или менее, было бы хорошим индикатором того, что браузер клиента находится в виртуальной машине. Спецификация для Памяти Устройства может быть найдена в [6] (Также в рекомендациях в конце статьи).
Код:
var ram = навигатор . deviceMemory ;
Наконец, последний метод, который я расскажу, определяет количество ядер процессора. Это достигается путем одновременной атаки нескольких веб-служб. Во время тестирования этой техники я обнаружил, что она очень точная. Я проверил эту концепцию на демонстрационном сайте [7] Core Estimator. Небольшое количество ядер ЦП может быть хорошим индикатором виртуальной машины и использовалось вредоносным ПО. Core Estimator также предоставляет библиотеки Javascript на github [8] .
Заключение
В этом блоге рассказывается о четырех уникальных возможностях обнаружения виртуальных машин, которые можно выполнить с помощью Javascript. Когда я впервые открыл эти методы, моей первоначальной мыслью было применить концепции к обнаружению виртуальных машин. Надеемся, что все смогут найти что-то полезное для применения этих методов.
Интересно видеть, что ученые и другие исследователи применяли одни и те же концепции к вопросам снятия отпечатков пальцев и конфиденциальности.
Рекомендации
- (Перекрестное) снятие отпечатков в браузере с помощью функций ОС и аппаратного уровня http://yinzhicao.org/TrackingFree/crossbrowsertracking_NDSS17.pdf
- Веб-документы MDN WEBGL_debug_renderer_info https://developer.mozilla.org/en-US/docs/Web/API/WEBGL_debug_renderer_info
- Отчет WebGL https://webglreport.com
- Google Swiftshader Github https://github.com/google/swiftshader
- Спецификация памяти устройства W3 https://www.w3.org/TR/device-memory/
- W3 Schools - Объект экрана https://www.w3schools.com/jsref/obj_screen.asp
- Демонстрация основного оценщика https://oswg.oftn.org/projects/core-estimator/demo/
- Основной оценщик Github https://github.com/oftn-oswg/core-estimator
Переведено специально для XSS
neopaket
Оригинальная статья: https://bannedit.github.io/Virtual-...html#Virtual-Machine-Detection-In-The-Browser