Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #95, НОЯБРЬ 2006 г.

Зверский взлом Windows Vista

Крис Касперски

Хакер, номер #095, стр. 095-068-6


В частности, ядро, отвечающее за поддержку x86-процессоров Intel, сосредоточено в файле /xen-3.0-testing/xen/include/asm-x86/hvm/vmx/vmx.с.

Красная Пилюля

В «Матрице», чтобы увидеть реальный мир, было достаточно принять красную пилюлю. А как на счет операционной системы? Может ли она каким-нибудь образом определить, что работает под виртуальным эмулятором? Программу, позволяющую обнаружить присутствие эмулятора, обычно называют Красной Пилюлей, и такие пилюли находят самое широкое применение как в хакерской, так и администраторской среде (первые используют их для детектирования VMWare или других программных эмуляторов, вторые - для обнаружения rootkit'ов). С аппаратной виртуализацией все намного сложнее...

Первое, что приходит на ум, - попытаться вызвать VMCALL/VMXON, и, если мы находимся под эмулятором (процессор не поддерживает аппаратную виртуализацию, или она отключена в BIOS), вызов проваливается. Написать такую программу - плевое дело. Имея готовый скелет драйвера, это можно сделать меньше чем за минуту, вот только как отличить ситуацию «процессор не поддерживает» от «мы под эмулятором»? Существует лишь один путь - отодрать от кремния радиатор и физически посмотреть на его маркировку, сличив ее с «показаниями» машинной команды CPUID. Эмулятор, если только он не лось, возвратит подложные данные, убеждая нас в том, что поддержка аппаратной виртуализации на этом процессоре отсутствует. Но какой процент пользователей отважится на столь радикальный шаг?! Отодрать радиатор они, положим, отдерут, но вот приставят ли обратно :)? Тем более что путем некоторых ухищрений гипервизор может эмулировать выполнение команд VMCALL/VMXON, реализуя вложенную виртуализацию. Это как бы один виртуальный мир в другом, и уровень вложенности, в принципе, неограничен. Естественно, с каждой «проглоченной» Голубой Пилюлей мы будем терять производительность. Уже в первом виртуальном мире быстродействие операционной системы сокращается на десятки процентов (никто никогда и не утверждал, что аппаратная виртуализация дает 100% КПД).

Стоп! Стоп! Стоп! Производительность! Вот она, нить Ариадны! Замеряя время выполнения машинных инструкций, перехваченных гипервизором (и в первую очередь инструкции RDMSR EFER, читающей регистр EFER, 12-бит которого указывает на присутствие гипервизора), мы легко заметим, что в виртуальном мире они выполняются намного дольше, чем в реальном.

Вся проблема в том, что нам нечем измерять время их исполнения. Команда RDTSC (читающая значение регистра, увеличивающегося с каждым тактом процессора) отпадает сразу и однозначно, поскольку контролируется гипервизором, который корректирует ее показания так, как будто бы мы находится в реальном мире. Для упрощения решения этой задачи процессор поддерживает специальную «калибровочную» переменную VMCB.TSC_OFFSET, указывающую, сколько экстратактов ему следует вычитать при выполнении команды RDTSC. Так что корректировка показаний RDTSC происходит автоматически даже без вмешательства эмулятора.

Назад на стр. 095-068-5  Содержание  Вперед на стр. 095-068-7