exploit paylaşım grubumuz: t.me/HTTPwnn

Malware Anti-VM

  • Konu başlatıcı Konu başlatıcı sh3d0w
  • Başlangıç Tarihi Başlangıç Tarihi

sh3d0w

WarNight Member
Katılım
25 Haz 2026
Mesaj
65
Reaksiyon
40
Puan
18
xentr_thread_starter

Anti-VM Modülü Nedir? Nasıl Çalışır?​


1. Anti-VM Nedir ve Ne İşe Yarar?​

Anti-VM (Sanal Makine Karşıtı), bir yazılımın sanal makine (VM) ortamında mı yoksa gerçek bir fiziksel bilgisayarda mı çalıştığını tespit etmek için kullanılan tekniklerin genel adıdır. Peki bunu neden yaparız?

  • Analizden Kaçış: Zararlı yazılım analistleri, malware'leri genellikle VM'lerde çalıştırıp inceler. Eğer malware, kendisinin bir VM'de analiz edildiğini anlarsa, ya hiç çalışmaz ya da zararsız bir şekilde taklit (evasion) yapar.
  • Lisans Koruması: Bazı yazılımlar, sanal ortamlarda çalıştırılmasını engelleyerek korsan kullanımı zorlaştırır.
  • Oyun Hileleri: Bazı oyunlar, VM'lerde çalışan hile araçlarını engellemek için benzer yöntemler kullanır.
Not: Bu kod tamamen eğitim amaçlıdır. Amacı, güvenlik araştırmacılarına bu tespit mekanizmalarını öğretmektir.

2. Peki Bu Kod Hangi Dille Yazıldı?​

Foruma da yazdığım gibi, bu işler için derlenen (compiled) dillere ihtiyacımız var. Ben bu modülü Rust ile yazdım.

  • Rust (Bellek güvenliği manyağı, son zamanların gözdesi): C/C++'ın performansını verir ama bellek hatalarına (segmentation fault, buffer overflow) karşı derleme zamanında güvence sağlar. Ayrıca winapi ve sysinfo gibi kütüphanelerle Windows'un alt seviyesine rahatça inebiliyoruz.

3. Düşmanı Tanımak: VM'ler Nasıl Tespit Edilir?​

Bir VM'yi tespit etmek için tek bir yöntem yeterli değildir. Bu yüzden 6 farklı katman kullandım. Her biri, VM'lerin gerçek donanımdan farklı davranışlarından yararlanır.

3.1. Kayıt Defteri (Registry) Kontrolü​

Sanal makineler, Windows Registry'sine kendilerine özel anahtarlar bırakır. Mesela VMware Tools veya VirtualBox Guest Additions yüklüyse, bunların izleri HKEY_LOCAL_MACHINE altında kalır. Kodumda şu anahtarları arıyorum:

rust
let keys_to_check = [
"HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0\\Scsi Bus 0\\Target Id 0\\Logical Unit Id 0",
"SOFTWARE\\VMware\\VMware Tools",
"SOFTWARE\\Oracle\\VirtualBox\\GuestAdditions",
];
Bunlardan biri varsa, sistem büyük ihtimalle VM'dir. Pastane işi yani, ama ilk filtreleme için iyi.

3.2. Çalışan İşlemler (Process) Kontrolü​

VM'lerin arka planda çalışan yardımcı programları (Guest Additions/Tools) vardır. Bu işlemleri tarıyorum:

rust
let vm_processes = [
"vmtoolsd.exe", // VMware
"vboxservice.exe", // VirtualBox
"qemu-ga.exe", // QEMU
"prl_tools.exe", // Parallels
];
Bu işlemlerden biri çalışıyorsa, %99 VM'dir.

3.3. Donanım Bilgileri (Hardware) Kontrolü​

