
Process Herpaderping प्रूफ ऑफ कॉन्सेप्ट, उपकरण और तकनीकी गहन विश्लेषण। Process Herpaderping सुरक्षा उत्पादों को बायपास करता है, एक प्रक्रिया के इरादों को अस्पष्ट करके।
प्रोसेस हर्पाडरपिंग एक प्रक्रिया के इरादों को अस्पष्ट करने की एक विधि है, जिसमें इमेज मैप होने के बाद डिस्क पर मौजूद सामग्री को संशोधित किया जाता है। इसके परिणामस्वरूप सुरक्षा उत्पादों और OS द्वारा उत्सुकतापूर्ण व्यवहार देखने को मिलता है।


आम तौर पर, एक सुरक्षा उत्पाद प्रक्रिया निर्माण पर कार्रवाई करता है, विंडोज कर्नेल में एक कॉलबैक पंजीकृत करके (PsSetCreateProcessNotifyRoutineEx)। इस बिंदु पर, एक सुरक्षा उत्पाद उस फ़ाइल का निरीक्षण कर सकता है जिसका उपयोग एक्सीक्यूटेबल को मैप करने के लिए किया गया था और यह निर्धारित कर सकता है कि इस प्रक्रिया को निष्पादित करने की अनुमति दी जानी चाहिए या नहीं। यह कर्नेल कॉलबैक तब आमंत्रित किया जाता है जब प्रारंभिक थ्रेड इंसर्ट किया जाता है, न कि जब प्रक्रिया ऑब्जेक्ट बनाया जाता है।
इस वजह से, कोई अभिनेता एक प्रक्रिया बना और मैप कर सकता है, फ़ाइल की सामग्री को संशोधित कर सकता है, फिर प्रारंभिक थ्रेड बना सकता है। एक उत्पाद जो निर्माण कॉलबैक पर निरीक्षण करता है, वह संशोधित सामग्री देखेगा। इसके अतिरिक्त, कुछ उत्पाद ऑन-राइट स्कैनिंग दृष्टिकोण का उपयोग करते हैं जिसमें फ़ाइल लेखन की निगरानी करना शामिल है। यहाँ एक परिचित अनुकूलन यह रिकॉर्ड करना है कि फ़ाइल को लिखा गया है और वास्तविक निरीक्षण को तब तक स्थगित करना है जब तक कि IRP_MJ_CLEANUP न हो जाए (जैसे, फ़ाइल हैंडल बंद हो जाता है)। इस प्रकार, एक अभिनेता जो write -> map -> modify -> execute -> close वर्कफ़्लो का उपयोग करता है, वह ऑन-राइट स्कैनिंग को विफल कर देगा जो पूरी तरह से IRP_MJ_CLEANUP पर निरीक्षण पर निर्भर करता है।
इस परंपरा का दुरुपयोग करने के लिए, हम पहले एक लक्ष्य फ़ाइल पर डिस्क पर एक बाइनरी लिखते हैं। फिर, हम लक्ष्य फ़ाइल की एक इमेज मैप करते हैं और इसे प्रक्रिया निर्माण के लिए उपयोग करने के लिए OS को प्रदान करते हैं। OS कृपापूर्वक हमारे लिए मूल बाइनरी को मैप करता है। मौजूदा फ़ाइल हैंडल का उपयोग करके, और प्रारंभिक थ्रेड बनाने से पहले, हम इमेज को बैक करने वाली फ़ाइल को अस्पष्ट या नकली बनाने के लिए लक्ष्य फ़ाइल सामग्री को संशोधित करते हैं। कुछ समय बाद, हम मूल बाइनरी का निष्पादन शुरू करने के लिए प्रारंभिक थ्रेड बनाते हैं। अंत में, हम लक्ष्य फ़ाइल हैंडल बंद कर देंगे। आइए इसे चरण-दर-चरण देखें:
NtCreateProcessEx)।NtCreateThreadEx)।
@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 के जितना संभव हो उतना करीब दिखने के लिए ठीक करता है, यहाँ तक कि मूल हस्ताक्षर को भी बनाए रखता है। उसी बाइनरी के कई निष्पादनों पर ध्यान दें और उपयोगकर्ता को प्रक्रिया कैसी दिखती है, इसकी तुलना डिस्क पर फ़ाइल में क्या है, से करें।


