
x64 के लिए Gargoyle का एक प्रकार, जो केवल ROP और PIC का उपयोग करके मेमोरी आर्टिफैक्ट्स को छिपाता है
x64 के लिए गार्गॉयल का एक प्रकार जो केवल ROP और PIC का उपयोग करके मेमोरी आर्टिफैक्ट्स को छुपाता है।
@waldoirc को बहुत बड़ा धन्यवाद जिन्होंने अपने ब्लॉग पर इस तकनीक के बड़े हिस्सों का दस्तावेजीकरण किया है।
यह कार्यान्वयन इस मायने में अलग है कि यह किसी भी APC का उपयोग नहीं करता है और पूरी तरह से PIC के रूप में लागू किया गया है।
मैंने इसे x64 पर Gargoyle जैसी तकनीक का उपयोग करके मेमोरी आर्टिफैक्ट्स से बचने के तरीके को बेहतर ढंग से समझने के लिए बनाया है।
विचार यह है कि VirtualProtect() -> Sleep() -> VirtualProtect() को कॉल करने वाली एक ROPChain स्थापित की जाए ताकि मेरे अपने पेज को स्लीप करने के दौरान N/A के रूप में चिह्नित किया जा सके।
Gargoyle और अन्य Gargoyle-जैसे कार्यान्वयनों के विपरीत, मैं पूरी तरह से ROP पर निर्भर करता हूं और किसी भी APC को कतारबद्ध नहीं करता हूं।
DeepSleep स्वयं पूरी तरह से PIC के रूप में कार्यान्वित किया गया है, जिससे यह पता लगाना आसान हो जाता है कि स्कैनर से कौन से मेमोरी पेज छुपाए जाने चाहिए।
जब थ्रेड सक्रिय होता है, तो एक MessageBox पॉप अप होता है और DeepSleep का पेज निष्पादन योग्य के रूप में चिह्नित किया जाता है। स्लीप करते समय, पेज को N/A के रूप में चिह्नित किया जाता है।
यह प्रभावी रूप से लिखे जाने के समय Moneta को बायपास करता है यदि DeepSleep इंजेक्ट किया गया है और निष्पादित करने वाले थ्रेड का बेस एड्रेस प्राइवेट कमिटेड मेमोरी की ओर इशारा नहीं करता है।
मैंने इसकी पुष्टि Earlybird इंजेक्शन तकनीक का उपयोग करके DeepSleep.bin को notepad.exe में इंजेक्ट करके की है।

Mingw का उपयोग करते हुए:
make टाइप करें और एक जंगली DeepSleep.bin प्रकट होता है।
वैकल्पिक रूप से पहले से संकलित DeepSleep.bin का उपयोग करें :-)
मैं CS या अन्य C2 एजेंटों के लिए एक लोडर जारी कर सकता हूं। YouMayPasser के समान, लोडर kernel32.dll के संदिग्ध संशोधनों से बचने के लिए HW ब्रेकपॉइंट्स का उपयोग करके स्लीप को हुक करेगा।
इसे 10.0.19044 N/A Build 19044 पर परीक्षण किया गया था।
मैं जिन ROPgadgets पर निर्भर हूं, वे विंडोज के अन्य संस्करणों में ntdll.dll में मौजूद नहीं हो सकते हैं। संभवतः छोटे और अधिक सामान्य ROPgadgets का उपयोग करना और ntdll.dll के अलावा अधिक dlls में गैजेट्स की गणना करना एक अच्छा विचार है।
DelayExecution स्थिति में एक थ्रेड के कॉलस्टैक में अज्ञात/छेड़छाड़ किए गए मेमोरी क्षेत्र शामिल होते हैं और इसके अतिरिक्त VirtualProtect() के पते शामिल होते हैं। Hunt-Sleeping-Beacons इसका पता लगाता है।
हो सकता है कि उस मीट्रिक को कॉलबैक के बीच प्रतीक्षा करने के लिए भिन्न तकनीक का उपयोग करने वाले अन्य C2 पर लागू किया जा सके।
