Bir programın sanallaştırılmış bir ortamda çalıştığını algılamasının farklı yolları nelerdir? Ve ne tür bir sanallaştırmanın kullanıldığını tespit etmek mümkün müdür?
Bir programın sanallaştırılmış bir ortamda çalıştığını algılamasının farklı yolları nelerdir? Ve ne tür bir sanallaştırmanın kullanıldığını tespit etmek mümkün müdür?
Sanal makineleri / öykünücüleri tespit etmenin çok sayıda yolu vardır, çoğunlukla simülasyondaki bir kusuru belirleme ve ardından bunu test etme modelini izler.
En basit şekilde, yaygın sanallaştırma araç takımları kendi her türlü sistem sürücü ve aygıtının üzerine isim verin. Yalnızca ağ bağlantılarının adına veya MAC adreslerine bakmak, bunu maskelemek için özel olarak yapılandırılmamışsa, VMware'i tanımlamak için yeterli olabilir. Aynı şekilde, sanal makinenin belleği, sanallaştırma yazılımının varlığını açık hale getiren çok sayıda diziye sahip olabilir.
Diğer bazı sanal makine yapaylıkları, hem ana bilgisayar hem de konuk için, kesme tanımlayıcı tablo kaydını döndürmek için SIDT derleme talimatı gibi üst üste gelemeyen bir veri yapısına sahip olma gerekliliğinden kaynaklanır. (IDT) Sanal makineler tipik olarak IDT'yi fiziksel bir ana bilgisayardan daha yüksek bir kayıtta depolar.
Normalde sanallaştırma sistemiyle etkileşim gerektiren belirli işlevlerin veya talimatların zamanını ölçmek, dolaylı olarak sizi anlamanın bir yoludur ' Sanal makinede yeniden çalıştırma.
Anti-sanal makine yöntemleri olarak iki yaklaşım akla geliyor: Birincisi, sanal ortamı değiştirerek olası tüm sanallaştırma izlerini kaldırabilir, bu da basit kontrollere karşı iyi çalışabilir. 'vmware' veya benzer dizeler, bilinen teknikler ile kurnaz vm yapılandırması arasında bir çeşit silahlanma yarışına neden olur.
İkinci yaklaşım, sanal makine algılama tekniklerini tanımlamak için büyük ölçüde statik analize güvenmek ve bunu yaptıktan sonra etkilerini etkisiz hale getirerek sanal makine farkında olmayan yürütülebilir ve dinamik olarak analiz edilebilecek bir uygulama elde etmek için bunları yamamaktır.
Birkaç yaşındaysa iyi bilgiler içeren birkaç kaynak:
liste sonsuz olabilir, bu yüzden kısa tutacağım:
Sanal makinelerin algılanması için bazı püf noktaları:
http://pastebin.com/RU6A2UuB (9 farklı yöntemler, kayıt defteri, bırakılan VBOX dll'leri, kanal adları vb.)
http://pastebin.com/xhFABpPL (Makine sağlayıcı adı)
http://pastebin.com/v8LnMiZs (Innotek numarası)
http : //pastebin.com/fPY4MiYq (Bios Markası ve Bios Sürümü)
http://pastebin.com/Geggzp4G ( Bios Markası ve Bios Sürümü)
http://pastebin.com/T0s5gVGW (Yeni tanıtılan veya tuhaf tür için SMBiosData aramasını ayrıştırma)
http://pastebin.com/AjHWApes (Cadmus Mac Address Trick)
http://pastebin.com/wh4NAP26 (VBoxSharedFolderFS Trick)
http://pastebin.com/Nsv5B1yk (Özgeçmiş Bayrak Trick)
http: // pastebin .com / ex AK5XQx (Sıfırlama Trick)
http://pastebin.com/HVActZMC (CPUID Trick)
Yine de, Kodu kendinden açıklamalı hale getirmeye çalıştım, daha ayrıntılı bilgi için ilgili blog yazılarına da bakabilirsiniz.
Bir süre sonra (Delphi'de) bir test programı yazdım.
Aşağıdaki iki işlev, VMware ve HyperV'yi algılar
// Elias Bachaalanyfunction tarafından açıklandığı gibi VMware algılama IsInsideVMware: Boolean; sonuca başla: = True; asm push edx'i deneyin; ecx itin; ebx'i itin; mov eax, 'VMXh'; mov ebx, 0; mov ecx, 10; mov edx, 'VX'; eax olarak, dx; cmp ebx, 'VMXh'; setz [Sonuç]; pop ebx; pop ecx; pop edx; son; Sonuç hariç: = Yanlış; end; end; function IsHyperV: Boolean; asm cpuid; ecx, ecx testi; set [Result]; end;
Aşağıdaki işlev, Satıcı Markası dizesi aracılığıyla Hyper-V'yi kontrol eder (VMware'de bu "VMwareVMware" döndürür:
function IsRunningUnderHyperV: BOOL; stdcall; var VMBranding: array [0..12] of AnsiChar; begin asm mov eax, $ 40000000; cpuid; mov dword ptr [VMBranding + 0], ebx; // VM markalama dizesi mov dword ptr'yi alın [VMBranding + 4], ecx; mov dword ptr [VMBranding + 8], edx; end; VMBranding [12]: = # 0; Sonuç: = CompareText (String (VMBranding), 'Microsoft Hv') = 0; end;
İlgili bağlantılar:
Daha önce gönderilen yanıtlardaki eklentilerde, cuckoosandbox vm tespiti için birkaç yara kuralı uygular:
Guguklu sandbox havuzunda sık kullanılan püf noktaları bulabilirsiniz.
Bir tür ilgili not gibi, ancak asıl soruyu biraz yanıltmak. Geçen yıl (2013) Berlin'deki VB konferansında KVM tabanlı değiştirilmiş bir hiper yönetici hakkında bir sunum vardı. Adı CXPInspector ve verdikleri sunum (teknoloji akışındaki ilk sunum) burada bulunabilir.
İşte ilgili tez / tez (237 sayfa) ve işte biraz daha kısa bir kağıt var (doğrudan CXPInspector hakkında olmasa da).
Yöntem daha yeni işlemci özelliklerini kullanıyor. Sunum güzel bir genel bakış sunuyor. Temelde akla gelebilecek tek saldırı - CPU ve hiper yönetici uygulamasındaki kusurlara dayalı olanlar dışında - bir zamanlama saldırısı olacaktır. Ve bugünlerde birçok makine hızlı olsa da, bu pek güvenilir bir yöntem değil. Eskiden öyleydi, ancak bu günlerde en iyi ihtimalle kumar oynanıyor.
Burada, sanallaştırmanın nasıl tespit edileceğine dair net bir fikir verecek, açık kaynaklı bir programda uygulanan anti-sandbox / vm / debugger tekniklerinin bir koleksiyonu yer almaktadır: https://github.com/LordNoteworthy/al-khaser.
Desteklenen tekniklerin listesi aşağıda verilmiştir:
Kayıt defteri anahtarı değeri yapıları
Kayıt Anahtarları yapıları güçlü>
Dosya sistemi yapıları
Dizin yapıtları
Bellek artefaktları güçlü >
MAC Adresi
Sanal cihazlar
Donanım Aygıtı bilgileri
Bağdaştırıcı adı
Windows Sınıfı
Ağ paylaşımları
İşlemler
WMI
DLL Dışa Aktarmalar ve Yüklenen DLL'ler
CPU*”