
OpSec-सुरक्षित C# के अंदर से Powershell रनस्पेस (उर्फ SharpPick) जिसमें AMSI, Constrained Language Mode और Script Block Logging स्टार्टअप पर अक्षम होते हैं
C# के अंदर से पावरशेल रनस्पेस (जिसे SharpPick तकनीक भी कहा जाता है) जिसमें AMSI, ETW और स्क्रिप्ट ब्लॉक लॉगिंग को आपकी सुविधा के लिए अक्षम किया गया है।
आजकल, जब पावरशेल को निम्नलिखित तकनीकों के उपयोग से बुरी तरह से इंस्ट्रुमेंट किया गया है:
उन्नत हमलावरों को इन प्रयासों को दरकिनार करने के लिए रास्ते खोजने होंगे ताकि वे परिष्कृत प्रतिकूल सिमुलेशन अभ्यास कर सकें। इन प्रयासों में मदद करने के लिए, निम्नलिखित परियोजना बनाई गई।
यह प्रोग्राम निम्नलिखित में शामिल विशिष्ट तकनीकों के बाईपास पर आधारित है:
जो बदले में निम्नलिखित शोधों पर आधारित थे:
SharpPick का विचार, यानी C# असेंबली के भीतर से Runspaces का उपयोग करके पावरशेल स्क्रिप्ट लॉन्च करना, भी नया नहीं है और इसे सबसे पहले Lee Christensen (@tifkin_) ने अपने:
में लागू किया था।
साथ ही, स्रोत कोड Lee से CustomPSHost का कार्यान्वयन उधार लेता है।
यह परियोजना उपरोक्त शोधों और महान सुरक्षा समुदाय से विरासत में मिली है ताकि स्टार्टअप पर सुरक्षा अक्षम होने के साथ एक करीबी-से-प्रभावी पावरशेल वातावरण प्रदान किया जा सके।
अब .NET 4.0 के साथ आसानी से कंपाइल होता है, जबकि यदि .NET Framework 4.7.1+ के साथ संकलित किया जाता है तो एक अतिरिक्त कार्यक्षमता शामिल है जो CLM बाईपास कलाकृतियों का गठन करने वाली DLL को अनलोड करने की अनुमति देती है और बाद में उन्हें हटाने का प्रयास करती है (ईमानदारी से कहें तो मुश्किल से काम करता है)।
सबसे अच्छा माइलेज .NET 4.0 के साथ संकलित Stracciatella के साथ मिलता है।
कुछ विकल्प उपलब्ध हैं:
PS D:\> Stracciatella -h
:: Stracciatella - Powershell runspace with AMSI, ETW and Script Block Logging disabled.
Mariusz Banach / mgeeky, '19-22 <[email protected]>
v0.7
Usage: stracciatella.exe [options] [command]
-s <path>, --script <path> - निष्पादित करने के लिए पावरशेल स्क्रिप्ट वाली फ़ाइल का पथ। यदि कोई विकल्प नहीं दिया गया है, तो एक स्यूडो-शेल लूप में प्रवेश करेगा। यह पावरशेल स्क्रिप्ट डाउनलोड और निष्पादित करने के लिए एक HTTP(S) URL भी हो सकता है।
-v, --verbose - विस्तृत जानकारी प्रिंट करता है
-n, --nocleanup - CLM अक्षम करने वाले अवशेषों (TEMP में DLL फ़ाइलें और COM रजिस्ट्री कुंजियाँ) को न हटाएँ। डिफ़ॉल्ट रूप से ये हमेशा हटा दिए जाएंगे।
-C, --leaveclm - CLM को अक्षम करने का प्रयास न करें। अधिक गुप्त। CLM अक्षम करने वाली कलाकृतियों को न हटाए जाने से बचेगा।
-f, --force - भले ही पावरशेल सुरक्षा अक्षम न हुई हो, निष्पादन जारी रखें। डिफ़ॉल्ट रूप से हम विफलता पर बाहर निकल जाते हैं।
-c, --command - निर्दिष्ट कमांड निष्पादित करता है। आप या तो -c का उपयोग कर सकते हैं या स्ट्रैकियाटेला मापदंडों के बाद कमांड जोड़ सकते हैं: cmd> straciatella ipconfig /all
यदि कमांड और स्क्रिप्ट पैरामीटर दिए गए हैं, तो स्क्रिप्ट चलाने के बाद कमांड निष्पादित करता है।
-x <key>, --xor <key> - इनपुट को XOR एन्कोडेड मानें, जहां <key> दशमलव में एक बाइट कुंजी है (हेक्स के लिए 0x के साथ उपसर्ग करें)
-p <name>, --pipe <name> - एक निर्दिष्ट नामित पाइप से पावरशेल कमांड पढ़ें। कमांड से पहले लिटिल-एंडियन में उसकी लंबाई के 4 बाइट होने चाहिए (लंबाई-मान संकेतन)।
-t <millisecs>, --timeout <millisecs>
- पाइप पढ़ने के संचालन के लिए टाइमआउट निर्दिष्ट करता है (मिलीसेकंड में)। डिफ़ॉल्ट: 60 सेकंड। 0 - अनंत।
-e, --cmdalsoencoded - इनपुट कमांड ('--command' में निर्दिष्ट) को भी एन्कोडेड मानें। इनपुट स्क्रिप्ट फ़ाइल को डीकोड करने और चलाने के बाद इनपुट कमांड को डीकोड करता है।
डिफ़ॉल्ट रूप से हम केवल इनपुट फ़ाइल को डीकोड करते हैं और कमांड को सादे पाठ में दिया गया मानते हैं
प्रोग्राम अपने इनपुट के रूप में कमांड और स्क्रिप्ट फ़ाइल पथ स्वीकार करता है। दोनों वैकल्पिक हैं, यदि कोई नहीं दिया गया तो स्यूडो-शेल शुरू हो जाएगा। बेहतर OpSec अनुभव के लिए दोनों कमांड और स्क्रिप्ट को सिंगल-बाइट XOR (जो बेस64 एन्कोडेड आउटपुट उत्पन्न करेगा) का उपयोग करके एन्कोड किया जा सकता है।
यहाँ उपयोग के मामलों को प्रस्तुत करने वाले कुछ उदाहरण हैं:
PS D:\> Stracciatella.exe -v
:: Stracciatella - Powershell runspace with AMSI, ETW and Script Block Logging disabled.
Mariusz Banach / mgeeky, '19-22 <[email protected]>
v0.7
[.] Powershell का संस्करण: 5.1
[.] भाषा मोड: FullLanguage
[+] प्रतिबंधित भाषा मोड को अक्षम करने की आवश्यकता नहीं है। पहले से ही FullLanguage में।
[+] स्क्रिप्ट ब्लॉक लॉगिंग अक्षम।
[+] AMSI अक्षम।
[+] ETW अक्षम।
Stracciatella D:\> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.18362.1
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.18362.1
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
सबसे पहले, एन्कोडेड स्टेटमेंट तैयार करने के लिए हम बंडल encoder.py स्क्रिप्ट का उपयोग कर सकते हैं, जिसका उपयोग इस प्रकार किया जा सकता है:
PS D:\> python encoder.py -h
usage: encoder.py [options] <command|file>
positional arguments:
command एन्कोडिंग के लिए एक कमांड या स्क्रिप्ट फ़ाइल का पथ निर्दिष्ट करता है
optional arguments:
-h, --help यह सहायता संदेश दिखाएँ और बाहर निकलें
-x KEY, --xor KEY कमांड/फ़ाइल XOR एन्कोड कुंजी निर्दिष्ट करता है (एक बाइट)
-o PATH, --output PATH
(वैकल्पिक) आउटपुट फ़ाइल। यदि नहीं दिया गया, तो stdout पर आउटपुट प्रतिध्वनित होगा
PS D:\> python encoder.py -x 0x31 "Write-Host \"It works like a charm!\" ; $ExecutionContext.SessionState.LanguageMode"
ZkNYRVQceV5CRRETeEURRl5DWkIRXVhaVBFQEVJZUENcEBMRChEVdElUUkRFWF5fcl5fRVRJRR9iVEJCWF5fYkVQRVQffVBfVkRQVlR8XlVU
फिर हम encoder.py आउटपुट को Stracciatella के लिए एन्कोडेड कमांड के रूप में इनपुट देते हैं:
PS D:\> Stracciatella.exe -v -x 0x31 -c "ZkNYRVQceV5CRRETeEURRl5DWkIRXVhaVBFQEVJZUENcEBMRChEVdElUUkRFWF5fcl5fRVRJRR9iVEJCWF5fYkVQRVQffVBfVkRQVlR8XlVU" .\Test2.ps1
:: Stracciatella - Powershell runspace with AMSI, ETW and Script Block Logging disabled.
Mariusz Banach / mgeeky, '19-22 <[email protected]>
v0.7
[.] स्क्रिप्ट फ़ाइल लोड होगी: '.\Test2.ps1'
[+] AMSI अक्षम।
[+] ETW अक्षम।
[+] स्क्रिप्ट ब्लॉक लॉगिंग अक्षम।
[.] भाषा मोड: FullLanguage