
एक्सेल मैक्रो दस्तावेज़ रीडर/राइटर रेड टीमर्स और विश्लेषकों के लिए
एक रेड टीम सदस्यों और विश्लेषकों के लिए एक्सेल मैक्रो दस्तावेज़ पाठक/लेखक। इस टूल के वास्तविक कार्य का वर्णन करने वाले ब्लॉग पोस्ट यहाँ और यहाँ पाए जा सकते हैं।

इस रिपॉजिटरी को क्लोन या डाउनलोड करें, फिर टूल को dotnet का उपयोग करके चलाया जा सकता है - उदाहरण के लिए:
dotnet run -- build --decoy-document Docs\decoy_document.xls --payload Docs\popcalc.bin
या
dotnet build
cd bin/Debug/netcoreapp2.0
dotnet Macrome.dll deobfuscate --path obfuscated_document.xls
ध्यान दें कि इसके लिए कॉन्फ़िगर किए गए अनुसार कार्य करने के लिए dotnet के 5.0+ बिल्ड की आवश्यकता है - इसे https://dotnet.microsoft.com/download/dotnet/5.0 से प्राप्त किया जा सकता है।
टूल के बाइनरी रिलीज़ जिन्हें dotnet की आवश्यकता नहीं है और जिनमें एक्ज़ीक्यूटेबल बाइनरी है, Windows, OSX और Linux के लिए Release अनुभाग में पाए जा सकते हैं।
मैक्रोम को या तो समाधान निर्देशिका से dotnet run का उपयोग करके, या निर्मित मैक्रोम बाइनरी के विरुद्ध dotnet का उपयोग करके चलाएँ। मैक्रोम के लिए ऑपरेशन के तीन मोड हैं - बिल्ड मोड, डंप मोड और डीओबफसकेशन मोड।
प्रदान किए गए डिकॉय दस्तावेज़ और मैक्रो पेलोड का उपयोग करके एक ऑबफस्केटेड मैक्रो शीट वाला एक्सेल दस्तावेज़ उत्पन्न करने के लिए मैक्रोम को build कमांड के साथ चलाएँ। dotnet Macrome.dll build -h पूर्ण उपयोग निर्देश प्रदर्शित करेगा।
उदाहरण के लिए, डिकॉय दस्तावेज़ path/to/decoy_document.xls और path/to/shellcode.bin पर संग्रहीत बाइनरी x86 शेलकोड का उपयोग करके एक दस्तावेज़ बनाने के लिए, dotnet Macrome.dll build --decoy-document path/to/decoy_document.xls --payload /path/to/shellcode.bin चलाएँ। यह एक XLS 2003 दस्तावेज़ उत्पन्न करेगा जो खोलने और "Enable Content" बटन दबाने के बाद, shellcode.bin के शेलकोड को निष्पादित करेगा।
बाकी दस्तावेज़ प्रत्येक फ़्लैग/फ़ंक्शन को विस्तार से समझाएगा, लेकिन अभी Macrome द्वारा प्रदान की जाने वाली "नवीनतम और सर्वश्रेष्ठ" सुविधा निम्नलिखित चलाकर प्राप्त की जा सकती है:
Macrome build --decoy-document decoy_document.xls --payload beacon.bin --payload64-bit beacon64.bin --payload-method Base64 --method ArgumentSubroutines --password VelvetSweatshop --preamble preamble.txt --output-file-name ReadyToPhish.xls
पहले एक आधार "डिकॉय" एक्सेल दस्तावेज़ बनाएँ जिसमें उपयोगकर्ताओं को देखने के लिए सामग्री हो। यह किसी प्रकार का लालच होना चाहिए जो उपयोगकर्ताओं को एक्सेल में प्रदर्शित "Enable Macros" बटन पर क्लिक करने के लिए राजी करे। https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets- पर "नवीनतम और सर्वश्रेष्ठ" लालच निर्माण के कुछ उदाहरण हैं। यह शीट बनाने के बाद, दस्तावेज़ को नए Excel Workbook (*.xlsx) प्रारूप के बजाय Excel 97-2003 Workbook (*.xls) प्रकार के रूप में सहेजें। एक उदाहरण डिकॉय दस्तावेज़ /Docs/decoy_document.xls में शामिल है। ध्यान दें कि यदि आप अपने दस्तावेज़ की सुरक्षा के लिए XOR ओबफस्केशन का उपयोग कर रहे हैं, तो आप वर्तमान में अपने डिकॉय में कोई छवि नहीं जोड़ सकते।
इसके बाद, टूल को प्रदान करने के लिए एक शेलकोड पेलोड उत्पन्न करें। उदाहरण बाइनरी पेलोड (जो कैल्क खोलता है) निम्नलिखित मापदंडों का उपयोग करके msfvenom के साथ उत्पन्न किया गया था:
msfvenom -a x86 -b '\x00' --platform windows -p windows/exec cmd=calc.exe -e x86/alpha_mixed -f raw EXITFUNC=thread > popcalc.bin
64-बिट पेलोड भी समर्थित हैं। उदाहरण 64-बिट पेलोड, popcalc64.bin, निम्न कमांड का उपयोग करके उत्पन्न किया गया था:
msfvenom -a x64 -b '\x00' --platform windows -p windows/x64/exec cmd=calc.exe -e x64/xor -f raw EXITFUNC=thread > popcalc64.bin
इस पेलोड को फिर निम्न कमांड निष्पादित करके एम्बेड किया जा सकता है:
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload popcalc.bin --payload64-bit popcalc64.bin
वर्तमान में 64-बिट पेलोड के लिए आवश्यक है कि एक x86 पेलोड भी प्रदान किया जाए। यदि यह कोई समस्या नहीं है, तो आप x86 पेलोड फ़्लैग के लिए कोई कचरा भी निर्दिष्ट कर सकते हैं।
दस्तावेज़ में सीधे .NET असेंबली एम्बेड करने के लिए अंततः समर्थन है, लेकिन यदि आप अभी ऐसा करना चाहते हैं तो मैं EXCELntDonut का उपयोग करने का सुझाव देता हूँ।
Macrome 0.5.0 और उससे ऊपर के संस्करणों में, सभी पेलोड को base64 के साथ एनकोड किया जाएगा, इसलिए आपका पेलोड किसी भी बाइट अनुक्रम (शून्य बाइट्स सहित) को शामिल कर सकेगा।
यदि आप Macrome का उपयोग करके .NET एक्ज़ीक्यूटेबल एम्बेड करना चाहते हैं, तो मैं Donut का उपयोग करने का सुझाव देता हूँ जिसमें कमांड donut.exe -a 3 -b 1 -z 1 executableToEmbed.exe हो, और फिर परिणामी पेलोड को अपने 32-बिट और 64-बिट दोनों पेलोड के रूप में एम्बेड करें।
एक और ठोस विकल्प Amber है जो काफी बड़े Go बाइनरी को एम्बेड करने के लिए बढ़िया काम करता है।
यदि किसी कारण से आप pre-Macrome 0.5.0 के लीगेसी पेलोड एनकोडिंग मोड का उपयोग करना चाहते हैं, तो --payload-method फ़्लैग का उपयोग SheetPackingMethod के साथ करें। ध्यान दें कि लीगेसी मोड में अधिकांश अल्फ़ा-न्यूमेरिक पेलोड का उपयोग करने से उत्पन्न मैक्रो फ़ाइल का आकार कम हो जाएगा क्योंकि =CHAR(123)&CHAR(124)&CHAR(125)... आदि की तरह बार-बार CHAR फ़ंक्शन कॉल जोड़ने के बजाय अक्षरों और संख्याओं को मैक्रो रूप में व्यक्त करना आसान होता है। लेकिन टूल को पूरी तरह से अप्रिंटेबल बाइनरी पेलोड को भी संभालने में सक्षम होना चाहिए।
बाइनरी पेलोड उपयोग के समान, पहले एक डिकॉय दस्तावेज़ उत्पन्न किया जाना चाहिए। इसके बाद, चलाने के लिए मैक्रो वाली एक टेक्स्ट फ़ाइल बनाई जानी चाहिए। मैक्रो में कॉलम ; वर्णों द्वारा और पंक्तियाँ न्यूलाइन द्वारा अलग की जानी चाहिए। वर्तमान में निर्दिष्ट मैक्रो की सामग्री A1 से शुरू होकर लिखी और निष्पादित की जाएगी - हालाँकि भविष्य में प्रारंभ स्थान निर्दिष्ट करने की अनुमति देने के लिए समर्थन जोड़ा जाएगा। उदाहरण मैक्रो /Docs/macro_example.txt और /Docs/multi_column_macro_example.txt में पाए जा सकते हैं।
अंत में कमांड चलाएँ:
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload macro-example.txt --payload-type Macro
payload-type फ़्लैग के Macro पर सेट उपयोग पर ध्यान दें।
आप स्वयं एक मैक्रो उत्पन्न कर सकते हैं, या आप अपने लिए मैक्रो बनाने के लिए अद्भुत EXCELntDonut टूल का उपयोग कर सकते हैं।
इन्हें आगामी ब्लॉग पोस्ट में विस्तृत किया जाएगा, लेकिन Macrome अब मैक्रो पेलोड को तीन अलग-अलग तरीकों से एनकोड कर सकता है। इनमें से अधिकांश अभी भी किसी भी AV द्वारा पहचाने नहीं जाते हैं - लेकिन यह देखने के लिए कि कौन सा सबसे अच्छा काम करता है, अपने पेलोड के साथ प्रयोग करें।
IF और SET.NAME फ़ंक्शन की एक लंबी श्रृंखला का उपयोग करके इसे आह्वान करके प्रतिस्थापित करता है। यह कुछ ऐसा है जिसका अभी तक प्रमुख मालडॉक लेखकों द्वारा दुरुपयोग नहीं किया गया है, इसलिए इसके AV पर हिट होने की संभावना नहीं है।ROUND फ़ंक्शन में लपेटें।बिल्ड करते समय method फ़्लैग का उपयोग करके एक एनकोडिंग निर्दिष्ट करें - उदाहरण के लिए, CharSubroutine एनकोडर का उपयोग करने के लिए:
dotnet Macrome.dll b --decoy-document decoy_document.xls --method CharSubroutine --payload popcalc.bin --output-file-name CharSubroutine-Macro.xls
कभी-कभी आप चाह सकते हैं कि कुछ मैक्रो पेलोड कोड चलने से पहले चलें। यह तब सहायक होता है जब आप सैंडबॉक्स से बचाव और/या यह सत्यापित करने के लिए मैक्रो जोड़ रहे हैं कि आपका पेलोड सही होस्ट पर चल रहा है।
प्रीएम्बल फ़ाइलों का प्रारूप बिल्कुल वैसा ही है जैसा payload-type Macro का उपयोग करते समय होता है, लेकिन यह केवल एकल कॉलम का समर्थन करता है। उदाहरण के लिए, आप एक प्रीएम्बल हो सकता है:
=IF(GET.WORKSPACE(13)<770, CLOSE(FALSE),)
=IF(GET.WORKSPACE(14)<390, CLOSE(FALSE),)
=IF(GET.WORKSPACE(19),,CLOSE(FALSE))
=IF(GET.WORKSPACE(42),,CLOSE(FALSE))
यह स्क्रीन रिज़ॉल्यूशन मान, माउस की उपस्थिति और ध्वनि चलाने की क्षमता की जाँच करेगा। यदि इनमें से कोई भी विफल होता है, तो मुख्य पेलोड सामग्री चलाने से पहले ऐप बंद हो जाएगा।
इसके अतिरिक्त, यदि आप चाहते हैं कि एक प्रीएम्बल मैक्रो तुरंत मूल्यांकन करे, न कि बाकी मैक्रो को अनपैक करने के बाद, तो आप कमांड के आगे %%%%% लगा सकते हैं। उदाहरण के लिए:
%%%%%=IF(GET.WORKSPACE(13)<770, HALT(),)
%%%%%=IF(GET.WORKSPACE(14)<390, HALT(),)
%%%%%=IF(GET.WORKSPACE(19),,HALT())
%%%%%=IF(GET.WORKSPACE(42),,HALT())
यह दस्तावेज़ को मारने से पहले चलाए जाने वाले XLM कमांड की संख्या को कम करने में सहायक है और सैंडबॉक्स संकेतकों की उपस्थिति पर अधिक तत्काल प्रतिक्रिया के लिए सहायक हो सकता है।
Macrome 0.3.0+ Office के बहुत पुराने संस्करणों से एक लीगेसी एन्क्रिप्शन मोड, XOR ओबफस्केशन का उपयोग करके दस्तावेज़ों की पासवर्ड सुरक्षा का समर्थन करता है। यह एन्क्रिप्शन मोड अक्सर IR टूलिंग द्वारा असमर्थित होता है और दस्तावेज़ सामग्री को निरीक्षण से बचाने में मदद कर सकता है।
Excel में VelvetSweatshop का एक "डिफ़ॉल्ट" पासवर्ड है, जो आपको दस्तावेज़ सामग्री को एन्क्रिप्ट करने की अनुमति देगा, जबकि दस्तावेज़ खोलने पर स्वचालित रूप से डिक्रिप्ट हो जाएगा। यह आक्रामक संदर्भ में XOR ओबफस्केशन का उपयोग करने का "आदर्श" तरीका है। Macrome किसी दस्तावेज़ को डीओबफस्केट या डंप करते समय स्वचालित रूप से इस पासवर्ड का उपयोग करने का प्रयास करेगा।
इस कार्यक्षमता का उपयोग करने के लिए, बस अपने बिल्ड कमांड में --password <passwordToEncrypt> जोड़ें।
मनमाने दस्तावेज़ों के लिए सबसे प्रासंगिक BIFF8 रिकॉर्ड प्रिंट करने के लिए Macrome को dump कमांड के साथ चलाएँ। यह कार्यक्षमता olevba की मैक्रो डंपिंग कार्यक्षमता के समान है, लेकिन इसमें एज-केस Ptg प्रविष्टियों का कुछ अधिक पूर्ण प्रसंस्करण है ताकि यह सुनिश्चित हो सके कि प्रारूप Excel की वास्तविक FORMULA प्रविष्टियों के जितना संभव हो उतना करीब है। इस टूल को बनाते समय मैं कुछ विचित्र एज-केस दस्तावेज़ों को डीबग करने के लिए इसका उपयोग कर रहा हूँ, इसलिए यह तुलनात्मक रूप से मजबूत है। मुझे यकीन है कि बहुत सारे एज-केस हैं जो अभी समर्थित नहीं हैं, इसलिए यदि आपको कोई ऐसा दस्तावेज़ मिलता है जो इसकी सामग्री को ठीक से डंप नहीं करता है, तो कृपया एक मुद्दा खोलें और दस्तावेज़ को ज़िप फ़ाइल के रूप में साझा करें।
डंप कमांड को केवल लक्ष्य फ़ाइल की ओर इशारा करते हुए एक path तर्क की आवश्यकता होती है। एक उदाहरण आह्वान है:
dotnet Macrome.dll dump --path docToDump.xls
डंप कमांड के अधिकांश फ़्लैग डीबगिंग के लिए हैं, लेकिन dump-hex-bytes उन उपयोगकर्ताओं के लिए उपयोगी हो सकता है जो प्रासंगिक रिकॉर्ड के लिए अलग-अलग बाइट पेलोड देखना चाहते हैं। यह BiffView की समान कार्यक्षमता है, हालाँकि डिफ़ॉल्ट रूप से केवल मालडॉक-विशिष्ट प्रविष्टियाँ प्रदर्शित की जाएंगी।
एक ऑबफस्केटेड XLS बाइनरी दस्तावेज़ लेने और कई एंटी-एनालिसिस व्यवहारों को उलटने का प्रयास करने के लिए Macrome को deobfuscate कमांड के साथ चलाएँ। dotnet Macrome.dll deobfuscate -h पूर्ण उपयोग निर्देश प्रदर्शित करेगा। वर्तमान में, डिफ़ॉल्ट रूप से यह मोड निम्नलिखित करेगा:
Lbl प्रविष्टियों के लिए मैन्युअल रूप से निर्दिष्ट लेबल को सामान्य करें जिन्हें Excel उनके नाम के उस स्ट्रिंग से मेल न खाने के बावजूद Auto_Open प्रविष्टियों के रूप में व्याख्या करेगा।उदाहरण के लिए, path/to/obfuscated_file.xls पर एक दुर्भावनापूर्ण XLS 2003 मैक्रो फ़ाइल को डीओबफस्केट करने के लिए, dotnet Macrome.dll deobfuscate --path path/to/obfuscated_file.xls चलाएँ। यह ऑबफस्केटेड फ़ाइल की एक प्रति उत्पन्न करेगा जिसका मैन्युअल या टूल के साथ विश्लेषण करना आसान होगा।
नोट: यह अभी बहुत कुछ नहीं करता है, इसका मुख्य उद्देश्य यह प्रदर्शित करना है कि संशोधित b2xtranslator लाइब्रेरी का उपयोग डीओबफस्केशन को स्वचालित करने में कैसे मदद कर सकता है। जल्द ही और अधिक उपयोगी सुविधाएँ आ रही हैं।
इसे लिखने के लिए मैं जिन कंधों पर खड़ा हो सका, उन सभी को बहुत-बहुत धन्यवाद।
b2xtranslator लाइब्रेरी के मूल लेखकों के साथ-साथ EvolutionJobs के लोगों का धन्यवाद जिन्होंने इसे अपडेट किया और dotnet पर पोर्ट किया। यहाँ उपयोग किया गया कोड शुरू में https://github.com/EvolutionJobs/b2xtranslator से लिया गया था।