From a37d7d3916dbea2449a9110c24b111dd9b2e2cb5 Mon Sep 17 00:00:00 2001 From: kernel <77142078+kernelwernel@users.noreply.github.com> Date: Mon, 7 Oct 2024 02:35:03 +0100 Subject: [PATCH 1/4] hyper-x version 3 --- README.md | 5 +- src/vmaware.hpp | 145 ++++++++++++++++++++++++------------------------ 2 files changed, 76 insertions(+), 74 deletions(-) diff --git a/README.md b/README.md index 8a68397..8e4b575 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,8 @@
- +

@@ -141,7 +142,7 @@ You can view the full docs [here](docs/documentation.md). All the details such a > Hyper-V has an obscure feature where if it's enabled in the host system, the CPU hardware values makes it look like the whole system is running inside Hyper-V, which isn't true. This makes it a challenge to determine whether the hardware values the library is collecting is either a real Hyper-V VM, or just the artifacts of what Hyper-V has left as a consequence of having it enabled in the host system. The reason why this is a problem is because the library might falsely conclude that your the host system is running in Hyper-V, which is a false positive. This is where the **Hyper-X** mechanism comes into play to distinguish between these two. This was designed by Requiem

- +
diff --git a/src/vmaware.hpp b/src/vmaware.hpp index fc37c98..f11cd21 100644 --- a/src/vmaware.hpp +++ b/src/vmaware.hpp @@ -574,17 +574,24 @@ struct VM { static flagset global_flags; // for certain techniques where the flags MUST be accessible // macro for bypassing unused parameter/variable warnings -#define UNUSED(x) ((void)(x)) + #define UNUSED(x) ((void)(x)) // likely and unlikely macros #if (LINUX) -#define VMAWARE_UNLIKELY(x) __builtin_expect(!!(x), 0) -#define VMAWARE_LIKELY(x) __builtin_expect(!!(x), 1) +# define VMAWARE_UNLIKELY(x) __builtin_expect(!!(x), 0) +# define VMAWARE_LIKELY(x) __builtin_expect(!!(x), 1) #else -#define VMAWARE_UNLIKELY -#define VMAWARE_LIKELY +# define VMAWARE_UNLIKELY +# define VMAWARE_LIKELY #endif + // specifically for util::hyper_x() and memo::hyperv + enum hyperx_state : u8 { + HYPERV_REAL_VM = 1, + HYPERV_ARTIFACT_VM, + UNKNOWN + }; + // various cpu operation stuff struct cpu { // cpuid leaf values @@ -1132,21 +1139,19 @@ struct VM { } }; - struct hyperv { - static bool is_hyperv_host; - static bool is_stored; + struct hyperx { + static hyperx_state state; - static bool fetch() { - return is_hyperv_host; + static hyperx_state fetch() { + return state; } - static void store(const bool p_is_hyperv_host) { - is_hyperv_host = p_is_hyperv_host; - is_stored = true; + static void store(const hyperx_state p_state) { + state = p_state; } static bool is_cached() { - return is_stored; + return (state == hyperx_state::UNKNOWN); } }; }; @@ -1701,24 +1706,51 @@ struct VM { * your the host system is running in Hyper-V, which is a false positive. This is where * the Hyper-X mechanism comes into play to distinguish between these two. * @author idea by Requiem (https://github.com/NotRequiem) - * @link graph to explain how this works: https://github.com/kernelwernel/VMAware/blob/main/assets/Hyper-X.png + * @link graph to explain how this works: https://github.com/kernelwernel/VMAware/blob/main/assets/Hyper-X_version_3.png */ [[nodiscard]] static bool hyper_x() { #if (!MSVC) return false; #else if (memo::hyperv::is_cached()) { - core_debug("HYPER_X: returned from cache = ", memo::hyperv::fetch()); - return memo::hyperv::fetch(); + core_debug("HYPER_X: returned from cache"); + return (memo::hyperv::fetch() == hyperx_state::HYPERV_ARTIFACT_VM); } - auto root_partition = []() -> bool { + // SMBIOS check + auto is_smbios_hyperv = []() -> bool { + const std::string smbios = SMBIOS_string(); + core_debug("HYPER_X: SMBIOS string = ", smbios); + return (smbios == "VIRTUAL MACHINE"); + }; + + + // motherboard check + auto is_motherboard_hyperv = []() -> bool { + const bool motherboard = motherboard_string(L"Microsoft Corporation"); + core_debug("HYPER_X: motherboard string match = ", motherboard); + return motherboard; + }; + + + // event log check (slow, so in last place) + auto is_event_log_hyperv = []() -> bool { + std::wstring logName = L"Microsoft-Windows-Kernel-PnP/Configuration"; + std::vector searchStrings = { L"Virtual_Machine", L"VMBUS" }; + + return (util::query_event_logs(logName, searchStrings)); + }; + + + // VMProtect method for Hyper-V artifact detection + auto is_root_partition = []() -> bool { u32 ebx, unused = 0; cpu::cpuid(unused, ebx, unused, unused, 0x40000003); return (ebx & 1); }; + auto eax = []() -> bool { char out[sizeof(int32_t) * 4 + 1] = { 0 }; // e*x size + number of e*x registers + null terminator cpu::cpuid((int*)out, cpu::leaf::hypervisor); @@ -1730,63 +1762,33 @@ struct VM { return ((eax == 11) || (eax == 12)); }; - auto cpu_vmid = []() -> bool { - const auto cpu = cpu::cpu_manufacturer(cpu::leaf::hypervisor); - - return ( - (cpu.at(0) == "Microsoft Hv") || - (cpu.at(1) == "Microsoft Hv") - ); - }; - - // must require at least 2 to continue - const u8 points = (root_partition() + eax() + cpu_vmid()); - - if (points >= 2) { - // SMBIOS check - auto is_smbios_hyperv = []() -> bool { - const std::string smbios = SMBIOS_string(); - core_debug("HYPER_X: SMBIOS string = ", smbios); - return (smbios == "VIRTUAL MACHINE"); - }; - - - // motherboard check - auto is_motherboard_hyperv = []() -> bool { - const bool motherboard = motherboard_string(L"Microsoft Corporation"); - core_debug("HYPER_X: motherboard string match = ", motherboard); - return motherboard; - }; - - - // event log check (slow, so in last place) - auto is_event_log_hyperv = []() -> bool { - std::wstring logName = L"Microsoft-Windows-Kernel-PnP/Configuration"; - std::vector searchStrings = { L"Virtual_Machine", L"VMBUS" }; - return (util::query_event_logs(logName, searchStrings)); - }; + const bool has_hyperv_indications = ( + is_smbios_hyperv() || + is_motherboard_hyperv() || + is_event_log_hyperv() || + is_root_partition() + ); + const bool is_real_hyperv_vm = (eax() && has_hyperv_indications); - // "if it's hyper-v and NOT an artifact" - const bool is_hyperv = ( - is_smbios_hyperv() || - is_motherboard_hyperv() || - is_event_log_hyperv() - ); + enum hyperx_state state; - memo::hyperv::store(is_hyperv); - - if (is_hyperv) { - return true; - } else { - core::add(HYPERV_ARTIFACT); - return false; - } + if (is_real_hyperv_vm) { + state = hyperx_state::HYPERV_REAL_VM; + } else { + state = hyperx_state::HYPERV_ARTIFACT_VM; } - memo::hyperv::store(false); - return false; + memo::hyperv::store(state); + + if (is_real_hyperv_vm) { + core::add(HYPERV); + return false; + } else { + core::add(HYPERV_ARTIFACT_VM); + return true; + } #endif } @@ -10430,14 +10432,13 @@ std::map VM::core::brand_scoreboard{ }; -// initial definitions for cache items +// initial definitions for cache items because ISO C++ forbids in-class initializations std::map VM::memo::cache_table; VM::flagset VM::memo::cache_keys = 0; std::string VM::memo::brand::brand_cache = ""; std::string VM::memo::multi_brand::brand_cache = ""; std::string VM::memo::cpu_brand::brand_cache = ""; -bool VM::memo::hyperv::is_hyperv_host = false; -bool VM::memo::hyperv::is_stored = false; +VM::hyperx_state VM::memo::hyperx::state = VM::hyperx_state::UNKNOWN; #ifdef __VMAWARE_DEBUG__ VM::u16 VM::total_points = 0; From 0cc0f67041c16b1146cc177a30e4381ded68f0a5 Mon Sep 17 00:00:00 2001 From: kernel <77142078+kernelwernel@users.noreply.github.com> Date: Tue, 8 Oct 2024 04:04:01 +0100 Subject: [PATCH 2/4] hyper-x changes, graph update, misc changes --- .github/PULL_REQUEST_TEMPLATE.md | 8 ++ .gitignore | 2 +- README.md | 11 +-- TODO.md | 5 +- assets/Hyper-X_version_3.drawio | 153 +++++++++++++++++++++++++++++++ assets/Hyper-X_version_3.png | Bin 0 -> 108173 bytes auxiliary/vmtest.cpp | 7 ++ docs/documentation.md | 8 +- src/vmaware.hpp | 28 ++++-- 9 files changed, 200 insertions(+), 22 deletions(-) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 assets/Hyper-X_version_3.drawio create mode 100644 assets/Hyper-X_version_3.png diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..1e4f548 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,8 @@ +# What does this PR do? +- [ ] Add a new technique +- [ ] Add a new feature +- [ ] Fix bugs +- [ ] Refactoring code +- [ ] Other + +# Briefly explain what this PR does: \ No newline at end of file diff --git a/.gitignore b/.gitignore index 444561e..fac57c9 100644 --- a/.gitignore +++ b/.gitignore @@ -57,5 +57,5 @@ cmake-build-*/ *copy.hpp personal_todo.md notes.txt -auxiliary/tests.cpp +auxiliary/test_template.cpp release_notes.md \ No newline at end of file diff --git a/README.md b/README.md index 8e4b575..e36c9ff 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,7 @@
- +

@@ -112,7 +111,7 @@ You can view the full docs [here](docs/documentation.md). All the details such a Who is this library for and what are the use cases?
-> It's designed for security researchers, VM engineers, gamer developers, and pretty much anybody who needs a practical and rock-solid VM detection mechanism in their project. For example, the library is suitable if you're making a VM and you're testing the effectiveness of concealing itself, if you're a game developer/proprietary software developer, the library is useful to thwart against reverse engineers. If you're a malware analyst and you want to check the concealment capability of your VM, this would be the perfect tool to benchmark how well-concealed your VM is against malware. Additionally, software could optimize performance or resource usage based on the detected environment, and some applications might want to restrict usage in VMs to prevent unauthorized distribution or testing. +> It's designed for security researchers, VM engineers, gamer developers, and pretty much anybody who needs a practical and rock-solid VM detection mechanism in their project. For example, the library is suitable if you're making a VM and you're testing the effectiveness of concealing itself. If you're a game developer/proprietary software developer, the library is useful to thwart against reverse engineers. If you're a malware analyst and you want to check the concealment capability of your VM, this would be the perfect tool to benchmark how well-concealed your VM is against malware. Additionally, software could optimize performance or resource usage based on the detected environment, and some applications might want to restrict usage in VMs to prevent unauthorized distribution or testing. @@ -164,10 +163,10 @@ You can view the full docs [here](docs/documentation.md). All the details such a
-Why GPL 3.0 and MIT? +Why GPL-3.0 and MIT?
-> I would've made it strictly MIT so proprietary software can make use of the library, but some of the techniques employed are from GPL 3.0 projects, and I have no choice but to use the same license for legal reasons. This gave me an idea to make an MIT version without all of the GPL code so it can also be used without forcing your code to be open-source. It should be noted that the MIT version removes 12 techniques out of 114 (as of 1.8 version), and the lesser the number of mechanisms, the less accurate the overall result might be. +> I would've made it strictly MIT so proprietary software can make use of the library, but some of the techniques employed are from GPL 3.0 projects, and I have no choice but to use the same license for legal reasons. This gave me an idea to make an MIT version without all of the GPL code so it can also be used without forcing your code to be open-source. It should be noted that the MIT version removes 12 techniques out of 116 (as of 1.9 version), and the lesser the number of techniques, the less accurate the overall result might be.
@@ -223,4 +222,4 @@ And if you found this project useful, a star would be appreciated :) ## Legal 📜 I am not responsible nor liable for any damage you cause through any malicious usage of this project. -License: GPL-3.0 \ No newline at end of file +License: GPL-3.0/MIT \ No newline at end of file diff --git a/TODO.md b/TODO.md index 8b5bfa8..cbaf6d8 100644 --- a/TODO.md +++ b/TODO.md @@ -43,16 +43,17 @@ - [ ] make a medium post about it - [ ] test the VM::modify_score() function - [ ] check if bios date in /sys/class/dmi/id/ could be useful under QEMU -- [ ] make the cli demo in the readme for the 1.9 version +- [X] make the cli demo in the readme for the 1.9 version - [X] fix the percentage thing for the disabled techniques - [X] adopt the firmware technique from the vmprotect source code leak -- [ ] update the Hyper-X graph with the cpu manufacturer part - [ ] add a .so, .dll, and .dylib shared object files in the release - [X] make a struct version as an alternative - [X] add the license style like in ffmpeg https://github.com/FFmpeg/FFmpeg/tree/master?tab=License-1-ov-file - [ ] fix the issue of VM::QEMU_USB being ultra slow - [X] make a MIT transformer python script from GPL to MIT - [ ] /sys/class/dmi/id/product_name check this in qemu +- [ ] update sourceforge +- [X] fix the VM::vmaware struct # Distant plans diff --git a/assets/Hyper-X_version_3.drawio b/assets/Hyper-X_version_3.drawio new file mode 100644 index 0000000..a873361 --- /dev/null +++ b/assets/Hyper-X_version_3.drawio @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/Hyper-X_version_3.png b/assets/Hyper-X_version_3.png new file mode 100644 index 0000000000000000000000000000000000000000..01cc5b0e369ec1ba021bb947887bdaf454b12cfd GIT binary patch literal 108173 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�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 # vmaware struct -If you prefer having an object to store all the relevant information about the program's environment, you can use the `VM::vmaware` struct: +If you prefer having an object to store all the relevant information about the program's environment instead of calling static member functions, you can use the `VM::vmaware` struct: ```cpp struct vmaware { + std::string brand; + std::string type; + std::string conclusion; bool is_vm; std::uint8_t percentage; std::uint8_t detected_count; std::uint8_t technique_count; - std::string brand; - std::string type; - std::string conclusion; }; ``` diff --git a/src/vmaware.hpp b/src/vmaware.hpp index f11cd21..d0f8679 100644 --- a/src/vmaware.hpp +++ b/src/vmaware.hpp @@ -1706,6 +1706,7 @@ struct VM { * your the host system is running in Hyper-V, which is a false positive. This is where * the Hyper-X mechanism comes into play to distinguish between these two. * @author idea by Requiem (https://github.com/NotRequiem) + * @returns boolean, true = Hyper-V artifact, false = Real Hyper-V VM * @link graph to explain how this works: https://github.com/kernelwernel/VMAware/blob/main/assets/Hyper-X_version_3.png */ [[nodiscard]] static bool hyper_x() { @@ -1751,6 +1752,7 @@ struct VM { }; + // check if eax is either 11 or 12 after running VM::HYPERVISOR_STR technique auto eax = []() -> bool { char out[sizeof(int32_t) * 4 + 1] = { 0 }; // e*x size + number of e*x registers + null terminator cpu::cpuid((int*)out, cpu::leaf::hypervisor); @@ -1762,6 +1764,13 @@ struct VM { return ((eax == 11) || (eax == 12)); }; + const bool eax_result = eax(); + + // neither an artifact nor a real VM + if (!eax_result) { + memo::hyperv::store(hyperx_state::UNKNOWN); + return false; + } const bool has_hyperv_indications = ( is_smbios_hyperv() || @@ -1770,24 +1779,27 @@ struct VM { is_root_partition() ); - const bool is_real_hyperv_vm = (eax() && has_hyperv_indications); + const bool is_real_hyperv_vm = (eax_result && has_hyperv_indications); enum hyperx_state state; if (is_real_hyperv_vm) { state = hyperx_state::HYPERV_REAL_VM; + core::add(HYPERV); } else { state = hyperx_state::HYPERV_ARTIFACT_VM; + core::add(HYPERV_ARTIFACT_VM); } memo::hyperv::store(state); - if (is_real_hyperv_vm) { - core::add(HYPERV); - return false; - } else { - core::add(HYPERV_ARTIFACT_VM); - return true; + // false means it's an artifact, which is what the + // point of this whole function is supposed to do + switch (state) { + case hyperx_state::HYPERV_ARTIFACT_VM: return true; + case hyperx_state::HYPERV_REAL_VM: return false; + case hyperx_state::UNKNOWN: return false; + default: return false; } #endif } @@ -10346,8 +10358,6 @@ struct VM { u8 detected_count; u8 technique_count; - vmaware() = default; - template vmaware(Args ...args) { flagset flags = core::arg_handler(args...); From c2519b593a29297541e77b891bb82390de976f66 Mon Sep 17 00:00:00 2001 From: kernel <77142078+kernelwernel@users.noreply.github.com> Date: Tue, 8 Oct 2024 04:24:55 +0100 Subject: [PATCH 3/4] memoization fix --- src/vmaware.hpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/vmaware.hpp b/src/vmaware.hpp index d0f8679..781a82c 100644 --- a/src/vmaware.hpp +++ b/src/vmaware.hpp @@ -586,7 +586,7 @@ struct VM { #endif // specifically for util::hyper_x() and memo::hyperv - enum hyperx_state : u8 { + enum class hyperx_state : u8 { HYPERV_REAL_VM = 1, HYPERV_ARTIFACT_VM, UNKNOWN @@ -1151,7 +1151,7 @@ struct VM { } static bool is_cached() { - return (state == hyperx_state::UNKNOWN); + return (state != hyperx_state::UNKNOWN); } }; }; @@ -1713,9 +1713,9 @@ struct VM { #if (!MSVC) return false; #else - if (memo::hyperv::is_cached()) { + if (memo::hyperx::is_cached()) { core_debug("HYPER_X: returned from cache"); - return (memo::hyperv::fetch() == hyperx_state::HYPERV_ARTIFACT_VM); + return (memo::hyperx::fetch() == hyperx_state::HYPERV_ARTIFACT_VM); } @@ -1768,7 +1768,7 @@ struct VM { // neither an artifact nor a real VM if (!eax_result) { - memo::hyperv::store(hyperx_state::UNKNOWN); + memo::hyperx::store(hyperx_state::UNKNOWN); return false; } @@ -1791,7 +1791,7 @@ struct VM { core::add(HYPERV_ARTIFACT_VM); } - memo::hyperv::store(state); + memo::hyperx::store(state); // false means it's an artifact, which is what the // point of this whole function is supposed to do @@ -10350,13 +10350,13 @@ struct VM { struct vmaware { - std::string brand; - std::string type; - std::string conclusion; bool is_vm; u8 percentage; u8 detected_count; u8 technique_count; + std::string brand; + std::string type; + std::string conclusion; template vmaware(Args ...args) { From 8edc0aeaa51849c8cb4cd5ce2b2b6f62cb6a04c9 Mon Sep 17 00:00:00 2001 From: kernel <77142078+kernelwernel@users.noreply.github.com> Date: Tue, 8 Oct 2024 04:45:15 +0100 Subject: [PATCH 4/4] padding fix --- src/vmaware.hpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/vmaware.hpp b/src/vmaware.hpp index 781a82c..740c212 100644 --- a/src/vmaware.hpp +++ b/src/vmaware.hpp @@ -1788,7 +1788,7 @@ struct VM { core::add(HYPERV); } else { state = hyperx_state::HYPERV_ARTIFACT_VM; - core::add(HYPERV_ARTIFACT_VM); + core::add(HYPERV_ARTIFACT); } memo::hyperx::store(state); @@ -10348,15 +10348,15 @@ struct VM { else { return inside_vm; } } - + #pragma pack(push, 1) struct vmaware { + std::string brand; + std::string type; + std::string conclusion; bool is_vm; u8 percentage; u8 detected_count; u8 technique_count; - std::string brand; - std::string type; - std::string conclusion; template vmaware(Args ...args) { @@ -10371,6 +10371,7 @@ struct VM { technique_count = VM::technique_count; } }; + #pragma pack(pop) }; MSVC_ENABLE_WARNING(ASSIGNMENT_OPERATOR NO_INLINE_FUNC SPECTRE)