
Windows कमांड-लाइन उपयोगिता जो प्रशासक संदर्भ से फ़ॉन्ट सत्यापन निष्पादन पुनर्निर्देशन तकनीक का उपयोग करके कर्नेल-मोड कोड को पढ़ने, लिखने और निष्पादित करने में सक्षम बनाती है, जिससे उन्नत कर्नेल डीबगिंग और सिस्टम समस्या निवारण संभव होता है।
r0ak एक Windows कमांड-लाइन उपयोगिता है जो आपको कमांड प्रॉम्प्ट से कर्नेल-मोड कोड को आसानी से पढ़ने, लिखने और निष्पादित करने में सक्षम बनाती है (कुछ सीमाओं के साथ), बिना किसी अन्य चीज की आवश्यकता के केवल प्रशासकीय विशेषाधिकारों के साथ।
r0ak v1.0.0 -- Ring 0 Army Knife
http://www.github.com/ionescu007/r0ak
Copyright (c) 2018 Alex Ionescu [@aionescu]
http://www.windows-internals.com
USAGE: r0ak.exe
[--execute <Address | module.ext!function> <Argument>]
[--write <Address | module.ext!function> <Value>]
[--read <Address | module.ext!function> <Size>]

Windows कर्नेल एक समृद्ध वातावरण है जिसमें सैकड़ों ड्राइवर एक सामान्य सिस्टम पर निष्पादित होते हैं, और जहां वैश्विक स्थिति वाले हजारों चर मौजूद हैं। उन्नत समस्या निवारण के लिए, IT विशेषज्ञ आमतौर पर Windows डीबगर (WinDbg), SysInternals टूल्स जैसे उपकरणों का उपयोग करते हैं, या अपने स्वयं के लिखते हैं। दुर्भाग्य से, इन उपकरणों का उपयोग तेजी से कठिन होता जा रहा है, और वे स्वयं Windows APIs और उजागर सुविधाओं तक अपनी पहुंच द्वारा सीमित हैं।
आज की कुछ चुनौतियों में शामिल हैं:
ऐसे वातावरण में, यह स्पष्ट था कि एक सरल उपकरण जिसे आपातकालीन बैंड-एड/हॉटफिक्स के रूप में उपयोग किया जा सकता है और कर्नेल/सिस्टम-स्तरीय समस्याओं का शीघ्र समस्या निवारण किया जा सकता है, जो कर्नेल राज्य का विश्लेषण करके स्पष्ट हो सकती हैं, समुदाय के लिए मूल्यवान हो सकता है।

