Koji su različiti načini kako program može otkriti da se izvršava u virtualiziranom okruženju? I, bi li bilo moguće otkriti koja se vrsta virtualizacije koristi?
Koji su različiti načini kako program može otkriti da se izvršava u virtualiziranom okruženju? I, bi li bilo moguće otkriti koja se vrsta virtualizacije koristi?
Postoji mnoštvo načina za otkrivanje virtualnih strojeva / emulatora, uglavnom slijedeći obrazac prepoznavanja nesavršenosti u simulaciji, a zatim testiranje na nju.
Na najjednostavnijem kraju, uobičajeni alati za virtualizaciju žbukaju ih ime nad svim vrstama upravljačkih programa i uređaja sustava. Jednostavno gledanje naziva mrežnih veza ili njihove MAC adrese moglo bi biti dovoljno za prepoznavanje VMware-a ako nije posebno konfiguriran da to prikriva. Isto tako, memorija VM-a može imati puno nizova koji čine prisutnost softvera za virtualizaciju očitom.
Neki drugi VM artefakti proizlaze iz potrebe da i domaćin i gost imaju podatkovnu strukturu dostupnu procesoru koja se ne može preklapati, kao što je SIDT uputa za sastavljanje da vrati registar tablice deskriptora prekida. (IDT) Virtualni strojevi obično pohranjuju IDT na višem registru od fizičkog domaćina.
Mjerenje vremena određenih funkcija ili uputa koje bi obično zahtijevale interakciju sa sustavom za virtualizaciju način je na koji neizravno zaključujete ' ponovno izvršavanje u VM-u.
Dva su mi načina na pamet kao anti-anti-VM metode: Prvo, može se izmijeniti virtualno okruženje kako bi se uklonili svi tragovi virtualizacije, što može dobro funkcionirati protiv jednostavnih provjera 'vmware' ili slične žice, što uzrokuje svojevrsnu utrku u naoružanju između poznatih tehnika i lukave vm konfiguracije.
Drugi pristup je oslanjanje u velikoj mjeri na statičku analizu kako bi se identificirale tehnike otkrivanja VM-a i zakrpilo ih kako bi se neutralizirao njihov učinak nakon što se dobije izvršna datoteka koja nije svjesna VM-a i koja se zatim može dinamički analizirati.
Nekoliko izvora s dobrim informacijama, ako su stari nekoliko godina:
popis bi mogao biti beskrajan, pa ću ga zadržati kratkim:
(provjerite anti- wiki Wiki za otklanjanje pogrešaka za više)
Evo nekoliko trikova za otkrivanje VM-ova:
http://pastebin.com/RU6A2UuB (9 različite metode, registar, ispušteni VBOX dll-ovi, nazivi cijevi itd.)
http://pastebin.com/xhFABpPL (naziv dobavljača stroja)
http://pastebin.com/v8LnMiZs (trik Innotek)
http : //pastebin.com/fPY4MiYq (Bios Brand i Bios verzija)
http://pastebin.com/Geggzp4G ( Marka Bios i verzija Bios)
http://pastebin.com/T0s5gVGW (Raščlanjivanje SMBiosData u potrazi za novo predstavljenim ili bizarnim tipom)
http://pastebin.com/AjHWApes (trik s Cadmus Mac adresom)
http://pastebin.com/wh4NAP26 (trik VBoxSharedFolderFS)
http://pastebin.com/Nsv5B1yk (Nastavi Trik s zastavicom)
http: // pastebin .com / ex AK5XQx (trik za resetiranje)
http://pastebin.com/HVActZMC (trik za CPUID)
Iako, Pokušao sam objasniti kôd, a također možete pogledati odgovarajuće postove na blogu za detaljnije informacije.
Napisao sam testni program neko vrijeme (u Delphiju).
Sljedeće dvije funkcije otkrivaju VMware i HyperV
// VMware otkrivanje kako je opisao Elias Bachaalanyfunction IsInsideVMware: Boolean; početak Rezultat: = True; probajte asm push edx; gurnuti ecx; gurati ebx; mov eax, 'VMXh'; mov ebx, 0; mov ecx, 10; mov edx, 'VX'; u eax, dx; cmp ebx, 'VMXh'; setz [rezultat]; pop ebx; pop ecx; pop edx; kraj; osim Rezultata: = False; kraj; kraj; funkcija IsHyperV: Boolean; asm cpuid; test ecx, ecx; postavlja [Rezultat]; end;
Sljedeća funkcija provjerava Hyper-V putem niza marke robne marke (na VMware-u to vraća "VMwareVMware":
funkcija IsRunningUnderHyperV: BOOL; stdcall; var VMBranding: niz [0..12] od AnsiChar; započeti asm mov eax, 40000000 $; cpuid; mov dword ptr [VMBranding + 0], ebx; // Nabavite niz VM brandinga mov dword ptr [VMBranding + 4], ecx; mov dword ptr [VMBranding + 8], edx; end; VMBranding [12]: = # 0; Rezultat: = CompareText (String (VMBranding), 'Microsoft Hv') = 0; end;
Relevantne poveznice:
U dodacima prije odgovora, cuckoosandbox implementira nekoliko yara pravila za otkrivanje vm-a:
Uobičajene trikove možete pronaći u spremištu kukavičjeg pješčanika.
Baš kao neka vrsta povezane bilješke, ali pomalo pomicanje stvarnog pitanja. Bila je prezentacija na VB konferenciji prošle godine (2013.) u Berlinu, o modificiranom hipervizoru temeljenom na KVM-u. Zove se CXPInspector i prezentaciju koju su oni održali (prvu u tehnološkom toku) možete pronaći ovdje.
Evo odgovarajuće teze / disertacije (237 stranica) i evo povezanog nešto kraćeg rada (iako ne o CXPInspectoru izravno).
Metoda koristi novije značajke procesora. Prezentacija daje lijep pregled. U osnovi, jedini zamislivi napad - osim onih koji se temelje na nedostacima u CPU-u i implementaciji hipervizora - bio bi vremenski napad. Iako su danas mnogi strojevi brzi, to nije baš vrlo pouzdana metoda. Nekad je bilo, ali danas je to u najboljem slučaju kockanje.
Evo zbirke tehnika anti-sandbox / vm / debugger implementiranih u program otvorenog koda koji će vam dati jasnu ideju kako otkriti virtualizaciju: https://github.com/LordNoteworthy/al-khaser.
Evo popisa podržanih tehnika:
Artefakti vrijednosti ključa registra
Artefakti ključeva registra jak>
Artefakti datotečnog sustava
Artefakti direktorija
Artefakti memorije
MAC adresa
Virtualni uređaji
Podaci o hardverskom uređaju
Naziv adaptera
Windows Class
Mrežne dionice
Procesi
WMI
DLL Export i učitane DLL datoteke
CPU*