DRAKVUF stealth INT3 breakpoint injection¶
Bir guest içine software INT3 (0xCC) breakpoint'leri yerleştirip bunları in-guest read'lerden gizleyen bir virtual-machine introspection tekniği (DRAKVUF); page'in bir shadow kopyası artı altp2m/EPT kullanarak read'ler orijinal byte'ı görür, yalnızca execution trap eder.
Mechanism¶
Note
Düz bir software breakpoint, hedef instruction'ın ilk byte'ını 0xCC ile overwrite eder; guest onu execute ettiğinde bir #BP trap eder. Stealth monitoring için sorun şudur: 0xCC, guest içinde kodu okuyan herkese görünür — self-checksumming malware ya da integrity check'ler onu saptar. DRAKVUF bunu page'in read ve execute view'larını ayırarak çözer (bkz. EPT split ve altp2m views): code page'i host-owned bir shadow frame'e klonlar, 0xCC'yi yalnızca shadow'a yazar ve EPT'yi öyle yapılandırır ki o guest-physical frame'in execution'ı shadow'a (breakpoint'li) çözümlensin, read'leri ise temiz orijinale çözümlensin. İlgili sınır introspection sınırıdır: hypervisor guest'i dışarıdan izler ve "stealth", guest'in monitor'ü gözlemleyememesi demektir.
Breakpoint trap'i introspection engine'e (guest dışı) teslim edilir; o, state'i inceler, sonra devam eder — isteğe bağlı olarak orijinal instruction'ı single-step ederek. Bu, DRAKVUF'un syscall ve function tracing'inin yapı taşıdır.
Sibling not'tan farkı: VMI breakpoint injection genel primitive'i (int3 → #BP → VM-exit) tarif eder; bu not ise onun DRAKVUF'a özgü, shadow page + altp2m execute/read split ile self-checksumming'e karşı stealth yapılan productized realizasyonudur.
Walkthrough¶
Public reference: Lengyel ve diğerleri, "Scalability, fidelity and stealth in the DRAKVUF dynamic malware analysis system" (ACSAC 2014), DRAKVUF/LibVMI projeleri ve Xen altp2m. Kavramsal akış:
- Guest-virtual hedefi (örn. bir kernel fonksiyonu) bir guest page-table walk / guest CR3 resolution ile bir guest-physical frame'e çözümle.
- O frame'i bir shadow frame'e klonla; orijinal byte'ları kopyala; shadow'da hedef offset'e 0xCC yaz.
- Bir altp2m view'ında GFN'yi execute-only olarak shadow'a map et ve temiz frame'e bir read mapping tut (EPT split).
- Guest execution'da 0xCC hypervisor'a trap eder; DRAKVUF'un VMI breakpoint handler'ı register/memory'yi inceler.
- Devam etmek için orijinal instruction'ı geçici restore et ya da single-step et, sonra shadow'u yeniden arm et.
Beklenen gözlem: function/syscall hit'leri guest dışında yakalanır; patch'lenmiş adresin in-guest read'leri orijinal, patch'siz byte'ları döndürür.
Detection¶
- Bir guest split-view'ı saptamaya çalışabilir: okuduğu kodun hash'ini runtime davranışıyla karşılaştırabilir, ya da timing kullanabilir — read/execute flip'i etrafındaki EPT-violation handling, izlenen page'lerde latency'yi şişirir.
- TLB/altp2m fingerprint'leri:
VMFUNCcapability'sinin ve birden çok EPTP değerinin varlığı bir introspection harness'ına işaret eder.
Mitigation¶
- Bu defensive tooling'dir; "mitigation", evasive bir guest'in onu nasıl yenmeye çalıştığı (timing, self-checksum, anti-VMI) ve monitor'ün bunlara karşı nasıl sertleştirileceği (timing'i normalize et, breakpoint'leri seyrek koy, randomize et) olarak çerçevelenir.
- Stealth'i sağlam tutmak için, bir guest'in timing'leyebileceği split page ve restore-and-step pencerelerinin sayısını minimize et; checksumming beklenen yerlerde non-INT3 stratejilerle (MTF stepping, execute-only trap) birleştir.
References¶
- DRAKVUF Wiki, "Xen altp2m" — shadow page + execute-only EPT ile 0xCC breakpoint gizleme. https://github.com/tklengyel/drakvuf/wiki/Xen-altp2m
- T. K. Lengyel ve diğerleri, "Scalability, fidelity and stealth in the DRAKVUF dynamic malware analysis system", ACSAC 2014. https://www.acsac.org/2014/program-final/oc_multifile/3/52.pdf
- Xen Project, "Stealthy monitoring with Xen altp2m". https://xenproject.org/2016/04/13/stealthy-monitoring-with-xen-altp2m