Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
rewind — स्नैपशॉट-आधारित कवरेज-निर्देशित विंडोज कर्नेल फज़र | Kitploit
उपकरण/GitHubGitHub/quarkslab/rewind
गतिशील विश्लेषण (सैंडबॉक्सिंग)भेद्यता विश्लेषणरिवर्स इंजीनियरिंगफज़िंग
GitHubquarkslab/rewind

rewind

स्नैपशॉट-आधारित कवरेज-निर्देशित विंडोज कर्नेल फज़र

रिपॉजिटरी देखें
327364 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

README

Rewind एक स्नैपशॉट-आधारित कवरेज-निर्देशित फज़र है जो Windows कर्नेल घटकों को लक्षित करता है।

विचार एक चालू सिस्टम के स्नैपशॉट से शुरू करना है। यह स्नैपशॉट भौतिक मेमोरी पेजों के साथ-साथ cpu की स्थिति से बना होता है।

इस स्थिति का उपयोग वर्चुअल cpu की प्रारंभिक स्थिति सेट करने के लिए किया जाता है। ऑन-डिमांड पेजिंग का लाभ उठाकर स्नैपशॉट से केवल लक्ष्य फ़ंक्शन के निष्पादन के लिए आवश्यक पेज पढ़े जाते हैं।

क्योंकि हम एक समर्पित वर्चुअल मशीन का उपयोग करते हैं जिसमें केवल लक्ष्य फ़ंक्शन के निष्पादन के लिए उपयोगी भौतिक मेमोरी पेज होते हैं, स्नैपशॉट को पुनर्स्थापित करना तेज़ होता है।

