Главная

Tuesday, 12 November 2024

Детектим виртуалку #2.

Привіт, привіт.

Не так давно я намагався впевнетись що ВМ сховати від зловреда майже неможливо. Тому вирішив ще перевірити як з цим справи в HyperV. На поміч мені став ChatGPT, бо в мене не було часу самому рискати по мережі, але результат очікуваний - для експериментів а якості пісочниці HyperV точно не годиться. Дивіться результати далі.

Щоб визначити, чи машина є віртуальною, будь хто може скористатися командою PowerShell, яка перевіряє наявність ознак віртуалізації. Один з найпростіших способів - це скористатися `Get-WmiObject` або `Get-CimInstance` для отримання інформації про BIOS чи апаратне забезпечення. Якщо сервер є віртуальним, у властивостях часто можна побачити такі рядки, як "Microsoft Corporation" для Hyper-V або інші специфічні ознаки.


Ось приклади команд, які можна виконати в PowerShell:

1. Використання класу Win32_BIOS

(Get-WmiObject -Class Win32_BIOS).SerialNumber

Значення `SerialNumber` часто вказує на віртуальну платформу. Наприклад, для Hyper-V він може починатися з `Microsoft Corporation`.


2. Перевірка за допомогою класу Win32_ComputerSystem

(Get-WmiObject -Class Win32_ComputerSystem).Manufacturer

Для віртуальних машин на Hyper-V `Manufacturer` зазвичай повертає `Microsoft Corporation`.


3. Використання класу Win32_SystemEnclosure

(Get-CimInstance -ClassName Win32_SystemEnclosure).ChassisTypes

Ця команда виведе код типу шасі. Для віртуальних машин Hyper-V зазвичай повертається значення `3` (для віртуального шасі).

4. Перевірка через властивості Hyper-V специфічного класу

Get-VM | Where-Object { $_.Name -eq (hostname) }

Ця команда підійде, якщо є доступ до PowerShell команд Hyper-V на хості. Команда спробує знайти віртуальну машину з ім’ям, яке відповідає поточному хосту.


Наступні команди також є корисними для перевірки, чи працює машина в середовищі Hyper-V. Розгляньмо кожну з них окремо:

5. Перевірка стану служби Virtual Machine Management Service (VMMS)

Get-Service -Name "VMMS"

Ця команда перевіряє, чи працює служба `VMMS`, яка відповідає за управління віртуальними машинами Hyper-V. Якщо служба працює, це може бути ознакою, що машина є Hyper-V хостом. Але це ще не точно вказує на те, що конкретна машина є віртуальною, оскільки `VMMS` може працювати на фізичному сервері, який виконує роль Hyper-V хоста.


6. Перевірка наявності простору імен WMI для Hyper-V

Get-WmiObject -Namespace root -Class __NAMESPACE | Where-Object { $_.Name -eq 'Virtualization' }

Ця команда перевіряє, чи існує простір імен `root\Virtualization` в WMI. Наявність цього простору імен є ознакою того, що система має встановлені компоненти Hyper-V, але знову ж таки, це більше свідчить про те, що машина може бути хостом для віртуалізації, а не обов’язково віртуальною машиною.


7. Запит до MSVM_ComputerSystem

Get-WmiObject -ComputerName localhost -Namespace root\Virtualization -Query "Select * from MSVM_ComputerSystem where Description like '%Virtual%'"

Цей запит звертається до класу `MSVM_ComputerSystem` у просторі імен Hyper-V і шукає записи, де опис містить слово `Virtual`. Це одна з найбільш корисних команд для визначення, чи є машина віртуальною, оскільки `MSVM_ComputerSystem` зазвичай використовується для інформації про віртуальні машини в середовищі Hyper-V. Якщо цей запит повертає значення, це майже напевне означає, що ви працюєте з віртуальною машиною Hyper-V.


То ж, як бачите, тільки powershell команд для визначення чи є система віртуальним хостом HyperV вдосталь. Єдине що 5-а та 6-а команди більше підходять для перевірки, чи може ваш хост сам виконувати роль Hyper-V хоста для інших ВМ.

Щасти вам.

No comments:

Post a Comment

А что вы думаете по этому поводу?