
PowerShell स्क्रिप्ट्स को मैन्युअल रूप से अस्पष्ट (obfuscate) करने के लिए तकनीकों, उदाहरणों और थोड़े सिद्धांत का एक संग्रह, जो AV चोरी (evasion) प्राप्त करने के लिए है, शैक्षिक उद्देश्यों के लिए संकलित किया गया है। इस रिपॉजिटरी की सामग्री व्यक्तिगत शोध का परिणाम है, जिसमें ऑनलाइन सामग्री पढ़ना और लैब्स तथा पेंटेस्ट्स में परीक्षण-और-त्रुटि प्रयास करना शामिल है।
PowerShell स्क्रिप्ट्स को मैन्युअल रूप से ओबफस्केट करने और सिग्नेचर-आधारित डिटेक्शन को बायपास करने के लिए तकनीकों, उदाहरणों और थोड़े से सिद्धांत का एक संग्रह, जिसे शैक्षिक उद्देश्यों के लिए संकलित किया गया है। इस रिपॉजिटरी की सामग्री व्यक्तिगत शोध का परिणाम है, जिसमें ऑनलाइन सामग्री पढ़ना और लैब्स तथा पेंटेस्ट्स में ट्रायल-एंड-एरर प्रयास शामिल हैं। आपको किसी भी चीज़ को हल्के में नहीं लेना चाहिए।
YouTube वीडियो प्रस्तुति: youtube.com/watch?v=tGFdmAh_lXE
⚠️ अस्वीकरण: इस रिपॉजिटरी में वर्णित तकनीकों और अवधारणाओं का उपयोग उन सिस्टमों तक अनधिकृत पहुंच प्राप्त करने के लिए करना अवैध है जिन्हें परीक्षण करने की आपके पास अनुमति नहीं है। आप अपने कार्यों के लिए स्वयं जिम्मेदार हैं। बुराई मत करो।
वैज्ञानिक शब्द entropy, जिसे आम तौर पर किसी सिस्टम की रैंडमनेस या अव्यवस्था का माप के रूप में परिभाषित किया जाता है, AV इवेज़न में महत्वपूर्ण है। ऐसा इसलिए है क्योंकि मैलवेयर में अक्सर ऐसा कोड होता है जो अत्यधिक रैंडमाइज़्ड, एन्क्रिप्टेड और/या एन्कोडेड (ओबफस्केटेड) होता है, जिससे उसका विश्लेषण करना और इसलिए उसे डिटेक्ट करना कठिन हो जाता है। विभिन्न तरीकों में से एक के रूप में, एंटी-वायरस उत्पाद संभावित रूप से दुर्भावनापूर्ण फाइलों और पेलोड्स की पहचान करने के लिए एन्ट्रॉपी विश्लेषण का उपयोग करते हैं।
इस अवधारणा को समझना महत्वपूर्ण है क्योंकि कोड को ओबफस्केट करते समय, आपको उन परिवर्तनों से उत्पन्न एन्ट्रॉपी परिवर्तन को ध्यान में रखना चाहिए जिन्हें आप करना चुनते हैं। सिग्नेचर तोड़ना आसान है, लेकिन यदि आप एन्ट्रॉपी स्तर पर ध्यान नहीं देते हैं, तो परिष्कृत AV/EDR इसे भाँप लेंगे।
ध्यान रखने योग्य एक सिद्धांत: एन्ट्रॉपी जितनी अधिक होगी, डेटा के ओबफस्केटेड या एन्क्रिप्टेड होने की संभावना उतनी ही अधिक होगी, और फाइल/पेलोड के दुर्भावनापूर्ण होने की संभावना भी उतनी ही अधिक होगी। सौभाग्य से, इसे कम करने के तरीके मौजूद हैं।
Claude E. Shannon ने अपने 1948 के पेपर A Mathematical Theory of Communication में एक सूत्र प्रस्तुत किया था जिसका उपयोग डेटा के एक समूह में एन्ट्रॉपी को मापने के लिए किया जा सकता है। यहाँ Shannon Entropy का एक सरल Python कार्यान्वयन है जिसका उपयोग आप अपने द्वारा विकसित पेलोड्स की एन्ट्रॉपी मापने के लिए कर सकते हैं:
#!/bin/python3
# Usage: python3 entropy.py <file>
import math, sys
def entropy(string):
"Calculates the Shannon entropy of a UTF-8 encoded string"
# decode the string as UTF-8
unicode_string = string.decode('utf-8')
# get probability of chars in string
prob = [ float(unicode_string.count(c)) / len(unicode_string) for c in dict.fromkeys(list(unicode_string)) ]
# calculate the entropy
entropy = - sum([ p * math.log(p) / math.log(2.0) for p in prob ])
return entropy
f = open(sys.argv[1], 'rb')
content = f.read()
f.close()
print(entropy(content))
आप इस ऑनलाइन Shannon Entropy कैलकुलेटर या Microsoft के Sigcheck.exe का उपयोग -a विकल्प के साथ भी कर सकते हैं।
फ्लैग नहीं होने वाला पेलोड वेरिएशन खोजने के लिए ट्रायल-एंड-एरर ओबफस्केशन परीक्षणों में कूदने से पहले परिपक्व और उत्तम तरीका यह है कि स्क्रिप्ट के उन हिस्सों की पहचान की जाए जो मैलवेयर डिटेक्शन को ट्रिगर करते हैं। विशेष रूप से C2 कमांड जैसी छोटी स्क्रिप्ट्स में, आप मामूली बदलाव करके तुरंत रडार से बच सकते हैं।
ऐसे ट्रिगर्स की पहचान करने के लिए एक बेहतरीन टूल है AMSITrigger। यहाँ एक दुर्भावनापूर्ण स्क्रिप्ट वाली फाइल के साथ उपयोग का उदाहरण दिया गया है। लाल क्षेत्र उस हिस्से को दर्शाता है जिस पर ओबफस्केशन लागू किया जाना चाहिए:

