
एक Binary Ninja प्लगइन जो static taint analysis के लिए driver के रूप में variables के backward slicing का उपयोग करता है।
Mole एक Binary Ninja प्लगइन है जिसे बाइनरी में दिलचस्प निष्पादन पथ (execution paths) की पहचान करने के लिए डिज़ाइन किया गया है। यह Binary Ninja के Medium Level Intermediate Language (MLIL) का उपयोग करके चरों पर पश्चवर्ती स्लाइसिंग (backward slicing) करता है, जो Static Single Assignment (SSA) रूप में होता है, जो स्थैतिक टेंट विश्लेषण (static taint analysis) का आधार बनाता है।
Mole में, एक पथ (path) एक परिभाषित स्रोत (source) और सिंक (sink) के बीच डेटा प्रवाह को संदर्भित करता है। एक 'दिलचस्प' पथ क्या होता है, यह विश्लेषण लक्ष्यों पर निर्भर करता है। उदाहरण के लिए, कमजोरियों (vulnerabilities) की खोज करते समय, कोई उन पथों की तलाश कर सकता है जहां अविश्वसनीय इनपुट (स्रोत) संभावित खतरनाक तरीकों से संवेदनशील संचालन (सिंक) को प्रभावित करते हैं।
निम्नलिखित सूची Mole की वर्तमान विशेषताओं (features) पर प्रकाश डालती है:
संचालन मोड (Operation Mode): Mole को Binary Ninja के UI या हेडलेस मोड (headless mode) में चलाया जा सकता है। हेडलेस मोड बड़ी संख्या में बाइनरी में स्क्रिप्टेड विश्लेषण के लिए विशेष रूप से उपयोगी है। इसके विपरीत, UI के भीतर Mole का उपयोग पता लगाए गए पथों की बारीकी से जांच करने के लिए आदर्श है।
पथ पहचान (Path Identification):
.bndb प्रारूप) में सहेजा जा सकता है। पथों को निर्यात भी किया जा सकता है, उदाहरण के लिए, फ़ाइल सिस्टम पर कई बाइनरी में हेडलेस विश्लेषण करते समय, जिससे पहचाने गए पथों को बाद में Binary Ninja के भीतर आसान अन्वेषण के लिए आयात किया जा सके।AI के साथ पथ विश्लेषण (Path Analysis With AI): Mole OpenAI API के माध्यम से स्थानीय या दूरस्थ बड़े भाषा मॉडल (LLMs) के साथ संवाद कर सकता है (देखें Usage)। मॉडलों का उपयोग पहचाने गए पथों का विश्लेषण करने और यह तर्क देने के लिए किया जाता है कि दिया गया पथ एक शोषणीय कमजोरी से मेल खाता है या नहीं। LLM कमजोरी को वर्गीकृत करने और गंभीरता स्तर निर्दिष्ट करने का प्रयास करता है, जो एक विश्लेषक द्वारा आगे की जांच के लिए किन पथों पर ध्यान देने योग्य है, इसे प्राथमिकता देने में मदद कर सकता है। Mole बुनियादी उपकरणों का एक सेट प्रदान करता है जिसका उपयोग LLM विश्लेषण के तहत बाइनरी के बारे में अतिरिक्त जानकारी का अनुरोध करने के लिए कर सकता है।
अंतर-प्रक्रियात्मक चर स्लाइसिंग (Inter-Procedural Variable Slicing): Mole फ़ंक्शन सीमाओं के पार MLIL चरों की स्लाइसिंग का समर्थन करता है - एक ऐसा कार्य जो कई चुनौतियाँ प्रस्तुत करता है। उदाहरण के लिए, किसी फ़ंक्शन के प्रभावी कॉलर (caller) को स्थैतिक रूप से निर्धारित करना अक्सर कठिन या असंभव भी होता है। परिणामस्वरूप, कार्यान्वित दृष्टिकोण एक अनुमान (approximation) है। हालांकि यह सही नहीं है, यह व्यावहारिक परिदृश्यों की एक विस्तृत श्रृंखला में काफी अच्छा प्रदर्शन करता है।
बुनियादी पॉइंटर विश्लेषण (Basic Pointer Analysis): Mole वर्तमान में पॉइंटर उपयोग को ट्रैक करने के लिए एक सरलीकृत रणनीति लागू करता है। अंतर-प्रक्रियात्मक स्लाइसिंग की तरह, यह दृष्टिकोण अंतर्निहित सीमाओं (जैसे यह वैश्विक चरों को ट्रैक नहीं कर सकता) के साथ एक सरलीकरण है। फिर भी, यह कई व्यावहारिक मामलों में अच्छा प्रदर्शन करता है और भविष्य के संस्करणों में इसे बेहतर बनाने की योजना है।
देखें Mole कार्य करते हुए जैसे यह CVE-2021-4045 को उजागर करता है, जो TP-Link Tapo C200 IP कैमरे में एक अनधिकृत कमांड इंजेक्शन दोष है (YouTube पर देखने के लिए नीचे दिए गए चित्र पर क्लिक करें):
Mole वर्तमान में कार्य प्रगति पर (work in progress) है। यदि आपको कोई बग मिलता है, एक उपयोगी नया यूनिट टेस्ट है जो झूठी सकारात्मकता या नकारात्मकता को उजागर करता है, या किसी नई सुविधा के लिए सुझाव है, तो कृपया एक मुद्दा खोलने या पुल अनुरोध के माध्यम से योगदान करने पर विचार करें। यह भी ध्यान दें कि वर्तमान यूनिट टेस्ट केवल linux-x86_64 और linux-armv7 बाइनरी पर सत्यापित किए गए हैं।
यदि आपके पास कोई दिलचस्प सफलता की कहानी है - जैसे कि Mole की सहायता से कोई कमजोरी ढूंढना - तो हमें यह सुनकर खुशी होगी! बेझिझक हमें अपना अनुभव साझा करें।