
ALPC पोर्ट्स, जिनमें PPL-संरक्षित प्रक्रियाएँ शामिल हैं, को सूचीबद्ध और वर्गीकृत करने के लिए एक Windows यूज़रलैंड टूल।
एक Windows यूज़रलैंड टूल जो Advanced Local Procedure Call (ALPC) पोर्ट्स को एन्यूमरेट और वर्गीकृत करता है, जिसमें PPL (Protected Process Light) प्रक्रियाओं के स्वामित्व वाले पोर्ट्स भी शामिल हैं, जहाँ मानक हैंडल डुप्लिकेशन विफल हो जाता है।
मानक एन्यूमरेशन उपकरण अक्सर संरक्षित या एक्सेस-अस्वीकृत पोर्ट्स को पूरी तरह से छोड़ देते हैं, जिससे ब्लाइंड स्पॉट बनते हैं। यह टूल ALPC पोर्ट ऑब्जेक्ट-टाइप इंडेक्स को गतिशील रूप से हल करता है और उन पोर्ट्स को सटीक रूप से वर्गीकृत करने के लिए NtQueryInformationProcess पर फॉलबैक करता है जो मानक डुप्लिकेशन अनुरोधों को अस्वीकार करते हैं।
यह टूल दो प्राथमिक दर्शकों के लिए मानक Windows IPC एन्यूमरेशन में ब्लाइंड स्पॉट्स को समाप्त करता है:
PROCESS_DUP_HANDLE एक्सेस को हुक या अस्वीकार कर सकता है। मानक उपकरण इन पोर्ट्स को चुपचाप छोड़ देते हैं। यह टूल विफलता को पकड़ता है और इसके बजाय PS_PROTECTION संरचना को क्वेरी करता है। यदि कोई प्रक्रिया एक्सेस अस्वीकार करती है लेकिन Type और Signer का मान 0 (None) लौटाती है, तो यह एक वैध Windows PPL प्रक्रिया नहीं है, यह अत्यधिक असामान्य है और इसे तत्काल जांच के लिए फ़्लैग किया जाना चाहिए।लाइव Windows सिस्टम पर परीक्षण के दौरान, टूल ने 58,916 खुले हैंडल्स को स्कैन किया और 2,618 ALPC पोर्ट्स को अलग किया:
कच्चा आउटपुट: इस रन का पूरा, अनफ़िल्टर्ड आउटपुट
alpc_enumerator_output.txtमें उपलब्ध है।
अनाम पोर्ट्स पर नोट: अनाम पोर्ट्स के लिए कंसोल प्रिंटिंग डिफ़ॉल्ट रूप से
main.cppमें अक्षम है, ताकि टर्मिनल आउटपुट को हजारों प्रविष्टियों से भरने से रोका जा सके। यदि आपको अनाम पोर्ट्स के लिए रीयल-टाइम आउटपुट की आवश्यकता है, तो कंपाइल करने से पहले लाइन ~451 परcheckEntriesVectorForPrint(anonEntries, "Anonymous");को अनकमेंट करें।
यह साबित करने के लिए कि यूज़रलैंड एन्यूमरेशन सटीक है, टूल के आउटपुट को Windows कर्नेल डीबगर (WinDbg) के विरुद्ध मैन्युअल रूप से सत्यापित किया गया है। ऑब्जेक्ट एड्रेस और PPL साइनर स्तर कर्नेल की वास्तविकता से बिल्कुल मेल खाते हैं।
main.cpp खोलें या MSVC के माध्यम से कंपाइल करें।Release मोड (x64) में बिल्ड करें।SeDebugPrivilege की आवश्यकता है)।ALPC ऑब्जेक्ट-टाइप इंडेक्स को हार्डकोड करने के बजाय (जो Windows बिल्ड्स के बीच टूट जाता है), टूल एक अस्थायी ALPC पोर्ट बनाता है और होस्ट सिस्टम के लिए सही इंडेक्स (जैसे, इंडेक्स 46) को अलग करने के लिए गतिशील रूप से उसके प्रकार को क्वेरी करता है। जब मानक हैंडल डुप्लिकेशन विफल हो जाता है, तो यह एक्सेस अधिकारों पर निर्भर किए बिना पोर्ट्स को वर्गीकृत करने के लिए आवश्यक सटीक Type और Signer निकालने हेतु PS_PROTECTION को डिकोड करता है।
पूर्ण तकनीकी विवरण के लिए, यहाँ मीडियम लेख का लिंक है: https://medium.com/@sphinx_321/userland-alpc-enumeration-dynamic-ppl-aware-approach-283541194102
यह टूल ALPC/RPC और Windows इंटर्नल्स पर मेरे चल रहे शोध का हिस्सा है। मैं निकट भविष्य में आगे के निष्कर्ष प्रकाशित करूँगा और सहायक टूल जारी करूँगा। यदि आपको यह उपयोगी लगा, तो भविष्य के ड्रॉप्स की सूचना पाने के लिए मुझे GitHub या नीचे दिए गए मेरे सोशल मीडिया पर फॉलो करने पर विचार करें।