अभी तक 2 बैकएंड उपलब्ध हैं:

  • WHVP बैकएंड, WHVP (Windows Hypervisor Platform) API का उपयोग करता है ताकि Hyper-V पार्टीशन तक पहुँच प्रदान कर सके। देखें https://docs.microsoft.com/en-us/virtualization/api/hypervisor-platform/hypervisor-platform अधिक जानकारी के लिए।
  • Bochs बैकएंड, Bochs इम्यूलेटर का उपयोग करता है (https://bochs.sourceforge.io/)

एक KVM बैकएंड विकसित किया जा रहा है और जल्द ही उपलब्ध होना चाहिए।

Rewind 2 मुख्य सुविधाएँ प्रदान करता है:

  • किसी भी फ़ंक्शन को ट्रेस करने की क्षमता
  • किसी भी फ़ंक्शन को फज़ करने की क्षमता

यह फज़िंग से संबंधित उपयोगी जानकारी रिपोर्ट करने के लिए एक बुनियादी TUI (टर्मिनल यूज़र इंटरफ़ेस) भी प्रदान करता है।

इसे Windows और Linux पर परीक्षण किया गया है (अभी के लिए Linux पर केवल bochs बैकएंड)।

प्रेरणा

मुझे हमेशा कर्नेल भेद्यता अनुसंधान करने में मज़ा आया, विशेष रूप से Windows कर्नेल पर। यह प्रक्रिया हमेशा स्थैतिक और गतिशील विश्लेषण का मिश्रण शामिल करती है। गतिशील विश्लेषण करना जल्दी ही थकाऊ हो सकता है। डीबग / क्रैश / रीबूट / सभी ब्रेकपॉइंट रीसेट करने का चक्र धीमा और कष्टदायक है। जब आप कुछ फज़िंग करना चाहते हैं, तो अक्सर आपको एक या कई वर्चुअल मशीनों के साथ-साथ एक कर्नेल डीबगर सेट करने और क्रैश डिटेक्शन को संभालने के लिए कुछ ghetto स्क्रिप्ट तैयार करनी पड़ती हैं...

वर्चुअल मशीनों के साथ स्नैपशॉट लेना मदद करता है लेकिन यह धीमा है।

2018 के दौरान, Microsoft ने Windows Hypervisor Platform (WHVP) नामक API का एक नया सेट पेश किया। ये API कुछ वर्चुअल प्रोसेसर के साथ एक पार्टीशन (हाइपर-V की भाषा में VM) सेट करने और वर्चुअल मशीन में होने वाले VM exits पर नियंत्रण रखने की अनुमति देते हैं। यह लगभग आपके अपने यूज़रलैंड VM-exit हैंडलर होने जैसा है। उपयोगी चीज़ों के लिए काफी सुविधाजनक, उदाहरण के लिए Simpleator या applepie।

इसलिए मैंने WHVP के साथ खेलना शुरू किया और एक पहला PoC बनाया जो मुझे Hyper-V पार्टीशन में कुछ शेलकोड निष्पादित करने की अनुमति देता था। यह Python में लिखा गया था और काफी धीमा था। यह पहला PoC काफी जल्दी किसी प्रकार के स्नैपशॉट-आधारित ट्रेसर में विकसित हो गया। मैं कुछ ऐसा चाहता था जो वर्चुअल CPU को बूटस्ट्रैप कर सके और सेटअप करना आसान हो। चूँकि मैं पहले से ही अपने लक्ष्य के साथ खेलने के लिए कर्नेल डीबगर का उपयोग कर रहा था मैंने अपने स्नैपशॉट के रूप में WinDbg के साथ बनाए गए कर्नेल डंप का उपयोग करने का निर्णय लिया। इसके साथ मुझे बस एक वर्चुअल cpu के साथ पार्टीशन सेट करने की आवश्यकता थी। वर्चुअल cpu का संदर्भ डंप से लिए गए संदर्भ के साथ सेट किया जाता है। जब भी वर्चुअल cpu को किसी भौतिक पेज की आवश्यकता होती है, मैं डंप से उन पेजों का उपयोग करता हूँ।

इसके साथ मैं डंप की स्थिति को एक पार्टीशन में फोर्क करने और फिर निष्पादन फिर से शुरू करने में सक्षम था। इसने मुझे अपने लक्ष्य फ़ंक्शन के निष्पादन को आसानी से ट्रेस करने की अनुमति दी। तर्कों को संशोधित करके और पार्टीशन की मेमोरी स्थिति को पूर्ववत करके लक्ष्य को फज़ करना भी बहुत आसान था।

यह कार्य SSTIC सम्मेलन के 2020 में प्रस्तुत किया गया था और github पर जारी किया गया।

टूल कवरेज प्राप्त करने के 2 तरीके लागू करता है। पहला हर निर्देश पर INT1 इंटरप्ट के लिए शास्त्रीय TF (ट्रैप फ्लैग) का उपयोग करता है। इसके लिए लक्ष्य को संशोधित करने की आवश्यकता होती है और यह धीमा है। मैं MONITOR ट्रैप फ्लैग का उपयोग करना पसंद करता। लेकिन WHVP यह संभावना प्रदान नहीं करता है।

उचित प्रदर्शन (फज़िंग के लिए आवश्यक) पाने के लिए, मैंने कवरेज की सटीकता को कम करने और एक ऐसा मोड जोड़ने का निर्णय लिया जहाँ आप केवल जानते हैं कि कोई निर्देश पहली बार कब निष्पादित किया गया है।

ऐसा करने के लिए मैं स्नैपशॉट से प्राप्त पेजों को 0xcc बाइट्स के साथ पैच करता हूँ (केवल निष्पादन योग्य पेजों के लिए)। जब cpu इन पैच किए गए निर्देशों को निष्पादित करेगा, तो हाइपरवाइज़र अपवाद को ट्रैप करेगा और निर्देशों को मूल कोड के साथ फिर से लिख देगा।

यह हर निर्देश पर एक अद्वितीय सॉफ्टवेयर ब्रेकपॉइंट सेट होने जैसा है। यह 95% समय काम करता है लेकिन विशेष कोड में (उदाहरण के लिए जंप टेबल वाले) यह विफल हो जाएगा क्योंकि डेटा बदल दिया जाएगा।

इससे निपटने के लिए एक विकल्प कोड को मैप करने से पहले डिसअसेंबल करना और केवल वहीं पैच करना होगा जो आवश्यक है (शायद अगली बार)।

अपने प्रयोग के दौरान मुझे WHVP का उपयोग करते समय कई सीमाओं का सामना करना पड़ा। यह धीमा है, वास्तव में बहुत धीमा। VirtualBox स्रोत कोड में कुछ दिलचस्प टिप्पणियाँ हैं :)

इसलिए उचित प्रदर्शन के लिए आपको वास्तव में VM exits को सीमित करने की आवश्यकता है और यह असंगत है यदि आप tracing हाइपरवाइज़र के रूप में Hyper-V का उपयोग करना चाहते हैं (क्योंकि इसके लिए बहुत सारे VM exits की आवश्यकता होती है)।

उसी समय मैंने bochs (विशेष रूप से instrumentation भाग) का उपयोग यह जाँचने के लिए शुरू किया कि टूल द्वारा प्राप्त ट्रेस सही थे या नहीं। Bochs कुछ हद तक एक ओरेकल था यह देखने के लिए कि क्या मेरे पास भिन्न ट्रेस थे।

