Pitanje:
Kako otkriti virtualizirano okruženje?
perror
2013-04-10 03:12:46 UTC
view on stackexchange narkive permalink

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?

Pokušavate li zavarati program koji pokušava otkriti da je pokrenut u virtualnom okruženju, misleći da nije?
Mislim da je spektar mog pitanja malo preširok. Uredit ću ga tako da se usredotočim samo na otkrivanje virtualiziranog okruženja (protumjere mogu uslijediti nakon).
Imajte na umu da neki alati ([imvirt] (http://micky.ibh.net/~liske/imvirt.html)) ili da postoje neki drugi slični [jednostavni postupci] (http://www.dmo.ca/blog/ otkrivanje-virtualizacija-na-linux /). Ali, ove se tehnike temelje na činjenici da se virtualizator ne pokušava sakriti.
Objavljujem neke veze [Sprečavanje otkrivanja virtualnih strojeva A] (handlers.sans.org/tliston/ThwartingVMDetection_Liston_Skoudis.pdf) .. [Ovo nije otkrivanje] (Mogu li operativni sustavi reći rade li u virtualnom stroju?) ..VMD U početku napisali [istraživačka svrha RED-Pill i Blue-Pil] (http://en.wikipedia.org/wiki/Blue_Pill_%28software%29), dva nova virusa za svrhu napada su `MyDoom i stuXmet`, oba nisu mogla još se pravilno rastaviti!
Osam odgovori:
#1
+15
nopnopgoose
2013-04-10 09:42:54 UTC
view on stackexchange narkive permalink

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:

Što se tiče IDT-a, oslanjate li se na istraživanje Joanne Rutkowske ili na svoje? [Čini se da nije previše pouzdan.] (Http://blog.assarbad.net/20061105/redpill-getting-colorless/) Također [na blogu Jasona Geffnera.] (Http://malwareanalysis.com/CommunityServer/blogs/ geffner / arhiva / 2006/08/21 / 15.aspx)
#2
+15
Ange
2013-04-10 12:17:35 UTC
view on stackexchange narkive permalink

popis bi mogao biti beskrajan, pa ću ga zadržati kratkim:

  • artefakti virtualiziranog okruženja: ključevi registra, naziv tvrdog diska, adresa mrežne kartice, određeni upravljački programi, ...
  • razlike u okruženju: nema miša, internetske veze, zvučne kartice, ...
  • razlika u izvršenju: otkrivanje prevođenja blokova (stvoriti drugu nit i primijeniti statistiku na IP-u), drugačiji sustav registrira vrijednosti, ...
    • nedostatak korisničke interakcije (specifično za automatizirano okruženje): nema pomicanja miša, nema radnji s datotekama, ...
  • specifične razlike u okruženju: VmWare backdoor, bug iznimke VirtualPC-a, ...

(provjerite anti- wiki Wiki za otklanjanje pogrešaka za više)

#3
+10
waliedassar
2013-04-17 12:53:35 UTC
view on stackexchange narkive permalink

Evo nekoliko trikova za otkrivanje VM-ova:

VirtualBox

VirtualPc

Otkrivanje hipervizora

Iako, Pokušao sam objasniti kôd, a također možete pogledati odgovarajuće postove na blogu za detaljnije informacije.

#4
+5
Remko
2013-04-10 19:01:38 UTC
view on stackexchange narkive permalink

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:

#5
+4
N3mes1s
2013-04-10 12:49:36 UTC
view on stackexchange narkive permalink

U dodacima prije odgovora, cuckoosandbox implementira nekoliko yara pravila za otkrivanje vm-a:

https://github.com/cuckoobox/cuckoo/blob/1884b5579ff8e053b3d4a8523a5da576eee43552/data/yara/ binarne datoteke / vmdetect.yar

Dodajte kratki opis veze i / ili relevantne stvari. Odgovori samo na veze ne smatraju se odgovorima.
#6
+4
Nex
2013-04-11 12:58:43 UTC
view on stackexchange narkive permalink

Uobičajene trikove možete pronaći u spremištu kukavičjeg pješčanika.

Dodajte kratki opis veze i / ili relevantne stvari. Odgovori samo na veze ne smatraju se odgovorima.
#7
+3
0xC0000022L
2014-01-31 10:18:37 UTC
view on stackexchange narkive permalink

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.

#8
+3
Noteworthy
2017-03-07 04:11:30 UTC
view on stackexchange narkive permalink

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:

Napadi protiv otklanjanja pogrešaka

  • IsDebuggerPresent
  • CheckRemoteDebuggerPresent
  • Blok okruženja procesa (BeingDebugged)
  • Blok okruženja procesa (NtGlobalFlag)
  • ProcessHeap (Zastave)
  • ProcessHeap (ForceFlags)
  • NtQueryInformationProcess (ProcessDebugPort)
  • NtQueryInformationProcess (ProcessDebugFlags)
  • NtQueryInformationProcess (ProcessDebugObject)
  • NtSetInformationThread (HideTerDebuerFuerBebDebugReb (HideText) (ObjectTypeInformation)
  • NtQueryObject (ObjectAllTypesInformation)
  • CloseHanlde (NtClose) Invalide Handle
  • SetHandleInformation (Protected Handle)
  • UnhandledExceptionFilter
  • OutputDebugString (GetLastErro r ())
  • Hardverske točke prijeloma (SEH / GetThreadContext)
  • Softverske točke prijeloma (INT3 / 0xCC)
  • Točke prekida memorije (PAGE_GUARD)
  • Prekid 0x2d
  • Prekid 1
  • Nadređeni postupak (Explorer.exe)
  • SeDebugPrivilege (Csrss.exe)
  • NtYieldExecution / SwitchToThread
  • TLS povratni pozivi

Anti-damping

  • Izbriši PE zaglavlje iz memorije
  • SizeOfImage

Timing Attacks [Anti-Sandbox]

  • RDTSC (s CPUID-om za prisilno izlazak iz VM-a)
  • RDTSC (Locky verzija s GetProcessHeap & CloseHandle)
  • Spavanje -> SleepEx -> NtDelayExecution
  • Spavanje (u petlji malo kašnjenje)
  • Spavanje i provjera je li vrijeme ubrzano (GetTickCount)
  • SetTimer (standardni Windows tajmeri)
  • timeSetEvent (multimedijski odbrojavači)
  • WaitForSingleObject -> WaitForSingleObjectEx -> NtWaitForSingleObject
  • WaitForMultipleObjects -> WaitForMultipleObjects li>

Ljudska interakcija / generički [Anti-Sandbox]

  • Kretanje miša
  • Ukupna fizička memorija (GlobalMemoryStatusEx)
  • Veličina diska pomoću DeviceIoControl (IOCTL_DISK_GET_LENGTH_INFO )
  • Veličina diska pomoću GetDiskFreeSpaceEx (TotalNumberOfBytes)
  • Broj procesora (Win32 / Tinba - Win32 / Dyre)

Anti-Virtualization / Full -Emulacija sustava

  • Artefakti vrijednosti ključa registra

    • HARDWARE \ DEVICEMAP \ Scsi \ Scsi Port 0 \ Scsi Bus 0 \ Target Id 0 \ Logical Unit Id 0 (Identifier) ​​(VBOX)
    • HARDWARE \ DEVICEMAP \ Scsi \ Scsi Port 0 \ Scsi Bus 0 \ Target Id 0 \ Logical Unit Id 0 (Identifier) ​​(QEMU)
    • OPREMA \ Opis \ Sustav (SystemBiosVersion) (VBOX)
    • HARDVER \ Opis \ Sustav (SystemBiosVersion) (QEMU)
    • HARDVER \ Opis \ Sustav (VideoBiosVersion ) (VIRTUALBOX)
    • HARDWARE \ Description \ System (SystemBiosDate) (23.06.999.)
    • HARDWARE \ DEVICEMAP \ Scsi \ Scsi Port 0 \ Scsi Bus 0 \ Target Id 0 \ ID logičke jedinice 0 (Identifikator ) (VMWARE)
    • HARDWARE \ DEVICEMAP \ Scsi \ Scsi Port 1 \ Scsi Bus 0 \ Target Id 0 \ Logical Unit Id 0 (Identifier) ​​(VMWARE)
    • HARDWARE \ DEVICEMAP \ Scsi \ Scsi Port 2 \ Scsi Bus 0 \ Id cilja 0 \ Id logičke jedinice 0 (identifikator) (VMWARE)
  • Artefakti ključeva registra jak>

    • "HARDVER \ ACPI \ DSDT \ VBOX__"
    • "HARDVER \ ACPI \ FADT \ VBOX__"
    • "HARDVER \ ACPI \ RSDT \ VBOX__ "
    • " SOFTVER \ Oracle \ VirtualBox dodaci za goste "
    • " SYSTEM \ ControlSet001 \ Services \ VBoxGuest "
    • " SYSTEM \ ControlSet001 \ Services \ VBoxMouse "
    • " SYSTEM \ ControlSet001 \ Services \ VBoxService "
    • " SYSTEM \ ControlSet001 \ Services \ VBoxSF "
    • " SYSTEM \ ControlSet001 \ Services \ VBoxVideo "
    • SOFTVER \ VMware, Inc. \ VMware Tools
    • SOFTVER \ Vino
  • Artefakti datotečnog sustava

    • "system32 \ drivers \ VBoxMouse.sys"
    • "system32 \ drivers \ VBoxGuest.sys"
    • "system32 \ drivers \ VBoxSF.sys "
    • " system32 \ drivers \ VBoxVideo.sys "
    • "system32\vboxdisp.dll"
    • "system32\vboxhook.dll"
    • "system32\vboxmrxnp.dll"
    • "system32 \ vboxogl. dll "
    • " system32 \ vboxoglarrayspu.dll "
    • " system32 \ vboxoglcrutil.dll "
    • " system32 \ vboxoglerrorspu.dll "
    • "system32 \ vboxoglfeedbackspu.dll"
    • "system32 \ vboxoglpackspu.dll"
    • "system32 \ vboxoglpassthroughspu.dll"
    • "system32 \ vboxservice.exe"
    • "system32\vboxtray.exe"
    • "system32\VBoxControl.exe"
    • "system32 \ drivers \ vmmouse.sys"
    • "system32 \ drivers \ vmhgfs.sys"
  • Artefakti direktorija

    • "% PROGRAMILI % \ oracle \ virtualbox dodavanja za goste \ "
    • "% PROGRAMFILES% \ VMWare \ "
  • Artefakti memorije

    • Mjesto tablice interupt deskriptora (IDT)
    • Mjesto tablice lokalnog deskriptora (LDT)
    • Mjesto tablice globalnog deskriptora (GDT)
    • Trik segmenta stanja zadatka sa STR
  • MAC adresa

      "\ x08 \ x00 \ x27" (VBOX)
  • "\ x00 \ x05 \ x69" (VMWARE)
  • "\ x00 \ x0C \ x29" (VMWARE)
  • "\ x00 \ x1C \ x14" (VMWARE)
  • "\ x00 \ x50 \ x56" (VMWARE)
  • Virtualni uređaji

    • "\\. \ VBoxMiniRdrDN"
    • "\\. \ VBoxGuest"
    • "\\. \ pipe \ VBoxMiniRdDN"
    • "\\. \ VBoxTrayIPC"
    • "\\. \ pipe \ VBoxTrayIPC")
    • "\\ . \ HGFS "
    • " \\. \ Vmci "
  • Podaci o hardverskom uređaju

    • SetupAPI SetupDiEnumDeviceInfo (GUID_DEVCLASS_DISKDRIVE)
      • QEMU
      • VMWare
      • VBOX
      • VIRTUAL HD
  • Naziv adaptera

    • VMWare
  • Windows Class

    • VBoxTrayToolWndClass
    • VBoxTrayToolWnd
  • Mrežne dionice

    • Dijeljene mape VirtualBox
  • Procesi

    • vboxservice.exe (VBOX)
    • vboxtray.exe (VBOX)
    • vmtoolsd.exe (VMWARE)
    • vmwaretray.exe (VMWARE)
    • vmwareuser (VMWARE)
    • vmsrvc.exe (VirtualPC)
    • vmusrvc.exe (VirtualPC)
    • prl_cc.exe (Parallels)
    • prl_tools.exe (Parallels)
    • xenservice.exe (Citrix Xen)
  • WMI

    • ODABERITE * IZ Win32_Bios (serijski broj) (VMWARE)
    • SELECT * FROM Win32_PnPEntity (DeviceId) (VBOX)
    • SELECT * FROM Win32_NetworkAdapterConfiguration (MACAddress) (VBOX)
    • SELECT * FROM Win32_NTEventlogFile (VBOX)
    • SELECT * FROM Win32_Processor (NumberOfCores) (GENERIC)
    • SELECT * FROM Win32_LogicDisk (Size) (GENERIC)
  • DLL Export i učitane DLL datoteke

    • kernel32.dll! wine_get_unix_file_nameWine (Wine)
    • sbiedll.dll (Sandboxie)
    • dbghelp.dll (MS rutine podrške za otklanjanje pogrešaka)
    • api_log.dll (iDefense Labs)
    • dir_watch.dll (iDefense Labs)
    • pstorec.dll (SunBelt Sandbox)
    • vmcheck.dll (Virtualno računalo)
    • wpespy.dll (WPE Pro)
  • CPU*

    • Prisutnost hipervizora pomoću (EAX = 0x1)
    • Dobavljač hipervizora koji koristi (EAX = 0x40000000)
      • "KVMKVMKVM \ 0 \ 0 \ 0 "(KVM)
      • " Microsoft Hv "(Microsoft Hyper-V ili Windows virtualno računalo)
      • " VMwareVMware "(VMware)
      • "XenVMMXenVMM" (Xen)
      • "prl hyperv" (Paralele) - "VBoxVBoxVBox" (VirtualBox)
  • Anti-analiza

    • Procesi
      • OllyDBG / ImmunityDebugger / WinDbg / IDA Pro
      • Alati SysInternals Suite (Process Explorer / Process Monitor / Regmon / Filemon, TCPView, Autoruns)
      • Wireshark / Dumpcap
      • ProcessHacker / SysAnalyzer / HookExplorer / SysInspector
      • ImportREC / PETools / LordPE
      • JoeBox Sandbox


    Ova pitanja su automatski prevedena s engleskog jezika.Izvorni sadržaj dostupan je na stackexchange-u, što zahvaljujemo na cc by-sa 3.0 licenci pod kojom se distribuira.
    Loading...