डेवलपर टूल · Base64 एनकोडर और डिकोडर
किसी संदिग्ध Base64 PowerShell कमांड को बिना चलाए कैसे डिकोड करें
· यह क्यों मायने रखती है
Base64 सुरक्षा
हमलावर स्क्रिप्ट को आकस्मिक निरीक्षण से छिपाने के लिए Base64 का उपयोग करते हैं। यह पोस्ट दिखाती है कि -EncodedCommand पेलोड को निष्पादित किए बिना कैसे डिकोड किया जाए, UTF-8 डिकोडर में आउटपुट अजीब क्यों लग सकता है, और क्या देखना है।
2,000-वर्ण तर्क के साथ निर्धारित कार्य - जहां एन्कोडेड कमांड चालू होते हैं और वे एक लाल झंडा क्यों हैं
एक sysadmin एक 2,000-वर्ण -EncodedCommand तर्क के साथ एक निर्धारित कार्य का पता लगाता है जो संदिग्ध लगता है। कार्य उच्च विशेषाधिकार वाले सेवा खाते के अंतर्गत चलता है।
कमांड को PowerShell में चिपकाने और यह क्या करता है यह देखने के लिए उसे चलाने का प्रलोभन खतरनाक है; यदि आदेश दुर्भावनापूर्ण है, तो इसे निष्पादित करने से सिस्टम समझौता हो जाता है। सुरक्षित तरीका Base64 को स्थानीय रूप से डीकोड करना और कुछ भी चलाने का निर्णय लेने से पहले आउटपुट को टेक्स्ट के रूप में पढ़ना है। यह पोस्ट बताती है कि PowerShell कमांड को बिना निष्पादित किए सुरक्षित रूप से कैसे डिकोड किया जाए, मानक UTF-8 डिकोडर में आउटपुट विकृत क्यों दिख सकता है, और कमांड सुरक्षित या संदिग्ध है या नहीं, इसका आकलन करने के लिए क्या देखना चाहिए।
डिकोड करें, कभी निष्पादित न करें - वह नियम जो विश्लेषण को सुरक्षित रखता है, और केवल ब्राउज़र वाला डिकोडर क्यों उपयुक्त है
मुख्य जानकारी यह है कि PowerShell -EncodedCommand के लिए UTF-16LE एन्कोडिंग का उपयोग करता है, UTF-8 का नहीं, इसलिए प्रत्येक अन्य बाइट एक शून्य है जिसे मानक टूल शून्य टर्मिनेटर के रूप में व्याख्या करते हैं। किसी भी संदिग्ध कोड का विश्लेषण करने का नियम सरल है: डिकोड करें, कभी निष्पादित न करें। यह Base64-एनकोडेड कमांड, संपीड़ित स्क्रिप्ट, अविश्वसनीय स्रोतों से स्क्रिप्ट और अपरिचित एन्कोडिंग की श्रृंखला में किसी भी चीज़ पर लागू होता है। किसी स्क्रिप्ट को निष्पादित करना बिना वापसी का बिंदु है; एक बार यह चलने के बाद, सिस्टम में परिवर्तन हो गए हैं, पहुंच प्रदान कर दी गई है और डेटा को बाहर निकाल दिया गया है।
स्क्रिप्ट को टेक्स्ट के रूप में डिकोड करने और पढ़ने से आप अपरिवर्तनीय चरण से पहले इसका मूल्यांकन कर सकते हैं। दूसरा नियम ऐसे टूल का उपयोग करना है जो स्थानीय रूप से चलता है और कोई नेटवर्क अनुरोध नहीं करता है। एक ब्राउज़र-आधारित डिकोडर आदर्श है क्योंकि यह पोर्टेबल है, इसके लिए किसी अतिरिक्त सॉफ़्टवेयर की आवश्यकता नहीं है और यह किसी भी सर्वर पर अपलोड किए बिना आपके डिवाइस पर संदिग्ध पेलोड रखता है। यदि टूल उस प्रकार का है जो दूरस्थ डिकोडर सेवा पर पोस्ट करता है, तो इसका उपयोग न करें; फिर पेलोड को उस सेवा के संपर्क में लाया जाता है। PowerShell -EncodedCommand पैरामीटर एक Base64 स्ट्रिंग स्वीकार करता है, जिसे डिकोड किए जाने पर, एक PowerShell स्क्रिप्ट शामिल होती है।
डिकोड किए गए बाइट्स UTF-8 टेक्स्ट से भिन्न क्यों दिखते हैं - इसकी व्याख्या करने के लिए इस UTF-8 टेक्स्ट टूल से पूछने के बजाय हेक्स में UTF-16LE बाइट पैटर्न का निरीक्षण करें
हालाँकि, PowerShell का उपयोग नहीं होता है UTF-8 इसके लिए एन्कोडिंग; यह उपयोगकर्ता है UTF-16एलई (लिटिल-एंडियन UTF-16). में UTF-16, प्रत्येक ASCII कैरेक्टर को दो बाइट्स के रूप में दर्शाया जाता है: कैरेक्टर कोड के बाद एक शून्य बाइट आती है। अक्षर A है 41 00 हेक्स में. अक्षर B है 42 00. हेलो जैCAक स्ट्रिंग दिखाई देती है 48 00 65 00 6सी 00 6सी 00 6F 00 में UTF-16LE बाइट्स. जब यह Base64-एन्कोडेड होता है, तो परिणाम में सभी शून्य सहित उन सभी बाइट्स का एन्कोडेड रूप होता है। एक मानक के साथ डिकोडिंग UTF-8 डिकोडर विकृत पाठ उत्पन्न करता है या पहले शून्य बाइट पर छोटा कर देता है क्योंकि UTF-8 शून्य बाइट्स को स्ट्रिंग टर्मिनेटर के रूप में मानता है।
आउटपुट हैलो के बजाय H e l o जैसा दिखता है, जिसमें प्रतीत होता है कि यादृच्छिक अक्षर या गायब पाठ है। एक व्यावहारिक उदाहरण समस्या और समाधान दिखाता है। मान लीजिए कि एक पॉवरशेल कमांड सरल स्ट्रिंग राइट-होस्ट हैलो को एनकोड करता है। PowerShell UTF-16LE-इसे सभी शून्य सहित बाइट्स में एनकोड करता है, Base64 बाइट्स को एनकोड करता है और VwByAGkAdABlAC0ASwBvAHMAaAAagACIASABlAGwAbABBvACIA जैCAक लंबी स्ट्रिंग तैयार करता है। इस स्ट्रिंग को अपने ब्राउज़र में Base64 एनकोडर और डिकोडर में कॉपी करें और डिकोड पर क्लिक करें। डिफ़ॉल्ट डिकोडर परिणाम को UTF-8 टेक्स्ट के रूप में व्याख्या करने का प्रयास करेगा और एम्बेडेड शून्य के कारण दूषित या छोटा आउटपुट उत्पन्न करेगा।
कार्यान्वित उदाहरण: एक हानिरहित नमूना एन्कोडेड कमांड को डिकोड करना - इंटरलीव्ड शून्य बाइट्स के बाद पाठ को पढ़ना
समाधान इसके बजाय हेक्स व्यू का उपयोग करना है। हेक्स दृश्य पर स्विच करें और आप बाइट्स देखेंगे: 57 00 72 00 69 00 74 00 65 00 2डी 00 4 बी 00 6F 00 73 00 68 00 20 00 22 00 48 00 65 00 6सी 00 6सी 00 6F 00 22 00. उन बाइट्स को इस रूप में पढ़ना UTF-16LE जोड़े W-r-i-t-e---K-o-s-h---H-e-l-l-o- उत्पन्न करते हैं। अनुभव के साथ आप पढ़ सकते हैं UTF-16LE हेक्स सीधे, या आप किसी फ़ाइल में बाइट्स लिख सकते हैं और उन्हें स्थानीय रूप से चलने वाली PowerShell या Python स्क्रिप्ट के साथ डिकोड कर सकते हैं।
व्यावहारिक दृष्टिकोण पैटर्न को नोट करना और याद रखना है कि PowerShell UTF-16LE का उपयोग करता है। जब आप ब्राउज़र में PowerShell -EncodedCommand को डिकोड करते हैं और आउटपुट गलत दिखता है, तो टेक्स्ट व्UK बजाय हेक्स व्यू देखें। हेक्स दृश्य प्रत्येक बाइट को व्यक्तिगत रूप से दिखाता है। प्रत्येक ASCII वर्ण दो बाइट्स के रूप में दिखाई देता है और उनके बीच एक शून्य होता है। यदि बाइट्स न्यू-एडमिनअकाउंट, रिवर्स डीएनएस लुकअप या सुरक्षा क्रेडेंशियल्स के निर्यात जैसे दुर्भावनापूर्ण कमांड बताते हैं, तो कमांड संदिग्ध है। यदि बाइट्स किसी निर्देशिका सूची या साधारण स्क्रिप्ट जैसी कोई अहानिकर बात बताते हैं, तो कमांड संभवतः सौम्य है।
नेस्टेड एन्कोडिंग और संपीड़न - Base64 के अंदर Base64, और जीज़िप स्ट्रीम जिन्हें आप टेक्स्ट के रूप में नहीं पढ़ सकते हैं
हेक्स दृश्य को सादे पाठ की तुलना में पढ़ना कठिन है, लेकिन यह दूषित UTF-8 आउटपुट से अनुमान लगाने की तुलना में अधिक सुरक्षित है। नेस्टेड एन्कोडिंग और संपीड़न मैलवेयर विश्लेषण में जटिलता जोड़ते हैं। एक पॉवरशेल कमांड किसी अन्य Base64 स्ट्रिंग को Base64-एनकोड कर सकता है, या किसी स्क्रिप्ट को gzip से संपीड़ित कर सकता है और फिर परिणाम को Base64-एनकोड कर सकता है। नेस्टेड परिदृश्य में आप बाहरी Base64 को डीकोड करते हैं, परिणाम पढ़ते हैं और पाते हैं कि यह स्वयं Base64 है। उसे भी डिकोड करें और तब तक जारी रखें जब तक आपको पढ़ने योग्य पाठ या कोई बाइनरी प्रारूप न मिल जाए जिसकी आप व्याख्या नहीं कर सकते। Gzip और अन्य संपीड़न प्रारूप हेक्स दृश्य में दिखाई देने वाले मैजिक बाइट्स (gzip के लिए 1F 8B) से शुरू होते हैं।
यदि आप Base64 को डीकोड करते हैं और हेक्स व्यू 1एफ 8बी से शुरू होता है, तो बाइट्स एक संपीड़ित स्ट्रीम हैं जिसके लिए डीकंप्रेसन की आवश्यकता होती है। Base64 एनकोडर और डिकोडर आपको हेक्स दिखाता है, जिससे आपको बिना कुछ निष्पादित किए इन पैटर्न को पहचानने में मदद मिलती है। संपीड़ित या आगे-एन्कोडेड पेलोड संदिग्ध हैं क्योंकि वे अस्पष्टता परतें जोड़ते हैं।
किसी घटना की रिपोर्ट के लिए क्या रिकॉर्ड करना है - डिकोड किया गया पाठ, स्रोत, और पेलोड के बजाय हैश
वैध आदेशों को शायद ही कभी एकाधिक एन्कोडिंग चरणों की आवश्यकता होती है। किसी घटना रिपोर्ट के निष्कर्षों को रिकॉर्ड करने के लिए अनुशासन और सटीकता की आवश्यकता होती है। आपके द्वारा विश्लेषण किए गए सटीक Base64 स्ट्रिंग को लिखें, आपने इसे कहाँ और कब पाया। यदि आपने इसे डिकोड किया है और संदिग्ध कमांड पाए हैं, तो कमांड का वर्णन करें लेकिन अभी तक रिपोर्ट में पूरी स्क्रिप्ट शामिल न करें; स्क्रिप्ट जटिल या लंबी हो सकती है.
डिकोड की गई स्क्रिप्ट का एक हैश (SHA-256) शामिल करें ताकि खोज को सत्यापित और ट्रैक किया जा सके। यदि आदेश स्पष्ट रूप से दुर्भावनापूर्ण है या ज्ञात शोषण तकनीकों का उपयोग करता है, तो कोई भी कार्रवाई करने से पहले घटना प्रतिक्रिया और सुरक्षा टीमों को शामिल करें। यह क्या करता है यह देखने के लिए कभी भी कमांड को स्वयं निष्पादित न करें। यदि घटना के उत्तरदाताओं को परीक्षण के लिए इसे निष्पादित करने की आवश्यकता होती है, तो वे ऐसा सैंडबॉक्स वाले वातावरण में करते हैं जहां कोई भी क्षति होती है। आपका काम सुरक्षित दूरी पर जोखिम को डिकोड करना और उसका आकलन करना है। यह आलेख मैलवेयर विश्लेषण, सैंडबॉक्स वातावरण या आक्रमण एट्रिब्यूशन के पूर्ण दायरे को कवर नहीं करता है।
इसमें क्या शामिल नहीं है - सैंडबॉक्स निष्पादन, मैलवेयर विश्लेषण टूलींग और एट्रिब्यूशन
वे सुरक्षा पेशेवरों और घटना प्रतिक्रिया टीमों के लिए विषय हैं। यहां का दायरा एन्कोडेड पावरशेल कमांड को निष्पादित किए बिना सुरक्षित रूप से डिकोड करने पर केंद्रित है, ताकि आप स्क्रिप्ट पढ़ सकें और आकलन कर सकें कि क्या यह आगे की जांच के लायक है। Base64 एन्कोडिंग अस्पष्टता है, सुरक्षा नहीं। एन्कोडिंग और डिकोडर वाला कोई भी व्यक्ति स्क्रिप्ट निकाल सकता है। हमलावर Base64 का उपयोग बुनियादी पहचान से बचने और आकस्मिक निरीक्षण को रोकने के लिए करते हैं, न कि विश्लेषण से अपने इरादे को छिपाने के लिए। एक डिकोडेड पॉवरशेल कमांड जो एक दूरस्थ स्क्रिप्ट को लाता है और निष्पादित करता है वह दुर्भावनापूर्ण है, चाहे आप इसे स्वयं डिकोड करें या कोई सुरक्षा टूल ऐसा करता हो।
किसी संदिग्ध कमांड को डिकोड करने के बाद व्यावहारिक अगला कदम उचित टीम को इसकी रिपोर्ट करना है। यदि यह आपका अपना सिस्टम है, तो निर्धारित करें कि क्या कार्य जानबूझकर और किसके द्वारा बनाया गया था। निर्माण तिथि और उसे निर्धारित करने वाले खाते की जाँच करें। यदि कार्य अनधिकृत है, तो इसे अक्षम करें, फोरेंसिक के लिए विवरण सुरक्षित रखें और जांच करें कि हमलावर ने इसे बनाने का विशेषाधिकार कैसे प्राप्त किया। यदि कमांड में नेटवर्क अनुरोध या रजिस्ट्री परिवर्तन या निर्धारित कार्य निर्माण जैसे दृढ़ता तंत्र शामिल हैं, तो यह लगभग निश्चित रूप से दुर्भावनापूर्ण है।
टेकअवे: Base64 अस्पष्टता है, सुरक्षा नहीं - कैसे Base64 एनकोडर और डिकोडर आपकी मशीन को छोड़े बिना पेलोड को स्थानीय रूप से डिकोड करता है
यदि यह वैध प्रशासन कार्य करता है और निर्माण विवरण सामान्य है, तो यह एक वैध प्रशासनिक स्क्रिप्ट हो सकती है जिसे सुरक्षा नीति या बड़े स्वचालन टूल के साथ एकीकरण से संबंधित कारणों से एन्कोड किया जाता है। इसे किसी भी तरह से क्रियान्वित न करें; डिकोड किए गए पाठ के अपने मूल्यांकन को अपना निर्णय सूचित करने दें। संदिग्ध Base64 PowerShell कमांड की सुरक्षित डिकोडिंग एक सीधी प्रक्रिया का पालन करती है। स्ट्रिंग को अपलोड किए बिना या कुछ भी निष्पादित किए बिना डीकोड करने के लिए Base64 एनकोडर और डिकोडर का उपयोग करें। बाइट्स क्या दर्शाते हैं यह समझने के लिए हेक्स व्यू देखें।
यदि आप UTF-16LE पैटर्न (इंटरलीव्ड शून्य बाइट्स) देखते हैं, तो याद रखें कि PowerShell UTF-16LE का उपयोग करता है और तदनुसार पढ़ें। नेटवर्क अनुरोध, विशेषाधिकार उन्नयन या दृढ़ता तंत्र जैसे किसी भी संदिग्ध पैटर्न की पहचान करें। अपनी घटना रिपोर्ट के लिए मूल Base64 स्ट्रिंग और उसके हैश सहित विवरण सटीक रूप से रिकॉर्ड करें। आदेश को कभी भी स्वयं निष्पादित न करें; इसे नियंत्रित वातावरण में घटना के उत्तरदाताओं पर छोड़ दें। अपने स्थानीय डिकोडिंग और सादे पाठ के अपने मूल्यांकन पर भरोसा करें, और उसे अपनी अगली कार्रवाई का मार्गदर्शन करने दें।