r0ak विंडो मैनेजर के विश्वसनीय फ़ॉन्ट सत्यापन जांच के निष्पादन प्रवाह को पुनर्निर्देशित करके काम करता है, जब किसी नए फ़ॉन्ट को लोड करने का प्रयास किया जाता है, विश्वसनीय फ़ॉन्ट तालिका के तुलनाकर्ता रूटीन को एक वैकल्पिक फ़ंक्शन से बदलकर जो इनपुट नोड में संग्रहीत एक कार्यकारी कार्य आइटम (WORK_QUEUE_ITEM) को शेड्यूल करता है। फिर, विश्वसनीय फ़ॉन्ट तालिका का दायां चाइल्ड (जो रूट नोड के रूप में कार्य करता है) एक नामित पाइप के राइट बफर (NP_DATA_ENTRY) के साथ ओवरराइट किया जाता है जिसमें एक कस्टम कार्य आइटम संग्रहीत होता है। यह आइटम का अंतर्निहित वर्कर फ़ंक्शन और इसका पैरामीटर अंततः एक समर्पित ExpWorkerThread द्वारा PASSIVE_LEVEL पर निष्पादित किया जाएगा, जब एक फ़ॉन्ट लोड का प्रयास किया जाता है और तुलनाकर्ता रूटीन निष्पादित होता है, जो नाम पाइप-समर्थित पैरेंट नोड को अपने इनपुट के रूप में प्राप्त करता है। यह सुनिश्चित करने के लिए कि कार्य आइटम निष्पादन समाप्त हो गया है, एक रीयल-टाइम Event Tracing for Windows (ETW) ट्रेस ईवेंट का उपयोग किया जाता है, जो संरचनाओं को तोड़ने, कर्नेल-मोड बफ़र्स को मुक्त करने और सामान्य संचालन को बहाल करने के लिए सुरक्षित बनाता है।
--execute विकल्प का उपयोग करते समय, यह फ़ंक्शन और पैरामीटर उपयोगकर्ता द्वारा प्रदान किया जाता है।
--write का उपयोग करते समय, कर्नेल मेमोरी में कहीं भी मनमाने 32-बिट मानों को संशोधित करने के लिए एक कस्टम गैजेट का उपयोग किया जाता है।
--read का उपयोग करते समय, सिस्टम के HSTI बफ़र पॉइंटर और आकार को संशोधित करने के लिए राइट गैजेट का उपयोग किया जाता है (N.B.: यह HSTI डेटा का अनुरोध करने वाले किसी भी अन्य एप्लिकेशन के संदर्भ में विनाशकारी व्यवहार है। चूंकि यह वैकल्पिक Windows व्यवहार है, और यह उपकरण आपातकालीन डिबगिंग/प्रयोग के लिए है, इस डेटा के नुकसान को स्वीकार्य माना गया था)। फिर, HSTI Query API का उपयोग करके उपकरण के उपयोगकर्ता-मोड एड्रेस स्पेस में वापस कॉपी किया जाता है, और एक हेक्स डंप दिखाया जाता है।
क्योंकि केवल बिल्ट-इन, Microsoft-हस्ताक्षरित, Windows कार्यक्षमता का उपयोग किया जाता है, और सभी कॉल किए गए फ़ंक्शन KCFG बिटमैप का हिस्सा हैं, किसी भी सुरक्षा जांच का उल्लंघन नहीं होता है, और किसी डिबगिंग फ्लैग की आवश्यकता नहीं है, या खराब लिखित तृतीय-पक्ष ड्राइवरों का उपयोग नहीं किया जाता है।
नहीं। चूंकि इस उपकरण -- और अंतर्निहित तकनीक -- को SYSTEM-स्तरीय विशेषाधिकार प्राप्त टोकन की आवश्यकता होती है, जो केवल प्रशासक खाते के तहत चलने वाले उपयोगकर्ता द्वारा प्राप्त किया जा सकता है, इसलिए प्रभाव प्राप्त करने के लिए कोई सुरक्षा सीमाएँ बायपास नहीं की जा रही हैं। उपकरण का व्यवहार और उपयोगिता केवल Windows पर प्रशासक खाते के उन्नत/विशेषाधिकार प्राप्त सुरक्षा संदर्भ के कारण संभव है, और इसे डिज़ाइन-द्वारा व्यवहार माना जाता है।
बिल्कुल! Microsoft के साथ हमेशा सुरक्षा मुद्दे दर्ज करना महत्वपूर्ण है, भले ही विशेषाधिकार प्राप्त सीमाओं का उल्लंघन न हुआ हो -- उनके शोधकर्ताओं और डेवलपर्स की टीमें नए वेक्टर और कुछ कोड पथों तक पहुंचने के तरीके खोज सकती हैं जिनके बारे में एक बाहरी शोधकर्ता ने नहीं सोचा हो।
इस प्रकार, नवंबर 2014 में, Microsoft Security Research Centre (MSRC) में एक सुरक्षा मामला दर्ज किया गया था, जिसने जवाब दिया: "[…] एक सुरक्षा मुद्दे के दायरे में नहीं आता है जिसे हम अपने पारंपरिक सुरक्षा बुलेटिन वाहन के माध्यम से संबोधित करेंगे। यह […] प्रशासक विशेषाधिकारों को पूर्व-मानता है -- एक ऐसा स्थान जहां आर्किटेक्चरल रूप से, हम वर्तमान में एक रक्षात्मक सुरक्षा सीमा को परिभाषित नहीं करते हैं। इस प्रकार, हम इसे ठीक करने का प्रयास नहीं करेंगे।"
इसके अलावा, अप्रैल 2015 में Infiltrate सम्मेलन में, Insection : AWEsomely Exploiting Shared Memory Objects शीर्षक से एक वार्ता प्रस्तुत की गई जिसमें इस मुद्दे का विवरण दिया गया, जिसमें उपस्थित Microsoft डेवलपर्स भी शामिल थे, जिन्होंने सहमति व्यक्त की कि यह वर्तमान में Windows की आर्किटेक्चरल सुरक्षा सीमाओं के दायरे से बाहर है। ऐसा इसलिए है क्योंकि एक प्रशासक Ring 0 मेमोरी को पढ़ने/लिखने/निष्पादित करने के दर्जनों -- यदि अधिक नहीं -- अन्य तरीके हैं। यह उपकरण केवल ऐसे एक वेक्टर के आसान कमोडिफिकेशन की अनुमति देता है, सिस्टम समस्याओं के डिबगिंग और समस्या निवारण के उद्देश्यों के लिए।
इस कोड को लाइब्रेरी के रूप में पैकेज करने के लिए सभी इंटरैक्टिव कमांड-लाइन पार्सिंग और मानक आउटपुट को सावधानीपूर्वक हटाना होगा, जिसके बाद, बड़े पुनर्लेखन के बिना, 'किट':