تکنیک Anti VM and Sandbox Evasion برای بد افزارهای شما
با روشی که در این مقاله به شما آموزش می دهیم ، می توانید از اجرای بدافزار شما در محیط های مجازی جهت فارنزیک یا موارد مشابه جلوگیری کنید....
تکنیک Anti VM and Sandbox Evasion برای جلوگیری از شناسایی بد افزارهای شما
در دنیای امروز که نرمافزارها به طور گستردهای در تمامی جوانب زندگی ما نفوذ کردهاند، یکی از موضوعات مهم و حیاتی برای توسعهدهندگان و متخصصان امنیت سایبری، محافظت از نرمافزارها در برابر تحلیلهای معکوس و ابزارهای مجازیسازی و محیطهای ایزوله (sandbox) است. تکنیکهای Anti-VM (مقابله با ماشین مجازی) و Sandbox Evasion (فرار از محیط ایزوله) به عنوان راهکارهایی برای محافظت از نرمافزارها در برابر تحلیلهای مخرب شناخته میشوند. در این مقاله، به بررسی جامع این تکنیکها در زبان سی پلاس پلاس پرداخته و روشهای مختلف پیادهسازی آنها را مورد بررسی قرار خواهیم داد.
Anti-VM (مقابله با ماشین مجازی)
ماشینهای مجازی ابزارهای محبوبی هستند که توسط محققان امنیتی و مهاجمان سایبری برای تحلیل و تست نرمافزارها مورد استفاده قرار میگیرند. یکی از روشهای متداول برای جلوگیری از تحلیل نرمافزار در این محیطها، استفاده از تکنیکهای Anti-VM است. این تکنیکها به نرمافزار امکان میدهند تا حضور خود در یک ماشین مجازی را شناسایی کرده و رفتار مناسبی از خود نشان دهد.
شناسایی ویژگیهای سختافزار مجازی
یکی از روشهای متداول برای تشخیص ماشین مجازی، بررسی ویژگیهای سختافزار سیستم است. به عنوان مثال، میتوان از اطلاعات CPU برای شناسایی استفاده کرد. بسیاری از ماشینهای مجازی، ویژگیهای خاصی را در سختافزار مجازیشان نشان میدهند که میتواند برای شناسایی آنها مفید باشد.
#include <iostream>
#include <intrin.h>
bool IsVM() {
int cpuInfo[4] = { -1 };
__cpuid(cpuInfo, 1);
bool hypervisorPresent = (cpuInfo[2] & (1 << 31)) != 0;
return hypervisorPresent;
}
int main() {
if (IsVM()) {
std::cout << "Running in a virtual machine." << std::endl;
} else {
std::cout << "Running on a physical machine." << std::endl;
}
return 0;
}
بررسی پیکربندی سیستم
ماشینهای مجازی معمولاً دارای پیکربندیهای خاصی هستند که میتوان آنها را شناسایی کرد. به عنوان مثال، بررسی تعداد هستههای پردازنده، مقدار حافظه رم، و دستگاههای سختافزاری متصل به سیستم میتواند به شناسایی ماشینهای مجازی کمک کند.
Sandbox Evasion (فرار از محیط ایزوله)
محیطهای ایزوله (sandbox) به منظور تحلیل و بررسی رفتار نرمافزارها در یک محیط کنترلشده و امن طراحی شدهاند. تکنیکهای Sandbox Evasion به نرمافزارها امکان میدهند تا از این محیطها فرار کنند یا رفتار مخرب خود را مخفی نگه دارند.
زمانسنجی غیرمعمول
یکی از روشهای معمول برای شناسایی محیطهای ایزوله، بررسی زمانبندی اجرای کد است. محیطهای ایزوله معمولاً باعث ایجاد تأخیر در اجرای کد میشوند. با استفاده از زمانسنجی میتوان این تأخیرها را شناسایی کرد و تشخیص داد که آیا نرمافزار در یک محیط ایزوله اجرا میشود یا خیر.
#include <iostream>
#include <chrono>
bool IsSandbox() {
auto start = std::chrono::high_resolution_clock::now();
for (volatile int i = 0; i < 1000000; ++i);
auto end = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
return duration > 100;
}
int main() {
if (IsSandbox()) {
std::cout << "Running in a sandbox." << std::endl;
} else {
std::cout << "Running in a normal environment." << std::endl;
}
return 0;
}
بررسی سرویسهای خاص
ماشینهای مجازی و محیطهای ایزوله معمولاً سرویسهای خاصی را اجرا میکنند. با استفاده از APIهای سیستمعامل میتوان این سرویسها را شناسایی کرد. به عنوان مثال، در ویندوز میتوان سرویسهای مرتبط با ماشینهای مجازی و محیطهای ایزوله را شناسایی کرد.
#include <windows.h>
#include <iostream>
#include <vector>
bool IsSandbox() {
std::vector<std::string> sandboxServices = { "VBoxService", "vmtools", "vmware", "vbox", "xenservice" };
for (const auto& service : sandboxServices) {
SC_HANDLE scm = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);
if (scm) {
SC_HANDLE svc = OpenService(scm, service.c_str(), SERVICE_QUERY_STATUS);
if (svc) {
CloseServiceHandle(svc);
CloseServiceHandle(scm);
return true;
}
CloseServiceHandle(scm);
}
}
return false;
}
int main() {
if (IsSandbox()) {
std::cout << "Running in a sandbox." << std::endl;
} else {
std::cout << "Running in a normal environment." << std::endl;
}
return 0;
}
ترکیب تکنیکهای Anti-VM و Sandbox Evasion
برای افزایش اثربخشی و اطمینان بیشتر، میتوان از ترکیبی از تکنیکهای Anti-VM و Sandbox Evasion استفاده کرد. با ترکیب این تکنیکها، نرمافزار میتواند به طور مؤثرتری محیطهای مجازی و ایزوله را شناسایی کند و از تحلیلهای مخرب جلوگیری کند.
نمونهای از ترکیب تکنیکها
#include <iostream>
#include <intrin.h>
#include <chrono>
#include <windows.h>
#include <vector>
bool IsVM() {
int cpuInfo[4] = { -1 };
__cpuid(cpuInfo, 1);
bool hypervisorPresent = (cpuInfo[2] & (1 << 31)) != 0;
return hypervisorPresent;
}
bool IsSandbox() {
auto start = std::chrono::high_resolution_clock::now();
for (volatile int i = 0; i < 1000000; ++i);
auto end = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
if (duration > 100) {
return true;
}
std::vector<std::string> sandboxServices = { "VBoxService", "vmtools", "vmware", "vbox", "xenservice" };
for (const auto& service : sandboxServices) {
SC_HANDLE scm = OpenSCManager(NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);
if (scm) {
SC_HANDLE svc = OpenService(scm, service.c_str(), SERVICE_QUERY_STATUS);
if (svc) {
CloseServiceHandle(svc);
CloseServiceHandle(scm);
return true;
}
CloseServiceHandle(scm);
}
}
return false;
}
int main() {
if (IsVM() || IsSandbox()) {
std::cout << "Running in a virtual machine or sandbox." << std::endl;
} else {
std::cout << "Running in a normal environment." << std::endl;
}
return 0;
}
تکنیکهای Anti-VM و Sandbox Evasion ابزارهای قدرتمندی برای محافظت از نرمافزارها در برابر تحلیلهای معکوس و ابزارهای مجازیسازی و محیطهای ایزوله هستند. با استفاده از این تکنیکها میتوان اطمینان حاصل کرد که نرمافزارها در محیطهای امن و کنترلشده اجرا نمیشوند و از تحلیلهای مخرب جلوگیری میشود. پیادهسازی این تکنیکها در زبان سی پلاس پلاس نیازمند دانش و تجربه در استفاده از APIهای سیستمعامل و تکنیکهای پیشرفته برنامهنویسی است. با این حال، با ترکیب تکنیکهای مختلف میتوان به نتایج بهتری دست یافت و نرمافزارها را در برابر تهدیدات مختلف محافظت کرد.
دیدگاه های مربوط به این مقاله (برای ارسال دیدگاه در سایت حتما باید عضو باشید و پروفایل کاربری شما تکمیل شده باشد)