पूर्ण ट्रेस करते समय Bochs WHVP से तेज़ है और आपके पास मेमोरी एक्सेस के साथ-साथ अन्य उपयोगी चीज़ों का भी लाभ है।

मैंने bochs को एक और बैकएंड के रूप में जोड़ने का निर्णय लिया। whvp अब उचित नाम नहीं था और मैंने rewind पर समझौता किया।

विशिष्ट उपयोग

rewind को मेरे अपने कार्यप्रवाह के आसपास डिज़ाइन किया गया था जब मैं Windows प्लेटफ़ॉर्म पर कर्नेल ड्राइवरों के लिए सुरक्षा मूल्यांकन करता हूँ।

पहला कदम लक्ष्य सॉफ़्टवेयर को एक वर्चुअल मशीन के अंदर स्थापित करना है। चूँकि मैं स्थैतिक और गतिशील विश्लेषण का मिश्रण उपयोग करता हूँ, मैं एक कर्नेल डीबगर भी सेट करूँगा।

IDA में कुछ यादृच्छिक ड्राइवर खोलने के बाद, मैं जल्दी से कुछ फ़ंक्शनों को लक्षित करना शुरू करूँगा। ऐसा करने के लिए मैं आमतौर पर कुछ ब्रेकपॉइंट लगाता हूँ windbg के साथ और ret-sync के साथ मिलकर मैं खेलना शुरू कर सकता हूँ।

यहीं पर rewind काम में आता है। यादृच्छिक मेमोरी बफर को संपादित करने, सिंगलस्टेप करने और मोटा अंदाज़ा पाने के लिए IDB को एनोटेट करने के बजाय, मैं windbg के साथ एक स्नैपशॉट लूँगा और इसके बजाय rewind का उपयोग करूँगा।

यह प्रक्रिया को बहुत आसान बना देगा। स्नैपशॉट होने से बहुत सारे लाभ मिलते हैं। सब कुछ नियतिवादी है। आप किसी फ़ंक्शन कॉल को बार-बार रीप्ले कर सकते हैं। यदि लक्ष्य फ़ंक्शन दिलचस्प लगता है तो आप एक फज़र लॉन्च कर सकते हैं आप VM को बंद भी कर सकते हैं क्योंकि अब इसकी आवश्यकता नहीं है।

आवश्यक शर्तें

जाहिर है आपको Rust की आवश्यकता है (Windows और Linux पर Rust 1.50 के साथ स्थापना का परीक्षण किया गया)। CMake की भी कुछ निर्भरताओं के लिए आवश्यकता होती है।

Git

पहले रिपॉजिटरी को क्लोन करें:

root@kitploit:~
$ git clone [email protected]:quarkslab/rewind.git

फिर bochs बैकएंड की स्थापना के साथ जारी रखें

Bochs