हमने व्यवहार देखा है और इसमें से कुछ आश्चर्यजनक हो सकता है। आइए इस व्यवहार को समझाने का प्रयास करें।
विंडोज प्लेटफॉर्म को सुरक्षित करने के लिए उत्पाद डिजाइन करते समय, इस क्षेत्र के कई इंजीनियर (मैं भी शामिल हूँ) OS द्वारा डेटा को कैसे संभाला जाएगा, इस बारे में पूर्वकल्पित धारणाओं पर आ गए हैं। इस परिदृश्य में, कुछ लोग उम्मीद कर सकते हैं कि जब प्रक्रिया बनाई जाती है तो डिस्क पर फ़ाइल "लॉक" रहेगी। आप फ़ाइल को हटा नहीं सकते। आप इसमें लिख नहीं सकते। लेकिन आप इसका नाम बदल सकते हैं। यहाँ देखा गया है कि सही परिस्थितियों में, आप वास्तव में इसमें लिख सकते हैं। अपनी धारणाओं के प्रति सतर्क रहें, हमेशा उन पर सवाल उठाएँ और अपना शोध करें।
इस शोध की प्रेरणा तब मिली जब यह पता लगाया गया कि जब कोई फ़ाइल लिखी जाती है तो विश्लेषण कैसे किया जाए। प्रोसेस हॉलोइंग और डोप्पलगैंगिंग पर पूर्व शोध की पृष्ठभूमि के साथ, मैंने सिद्धांत दिया था कि यह संभव हो सकता है। लक्ष्य बेहतर सुरक्षा प्रदान करना है। आप पुराने ताले को तोड़ने का तरीका समझे बिना बेहतर ताला नहीं बना सकते।
हर्पाडरपिंग हॉलोइंग और डोप्पलगैंगिंग के समान है, हालाँकि कुछ प्रमुख अंतर हैं:
प्रोसेस हॉलोइंग में निष्पादन शुरू होने से पहले मैप किए गए सेक्शन को संशोधित करना शामिल है, जो अमूर्त रूप से इस तरह दिखता है: map -> modify section -> execute। यह वर्कफ़्लो हॉलो की गई प्रक्रिया के इच्छित निष्पादन प्रवाह को अनपेक्षित कोड में विचलित करने का परिणाम देता है। डोप्पलगैंगिंग को हॉलोइंग का एक रूप माना जा सकता है। हालाँकि, मेरी राय में, हॉलोइंग इंजेक्शन के करीब है, क्योंकि हॉलोइंग में आमतौर पर पहले से मैप किए गए कोड में एक स्पष्ट लेखन शामिल होता है। यह हर्पाडरपिंग से भिन्न है, जहाँ कोई संशोधित सेक्शन नहीं हैं।
प्रोसेस डोप्पलगैंगिंग हर्पाडरपिंग के करीब है। डोप्पलगैंगिंग ट्रांज़ैक्टेड फ़ाइल ऑपरेशन का दुरुपयोग करता है और इसमें आम तौर पर ये चरण शामिल होते हैं: transact -> write -> map -> rollback -> execute। इस वर्कफ़्लो में, OS इमेज सेक्शन बनाएगा और ट्रांज़ैक्शन का हिसाब रखेगा, इसलिए कैश की गई इमेज सेक्शन वही होगी जो आपने ट्रांज़ैक्शन में लिखा था। OS ने इस तकनीक को पैच कर दिया है। खैर, उन्होंने इसके कारण होने वाले क्रैश को पैच किया है। शायद वे इसे ट्रांज़ैक्शन का "कानूनी" उपयोग मानते हैं। शुक्र है, विंडोज डिफेंडर डोप्पलगैंगिंग तकनीक को पकड़ लेता है। डोप्पलगैंगिंग हर्पाडरपिंग से भिन्न है, क्योंकि हर्पाडरपिंग ट्रांज़ैक्टेड फ़ाइल ऑपरेशन पर निर्भर नहीं करता है। और डिफेंडर हर्पाडरपिंग को नहीं पकड़ता है।
संदर्भ के लिए, सामान्यीकृत तकनीकें:
| प्रकार | तकनीक |
|---|---|
| हॉलोइंग | map -> modify section -> execute |
| डोप्पलगैंगिंग | transact -> write -> map -> rollback -> execute |
| हर्पाडरपिंग | write -> map -> modify -> execute -> close |
हम यहाँ अंतर देख सकते हैं। जबकि हर्पाडरपिंग डोप्पलगैंगिंग की तुलना में शोरगुल वाला है, इस अर्थ में कि दुर्भावनापूर्ण बिट्स डिस्क पर आते हैं, हमने देखा है कि सुरक्षा उत्पाद अभी भी हर्पाडरपिंग का पता लगाने में असमर्थ हैं।
यहाँ कोई स्पष्ट सुधार नहीं है। यह उचित लगता है कि जब फ़ाइल तक लेखन पहुँच हो तो इमेज सेक्शन को मैप/कैश होने से रोकना छेद को बंद करना चाहिए। हालाँकि, यह व्यावहारिक समाधान हो सकता है या नहीं भी हो सकता है।
दूसरा विकल्प फ़ाइल में परिवर्तनों को कैश की गई इमेज सेक्शन में फ्लश करना हो सकता है यदि इसे अभी तक प्रक्रिया में मैप नहीं किया गया है। हालाँकि, चूँकि नई प्रक्रिया में मैप NtCreateProcess पर होता है, यह शायद कोई व्यवहार्य समाधान नहीं है।
पता लगाने के दृष्टिकोण से, वास्तविक बिट्स की पहचान करने का कोई अच्छा तरीका नहीं है जो मैप किए गए थे, IRP_MJ_CLEANUP पर निरीक्षण या PsSetCreateProcessNotifyRoutineEx पर पंजीकृत कॉलबैक गलत आरोपण का कारण बनता है क्योंकि डिस्क पर बिट्स बदल दिए गए हैं, आपको बनाए गए सेक्शन से फ़ाइल का पुनर्निर्माण करना होगा। यहाँ यह इंगित करना उचित है कि विंडोज 10 में एक नया कॉलबैक है जिसे आप PsSetCreateProcessNotifyRoutineEx2 के लिए पंजीकृत कर सकते हैं, हालाँकि इसमें पिछले कॉलबैक के समान ही समस्या है, इसे तब कॉल किया जाता है जब प्रारंभिक थ्रेड निष्पादित होता है, न कि जब प्रक्रिया ऑब्जेक्ट बनाया जाता है। माइक्रोसॉफ्ट ने PsSetCreateThreadNotifyRoutineEx जोड़ा है, जिसे तब कॉल किया जाता है जब प्रारंभिक थ्रेड इंसर्ट किया जाता है, यदि PsCreateThreadNotifyNonSystem के साथ पंजीकृत किया गया हो, जबकि पुराना कॉलबैक तब कॉल किया जाता था जब यह निष्पादन शुरू करने वाला होता है। PSCREATEPROCESSNOTIFYTYPE को विस्तारित करके प्रक्रिया ऑब्जेक्ट बनने पर कॉल करने से भी कोई मदद नहीं मिलेगी, हमने गहराई में जाना अनुभाग में देखा है कि इमेज सेक्शन ऑब्जेक्ट NtCreateSection कॉल पर कैश किया जाता है, न कि NtCreateProcess पर।
हम आसानी से यह पहचान नहीं सकते कि क्या निष्पादित किया गया। हम अभिनेता द्वारा शोषणकारी व्यवहार का पता लगाने का प्रयास करने के लिए छोड़ दिए गए हैं, मैं व्यवहार संकेतकों की खोज को पाठक के लिए एक अभ्यास के रूप में छोड़ दूंगा।
नीचे उन उत्पादों और विंडोज OS की सूची दी गई है जिनका परीक्षण (8/31/2020) तक किया गया है। परीक्षण एक ज्ञात दुर्भावनापूर्ण बाइनरी के साथ किए गए।
यह भेद्यता 7/17/2020 को माइक्रोसॉफ्ट सिक्योरिटी रिस्पॉन्स सेंटर (MSRC) को प्रकट की गई थी और MSRC द्वारा 7/22/2020 को एक मामला खोला गया था। MSRC ने 8/25/2020 को अपनी जांच पूरी की और निर्धारित किया कि निष्कर्ष मान्य हैं लेकिन वे तत्काल सेवा के लिए अपने मानदंडों को पूरा नहीं करते हैं। इस समय उनका मामला बिना समाधान के बंद है और भविष्य की समीक्षा के लिए चिह्नित है, बिना किसी समयसीमा के।
हम इस बग की गंभीरता से असहमत हैं; यह MSRC को 8/27/2020 को सूचित किया गया था।
इस रेपो में प्रक्रिया अस्पष्टीकरण की हर्पाडरपिंग विधि का अभ्यास करने के लिए एक उपकरण है। उपयोग इस प्रकार है:
Process Herpaderping Tool - Copyright (c) Johnny Shaw
ProcessHerpaderping.exe SourceFile TargetFile [ReplacedWith] [Options...]
Usage:
SourceFile Source file to execute.
TargetFile Target file to execute the source from.
ReplacedWith File to replace the target with. Optional,
default overwrites the binary with a pattern.
-h,--help Prints tool usage.
-d,--do-not-wait Does not wait for spawned process to exit,
default waits.
-l,--logging-mask number Specifies the logging mask, defaults to full
logging.
0x1 Successes
0x2 Informational
0x4 Warnings
0x8 Errors
0x10 Contextual
-q,--quiet Runs quietly, overrides logging mask, no title.
-r,--random-obfuscation Uses random bytes rather than a pattern for
file obfuscation.
-e,--exclusive Target file is created with exclusive access and
the handle is held open as long as possible.
Without this option the handle has full share
access and is closed as soon as possible.
-u,--do-not-flush-file Does not flush file after overwrite.
-c,--close-file-early Closes file before thread creation (before the
process notify callback fires in the kernel).
Not valid with "--exclusive" option.
-k,--kill Terminates the spawned process regardless of
success or failure, this is useful in some
automation environments. Forces "--do-not-wait
option.
रेपो सबमॉड्यूल का उपयोग करता है, क्लोन करने के बाद सबमॉड्यूल को init और update करना सुनिश्चित करें। प्रोजेक्ट फ़ाइलें विज़ुअल स्टूडियो 2019 के लिए लक्षित हैं।
git clone https://github.com/jxy-s/herpaderping.git
cd .\herpaderping\
git submodule update --init --recursive
MSBuild .\herpaderping.sln
निम्नलिखित का उपयोग बिना किसी संशोधन के किया गया है। उनके लेखकों को श्रेय।
| ऑपरेटिंग सिस्टम | संस्करण | असुरक्षित |
|---|
| Windows 7 Enterprise x86 | 6.1.7601 | हाँ |
| Windows 10 Pro x64 | 10.0.18363.900 | हाँ |
| Windows 10 Pro Insider Preview x64 | 10.0.20170.1000 | हाँ |
| Windows 10 Pro Insider Preview x64 | 10.0.20201.1000 | हाँ |
| सुरक्षा उत्पाद | संस्करण | असुरक्षित |
|---|
| Windows Defender AntiMalware Client | 4.18.2006.10 | हाँ |
| Windows Defender Engine | 1.1.17200.2 | हाँ |
| Windows Defender Antivirus | 1.319.1127.0 | हाँ |
| Windows Defender Antispyware | 1.319.1127.0 | हाँ |
| Windows Defender AntiMalware Client | 4.18.2007.6 | हाँ |
| Windows Defender Engine | 1.1.17300.2 | हाँ |
| Windows Defender Antivirus | 1.319.1676.0 | हाँ |
| Windows Defender Antispyware | 1.319.1676.0 | हाँ |
| Windows Defender AntiMalware Client | 4.18.2007.8 | हाँ |
| Windows Defender Engine | 1.1.17400.5 | हाँ |
| Windows Defender Antivirus | 1.323.267.0 | हाँ |
| Windows Defender Antispyware | 1.323.267.0 | हाँ |