
Rusty Hypervisor - Rust में Windows UEFI Blue Pill Type-1 Hypervisor (कोडनेम: Illusion)
ब्लॉग: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
एक हल्का, मेमोरी-सुरक्षित, और अत्यंत तेज़ Rust-आधारित टाइप-1 रिसर्च हाइपरवाइज़र जिसमें Intel VT-x के लिए हुक्स हैं, जो वर्चुअलाइज़ेशन की मूल अवधारणाओं के अध्ययन पर केंद्रित है।
नोट: Illusion हाइपरवाइज़र (Windows UEFI Blue Pill Type-1 हाइपरवाइज़र Rust में) अधिक स्थिर है, अधिक सुविधाओं का समर्थन करता है, और कुल मिलाकर बेहतर डिज़ाइन किया गया है। Matrix हाइपरवाइज़र (Windows Kernel Blue Pill Type-2 हाइपरवाइज़र Rust में) एक पुराना, प्रयोगात्मक संस्करण है और उत्पादन उपयोग के लिए अभिप्रेत नहीं है। दोनों प्रोजेक्ट्स टेम्पलेट के रूप में काम करते हैं ताकि लोगों को Rust में हाइपरवाइज़र डेवलपमेंट शुरू करने में मदद मिल सके।
पेजिंग: x64 वर्चुअल एड्रेस को फिजिकल एड्रेस में अनुवादित करना
यह आरेख पारंपरिक पेजिंग सिस्टम में x64 वर्चुअल एड्रेस को फिजिकल एड्रेस में अनुवादित करने की प्रक्रिया को दर्शाता है। x64 आर्किटेक्चर में, इस अनुवाद में चार स्तरों की पेज टेबल्स शामिल हैं: PML4, PDPT, PDT, और PT (Page Map Level 4, Page Directory Pointer Table, Page Directory Table, और Page Table)। प्रत्येक स्तर वर्चुअल एड्रेस के 9 बिट्स का उपयोग अगले स्तर को इंडेक्स करने के लिए करता है, जो अंततः RAM में एक विशिष्ट फिजिकल एड्रेस की ओर इंगित करता है। यह प्रक्रिया ऑपरेटिंग सिस्टम और मेमोरी मैनेजमेंट यूनिट (MMU) द्वारा प्रबंधित की जाती है, जो सॉफ़्टवेयर द्वारा उपयोग किए जाने वाले वर्चुअल एड्रेस को हार्डवेयर द्वारा उपयोग किए जाने वाले फिजिकल एड्रेस में अनुवादित करती है।

चित्र 1: x64 वर्चुअल एड्रेस अनुवाद (पूर्ण श्रेय: Guided Hacking)
एक्सटेंडेड पेज टेबल्स (EPT): सेकंड लेवल एड्रेस ट्रांसलेशन (SLAT)
एक्सटेंडेड पेज टेबल्स (EPT) हार्डवेयर-असिस्टेड वर्चुअलाइज़ेशन तकनीकों जैसे Intel VT-x और AMD-V के Nested Page Tables (NPT) की एक विशेषता है। EPT सेकंड लेवल एड्रेस ट्रांसलेशन (SLAT) को लागू करता है, जो विशेष रूप से वर्चुअलाइज़्ड वातावरण के लिए डिज़ाइन किया गया है। जहाँ पारंपरिक पेजिंग गेस्ट OS के भीतर वर्चुअल एड्रेस को फिजिकल एड्रेस में अनुवादित करती है, वहीं EPT गेस्ट फिजिकल एड्रेस (जो गेस्ट OS द्वारा उपयोग किए जाते हैं) को होस्ट फिजिकल एड्रेस (जो हाइपरवाइज़र द्वारा उपयोग किए जाते हैं) में अनुवादित करके एक अतिरिक्त परत जोड़ता है। अनुवाद की यह दूसरी परत हाइपरवाइज़र द्वारा प्रबंधित की जाती है, जिससे गेस्ट ऑपरेटिंग सिस्टम को अपनी पेज टेबल्स को स्वतंत्र रूप से प्रबंधित करने की अनुमति मिलती है। SLAT मेमोरी ऑपरेशन्स के दौरान VM exits की आवश्यकता को कम करके प्रदर्शन में सुधार करता है, जो ओवरहेड को कम करता है और वर्चुअलाइज़ेशन दक्षता को बढ़ाता है।
नीचे दिया गया आरेख दर्शाता है कि Rust में लिखे गए Windows UEFI Blue Pill Type-1 हाइपरवाइज़र (कोडनेम: Illusion) में छिपे हुए EPT हुक्स को कैसे लागू किया जाए।

चित्र 2: एक्सटेंडेड पेज टेबल्स (EPT) हुक्स (Illusion)
ExceptionOrNmi (#GP, #PF, #BP, #UD) (0), InitSignal (3), StartupIpi (4), Cpuid (10), Getsec (11), Hlt (12), Invd (13), Vmcall (18), Vmclear (19), Vmlaunch (20), Vmptrld (21), Vmptrst (22), Vmresume (24), Vmxon (27), Vmxoff (26), ControlRegisterAccesses (28), Rdmsr (31), Wrmsr (32), MonitorTrapFlag (37), Rdtsc (49), EptViolation (48), EptMisconfiguration (50), Invept (53), Invvpid (55), Xsetbv (55)।UNUSABLE के रूप में चिह्नित करने के लिए UEFI मेमोरी मैप को संशोधित करें)।cargo install cargo-make।cargo make build-debug।cargo make build-release।cargo make run-debug।cargo make run-release।bcdedit.exe /set testsigning on के साथ टेस्ट साइनिंग सक्रिय करें।