![]() |
https://forum.antichat.xyz/attachmen...ed4c29321b.png
Когда пентестер исследует скомпрометированный хост, он привычно смотрит в Ring 0 - проверяет драйверы ядра, ищет хуки в SSDT, анализирует загрузочные записи. Всё по методичке. Но есть класс угроз, при котором всё перечисленное бесполезно. Гипервизорный руткит работает на уровне Ring -1 - буквально ниже ядра операционной системы. Он не модифицирует код ядра, не перехватывает системные вызовы привычным способом. Он перемещает всю ОС в виртуальную машину и контролирует каждый её аппаратный вызов. Ядро при этом продолжает считать себя хозяином системы. Как тот охранник, который не знает, что камеры показывают ему запись вчерашнего дня. По данным Positive Technologies, руткиты составляют менее 1% от общего числа обнаруживаемых вредоносных программ, но каждый выявленный случай связан с громкими таргетированными атаками. Виртуализационные руткиты - ещё более редкий и сложный подвид, для которого русскоязычные источники не дают практически никакой технической детализации (полную классификацию всех подвидов и матрицу обнаружения я собрал в обзоре техник руткитов с матрицей детекции). Здесь я разберу архитектуру гипервизорных руткитов от EPT-уровня до конкретных команд детекции, которые можно применить в реальном engagement. Архитектура Ring -1 и виртуализационный руткит Чтобы понять, почему гипервизорный руткит настолько опасен, стоит разобраться в иерархии привилегий x86. Классическая модель защиты Intel - четыре кольца: Ring 3 для пользовательских приложений, Ring 0 для ядра ОС. Когда Intel и AMD внедрили аппаратную виртуализацию (Intel VT-x и AMD-V соответственно), появился новый режим работы процессора, неформально названный Ring -1. Джоанна Рутковска, создатель Blue Pill, ввела этот термин специально - чтобы подчеркнуть: гипервизор обладает бо́льшими привилегиями, чем ядро ОС в Ring 0. Технически Ring -1 реализован через два режима:
Как Intel VT-x и AMD-V создают поверхность атаки Аппаратная виртуализация проектировалась для легитимных целей - запуска нескольких ОС, изоляции нагрузок. Но те же механизмы дают атакующему контроль, о котором kernel-mode руткиты могли только мечтать: VMCS (Virtual Machine Control Structure) - структура данных, определяющая поведение VM-exit/VM-entry. Кто контролирует VMCS - контролирует всё. EPT (Extended Page Tables) / NPT (Nested Page Tables) - второй уровень трансляции адресов. Гипервизор определяет, какие физические страницы памяти доступны гостю и с какими правами. Через это можно создавать невидимые «теневые» страницы. MSR Bitmap - определяет, какие обращения к Model-Specific Registers вызывают VM-exit. Гипервизорный руткит может перехватывать запись в IA32_LSTAR (адрес syscall-обработчика) без ведома ОС. Фундаментальная проблема аппаратной виртуализации с точки зрения безопасности - процессор не предоставляет гостевой ОС инструкции для проверки собственного статуса. Нет такого Код:
AMIVIRTUALIZEDBlue Pill атака виртуализация: от концепта к архитектуре VMBR Blue Pill - proof-of-concept, представленный Джоанной Рутковской в 2006 году на Black Hat USA. Идея простая и элегантная: вредоносный код на лету перемещает работающую ОС в виртуальную машину, создавая «тонкий» гипервизор между аппаратурой и ядром. Название отсылает к «Матрице» - приняв синюю таблетку, вы остаётесь в иллюзии, не зная, что реальность подменена. Архитектура Blue Pill и подобных VMBR (Virtual Machine Based Rootkit) работает так:
EPT и shadow pages: VM-based rootkit техники невидимого перехвата Современные реализации гипервизорных руткитов активно используют Extended Page Tables для создания «теневых» (shadow) страниц памяти. По исследованию secret.club (июнь 2025), посвящённому Rust-based гипервизорам illusion-rs и matrix-rs, механизм EPT-hooking позволяет перенаправлять поток исполнения без модификации гостевой памяти. Вдумайтесь - перехват без патчинга. Как это работает:
Проект illusion-rs использует модель с одним EPT на логический процессор и VMCALL + Monitor Trap Flag (MTF) для single-stepping. Проект matrix-rs идёт дальше - dual-EPT: primary EPT для чтения/записи и secondary EPT для исполнения, с динамическим переключением EPTP при нарушениях доступа. Оба проекта - открытый исходный код. EPT-hooking перестал быть академической экзотикой. Nested virtualization exploit и атаки на легитимный гипервизор Отдельный вектор - злоупотребление вложенной виртуализацией. Если на хосте уже крутится легитимный гипервизор (VMware ESXi, Hyper-V, KVM), атакующий может «bluepill'нуть» сам гипервизор, создав дополнительный уровень перехвата. Рутковска подчеркнула: «Поддержка вложенной виртуализации - можно загрузить Blue Pill, а затем внутри созданной виртуальной машины запустить обычный гипервизор вроде Xen или Virtual PC. Можно даже загрузить несколько экземпляров Blue Pill друг в друга». Матрёшка из гипервизоров. И вот тут возникает принципиальная проблема: детектирование виртуализации и детектирование скомпрометированного гипервизора - две совершенно разных задачи. В лабораторных условиях при работе с nested virtualization я анализировал следующие артефакты: Shadow VMCS - при вложенной виртуализации легитимный гипервизор L1 управляет VMCS для гостей L2. Вредоносный гипервизор L0 (Blue Pill) должен поддерживать shadow-копии этих VMCS. Аномалии в обработке VMREAD/VMWRITE могут быть индикатором. EPT-over-EPT - при nested virtualization адреса транслируются через несколько уровней EPT. Каждый дополнительный уровень вносит измеримую задержку в обращения к памяти. VM-exit latency - при наличии промежуточного гипервизора каждый VM-exit проходит через дополнительный уровень обработки. Этот overhead можно измерить, хотя задача нетривиальная. Таблица уровней вложенности и их влияния: УровеньИсполнительVM-exit latencyКонтроль EPTL0 (вредоносный Blue Pill)Аппаратура напрямуюБазоваяПолныйL1 (легитимный гипервизор)Под контролем L0УвеличеннаяВиртуализиров анныйL2 (гостевая ОС)Под контролем L1 + L0Значительно увеличеннаяОтсутствует Почему EDR и антивирусы слепы к гипервизор безопасность атаки Вопрос, который я слышу на каждом engagement: «Но у нас стоит EDR класса X, он ведь увидит?». Короткий ответ - нет. Длинный - тоже нет, но с объяснением. Любое программное средство защиты работает внутри ОС - в Ring 3 или Ring 0. Гипервизорный руткит сидит в Ring -1. Это означает: Сканирование памяти бесполезно. EDR читает физическую память через API ядра. Но трансляция физических адресов проходит через EPT, контролируемый руткитом. Руткит подставляет «чистые» страницы при чтении, показывая shadow page с hook только при исполнении. Классический split-view. Мониторинг системных вызовов перехвачен. Если руткит ставит перехватчик на IA32_LSTAR MSR (как описано в исследовании secret.club для illusion-rs), все syscall проходят через его обработчик до попадания в ядро. EDR видит уже отфильтрованный поток. Проверка целостности ядра обманута. PatchGuard проверяет код ядра через обычные операции чтения памяти. EPT-based hooking возвращает оригинальный код при чтении и подставляет модифицированный при исполнении. PatchGuard видит неизменённый код и молчит. Hardware Performance Counters - частично. Теоретически PMC могут обнаружить аномальное количество VM-exit. Руткит может перехватывать доступ к PMC MSR (IA32_PERFEVTSELx, IA32_PMCx) и корректировать возвращаемые значения. Но PMC инкрементируются аппаратно, и полная фальсификация всех счётчиков одновременно - нерешённая задача. Исследование NumChecker (2013) показало, что определённые PMC-паттерны сложно подделать без детектируемых побочных эффектов. Это одна из немногих зацепок. По классификации MITRE ATT&CK гипервизорные руткиты попадают под несколько техник: Rootkit (T1014, Defense Evasion) как базовая категория, Run Virtual Instance (T1564.006, Defense Evasion) - собственно механизм перемещения ОС в VM, и Disable or Modify Tools (T1562.001, Defense Evasion), поскольку руткит фактически нейтрализует все инструменты мониторинга уровня ОС. Обнаружение руткита гипервизора: практические техники для пентестеров Теперь главное - как обнаружить subverted hypervisor. Сразу скажу: идеального метода не существует. Рутковска называла timing-based detection «слепым переулком» (blind avenue) для полноценного решения. Но в реальном engagement комбинация нескольких подходов даёт рабочие результаты. Лично я использую четыре, и ниже - каждый из них. Timing-based detection: RDTSC и CPUID fingerprinting Каждый VM-exit добавляет задержку. Инструкции CPUID и RDMSR гарантированно вызывают VM-exit в среде с гипервизором. Измеряя время их выполнения через RDTSC, можно поймать аномалию. Базовый замер через inline assembly: Код: Код:
; Замер латентности CPUID через RDTSC
Анализ аппаратная виртуализация уязвимости через артефакты VMCS Второй подход - поиск артефактов, которые гипервизор не может полностью скрыть. CPUID Hypervisor Bit. Leaf 0x1 регистра ECX, бит 31 (Hypervisor Present) - устанавливается спецификацией для сигнализации работы в виртуальной среде. Легитимные гипервизоры его ставят. Руткит может сбросить через перехват CPUID, но тогда при nested virtualization возникнут конфликты - легитимный вложенный гипервизор не сможет корректно работать. C: Код:
// Проверка Hypervisor Present Bit (пример для демонстрации концепции)Intel VT-x AMD-V rootkit: детектирование через аппаратные механизмы Intel TXT (Trusted Execution Technology) - аппаратный механизм, который теоретически гарантирует целостность загрузочной цепочки, включая гипервизор. Рутковска, однако, продемонстрировала обход Intel TXT на Black Hat DC - так что как единственный метод защиты он ненадёжен. SMM (System Management Mode) - Ring -2, ещё более привилегированный режим. SMM-обработчик теоретически может инспектировать состояние VMX и обнаружить несанкционированный гипервизор. На практике это требует модификации прошивки (UEFI/BIOS) и редко доступно пентестеру. Но знать о нём стоит. Firmware-based attestation - использование TPM для хэширования цепочки загрузки. Если гипервизорный руткит внедрился после начального замера, TPM PCR будут содержать корректные значения. Если до - хэши не совпадут при удалённой аттестации. Пошаговая детекция subverted hypervisor detection для пентестеров Ниже - алгоритм, который я применяю при подозрении на компрометацию гипервизора в ходе red team engagement. Шаг 1. Статистический timing-анализ Выполните серию из 10000+ замеров латентности CPUID с разными leaf и постройте гистограмму. На bare-metal - узкое нормальное распределение. При наличии гипервизора - бимодальное (быстрые вызовы кэшированных leaf и медленные с полным VM-exit). Python: Код:
# Пример скрипта для анализа результатов timing-замеровПроверьте согласованность CPUID leaf между собой. Запросите leaf 0x0 (Vendor ID), 0x1 (Feature Information с Hypervisor bit), 0x40000000 (Hypervisor Vendor), 0x40000001-0x40000010 (Hypervisor-specific). Несогласованность - например, Hypervisor bit сброшен, но leaf 0x40000000 возвращает валидный vendor string - указывает на неполный cloaking. Bash: Код:
# На Linux - cpuid utilityЕсли есть возможность снять дамп физической памяти (через PCILeech с Thunderbolt/USB3380/FPGA, inception через FireWire/Thunderbolt, или LiME для Linux - с оговоркой, что LiME работает из гостя и может быть обманут EPT), ищите артефакты гипервизора: Bash: Код:
# Поиск VMCS-структур в памятиПри физическом доступе подключите kernel debugger через serial/USB/network. Если хост bluepill'нут, debugger подключается к гостевой ОС внутри VM. Но определённые команды могут выявить несоответствия: Код: Код:
kd> rdmsr 0x3A ; IA32_FEATURE_CONTROL - проверка MSR Lock BitДля документирования находок при пентесте - маппинг на MITRE ATT&CK: Техника ATT&CKIDТактикаПрименение к гипервизорным руткитамRootkitT1014Defense EvasionБазовая категория - сокрытие присутствия на уровне VMMRun Virtual InstanceT1564.006Defense EvasionНепосредственно Blue Pill - перемещение ОС в VMSystem ChecksT1497.001Defense Evasion, DiscoveryPre-installation check: руткит проверяет наличие существующего гипервизора перед VMXON. Вспомогательная техника, не основной механизм атакиExploitation for Privilege EscalationT1068Privilege EscalationЭксплуатация уязвимостей для получения привилегий Ring -1Disable or Modify ToolsT1562.001Defense EvasionНейтрализация EDR/AV через EPT-манипуляцииNative APIT1106ExecutionИспользование нативных API ОС (например, NtSetSystemInformation) для загрузки драйвера-установщика гипервизора. Сами VMX-инструкции (VMXON, VMLAUNCH) - не OS API и не покрываются T1106 напрямую T1564.006 (Run Virtual Instance) - наиболее точное описание Blue Pill-атаки в терминологии ATT&CK. Примечательно, что эта техника относительно свежая во фреймворке, и далеко не все SOC-команды включают её в мониторинг. Если вы в blue team - проверьте. Bare-metal hypervisor security: перспективы защиты Рутковска в 2009 году сказала: «Я не верю, что мы увидим Blue Pill-подобное вредоносное ПО в дикой природе в ближайшее время, потому что обычное вредоносное ПО уровня ядра работает достаточно хорошо. Индустрия антивирусов не справляется даже с обнаружением этого класса угроз». Прошло 15+ лет - прогноз в целом подтвердился. Массового применения гипервизорных руткитов нет. Но в таргетированных атаках APT-группировок, которые, по данным Positive Technologies, обладают «достаточной технической квалификацией и финансовыми возможностями», этот вектор нельзя сбрасывать со счетов. Hyper-V's Virtual Secure Mode (VSM), Intel TDX (Trust Domain Extensions), AMD SEV (Secure Encrypted Virtualization) - всё это поднимает планку для атакующего. Но не устраняет фундаментальную проблему. Если атакующий получает контроль на уровне прошивки (UEFI rootkit), он может внедрить гипервизор до инициализации любых защитных механизмов. Именно поэтому Secure Boot с корректно настроенной цепочкой доверия и аппаратная аттестация через TPM остаются ключевыми элементами обороны от transparent malware virtualization. Заключение Гипервизорный руткит - не теоретическая страшилка из академических статей. Это рабочий класс атак с публично доступными PoC - от оригинального Blue Pill до современных Rust-based гипервизоров illusion-rs и matrix-rs, демонстрирующих EPT-hooking без модификации гостевой памяти. Для пентестера главный вывод прост: если вы ограничиваете анализ уровнем ядра, вы по определению не видите Ring -1. Обнаружение руткита гипервизора требует комбинации timing-анализа, CPUID fingerprinting, анализа физической памяти и (в идеале) аппаратных средств аттестации. Ни один метод не достаточен сам по себе, но вместе они дают рабочую методологию для выявления VMM компрометации. Начните с малого: включите проверку CPUID Hypervisor Bit и timing-анализ CPUID латентности в стандартный чеклист при исследовании скомпрометированных хостов. Если числа не сходятся - копайте в Ring -1. |
| Время: 21:56 |