
Process Herpaderping प्रूफ ऑफ कॉन्सेप्ट, उपकरण और तकनीकी गहन विश्लेषण। Process Herpaderping सुरक्षा उत्पादों को बायपास करता है, एक प्रक्रिया के इरादों को अस्पष्ट करके।
[
][png.HerpaderpIcon]
प्रोसेस हर्पाडरपिंग एक प्रक्रिया के इरादों को अस्पष्ट करने की एक विधि है, जिसमें इमेज मैप होने के बाद डिस्क पर मौजूद सामग्री को संशोधित किया जाता है। इसके परिणामस्वरूप सुरक्षा उत्पादों और OS द्वारा उत्सुकतापूर्ण व्यवहार देखने को मिलता है।
![][png.mimioogle]
![][gif.SurivDemo]
आम तौर पर, एक सुरक्षा उत्पाद प्रक्रिया निर्माण पर कार्रवाई करता है, विंडोज कर्नेल में एक कॉलबैक पंजीकृत करके ([PsSetCreateProcessNotifyRoutineEx][msdn.PsSetCreateProcessNotifyRoutineEx])। इस बिंदु पर, एक सुरक्षा उत्पाद उस फ़ाइल का निरीक्षण कर सकता है जिसका उपयोग एक्सीक्यूटेबल को मैप करने के लिए किया गया था और यह निर्धारित कर सकता है कि इस प्रक्रिया को निष्पादित करने की अनुमति दी जानी चाहिए या नहीं। यह कर्नेल कॉलबैक तब आमंत्रित किया जाता है जब प्रारंभिक थ्रेड इंसर्ट किया जाता है, न कि जब प्रक्रिया ऑब्जेक्ट बनाया जाता है।
इस वजह से, कोई अभिनेता एक प्रक्रिया बना और मैप कर सकता है, फ़ाइल की सामग्री को संशोधित कर सकता है, फिर प्रारंभिक थ्रेड बना सकता है। एक उत्पाद जो निर्माण कॉलबैक पर निरीक्षण करता है, वह संशोधित सामग्री देखेगा। इसके अतिरिक्त, कुछ उत्पाद ऑन-राइट स्कैनिंग दृष्टिकोण का उपयोग करते हैं जिसमें फ़ाइल लेखन की निगरानी करना शामिल है। यहाँ एक परिचित अनुकूलन यह रिकॉर्ड करना है कि फ़ाइल को लिखा गया है और वास्तविक निरीक्षण को तब तक स्थगित करना है जब तक कि [IRP_MJ_CLEANUP][msdn.IRP_MJ_CLEANUP] न हो जाए (जैसे, फ़ाइल हैंडल बंद हो जाता है)। इस प्रकार, एक अभिनेता जो write -> map -> modify -> execute -> close वर्कफ़्लो का उपयोग करता है, वह ऑन-राइट स्कैनिंग को विफल कर देगा जो पूरी तरह से [IRP_MJ_CLEANUP][msdn.IRP_MJ_CLEANUP] पर निरीक्षण पर निर्भर करता है।
इस परंपरा का दुरुपयोग करने के लिए, हम पहले एक लक्ष्य फ़ाइल पर डिस्क पर एक बाइनरी लिखते हैं। फिर, हम लक्ष्य फ़ाइल की एक इमेज मैप करते हैं और इसे प्रक्रिया निर्माण के लिए उपयोग करने के लिए OS को प्रदान करते हैं। OS कृपापूर्वक हमारे लिए मूल बाइनरी को मैप करता है। मौजूदा फ़ाइल हैंडल का उपयोग करके, और प्रारंभिक थ्रेड बनाने से पहले, हम इमेज को बैक करने वाली फ़ाइल को अस्पष्ट या नकली बनाने के लिए लक्ष्य फ़ाइल सामग्री को संशोधित करते हैं। कुछ समय बाद, हम मूल बाइनरी का निष्पादन शुरू करने के लिए प्रारंभिक थ्रेड बनाते हैं। अंत में, हम लक्ष्य फ़ाइल हैंडल बंद कर देंगे। आइए इसे चरण-दर-चरण देखें:
NtCreateProcessEx)।NtCreateThreadEx)।
![][svg.StateDiagram]
@startuml
hide empty description
[*] --> CreateFile
CreateFile --> FileHandle
FileHandle --> Write
FileHandle --> NtCreateSection
Write -[hidden]-> NtCreateSection
NtCreateSection --> SectionHandle
SectionHandle --> NtCreateProcessEx
FileHandle --> Modify
NtCreateProcessEx -[hidden]-> Modify
NtCreateProcessEx --> NtCreateThreadEx
Modify -[hidden]-> NtCreateThreadEx
NtCreateThreadEx --> [*]
FileHandle --> CloseFile
NtCreateThreadEx -[hidden]-> CloseFile
NtCreateThreadEx --> PspCallProcessNotifyRoutines
PspCallProcessNotifyRoutines -[hidden]-> [*]
CloseFile --> IRP_MJ_CLEANUP
IRP_MJ_CLEANUP -[hidden]-> [*]
PspCallProcessNotifyRoutines --> Inspect
PspCallProcessNotifyRoutines -[hidden]-> CloseFile
IRP_MJ_CLEANUP --> Inspect
Inspect -[hidden]-> [*]
CreateFile : Create target file, keep handle open.
Write : Write source payload into target file.
Modify : Obscure the file on disk.
NtCreateSection : Create section using file handle.
NtCreateProcessEx : Image section for process is mapped and cached in file object.
NtCreateThreadEx : The cached section is used.
NtCreateThreadEx : Process notify routines fire in kernel.
Inspect : The contents on disk do not match what was executed.
Inspect : Inspection of the file at this point will result in incorrect attribution.
@enduml
आप नीचे दिए गए डेमो में देखेंगे, CMD.exe का उपयोग निष्पादन लक्ष्य के रूप में किया गया है। पहले रन में डिस्क पर बाइट्स को एक पैटर्न से ओवरराइट किया जाता है। दूसरे रन में CMD.exe को ProcessHacker.exe से ओवरराइट किया जाता है। हर्पाडरपिंग टूल बाइनरी को ProcessHacker.exe के जितना संभव हो उतना करीब दिखने के लिए ठीक करता है, यहाँ तक कि मूल हस्ताक्षर को भी बनाए रखता है। उसी बाइनरी के कई निष्पादनों पर ध्यान दें और उपयोगकर्ता को प्रक्रिया कैसी दिखती है, इसकी तुलना डिस्क पर फ़ाइल में क्या है, से करें।
![][gif.ProcessHerpaderp]
![][png.procmon]
हमने व्यवहार देखा है और इसमें से कुछ आश्चर्यजनक हो सकता है। आइए इस व्यवहार को समझाने का प्रयास करें।
[तकनीकी गहन विवरण][md.DivingDeeper]
विंडोज प्लेटफॉर्म को सुरक्षित करने के लिए उत्पाद डिजाइन करते समय, इस क्षेत्र के कई इंजीनियर (मैं भी शामिल हूँ) OS द्वारा डेटा को कैसे संभाला जाएगा, इस बारे में पूर्वकल्पित धारणाओं पर आ गए हैं। इस परिदृश्य में, कुछ लोग उम्मीद कर सकते हैं कि जब प्रक्रिया बनाई जाती है तो डिस्क पर फ़ाइल "लॉक" रहेगी। आप फ़ाइल को हटा नहीं सकते। आप इसमें लिख नहीं सकते। लेकिन आप इसका नाम बदल सकते हैं। यहाँ देखा गया है कि सही परिस्थितियों में, आप वास्तव में इसमें लिख सकते हैं। अपनी धारणाओं के प्रति सतर्क रहें, हमेशा उन पर सवाल उठाएँ और अपना शोध करें।
इस शोध की प्रेरणा तब मिली जब यह पता लगाया गया कि जब कोई फ़ाइल लिखी जाती है तो विश्लेषण कैसे किया जाए। प्रोसेस हॉलोइंग और डोप्पलगैंगिंग पर पूर्व शोध की पृष्ठभूमि के साथ, मैंने सिद्धांत दिया था कि यह संभव हो सकता है। लक्ष्य बेहतर सुरक्षा प्रदान करना है। आप पुराने ताले को तोड़ने का तरीका समझे बिना बेहतर ताला नहीं बना सकते।
हर्पाडरपिंग हॉलोइंग और डोप्पलगैंगिंग के समान है, हालाँकि कुछ प्रमुख अंतर हैं:
प्रोसेस हॉलोइंग में निष्पादन शुरू होने से पहले मैप किए गए सेक्शन को संशोधित करना शामिल है, जो अमूर्त रूप से इस तरह दिखता है: map -> modify section -> execute। यह वर्कफ़्लो हॉलो की गई प्रक्रिया के इच्छित निष्पादन प्रवाह को अनपेक्षित कोड में विचलित करने का परिणाम देता है। डोप्पलगैंगिंग को हॉलोइंग का एक रूप माना जा सकता है। हालाँकि, मेरी राय में, हॉलोइंग इंजेक्शन के करीब है, क्योंकि हॉलोइंग में आमतौर पर पहले से मैप किए गए कोड में एक स्पष्ट लेखन शामिल होता है। यह हर्पाडरपिंग से भिन्न है, जहाँ कोई संशोधित सेक्शन नहीं हैं।
प्रोसेस डोप्पलगैंगिंग हर्पाडरपिंग के करीब है। डोप्पलगैंगिंग ट्रांज़ैक्टेड फ़ाइल ऑपरेशन का दुरुपयोग करता है और इसमें आम तौर पर ये चरण शामिल होते हैं: transact -> write -> map -> rollback -> execute। इस वर्कफ़्लो में, OS इमेज सेक्शन बनाएगा और ट्रांज़ैक्शन का हिसाब रखेगा, इसलिए कैश की गई इमेज सेक्शन वही होगी जो आपने ट्रांज़ैक्शन में लिखा था। OS ने इस तकनीक को पैच कर दिया है। खैर, उन्होंने इसके कारण होने वाले क्रैश को पैच किया है। शायद वे इसे ट्रांज़ैक्शन का "कानूनी" उपयोग मानते हैं। शुक्र है, विंडोज डिफेंडर डोप्पलगैंगिंग तकनीक को पकड़ लेता है। डोप्पलगैंगिंग हर्पाडरपिंग से भिन्न है, क्योंकि हर्पाडरपिंग ट्रांज़ैक्टेड फ़ाइल ऑपरेशन पर निर्भर नहीं करता है। और डिफेंडर हर्पाडरपिंग को नहीं पकड़ता है।
संदर्भ के लिए, सामान्यीकृत तकनीकें:
| प्रकार | तकनीक |
|---|---|
| हॉलोइंग | map -> modify section -> execute |
| डोप्पलगैंगिंग | transact -> write -> map -> rollback -> execute |