vendor निर्देशिका में bochscpu (https://github.com/yrp604/bochscpu) रिपॉजिटरी को क्लोन करें:

root@kitploit:~
$ cd vendor
$ git clone https://github.com/yrp604/bochscpu

bochscpu-build (https://github.com/yrp604/bochscpu-build) से प्रीबिल्ट bochs आर्टिफैक्ट डाउनलोड करें

root@kitploit:~
$ curl.exe -L --output bochs-x64-win.zip [artifact_url]

lib और bochs फ़ोल्डरों को bochscpu चेकआउट में निकालें।

root@kitploit:~
$ Expand-Archive -Path .\bochs-x64-win.zip -DestinationPath .\
$ copy -Recurse .\bochs-x64-win\msvc\* .\bochscpu\

WHVP

Windows पर WHVP भी बैकएंड के रूप में बिल्ड होगा।

एक elevated PowerShell सत्र में, WHVP सक्षम है या नहीं यह जाँचने के लिए निम्न कमांड का उपयोग करें:

root@kitploit:~
Get-WindowsOptionalFeature -FeatureName HypervisorPlatform -Online

FeatureName      : HypervisorPlatform
DisplayName      : Windows Hypervisor Platform
Description      : Enables virtualization software to run on the Windows hypervisor
RestartRequired  : Possible
State            : Enabled
CustomProperties :

यदि यह सक्षम नहीं है तो आप इसे सक्षम करने के लिए Set-WindowsOptionalFeature cmdlet का उपयोग कर सकते हैं। आपको Hyper-V को भी सक्षम करना होगा।

आपके पास Windows SDK (10.0.19041.0) स्थापित होना भी आवश्यक है। आप इसे https://developer.microsoft.com/fr-fr/windows/downloads/windows-10-sdk/ से डाउनलोड कर सकते हैं।

मास्टर ब्रांच से बिल्ड करें

आपको LLVM स्थापित करना होगा और LIBCLANG_PATH पर्यावरण चर सेट करना होगा (bindgen के लिए आवश्यक) विस्तृत विवरण के लिए https://rust-lang.github.io/rust-bindgen/requirements.html देखें।

root@kitploit:~
$ $env:LIBCLANG_PATH="C:\Program Files\LLVM\bin"

वहाँ से आप rewind बिल्ड करने में सक्षम होना चाहिए (bochscpu क्रेट में unwind_attributes के कारण nightly आवश्यक है):

root@kitploit:~
$ cd rewind_cli
$ cargo +nightly build --release

rewind बाइनरी target/release निर्देशिका में उपलब्ध होगी।

आप स्थानीय रूप से स्थापित करने के लिए cargo का भी उपयोग कर सकते हैं:

root@kitploit:~
$ cd rewind_cli
$ cargo +nightly install --path .

सामान्य बिल्ड समस्याएँ

  • यदि cmake पाथ में नहीं है, तो zydis बनाते समय आपको एक त्रुटि मिलेगी
root@kitploit:~
> error: failed to run custom build command for `zydis v3.1.1`
  • यदि Windows SDK समर्थित संस्करणों से भिन्न है, तो whvp-sys बिल्ड करने में विफल हो जाएगा

उदाहरण

CVE-2020-17087 का लाभ उठाने वाला एक बुनियादी ट्यूटोरियल examples निर्देशिका में प्रदान किया गया है

रोडमैप

TODO.md देखें

ज्ञात बग/सीमाएँ

  • यह सॉफ़्टवेयर विकास के बहुत प्रारंभिक चरण में है और एक चल रहा प्रयोग है।
  • कभी-कभी ट्रेसर लक्ष्य फ़ंक्शन को ट्रेस करने में असमर्थ होता है (सबसे आम समस्या अमान्य वर्चुअल cpu स्थिति है)।
  • hit कवरेज मोड का उपयोग करते समय, ट्रेसर कुछ फ़ंक्शनों पर गलत व्यवहार करेगा (कुछ स्विच टेबल के मामले में ऐसा होता है)। कारण यह है कि प्रत्येक बाइट को सॉफ्टवेयर ब्रेकपॉइंट्स द्वारा बदल दिया जाता है (जिसमें डेटा भी शामिल है यदि वे एक निष्पादन योग्य पेज में मौजूद हैं)। ऐसा करने का एक बेहतर तरीका उदाहरण के लिए डिसअसेंबलर से सभी बेसिक ब्लॉकों की सूची प्राप्त करना होगा।
  • लक्ष्य फ़ंक्शन को एक अद्वितीय वर्चुअल प्रोसेसर के साथ निष्पादित किया जाएगा, आपके पास हार्डवेयर के लिए कोई समर्थन नहीं है इसलिए यदि आप हार्डवेयर से संबंधित फ़ंक्शनों को ट्रेस करते हैं तो संभवतः कुछ गलत होगा
  • यह टूल विशिष्ट फ़ंक्शनों को लक्षित करने के लिए सबसे अच्छा उपयोग किया जाता है
  • सर्वोत्तम प्रदर्शन के लिए, VM exits और संशोधित पेजों को कम करें क्योंकि वे वास्तव में महंगे हो सकते हैं और फ़ंक्शन को निष्पादित करने के लिए आवश्यक समय बढ़ा देंगे।
  • स्नैपशॉट लेने के लिए hyper-V का उपयोग न करें। Windows Hyper-V "enlightened" होते हैं, जिसका अर्थ है कि वे पैरावर्चुअलाइज़ेशन का उपयोग कर रहे हैं, यह वर्तमान में संभाला नहीं गया है
  • कुछ प्रतीक (symbols) ठीक से हल नहीं होते हैं

लाइसेंस

यह टूल वर्तमान में Quarkslab द्वारा Apache 2.0 लाइसेंस के तहत विकसित और प्रायोजित है।

Greetz

@yrp604, @0vercl0k, Alexandre Gazet को उनकी मदद, प्रतिक्रिया और विचारों के लिए सलाम। Quarkslab में मेरे सभी सहयोगियों को भी धन्यवाद!

टूल डाउनलोड करें