
Windows पर सुरक्षा अनुसंधान के लिए एक ELAM ड्राइवर और सेवा बनाता है जो एक हस्ताक्षरित चाइल्ड प्रोसेस को Anti-Malware Protected Process-Light (PPL) के रूप में लॉन्च करता है।
यह प्रोजेक्ट 'मनमाने*' प्रक्रिया को Anti Malware Protected-Process-Light (PPL) के रूप में चलाने में सक्षम बनाने के लिए है, शोध उद्देश्यों के लिए। (* अधिक विवरण के लिए प्रतिबंध अनुभाग देखें)
अधिक विवरण और इस प्रोजेक्ट के पीछे के तर्क के लिए मेरे द्वारा लिखा गया यह ब्लॉग देखें।
System protected process Windows में एक सुरक्षा मॉडल है जो सिस्टम और एंटी-वायरस प्रक्रियाओं को छेड़छाड़ या निरीक्षण से बचाने के लिए डिज़ाइन किया गया है, यहाँ तक कि Administrators/SYSTEM द्वारा भी।
Anti Malware 'Protected Process-Light' (PPL) के रूप में शुरू की गई प्रक्रियाएँ इस बात में प्रतिबंधित हैं कि वे क्या कर सकती हैं, केवल हस्ताक्षरित कोड लोड कर सकती हैं, लेकिन गैर-Protected Processes द्वारा डीबग, निरीक्षण या रोका नहीं जा सकता। इसके अतिरिक्त, वे विशेष डेटा तक पहुँच प्राप्त कर सकती हैं, जैसे कि Microsoft-Windows-Threat-Intelligence ETW Provider।
यह प्रोजेक्ट एक Early-Launch Anti Malware (ELAM) ड्राइवर और usermode सेवा बनाता है। सेवा शुरू होने पर एक कॉन्फ़िगर करने योग्य चाइल्ड प्रक्रिया लॉन्च करेगी जिसे भी PPL के रूप में चिह्नित किया जाएगा।
चाइल्ड बाइनरी को सेवा के समान प्रमाणपत्र के साथ हस्ताक्षरित होना चाहिए, साथ ही कुछ अन्य प्रतिबंधों के साथ, लेकिन अन्यथा यह कोई भी बाइनरी और कमांडलाइन आर्ग्युमेंट हो सकता है जो आप चुनते हैं।
ईमानदारी से, मैं ELAM और PPL क्या हैं यह समझाने में अच्छा काम नहीं कर रहा हूँ, इसके बजाय मैं यहाँ से शुरू करने की सलाह देता हूँ:
आप Releases से PPLRunner सेवा और कर्नेल मॉड्यूल का पूर्व-निर्मित और हस्ताक्षरित संस्करण प्राप्त कर सकते हैं। रिलीज़ में एक .pfx फ़ाइल में स्वतः-उत्पन्न प्रमाणपत्र और निजी कुंजी भी है, जो पासवर्ड password से सुरक्षित है। मैंने कहा था कि यह केवल शोध-उद्देश्यों के लिए है, है ना?
अपना स्वयं का प्रोजेक्ट उत्पन्न और बनाने के लिए:
सुनिश्चित करें कि आपके पास Windows SDKs इंस्टॉल हैं।
generate_cert.ps1 और sign_file.ps1 खोलें, और $password वेरिएबल को किसी और चीज़ में बदलें (उन्हें एक दूसरे से मेल खाना चाहिए)।
generate_cert.ps1 चलाएँ। यह एक नए निजी और सार्वजनिक प्रमाणपत्र के साथ एक ppl_runner.pfx उत्पन्न करेगा।
इसका उपयोग PPLRunner द्वारा उपयोग की जाने वाली सभी बाइनरी को हस्ताक्षरित करने के लिए किया जाएगा।
ppl_runner.sln बिल्ड करें। यह 3 बाइनरी उत्पन्न करेगा:
ELAM Kernel Driver जिसमें प्रमाणपत्र जानकारी है। ड्राइवर वास्तव में कुछ नहीं करता, और वास्तव में लोड नहीं होगा, यह केवल हस्ताक्षर प्रमाणपत्र के लिए एक वाहक के रूप में उपयोग किया जाता है।
सेवा इंस्टॉलर और बाइनरी। एक PPL सेवा के रूप में, शुरू होने पर यह एक चाइल्ड प्रक्रिया लॉन्च करेगी, जो भी PPL के रूप में होगी, फिर रुक जाएगी और बाहर निकल जाएगी।
एक उदाहरण निष्पादन योग्य फ़ाइल जिसे बिल्ड समय पर Visual Studio द्वारा सही प्रमाणपत्र के साथ हस्ताक्षरित किया जाएगा। PPLRunner लगभग किसी भी बाइनरी को चला सकता है, यह केवल एक उदाहरण है जो स्वचालित रूप से हस्ताक्षरित होगा।
नोट केवल परीक्षण मशीन पर इंस्टॉल करें, उत्पादन/अपने घरेलू PC पर नहीं।
बिल्ड होने के बाद, elam_driver.sys और ppl_runner.exe को लक्ष्य मशीन पर एक फ़ोल्डर में कॉपी करें।
एक elevated prompt से यह चलाकर test signing सक्षम करें, फिर रीबूट करें:
bcdedit /set testsigning on
ppl_runner.exe install
यह ppl_runner नामक एक सेवा स्थापित करेगा।
किसी बाइनरी को चलाने के लिए साइन करने हेतु, इसे ppl_runner.pfx प्रमाणपत्र के साथ साइन करें, चाहे sign_file.ps1 स्क्रिप्ट का उपयोग करके,
या स्वयं signtool.exe चलाकर। यदि आपके पास signtool.exe नहीं है, तो यह Windows SDKs में मौजूद है।
रजिस्ट्री कुंजी HKLM\SOFTWARE\PPL_RUNNER बनाएं।
डिफ़ॉल्ट/खाली कुंजी को REG_SZ के रूप में सेट करें, जिसमें निष्पादित करने वाली बाइनरी का पूर्ण पथ,
और कोई भी कमांडलाइन आर्ग्युमेंट शामिल हो। उदा. कमांडलाइन से:
REG.exe ADD HKLM\SOFTWARE\PPL_RUNNER /ve /t REG_SZ /d "C:\path\to\binay --argument 1"
सेवा को निष्पादन योग्य फ़ाइल लॉन्च करने के लिए, बस एक एलिवेटेड प्रॉम्प्ट से चलाएँ:
net start ppl_runner
PPL सेवा के रूप में, शुरू होने पर ppl_runner रजिस्ट्री कुंजी पढ़ेगा, चाइल्ड प्रोसेस लॉन्च करेगा,
जो PPL के रूप में भी होगा, फिर रुककर बाहर निकल जाएगा। सफल लॉन्च फिर भी the service failed to run कहेगा,
लेकिन यदि आप sc query ppl_runner के साथ रिटर्न कोड जाँचते हैं, तो यह 0 होना चाहिए, अर्थात् ERROR_SUCCESS।
चाइल्ड प्रोसेस दिखाई नहीं देगा, हालाँकि यदि आप Debug Outputs और DBGView.exe का उपयोग करके
किसी प्रकार का आउटपुट प्राप्त कर सकते हैं (देखें child_example कोड)।
चूँकि सेवा Anti Malware PPL भी है, इसे केवल समान रूप से उच्च-स्तरीय प्रोसेस द्वारा ही रोका और हटाया जा सकता है। हालाँकि, हम PPLRunner का उपयोग स्वयं को हटाने के लिए कर सकते हैं, बस रजिस्ट्री कुंजी में कमांड को इस प्रकार सेट करें:
C:\path\to\ppl_runner.exe remove
और सेवा चलाएँ। अर्थात् चलाएँ:
REG.exe ADD HKLM\SOFTWARE\PPL_RUNNER /ve /t REG_SZ /d "C:\path\to\ppl_runner.exe remove"
net start ppl_runner
testsigning मोड में काम करता है।ppl_runner.exe install को फिर से चलाना होगाSysinternal का DBGView चलाएँ और Win32 Global को लॉग करें, *[PPL_RUNNER]* पर फ़िल्टर करते हुए।
यह सेवा और इंस्टॉलर से सभी लॉग दिखाएगा।
TBD - Sealighter ब्लॉग
James Forshaw ने मौजूदा PPL प्रोसेस में कोड इंजेक्ट करने के लिए एक शानदार प्रोजेक्ट बनाया है।
Alex Ionescu को फ़ॉलो करना ELAM और PPL के बारे में अधिक जानने का शायद सबसे अच्छा तरीका है। संभवतः इससे शुरुआत करें: https://www.crowdstrike.com/blog/protected-processes-part-3-windows-pki-internals-signing-levels-scenarios-signers-root-keys/
Matth Graeber और James Forshaw को फ़ॉलो करना एक और शानदार तरीका है।
Matt को सर्टिफिकेट से 'To-Be-Signed' हैश प्राप्त करने के लिए powershell स्क्रिप्ट के लिए बहुत-बहुत धन्यवाद।