Burada üç farklı kriteri kontrol ediyorum:

  • CPU Markası: İşlemci markasında "VMware", "Virtual", "QEMU" gibi ifadeler ararım.
  • RAM Miktarı: VM'ler genelde düşük RAM'le (2GB'dan az) kurulur. Eğer toplam RAM 2 GB'ın altındaysa, VM olma ihtimali yüksektir.
  • Bilgisayar Adı: "VM-", "SANDBOX", "TEST" gibi isimler, sistemin analiz ortamı olduğunu gösterir.

3.4. SMBIOS (System Management BIOS) Kontrolü​

Burada wmic komutunu kullanarak sistemin üretici bilgilerini ve seri numarasını sorguluyorum. VM'ler genellikle "VMware", "VirtualBox", "QEMU" gibi üretici bilgisi döndürür. Hatta seri numarası bazen "0" veya "VMware-..." gibi sabit değerlerdir.

rust
Command::new("wmic").args(&["csproduct", "get", "vendor"]);
Command::new("wmic").args(&["bios", "get", "serialnumber"]);

3.5. RDTSC (Time Stamp Counter) - Zamanlama Testi​

Bu favorimdir! RDTSC, işlemcinin geçen saat döngüsü sayısını veren bir talimattır. VM'lerde bu talimat gerçek donanıma göre daha yavaş çalışır çünkü hypervisor (sanal ortam yöneticisi) araya girer.

Kodda şöyle yapıyorum:

  1. RDTSC ile başlangıç döngü sayısını al.
  2. 100 mikrosaniye bekle.
  3. Tekrar RDTSC al.
  4. Farkı hesapla.
rust
let start = _rdtsc();
thread::sleep(Duration::from_micros(100));
let end = _rdtsc();
let diff = end - start;
if diff > 2_000_000 { // VM'de bu fark çok daha büyük çıkar
return true;
}
VM'lerde zamanlama hassasiyeti bozuk olduğu için bu fark genellikle 2 milyon döngüden fazla olur.

3.6. Disk Boyutu Kontrolü​

VM'ler genellikle 60 GB'tan küçük disklerle kurulur. Çünkü analistler, malware'leri hızlıca çalıştırıp atmak için küçük diskler kullanır.

rust
if total_space < 60_000_000_000 { // 60 GB
return true;
}

4. Bu Kodun Çalışma Mantığı (Akış)​

  1. AntiVM::new() ile yeni bir dedektör oluştururum.
  2. check_all() metodunu çağırarak yukarıdaki 6 kontrolü sırayla çalıştırırım.
  3. Herhangi bir kontrol true dönerse, detected bayrağını true yaparım.
  4. handle_detection() ile eğer VM tespit edildiyse, programın davranışını değiştiririm. (Bu örnekte sadece mesaj basar ve boş bir döngü başlatır.)
  5. start_runtime_check() ise arka planda her 30 saniyede bir kontrol yapmaya devam eder.

5. API Çağrılarında Altın Kural: Az Ateş, Az Duman​

Bu kodda winapi ve sysinfo gibi kütüphaneleri kullandım. Ancak ne kadar az API çağrısı yaparsak, güvenlik yazılımlarının (EDR, XDR) bizi yakalama ihtimali o kadar azalır. Bu yüzden:

  • Mümkünse direkt syscall yaparak kullanıcı modundaki hook'lardan sıyrılırız.
  • Registry ve process sorguları gibi işlemler, zaten meşru yazılımların da yaptığı işlemlerdir. Bu yüzden çok şüpheli görünmezler.

6. Bu Kodun Zayıf Noktaları (Bypass Yöntemleri)​

Bu kod kusursuz değil. Bir VM yöneticisi (veya analist) aşağıdaki yöntemlerle bu tespitleri atlatabilir:

  • VM ayarlarını değiştirip CPU markasını gizleyebilir.
  • Registry anahtarlarını silebilir veya düzenleyebilir.
  • VM araçlarını (Guest Additions) kaldırabilir.
  • RDTSC zamanlamasını sanal ortamda düzeltebilir.
  • Disk boyutunu büyütebilir.
Eğitim amacıyla bu açıkları bilerek bıraktım. Gerçek bir koruma sistemi için bu kontrollerin çok daha karmaşık olması gerekir.

7. Sırada Ne Var?​

Bu modülü daha da geliştirebiliriz:

  • AMSI.dll'yi Kör Etmek: Windows'un PowerShell ve .NET tabanlı zararlıları tarayan mekanizmasını devre dışı bırakmak.
  • ETW'lere Saldırı (Event Tracing for Windows): Windows'un olay günlüğü mekanizmalarını manipüle etmek.
  • Process Hollowing veya Process Ghosting gibi tekniklerle, tespit edilse bile kendimizi meşru bir sürecin içine saklamak.
Bir dahaki sefere Rust ile Process Injection veya C2 Server bağlantısı nasıl yapılır, onları anlatırım. Yeter ki eve gelelim, tamam mı?
 

Ekli Dosyalar

Anti-VM Modülü Nedir? Nasıl Çalışır?​


1. Anti-VM Nedir ve Ne İşe Yarar?​

Anti-VM (Sanal Makine Karşıtı), bir yazılımın sanal makine (VM) ortamında mı yoksa gerçek bir fiziksel bilgisayarda mı çalıştığını tespit etmek için kullanılan tekniklerin genel adıdır. Peki bunu neden yaparız?

  • Analizden Kaçış: Zararlı yazılım analistleri, malware'leri genellikle VM'lerde çalıştırıp inceler. Eğer malware, kendisinin bir VM'de analiz edildiğini anlarsa, ya hiç çalışmaz ya da zararsız bir şekilde taklit (evasion) yapar.
  • Lisans Koruması: Bazı yazılımlar, sanal ortamlarda çalıştırılmasını engelleyerek korsan kullanımı zorlaştırır.
  • Oyun Hileleri: Bazı oyunlar, VM'lerde çalışan hile araçlarını engellemek için benzer yöntemler kullanır.
Not: Bu kod tamamen eğitim amaçlıdır. Amacı, güvenlik araştırmacılarına bu tespit mekanizmalarını öğretmektir.

2. Peki Bu Kod Hangi Dille Yazıldı?​

Foruma da yazdığım gibi, bu işler için derlenen (compiled) dillere ihtiyacımız var. Ben bu modülü Rust ile yazdım.

  • Rust (Bellek güvenliği manyağı, son zamanların gözdesi): C/C++'ın performansını verir ama bellek hatalarına (segmentation fault, buffer overflow) karşı derleme zamanında güvence sağlar. Ayrıca winapi ve sysinfo gibi kütüphanelerle Windows'un alt seviyesine rahatça inebiliyoruz.

3. Düşmanı Tanımak: VM'ler Nasıl Tespit Edilir?​

Bir VM'yi tespit etmek için tek bir yöntem yeterli değildir. Bu yüzden 6 farklı katman kullandım. Her biri, VM'lerin gerçek donanımdan farklı davranışlarından yararlanır.

3.1. Kayıt Defteri (Registry) Kontrolü​

Sanal makineler, Windows Registry'sine kendilerine özel anahtarlar bırakır. Mesela VMware Tools veya VirtualBox Guest Additions yüklüyse, bunların izleri HKEY_LOCAL_MACHINE altında kalır. Kodumda şu anahtarları arıyorum:

rust
let keys_to_check = [
"HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0\\Scsi Bus 0\\Target Id 0\\Logical Unit Id 0",
"SOFTWARE\\VMware\\VMware Tools",
"SOFTWARE\\Oracle\\VirtualBox\\GuestAdditions",
];
Bunlardan biri varsa, sistem büyük ihtimalle VM'dir. Pastane işi yani, ama ilk filtreleme için iyi.

3.2. Çalışan İşlemler (Process) Kontrolü​

VM'lerin arka planda çalışan yardımcı programları (Guest Additions/Tools) vardır. Bu işlemleri tarıyorum:

rust
let vm_processes = [
"vmtoolsd.exe", // VMware
"vboxservice.exe", // VirtualBox
"qemu-ga.exe", // QEMU
"prl_tools.exe", // Parallels
];
Bu işlemlerden biri çalışıyorsa, %99 VM'dir.

3.3. Donanım Bilgileri (Hardware) Kontrolü​

Burada üç farklı kriteri kontrol ediyorum:

  • CPU Markası: İşlemci markasında "VMware", "Virtual", "QEMU" gibi ifadeler ararım.
  • RAM Miktarı: VM'ler genelde düşük RAM'le (2GB'dan az) kurulur. Eğer toplam RAM 2 GB'ın altındaysa, VM olma ihtimali yüksektir.
  • Bilgisayar Adı: "VM-", "SANDBOX", "TEST" gibi isimler, sistemin analiz ortamı olduğunu gösterir.

3.4. SMBIOS (System Management BIOS) Kontrolü​

Burada wmic komutunu kullanarak sistemin üretici bilgilerini ve seri numarasını sorguluyorum. VM'ler genellikle "VMware", "VirtualBox", "QEMU" gibi üretici bilgisi döndürür. Hatta seri numarası bazen "0" veya "VMware-..." gibi sabit değerlerdir.

rust
Command::new("wmic").args(&["csproduct", "get", "vendor"]);
Command::new("wmic").args(&["bios", "get", "serialnumber"]);

3.5. RDTSC (Time Stamp Counter) - Zamanlama Testi​

Bu favorimdir! RDTSC, işlemcinin geçen saat döngüsü sayısını veren bir talimattır. VM'lerde bu talimat gerçek donanıma göre daha yavaş çalışır çünkü hypervisor (sanal ortam yöneticisi) araya girer.

Kodda şöyle yapıyorum:

  1. RDTSC ile başlangıç döngü sayısını al.
  2. 100 mikrosaniye bekle.
  3. Tekrar RDTSC al.
  4. Farkı hesapla.
rust
let start = _rdtsc();
thread::sleep(Duration::from_micros(100));
let end = _rdtsc();
let diff = end - start;
if diff > 2_000_000 { // VM'de bu fark çok daha büyük çıkar
return true;
}
VM'lerde zamanlama hassasiyeti bozuk olduğu için bu fark genellikle 2 milyon döngüden fazla olur.

3.6. Disk Boyutu Kontrolü​

VM'ler genellikle 60 GB'tan küçük disklerle kurulur. Çünkü analistler, malware'leri hızlıca çalıştırıp atmak için küçük diskler kullanır.

rust
if total_space < 60_000_000_000 { // 60 GB
return true;
}

4. Bu Kodun Çalışma Mantığı (Akış)​

  1. AntiVM::new() ile yeni bir dedektör oluştururum.
  2. check_all() metodunu çağırarak yukarıdaki 6 kontrolü sırayla çalıştırırım.
  3. Herhangi bir kontrol true dönerse, detected bayrağını true yaparım.
  4. handle_detection() ile eğer VM tespit edildiyse, programın davranışını değiştiririm. (Bu örnekte sadece mesaj basar ve boş bir döngü başlatır.)
  5. start_runtime_check() ise arka planda her 30 saniyede bir kontrol yapmaya devam eder.

5. API Çağrılarında Altın Kural: Az Ateş, Az Duman​

Bu kodda winapi ve sysinfo gibi kütüphaneleri kullandım. Ancak ne kadar az API çağrısı yaparsak, güvenlik yazılımlarının (EDR, XDR) bizi yakalama ihtimali o kadar azalır. Bu yüzden:

  • Mümkünse direkt syscall yaparak kullanıcı modundaki hook'lardan sıyrılırız.
  • Registry ve process sorguları gibi işlemler, zaten meşru yazılımların da yaptığı işlemlerdir. Bu yüzden çok şüpheli görünmezler.

6. Bu Kodun Zayıf Noktaları (Bypass Yöntemleri)​

Bu kod kusursuz değil. Bir VM yöneticisi (veya analist) aşağıdaki yöntemlerle bu tespitleri atlatabilir:

  • VM ayarlarını değiştirip CPU markasını gizleyebilir.
  • Registry anahtarlarını silebilir veya düzenleyebilir.
  • VM araçlarını (Guest Additions) kaldırabilir.
  • RDTSC zamanlamasını sanal ortamda düzeltebilir.
  • Disk boyutunu büyütebilir.
Eğitim amacıyla bu açıkları bilerek bıraktım. Gerçek bir koruma sistemi için bu kontrollerin çok daha karmaşık olması gerekir.

7. Sırada Ne Var?​

Bu modülü daha da geliştirebiliriz:

  • AMSI.dll'yi Kör Etmek: Windows'un PowerShell ve .NET tabanlı zararlıları tarayan mekanizmasını devre dışı bırakmak.
  • ETW'lere Saldırı (Event Tracing for Windows): Windows'un olay günlüğü mekanizmalarını manipüle etmek.
  • Process Hollowing veya Process Ghosting gibi tekniklerle, tespit edilse bile kendimizi meşru bir sürecin içine saklamak.
Bir dahaki sefere Rust ile Process Injection veya C2 Server bağlantısı nasıl yapılır, onları anlatırım. Yeter ki eve gelelim, tamam mı?
eline saglık
 
Geri
En Üst