Введение
В этой статье я расскажу, как сделать "undetectable" виртуальную машину, зачем это нужно, что такое харденинг, как сделать свою ВМ "закаленной", вывод о харденинге виртуальных сред.
Зачем это нужно?
В этой статье я расскажу, как сделать "undetectable" виртуальную машину, зачем это нужно, что такое харденинг, как сделать свою ВМ "закаленной", вывод о харденинге виртуальных сред.
Зачем это нужно?
Многие пользователи, которые сталкивались с виртуальными машинами даже не задумывались, что их очень легко обнаружить. Их выдают самые простые вещи - названия жестких дисков, сигнатуры MAC-адресов и много чего еще! Но при анализе вредоносного ПО, его реверсинга такие мелочи очень важны. Некоторые программы имеют встроенные средства защиты от использования на ВМ(например предоставляемые VMProtect или Themida). Если они обнаружат, что запущены в ВМ они могут изменить свое поведение, либо вовсе выйти с "0xDEADC0DE". Чтобы не допустить этого многим специалистам приходится прибегать к "харденингу".
Что такое харденинг?
Харденинг ВМ - это процесс «укрепления» безопасности виртуальной среды за счет минимизации её поверхности атаки. Т.е это процесс превращения виртуальной машины в как бы очень крепкую клетку из который очень сложно либо невозможно выбраться. Это делается чтобы при анализе вредоносное ПО не смогло нанести урон нашему хосту. Всего харденинг состоит из нескольких этапов.
- Уменьшение уязвимостей: Отключение лишних служб, портов и функций (например, общих папок, буфера обмена или Drag-and-Drop между гостевой и хостовой ОС), которые могут быть использованы для выхода за пределы ВМ.
- Скрытие признаков виртуализации: Если программа видит, что она запущена в VM (через проверку специфических драйверов, имен процессов типа vmwp.exe или инструкций процессора), она может выдать ошибку. Харденинг позволяет скрыть эти маркеры, чтобы программа «думала», что работает на реальном железе.
- Изоляция: Настройка строгих лимитов ресурсов и прав доступа, чтобы при компрометации одной ВМ атакующий не смог получить доступ к гипервизору или другим машинам.
В этой статье мы рассмотрим реализацию первых двух пунктов на основе Windows 10 + VMWare.
Как сделать свою ВМ "закаленной"
В первую очередь вам необходимо начать с выбора образа Windows. Не нужно ставить какие то кастомные сборки, найдите наиболее чистый образ какой нибудь "прошки", этого будет достаточно. Я лично буду использовать Windows 10 Pro от Марка Аддерли.
После установки образа себе на компьютер вам необходимо ПРАВИЛЬНО установить его в виртуальную машину.
- Начните создание новой виртуальной машины - File -> New Virtual Machine(Ctrl+N)
- На выборе способа установки выбирайте CUSTOM (ADVANCED) ! ! !. Если вы выберите автоматическую установку у вас будет автоматически установлены VMWare Tools, что скомпрометирует нашу ВМ.
- Шагаем до пункта о установке системы. Здесь нам необходимо выбрать "I will install the operating system later." чтобы исключить установку VMWare Tools.
- В следующем пункте выбираем Microsoft WIndows и издание вашего образа, в моем случаи это WIndows 10 x64.
- Шагаем до пункта о выборе BIOS. Выбираем UEFI(ставим secure boot по желанию)
- Шагаем до пункта выбора сети. Здесь ставим NAT.
- Шагаем до пункта выбора типа диска. Выбираем SCSI
- После установки нам необходимо зарандомить MAC-адрес, чтобы исключить сигнатуру VMWare. Ваш MAC-адрес не должен соответствовать паттернам. Просто вручную измените вторые 2 цифры MAC н.п на 33 22 11
- 00:50:XX:XX:XX:XX
- 00:0с:XX:XX:XX:XX
- Не забудьте в настройках ВМ -> CD/DVD(SATA) выбрать свой ISO-образ.
И так мы установили винду. Давайте зафиксируем промежуточные результаты с помощью pafish - утилиты для теста виртуальной машины.
У нас есть детекты. Некоторые из них некритичны, а некоторые выдают нас с потрохами. Давайте исправим большинство из них.
Для этой задачи нам понадобится VmwareHardenedLoader . Драйвер VmLoader патчит (изменяет) таблицу SystemFirmwareTable во время выполнения, удаляя все обнаруживаемые сигнатуры, такие как «VMware», «Virtual» и «VMware». Нам необходимо установить его на нашу виртуалку. Для этого нам надо сначала скачать лоадер с гитхаба и распаковать куда угодно. После загрузки заходим в папку с лоадер -> bin -> и запускаем от имени администратора install.bat.
После установки, которое будет сопровождено таким окном - нажимаем любую кнопку и перезагружаем систему.
После перезагрузки мы можем смело выключать ВМ(=)) т.к нам необходимо будет работать с .vmx - основной конфигурацией виртуалки. Правой кнопкой мыши по виртуалке -> Open VM directory -> в открытой директории открываем файл НАЗВАНИЕ_ВМ.vmx в любом удобном вам текстовом редакторе(для меня это VS CODE). В нем в конце файла добавляем данные строки.
hypervisor.cpuid.v0 = "FALSE"
board-id.reflectHost = "TRUE"
hw.model.reflectHost = "TRUE"
serialNumber.reflectHost = "TRUE"
smbios.reflectHost = "TRUE"
SMBIOS.noOEMStrings = "TRUE"
isolation.tools.getPtrLocation.disable = "TRUE"
isolation.tools.setPtrLocation.disable = "TRUE"
isolation.tools.setVersion.disable = "TRUE"
isolation.tools.getVersion.disable = "TRUE"
monitor_control.disable_directexec = "TRUE"
monitor_control.disable_chksimd = "TRUE"
monitor_control.disable_ntreloc = "TRUE"
monitor_control.disable_selfmod = "TRUE"
monitor_control.disable_reloc = "TRUE"
monitor_control.disable_btinout = "TRUE"
monitor_control.disable_btmemspace = "TRUE"
monitor_control.disable_btpriv = "TRUE"
monitor_control.disable_btseg = "TRUE"
monitor_control.restrict_backdoor = "TRUE"
scsi0:0.productID = "Tencent SSD"
scsi0:0.vendorID = "Tencent"
Код
board-id.reflectHost = "TRUE"
hw.model.reflectHost = "TRUE"
serialNumber.reflectHost = "TRUE"
smbios.reflectHost = "TRUE"
SMBIOS.noOEMStrings = "TRUE"
isolation.tools.getPtrLocation.disable = "TRUE"
isolation.tools.setPtrLocation.disable = "TRUE"
isolation.tools.setVersion.disable = "TRUE"
isolation.tools.getVersion.disable = "TRUE"
monitor_control.disable_directexec = "TRUE"
monitor_control.disable_chksimd = "TRUE"
monitor_control.disable_ntreloc = "TRUE"
monitor_control.disable_selfmod = "TRUE"
monitor_control.disable_reloc = "TRUE"
monitor_control.disable_btinout = "TRUE"
monitor_control.disable_btmemspace = "TRUE"
monitor_control.disable_btpriv = "TRUE"
monitor_control.disable_btseg = "TRUE"
monitor_control.restrict_backdoor = "TRUE"
scsi0:0.productID = "Tencent SSD"
scsi0:0.vendorID = "Tencent"
Код
Код:
hypervisor.cpuid.v0 = "FALSE"
board-id.reflectHost = "TRUE"
hw.model.reflectHost = "TRUE"
serialNumber.reflectHost = "TRUE"
smbios.reflectHost = "TRUE"
SMBIOS.noOEMStrings = "TRUE"
isolation.tools.getPtrLocation.disable = "TRUE"
isolation.tools.setPtrLocation.disable = "TRUE"
isolation.tools.setVersion.disable = "TRUE"
isolation.tools.getVersion.disable = "TRUE"
monitor_control.disable_directexec = "TRUE"
monitor_control.disable_chksimd = "TRUE"
monitor_control.disable_ntreloc = "TRUE"
monitor_control.disable_selfmod = "TRUE"
monitor_control.disable_reloc = "TRUE"
monitor_control.disable_btinout = "TRUE"
monitor_control.disable_btmemspace = "TRUE"
monitor_control.disable_btpriv = "TRUE"
monitor_control.disable_btseg = "TRUE"
monitor_control.restrict_backdoor = "TRUE"
scsi0:0.productID = "Tencent SSD"
scsi0:0.vendorID = "Tencent"
Теперь мы можем запускать ВМ и проверять наши результаты.
И чудо! Количество детектов снизилось >2 раза хотя можно сказать что их нет вообще. Так можно сказать из за того, что 1 детект нельзя исправить без добавления дополнительной прослойки между гипервизором и ВМ, 2 детект исправляется выставлением дискового пространства >100ГБ, 3 детект исправляется так же как и 1. Итого: PROFIT!
Вывод
На данный момент харденинг виртуальных сред является одним из самых нужных навыков пентестера, реверс-инженера, без него щас никуда! Процесс харденинга никогда не был таким простым чем щас. Если у вас есть предложения, отзыв о данной статье жду обратную связь в комментариях.















Комментарии 0