Process hijacking for in-guest execution (DRAKVUF injector)¶
Bir VMI tekniği: bir hypervisor bir guest'e process
fork()'layamadığı için, DRAKVUF mevcut bir guest process'ini bir context switch'te trap'ler, onun CPU/stack state'ini kaydeder, seçilen bir API/syscall'u çalıştırması için execution'ı yeniden yönlendirir, sonra orijinal state'i restore eder — guest içinde hiçbir agent olmadan keyfi kod çalıştırır.
Mechanism¶
Note
Bir hypervisor guest OS'un altında oturur ve bir guest process oluşturmak için bir
API'si yoktur — process oluşturma bir guest-kernel operation'ıdır. Injector'ın
sömürdüğü invariant, hypervisor'ın vCPU'yu tamamen kontrol etmesidir: event'leri
intercept edebilir, guest register'larını (VMCS/VMCB üzerinden) read/write edebilir ve
guest memory'sini (EPT/NPT second-level page table'ları üzerinden) read/write
edebilir. Yani bir process oluşturmak yerine, DRAKVUF zaten var olan birini
hijack eder. Guest context switch'e bir trap koyar — somut olarak CR3'e bir
write (page-table base; bir CR3 değişimi bir process switch'i işaretler) — böylece
scheduling aktif address space'i değiştirdiğinde bir VM-exit tetiklenir. Hedef process
schedule edildiğinde, injector ilk userspace instruction'ına bir breakpoint diker; ona
çarpmak, o process canlı ve bilinen bir state'teyken control'ü hypervisor'a veren başka
bir VM-exit'e yol açar. Hypervisor sonra register ve stack state'inin snapshot'ını
alır, seçilen bir fonksiyonu (Linux vDSO'daki bir syscall instruction'ı ya da
CreateProcessA gibi bir Windows API'si) invoke etmek için RIP/RSP ve argument
register'larını yeniden yazar, guest'in onu çalıştırmasına izin verir, sonucu hasat
eder ve kaydedilmiş state'i restore eder ki victim process hiçbir şey olmamış gibi
devam etsin. Bu, host->guest control boundary'sini temiz biçimde geçer: guest içinde
hiçbir agent, driver ya da disk üzerinde iz olmadan keyfi in-guest execution.
Walkthrough¶
Public material: DRAKVUF docs ve CERT Polska'nın GSoC Linux-injector yazısı. Kavramsal path (yeni silahlandırma yok):
- Context switch'i trap'le. Bir CR3-write (mov-to-CR3) intercept'i install et. Her VM-exit'te, yeni CR3'ü hedef process'in page-table base'iyle karşılaştır.
# DRAKVUF-style invocation: hijack an existing process to launch a sample
drakvuf -r <kernel.json> -d <domain> \
-i <inject_pid> -e "C:\\Windows\\System32\\sample.exe" -m createproc
# -i PID of the process to hijack -m injection method
-
Hedefi userspace'te yakala. CR3 eşleştiğinde, process'in userspace'e döndükten sonra çalıştıracağı ilk instruction'a bir breakpoint koy. Ona çarpmak victim canlıyken bir VM-exit verir.
-
State'i kaydet, yeniden yönlendir, çalıştır. GPR'leri + ilgili stack'i snapshot'la. Argument'ları platform ABI'sine göre kur; RIP'i vDSO'daki (Linux) bir
syscall'a ya da target API entry'sine (Windows) işaret ettir; tamamlanınca hypervisor'ı yeniden trap'leyen sahte bir return address push'la. Guest'i resume et ki call'u process içinde çalıştırsın. -
Hasat et ve restore et. Tamamlanma trap'inde, return value / out-param'ları guest register'larından/memory'sinden oku, sonra kaydedilmiş register ve stack state'i geri yaz ki hijack edilmiş process orijinal execution'ına devam etsin.
Neden stealthy / agentless
Guest'te hiçbir kod resident bırakılmaz: memory restore edilir ve (--fuzz tarzı ya
da doppelgänging varyantlarıyla) payload, guest filesystem'e dokunmadan map'lenebilir.
Guest içinden tek artefakt, bir process'in control flow'undaki kısa, kendini iyileştiren
bir detour'dur.
Warning
Bu savunma/analiz amaçlı bir primitive'dir (sandboxing, malware detonation, VMI araştırması) — ama aynı hijack, host seviyesindeki bir saldırgana keyfi in-guest code execution verir. Out-of-band, CR3-trap güdümlü herhangi bir control-flow detour'u güçlü bir introspection/compromise sinyali olarak ele al.
Detection¶
- Guest tarafından: teknik state'i restore eder, dolayısıyla kalıcı artefaktlar
minimaldir; geçici control-flow anomalilerini ara — call site'ıyla eşleşmeyen bir
vDSO/return address'inden gönderilen beklenmedik bir
syscall/API call'u ya da tek bir process üzerindeki kısa single-step/breakpoint fırtınaları. - Platform tarafından: guest dışından sürülen CR3/MTF (monitor-trap-flag) ve INT3
(
0xCC) breakpoint aktivitesi; DRAKVUF stealth INT3 breakpoint injection ve VMI breakpoint injection ile birlikte ortaya çıkması. - Executable page'lerin integrity check'leri, EPT split ile gizlenmemişse (kısa süreli) breakpoint patch'lemesini yakalayabilir.
Mitigation¶
- Bir domain'e karşı kimin hypervisor/VMI tool çalıştırabileceğini kısıtla — host seviyesinde erişim ön koşuldur; bu bir trust-boundary kontrolüdür, guest tarafı bir fix değil.
- Anti-analysis farkındalığı olan tehditler için defender'lar introspection'ın kendisini sıkılaştırır (gizli breakpoint'ler, EPT tabanlı stealth) ki hijacking kolayca tespit edilemesin; tersine, instrumentation'a direnmek isteyen guest'ler yukarıdaki control-flow detour'ları için monitor edebilir.
- Production VM'lerinde, açıklanamayan CR3-trap güdümlü injection'ı bir host-compromise göstergesi olarak ele al ve hypervisor katmanını araştır.
References¶
- DRAKVUF — Black-box Binary Analysis System
- CERT Polska — Linux Injector for automated malware analysis (GSoC)
- Improve process injection feature of DRAKVUF (GSoC, The Honeynet Project)
- Related: DRAKVUF stealth INT3 breakpoint injection, VMI breakpoint injection, page-fault injection into guest, guest state reconstruction