
SigFlip एक उपकरण है जो प्रमाणित हस्ताक्षरित PE फ़ाइलों (exe, dll, sys ..etc) को मौजूदा हस्ताक्षर को अमान्य या तोड़े बिना पैच करने के लिए है।
SigFlip एक उपकरण है जो प्रमाणित (authenticode) हस्ताक्षरित PE फ़ाइलों (exe, dll, sys ..etc) में इस तरह से पैच करने के लिए है कि यह मौजूदा प्रमाणीकरण हस्ताक्षर को प्रभावित या तोड़ता नहीं है, दूसरे शब्दों में आप फ़ाइल हस्ताक्षर, अखंडता जांच या PE फ़ाइल कार्यक्षमता को तोड़े बिना PE फ़ाइल चेकसम/हैश को डेटा (यानी शेलकोड) एम्बेड करके बदल सकते हैं।
SigInject शेलकोड को एन्क्रिप्ट करता है और PE फ़ाइल के [WIN_CERTIFICATE] प्रमाणपत्र तालिका में इंजेक्ट करता है, एन्क्रिप्शन कुंजी एक बुनियादी BOF/C/C# लोडर (SigLoader) के साथ उपयोग के लिए मुद्रित की जाती है, SigInject परिवर्तनों को एक संशोधित PE फ़ाइल में सहेजता है और उसके हस्ताक्षर और प्रमाणपत्र वैधता को बरकरार रखता है।
SigLoader एक बुनियादी लोडर है जो SigInject द्वारा बनाए गए संशोधित PE फ़ाइल पथ और डिक्रिप्शन कुंजी को पैरामीटर के रूप में लेता है, फिर पसंद के शेलकोड इंजेक्शन के साथ उपयोग के लिए एम्बेडेड शेलकोड को निकालता और डिक्रिप्ट करता है।
SigFlip जाँच करेगा कि क्या PE हैश सफलतापूर्वक बदला गया था और एंडपॉइंट्स ऐसी सामान्य गलत कॉन्फ़िगरेशन के खिलाफ कठोर होने पर शालीनता से बाहर निकल जाएगा। ("विवरण" अनुभाग देखें)।
त्वरित नोट: SigFlip, SigInject और SigLoader BOF स्क्रिप्ट और .NET असेंबली के रूप में उपलब्ध हैं, अंतर केवल इतना है कि SigInject कार्यक्षमता को SigFlip (-i) के भाग के रूप में लागू किया गया है यदि आप BOF के बजाय .NET आर्टिफैक्ट चुनते हैं।
इसका उपयोग मुख्य रूप से स्थिरता (persistence), पार्श्व आंदोलन (lateral movement) या कोड/कमांड निष्पादन के लिए किया जा सकता है और इसमें मदद मिल सकती है:
इस परियोजना में पूर्व-संकलित BOF प्रदान नहीं किए गए हैं, Mingw-w64 का उपयोग करके संकलित किया जा सकता है, .NET के लिए VS या csc.exe का उपयोग करके .NET प्रोजेक्ट (SigFlip, SigLoader) संकलित करें, BOF के लिए नीचे दिए गए चरणों की जाँच करें;
➜ i686-w64-mingw32-gcc -c sigflip.c -o sigflip.x86.o➜ x86_64-w64-mingw32-gcc -c sigflip.c -o sigflip.x64.o➜ x86_64-w64-mingw32-gcc -c SigLoader/sigloader.c -o sigloader.x64.o➜ i686-w64-mingw32-gcc -c SigLoader/sigloader.c -o sigloader.x86.oसुनिश्चित करें कि सभी ऑब्जेक्ट फ़ाइलें sigflip.cna के समान निर्देशिका में स्थित हैं, फिर कोबाल्ट स्ट्राइक में sigflip.cna स्क्रिप्ट लोड करें।
त्वरित नोट: पूर्व-संकलित BOF का परीक्षण किया गया था और वे mingw-64 v8.0.0_3 के साथ संगत हैं, mingw-64 >= v9 का उपयोग काम कर सकता है लेकिन सक्रिय बीकन क्रैश हो सकते हैं, अधिक विवरण के लिए https://github.com/med0x2e/SigFlip/issues/2 देखें।
एक्ज़ीक्यूट-असेंबली
execute-assembly SigFlip.exe -hexecute-assembly SigLoader -hBOF
SigFlip: PE फ़ाइल (DLL, EXE, SYS, OCX ..etc) हैश को बिना हस्ताक्षर या प्रमाणपत्र की वैधता को तोड़े बदलें:
SigFlip "<PE\_FILE\_PATH>" "<OUTPUT\_PE\_FILE\_PATH (एक्सटेंशन के साथ)>"SigInject: शेलकोड को एन्क्रिप्ट करता है और PE फ़ाइल की [WIN_CERTIFICATE] प्रमाणपत्र तालिका में इंजेक्ट करता है, एन्क्रिप्शन कुंजी एक बुनियादी C/C# लोडर के साथ उपयोग के लिए मुद्रित की जाती है साथ ही हस्ताक्षर और प्रमाणपत्र वैधता को बरकरार रखता है:
SigInject "<PE\_FILE\_PATH> <OUTPUT\_PE\_FILE\_PATH (एक्सटेंशन के साथ)>" "<SHELLCODE\_FILE>"SigLoader: SigInject द्वारा बनाई गई PE फ़ाइलों से एन्क्रिप्टेड शेलकोड लोड करता है, फिर Early Bird queueuserapc का उपयोग करके एक बलि प्रक्रिया में sc स्पॉन/इंजेक्ट करता है, शेलकोड इंजेक्शन लॉजिक को अनुकूलित किया जा सकता है या पसंद की किसी अन्य कोड इंजेक्शन तकनीक से बदला जा सकता है:
SigLoader <PE_FILE_PATH_WITH_SH> <DECRYPTION_KEY> <SPAWNTO_PROCESS_PATH> <PARENT_PROCESS_ID>उदाहरण
BOF:
यह APT#10 द्वारा कई अभियानों या घुसपैठ सेटों में उपयोग की जाने वाली एक ज्ञात तकनीक है।
Authenticode एक माइक्रोसॉफ्ट कोड-हस्ताक्षर तकनीक है जो Authenticode-हस्ताक्षरित सॉफ़्टवेयर के प्रकाशक की पहचान करती है। Authenticode यह भी सत्यापित करता है कि हस्ताक्षरित और प्रकाशित होने के बाद से सॉफ़्टवेयर के साथ छेड़छाड़ नहीं की गई है।
Microsoft मुख्य रूप से PE बाइनरी की अखंडता और उत्पत्ति को सत्यापित करने के लिए Authenticode हस्ताक्षर प्रारूप पर निर्भर करता है, Authenticode पोर्टेबल एक्ज़ीक्यूटेबल प्रारूप विनिर्देश के अनुसार Authenticode हस्ताक्षर एक विंडोज PE फ़ाइल में "एम्बेडेड" हो सकते हैं, एक स्थान पर जो वैकल्पिक हेडर डेटा निर्देशिकाओं में प्रमाणपत्र तालिका प्रविष्टि द्वारा निर्दिष्ट होता है। जब Authenticode का उपयोग विंडोज PE फ़ाइल पर हस्ताक्षर करने के लिए किया जाता है, तो एल्गोरिदम जो फ़ाइल के Authenticode हैश मान की गणना करता है, कुछ PE फ़ील्ड को बाहर करता है। जब फ़ाइल में हस्ताक्षर एम्बेड किया जाता है, हस्ताक्षर प्रक्रिया फ़ाइल के हैश मान को प्रभावित किए बिना इन फ़ील्ड को संशोधित कर सकती है। ये फ़ील्ड इस प्रकार हैं: **चेकसम, प्रमाणपत्र तालिका RVA, प्रमाणपत्र तालिका आकार और गुण प्रमाणपत्र तालिका (attribute certificate table)। गुण प्रमाणपत्र तालिका में एक PKCS #7 SignedData संरचना होती है जिसमें PE फ़ाइल का हैश मान, सॉफ़्टवेयर प्रकाशक की निजी कुंजी द्वारा बनाया गया हस्ताक्षर, और X.509 v3 प्रमाणपत्र होते हैं जो सॉफ़्टवेयर प्रकाशक की हस्ताक्षर कुंजी को एक कानूनी इकाई से बांधते हैं।
सरल शब्दों में, हम प्रामाणिक हैश गणना से बाहर किए गए फ़ील्ड में डेटा को संशोधित या एम्बेड कर सकते हैं, बिना प्रामाणिक हस्ताक्षर और फ़ाइल अखंडता जांच को तोड़ने की चिंता किए।
ऐसे बहिष्कृत फ़ील्ड के बारे में अधिक विवरण:
प्रमाणपत्र तालिका RVA और आकार: एक हस्ताक्षरित PE फ़ाइल वैकल्पिक हेडर संरचना में डेटा निर्देशिकाओं की एक सरणी होती है जिसमें IMAGE_DIRECTORY_ENTRY_SECURITY प्रविष्टि शामिल होती है जिसमें दो फ़ील्ड होते हैं, RVA और आकार।
गुण प्रमाणपत्र तालिका: एक डेटा संरचना WIN_CERTIFICATE जो हस्ताक्षर और प्रमाणपत्रों को समाहित करती है और इसमें निम्नलिखित फ़ील्ड होते हैं:
dwLength: प्रमाणपत्र तालिका का आकार।wRevision: WIN_CERTIFICATE का "संशोधन"।wCertificateType: एन्कैप्सुलेटेड प्रमाणपत्र डेटा का प्रकार।bCertificate: वास्तविक प्रमाणपत्र डेटा। WIN_CERT_TYPE_PKCS_SIGNED_DATA के लिए, यह ऊपर उल्लिखित PKCS#7 SignedData संरचना है (जिसमें PE हैश मान, हस्ताक्षर और x.509 प्रमाणपत्र होता है), यह वही जगह है जहाँ SigFlip रैंडम डेटा या शेलकोड एम्बेड करता है।इन सबको ध्यान में रखते हुए, अब SigFlip निम्नलिखित करता है:
पहला चरण यह पुष्टि करने के लिए आवश्यक है कि क्या सिस्टम इस तरह से गलत कॉन्फ़िगर किया गया है कि प्रामाणिक हस्ताक्षरित PE फ़ाइलों में पैडिंग और शेलकोड इंजेक्ट करने की अनुमति मिल सके, इसलिए निम्नलिखित सैनिटी जाँचें की जाती हैं:
X86:
X64:
विंडोज लोडर प्रक्रिया पता स्थान में प्रमाणपत्र डेटा लोड नहीं करता है, यही कारण है कि आपको शेलकोड जैसे डेटा निकालने और इसका उपयोग करने के लिए एक कस्टम लोडर की आवश्यकता होती है (जैसे: SigLoader)। यह भी बताना चाहिए कि IMAGE_DIRECTORY_ENTRY_SECURITY डेटा निर्देशिका प्रविष्टि RVA एक विशिष्ट मेमोरी ऑफ़सेट के बजाय एक फ़ाइल ऑफ़सेट क्यों है।
SigFlip "C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" "C:\lolbins\modified-msbuild.exe"SigInject "C:\Windows\System32\kernel32.dll" "C:\random\modified-kernel32.dll" "C:\shellcode\cobaltstrike_or_msf_shellcode.bin"Sigloader "C:\random\modified-kernel32.dll" "DECRYPTION_KEY" "C:\Windows\System32\werfault.exe" 6300एक्ज़ीक्यूट-असेंबली:
execute-assembly SigFlip.exe -b C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe -o C:\Temp\MSBuild.exeexecute-assembly SigFlip.exe -i C:\Windows\System32\kernel32.dll -s C:\Temp\x86shellcode.bin -o C:\Temp\kernel32.dll -e TestSecretKeyexecute-assembly SigLoader.exe -f C:\Temp\modified-kernel32.dll -e TestSecretKey -pid 2354