
Heavily-modified fork of David Buchanan's dlinject project. Injects arbitrary assembly (or precompiled binary) payloads directly into x86-64, x86, and ARM32 Linux processes without the use of ptrace by accessing /proc/<pid>/mem. Useful for certain post-exploitation scenarios, recovering content from process memory, etc..
asminject.py David Buchanan के dlinject प्रोजेक्ट का एक बड़े पैमाने पर संशोधित फ़ोर्क है। यह ptrace के माध्यम से अटैच होने के बजाय /proc/<pid>/mem तक पहुँच बनाकर x86-64, x86, और ARM32 Linux प्रोसेस में सीधे मनमाना असेंबली (या प्रीकंपाइल्ड बाइनरी) पेलोड इंजेक्ट करता है। यह विश्वसनीय प्रोसेस के साथ छेड़छाड़ करने, कुछ पोस्ट-एक्सप्लॉइटेशन परिदृश्यों, प्रोसेस मेमोरी से सामग्री पुनर्प्राप्त करने, और कुछ सुरक्षा नियंत्रणों को बायपास करने के लिए उपयोगी है। जब तक आपके पास होस्ट पर रूट एक्सेस है, तब तक यह कंटेनर के बाहर से कंटेनरीकृत प्रोसेस में इंजेक्ट कर सकता है।
आप Bishop Fox टूल पेज पर asminject.py और इसकी उत्पत्ति के बारे में अधिक पढ़ सकते हैं, जिसमें इस टूल को प्रेरित करने वाले कार्य का विस्तृत विवरण भी शामिल है।
इस दस्तावेज़ में:
अलग, अधिक विस्तृत दस्तावेज़:
asminject.py dlinject जैसा है, सिवाय इसके कि यह आपको केवल लाइब्रेरी लोड करने के बजाय कोई भी वांछित पेलोड इंजेक्ट करने देता है, और यह कई आर्किटेक्चर पर काम करता है।"asminject.py मोटे तौर पर Frida जैसा है, सिवाय इसके कि यह ptrace इंटरफ़ेस के माध्यम से अटैच नहीं होता, इसलिए प्रोसेस स्वयं को ptrace करके इसे ब्लॉक नहीं कर सकते।"asminject.py Linux वातावरण में पेनेट्रेशन टेस्टिंग के दो प्राथमिक परिदृश्यों के लिए लिखा गया था:
उदाहरण के लिए, एक पेनेट्रेशन टेस्ट पर विचार करें जिसमें परीक्षक को ऐसे सर्वर पर रूट एक्सेस प्राप्त हुआ है जो कई कंटेनर होस्ट करता है। कंटेनरों में से एक बैंक ट्रांसफर संसाधित करता है, और उसके अंदर एक बहुत मजबूत एंडपॉइंट सुरक्षा उत्पाद स्थापित है। जब पेन टेस्टर कंटेनर के भीतर से बैंक ट्रांसफर डेटा को संशोधित करने का प्रयास करता है, तो एंडपॉइंट सुरक्षा सॉफ़्टवेयर प्रयास का पता लगाता है और उसे ब्लॉक कर देता है। asminject.py पेन टेस्टर को कंटेनर के बाहर से सीधे बैंकिंग सॉफ़्टवेयर की प्रोसेस मेमोरी या यहाँ तक कि एंडपॉइंट सुरक्षा उत्पाद में मनमाना कोड इंजेक्ट करने की अनुमति देता है। डेसकार्टेस के "दुष्ट दानव" के शिकार की तरह, कंटेनर के भीतर का सुरक्षा सॉफ़्टवेयर असहाय है, क्योंकि यह एक ऐसे वातावरण में मौजूद है जो पूरी तरह से हमलावर के नियंत्रण में है।
मूल dlinject.py विशेष रूप से Linux साझा लाइब्रेरी को किसी मौजूदा प्रोसेस में लोड करने के लिए डिज़ाइन किया गया था। asminject.py वह सब कुछ करता है जो मूल करता था, और बहुत कुछ। यह मनमाना असेंबली कोड निष्पादित करता है, और विभिन्न प्रकार के हमलों के लिए टेम्पलेट शामिल करता है। इसे लाइब्रेरी-लोडिंग घटनाओं जैसी संभावित रूप से संदिग्ध गतिविधियों पर ध्यान केंद्रित करने वाले सुरक्षा तंत्रों से पहचान से बचने में मदद करने के लिए भी पुनः डिज़ाइन किया गया है।
इस रिपॉज़िटरी की practice निर्देशिका में बुनियादी लूपिंग कोड शामिल है जो कंसोल पर एक टाइमस्टैम्प और लूप पुनरावृत्ति आउटपुट करता है, ताकि आप नियंत्रित वातावरण में विभिन्न प्रकार के कोड इंजेक्ट करने का अभ्यास कर सकें। इन अभ्यास लूपों को शेष उदाहरणों में संदर्भित किया गया है।
asminject.py को कॉल करने का मूल सिंटैक्स है:
# python3 ./asminject.py <target_process_id> <payload> \
--arch [x86-64|x86|arm32] --relative-offsets-from-binaries --stop-method "slow" \
--var <payload_variable_1_name> <payload_variable_1_value> \
# ... \
--var <payload_variable_n_name> <payload_variable_n_value>
अधिकांश मामलों में, उदाहरणों में उपयोग किए गए कोई भी पेलोड समर्थित आर्किटेक्चर में से किसी पर चलेंगे।
अधिकांश Linux वितरणों में यामा नामक एक कर्नेल सुरक्षा मॉड्यूल शामिल होता है जो अन्य प्रोसेस के विरुद्ध ptrace क्षमता का उपयोग करने की पहुँच को नियंत्रित करता है। जबकि asminject.py डिबगर इंटरफ़ेस से अटैच नहीं होता, फिर भी उसे ptrace क्षमता का उपयोग करने की अनुमति की आवश्यकता होती है। यदि आपको इस क्षमता के बारे में त्रुटियाँ मिल रही हैं, तो /proc/sys/kernel/yama/ptrace_scope की सामग्री जाँचें। यदि यह 2 पर सेट है, तो root के रूप में निम्न कमांड चलाएँ:
echo 1 > /proc/sys/kernel/yama/ptrace_scope
3 या उससे अधिक के मानों को रिबूट के बिना असेट नहीं किया जा सकता। हालाँकि, यदि आप किसी Linux सिस्टम के अधिकृत प्रशासक हैं जहाँ किसी ने गलती से /proc/sys/kernel/yama/ptrace_scope को 3 पर सेट कर दिया है, या ऐसे वातावरण का अधिकृत पेनेट्रेशन टेस्ट कर रहे हैं जहाँ वह मान सेट किया गया है, तो संभावित समाधान के लिए ptrace_scope_kernel_module निर्देशिका देखें जिसके लिए रिबूट की आवश्यकता नहीं है।
gcc कमांड को कॉल करने के बजाय शेलकोड असेंबली के लिए Keystone का उपयोग करने की जाँच करें।eval-शैली निष्पादन के विपरीत), इस क्षमता का लाभ उठाने के लिए पेलोड प्रदान करें और भी अधिक गोपनीयता के लिए।dlinject.py से विरासत में मिली वर्तमान "अगले syscall को हुक करें" तकनीक के विकल्प के रूप में किसी विशिष्ट विधि (या पता, आदि) को हुक करने के विकल्प जोड़ें।asminject.py का उपयोग करके इंजेक्ट करने का तरीका खोजना अधिक समझदारी भरा हो सकता है - अधिक शोध की आवश्यकता है।asminject.py ऑपरेटर को इंजेक्ट करने के लिए एक पंक्ति का संकेत दे सकता है, उसे इंजेक्ट कर सकता है, परिणामी आउटपुट लौटा सकता है, और फिर ऑपरेटर से एक और पंक्ति के लिए संकेत दे सकता है।
asminject.py का उपयोग करके किसी प्रोसेस में इस तरह इंजेक्ट किया जा सकता है जो Frida की अस्थायी रूप से डिबगर इंटरफ़ेस को आमंत्रित करने की आवश्यकता से बचता है।asminject.py/proc/mem