आप स्क्रिप्ट को टुकड़े-टुकड़े करके निष्पादित करके भी मैन्युअल रूप से ट्रिगर्स की पहचान कर सकते हैं।
स्क्रिप्ट्स को ओबफस्केट करते समय, वेरिएबल/क्लास/फंक्शन के नामों को रैंडम नामों से बदलना प्राथमिकता होनी चाहिए। इस तरह, अन्य तकनीकों के संयोजन में, आप आसानी से डिटेक्शन को बायपास कर पाएंगे। लेकिन आपको अपने द्वारा विकसित पेलोड्स की एन्ट्रॉपी को ध्यान में रखना चाहिए। निम्नलिखित मानक रिवर्स शेल स्क्रिप्ट पर विचार करें जो आम तौर पर अधिकांश, यदि सभी नहीं, AV द्वारा डिटेक्ट की जाती है:

अब निम्नलिखित ओबफस्केटेड संस्करण पर विचार करें:

इस संस्करण में, सभी वेरिएबल नामों को 32 अक्षरों लंबे रैंडम नामों से प्रतिस्थापित किया गया है। मैंने (pwd).Path को $(gl) से भी बदल दिया है। पेलोड की Shannon entropy 4.96 है। इस लेखन के समय, यह MS Defender और कई अन्य उत्पादों द्वारा डिटेक्ट नहीं होती है:

अब इस संस्करण पर विचार करें:

इस वेरिएशन में भी सभी वेरिएबल नाम बदले गए हैं, लेकिन इस बार नामों में 'f' अक्षरों की x संख्या है, जिसके परिणामस्वरूप पेलोड की एन्ट्रॉपी में महत्वपूर्ण गिरावट आती है। मैंने यहाँ भी (pwd).Path को $(gl) से बदल दिया है। फिर से, इस लेखन के समय, यह MS Defender द्वारा डिटेक्ट नहीं होती है। पेलोड की Shannon entropy 0.76 है।

⚡ ये दोनों वेरिएशन सामान्य AV को बायपास करते हैं, लेकिन दूसरे की एन्ट्रॉपी कम है और EDRs तथा अन्य परिष्कृत एंटी-मैलवेयर इंजनों द्वारा प्रोसेस किए जाने पर इसके बेहतर प्रदर्शन की संभावना अधिक होगी। ⚠️ मैं यह नहीं कह रहा कि इस उदाहरण में दूसरे पेलोड वेरिएशन का बेहतर प्रदर्शन निश्चित रूप से एन्ट्रॉपी स्तर के कारण है (मैं वास्तव में यह नहीं जान सकता, यह लंबाई या दोनों या कौन जाने क्या हो सकता है), लेकिन यह एक महत्वपूर्ण पहलू है जिसे ओबफस्केशन करते समय ध्यान में रखना चाहिए और यह उदाहरण उस अवधारणा को रेखांकित करने के लिए है।
आप PowerShell स्क्रिप्ट में वेरिएबल्स के नामों को रैंडमाइज़ करने के लिए नीचे दी गई स्क्रिप्ट का उपयोग कर सकते हैं। ⚠️ स्क्रिप्ट परफेक्ट नहीं है! यदि आप इसे बड़ी, जटिल PowerShell स्क्रिप्ट्स पर चलाते हैं तो यह उन चीज़ों को बदलकर उनकी कार्यक्षमता को तोड़ सकती है जिन्हें बदलना नहीं चाहिए। इसे सावधानी से उपयोग करें और सतर्क रहें।
#!/bin/python3
#
# This script is an example. It is not perfect and you should use it with caution.
# Source: https://github.com/t3l3machus/PowerShell-Obfuscation-Bible
# Usage: python3 randomize-variables.py <path/to/powershell/script>