
फज़िंग के लिए एक हाइपरवाइज़र जो WHVP और Bochs के साथ निर्मित है
नमस्ते! applepie में आपका स्वागत है! यह एक उपकरण है जो फ़ज़िंग, अंतर्दर्शन और बग ढूंढने के लिए डिज़ाइन किया गया है! यह Windows Hypervisor Platform API का उपयोग करने वाला एक हाइपरवाइज़र है जो Windows के हाल के संस्करणों में मौजूद है (विशेष रूप से इसे Windows 10 17763 पर विकसित और परीक्षण किया गया था)। Bochs का उपयोग गहन अंतर्दर्शन और उपकरण अनुकरण के लिए किया जाता है।
Windows Hypervisor Platform API (WHVP) Hyper-V की हाइपरवाइज़र क्षमताओं तक पहुँचने के लिए एक API सेट है। यह API हमारे लिए उपयोगकर्ता-स्थान में बिना किसी विशेष ड्राइवर या अनुमति की आवश्यकता के एक वर्चुअल मशीन को लागू करना आसान बनाता है।
यह एक तेज़ी से विकसित होने वाली परियोजना है। जब नई सुविधाएँ दस्तावेज़ीकृत होने से पहले आती हैं, तो मैं संभवतः ट्वीट करूँगा।
मुझे अपनी परियोजनाओं के लिए भौतिक चीज़ें रखना पसंद है:
यह एक उपकरण है जो सुरक्षा अनुसंधान के दौरान फ़ज़िंग और अंतर्दर्शन के लिए डिज़ाइन किया गया है। एक हाइपरवाइज़र का उपयोग करके सामान्य फ़ज़िंग तकनीकों को किसी भी लक्ष्य, कर्नेल या उपयोगकर्ता स्थान पर लागू किया जा सकता है। यह वातावरण स्रोत की आवश्यकता के बिना पूरे सिस्टम के फ़ज़िंग की अनुमति देता है। हाइपरवाइज़र स्तर पर कोड कवरेज एकत्र किया जा सकता है, और यदि आवश्यक हो तो Bochs अनुकरण का उपयोग अनुकरण वातावरण में मनमाना अंतर्दर्शन प्रदान करने के लिए किया जा सकता है। इस कवरेज जानकारी का उपयोग फ़ज़ मामलों की प्रभावशीलता का पता लगाने के लिए किया जा सकता है। एक फ़ज़ मामला जिसने कवरेज में वृद्धि की, उसे एक दिलचस्प मामला मानकर सहेजा जा सकता है। इस इनपुट का उपयोग बाद में नए भ्रष्टाचारों द्वारा निर्मित किया जा सकता है।
स्नैपशॉट फ़ज़िंग इस उपकरण का प्राथमिक उपयोग है। जहाँ आप एक निश्चित अवस्था में सिस्टम का स्नैपशॉट लेते हैं और उसे सहेज लेते हैं। इस स्नैपशॉट को फिर फ़ज़िंग के लिए लोड किया जा सकता है, जहाँ एक फ़ज़ मामला इंजेक्ट किया जाता है, और इसे फिर से शुरू किया जाता है। चूँकि VM को बहुत सस्ते में रीसेट किया जा सकता है, VM को बार-बार रीसेट किया जा सकता है। यदि Word को बूट होने में 5 सेकंड लगते हैं, लेकिन आप इसे ठीक उस समय स्नैपशॉट कर सकते हैं जब वह आपकी फ़ाइल पढ़ता है, तो आप फ़ज़ मामले को केवल उसी तक सीमित कर सकते हैं जो एक इनपुट के लिए प्रासंगिक है। यह स्रोत तक पहुँच की आवश्यकता के बिना फ़ज़िंग के एक बहुत ही कड़े लूप की अनुमति देता है। चूँकि VM पूरी तरह से अलग सिस्टम हैं, कई को समानांतर में चलाया जा सकता है ताकि सभी कोर तक स्केलिंग की जा सके।
वर्तमान में यह उपकरण केवल कोड कवरेज एकत्र करने, Windows के लिए गतिशील प्रतीक डाउनलोड करने, और Windows लक्ष्यों के लिए प्रतीक/मॉड्यूल पार्सिंग का समर्थन करता है। फ़ज़िंग समर्थन जोड़ना जल्द ही होगा।
यह देखते हुए कि मैंने यहाँ लगभग सभी सुविधाएँ पहले लिखी हैं (कवरेज, फ़ज़िंग, तेज़ रीसेट, आदि)। मुझे उम्मीद है कि यह परियोजना जल्द ही फ़ज़िंग के लिए तैयार हो जाएगी, जब तक कि मैं विचलित न हो जाऊं :D
मैं जनवरी के अंत तक कवरेज (हो गया!), फीडबैक, मॉड्यूल सूची (हो गया!), प्रक्रिया सूची, तेज़ रीसेट, और प्रतीक समर्थन (हो गया!) का लक्ष्य रख रहा हूँ। जो इसे एक बहुत ही सक्षम फ़ज़र बना देगा।
मुख्य समर्थित लक्ष्य आधुनिक Windows 10 है। Windows लक्ष्यों में प्रतीक स्टोर से प्रतीक डाउनलोड करने की सुविधा है। यह Windows लक्ष्यों में बॉक्स से बाहर प्रतीकात्मक कवरेज की अनुमति देता है। हालाँकि, कोड इस तरह लिखा गया है कि Linux enlightenment को आसानी से जोड़ा जा सकता है।
बिना किसी enlightenment के, कोई भी OS जो बूट होता है, उसे फ़ज़ किया जा सकता है और बुनियादी कवरेज एकत्र किया जा सकता है।
OS समर्थन समस्याओं की रिपोर्ट करने से पहले कृपया यह सत्यापित करें कि समस्या हाइपरवाइज़र/Bochs में किए गए परिवर्तनों में है, बिना हाइपरवाइज़र के मानक पूर्व-निर्मित Bochs का उपयोग करके अपने लक्ष्य को बूट करने का प्रयास करके। Bochs का आमतौर पर उपयोग नहीं किया जाता है और इसमें Linux बूट करने जैसी सामान्य चीजों के लिए भी ब्रेकिंग बग हो सकते हैं। विशेष रूप से OS में Spectre/Meltdown mitigations के साथ CPUID/MSR उपयोगों में तेज़ आंतरिक परिवर्तनों के कारण।
मुद्दों की सूची के लिए Github पर issues पृष्ठ देखें। मैंने इसमें पहले से कुछ बीज बो दिए हैं। फ़ज़िंग विकास शुरू होने से पहले इनमें से कुछ को जल्दी से संबोधित करने की आवश्यकता है।
इसे बनाने के लिए आपको कुछ चीज़ों की आवश्यकता है:
Visual Studio 2017 स्थापित करें और सुनिश्चित करें कि यह अपडेट है। हम यहाँ कुछ ब्लीडिंग एज APIs, हेडर और लाइब्रेरी का उपयोग कर रहे हैं।
मैं cl.exe संस्करण: Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27025.1 for x64 का उपयोग कर रहा था
और SDK संस्करण 10.0.17763.0
Rust को https://rustup.rs/ के माध्यम से स्थापित करें। मैंने rustc 1.32.0-nightly (b3af09205 2018-12-04) का उपयोग किया
सुनिश्चित करें कि आप x86_64-pc-windows-msvc टूलचेन स्थापित करते हैं क्योंकि इस परियोजना के लिए केवल 64-बिट समर्थित है।
सुनिश्चित करें कि cargo आपके PATH में है। यह डिफ़ॉल्ट होना चाहिए।
python https://www.python.org/ से प्राप्त करें और सुनिश्चित करें कि यह आपके PATH में इस प्रकार है कि python को आमंत्रित किया जा सके।
64-बिट Cygwin (https://www.cygwin.com/setup-x86_64.exe) को विशेष रूप से C:\cygwin64 पर स्थापित करें। Cygwin स्थापित करते समय सुनिश्चित करें कि आप autoconf और make पैकेज स्थापित करते हैं।
"Turn Windows features on or off" में जाएं और "Hyper-V" और "Windows Hypervisor Platform" के बगल में चेकबॉक्स को चिह्नित करें। इसके लिए निश्चित रूप से आवश्यक है कि आपका कंप्यूटर Hyper-V का समर्थन करता हो।
यह स्थापना प्रक्रिया गाइड निम्नलिखित पर सत्यापित की गई थी:
Clean install of Windows 10, Build 17763
rustc 1.33.0-nightly (8e2063d02 2019-01-07)
Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27025.1 for x64
Visual Studio Community 2017 version 15.9.4
applepie commit `f84c084feb487e2e7f31f9052a4ab0addd2c4cf9`
Python 3.7.2 x64
git version 2.20.1.windows.1

