
PowerShell प्रच्छादन पहचान फ्रेमवर्क


Revoke-Obfuscation एक PowerShell v3.0+ संगत PowerShell अस्पष्टीकरण पहचान ढांचा है।
Daniel Bohannon (@danielhbohannon) Lee Holmes (@Lee_Homes)
ब्लॉग पोस्ट: https://www.fireeye.com/blog/threat-research/2017/07/revoke-obfuscation-powershell.html
श्वेतपत्र: https://www.fireeye.com/content/dam/fireeye-www/blog/pdfs/revoke-obfuscation-report.pdf
शरद ऋतु 2016 और वसंत 2017 में, Daniel Bohannon (@danielhbohannon) ने Invoke-Obfuscation और Invoke-CradleCrafter जारी किए, जो दो ओपन-सोर्स PowerShell अस्पष्टीकरण ढांचे हैं। इस शोध और इन ढाँचों का उद्देश्य हमलावरों द्वारा PowerShell के उपयोग का पता लगाने के लिए विशुद्ध रूप से हस्ताक्षर-आधारित दृष्टिकोण की सीमाओं को उजागर करना था। रक्षकों के लिए मुख्य संदेश यह रहा है कि ज्ञात संदिग्ध वाक्यविन्यास के अलावा अस्पष्टीकरण के संकेतकों का पता लगाने पर ध्यान केंद्रित किया जाए।
हालांकि, Invoke-Obfuscation और Invoke-CradleCrafter में रैंडमाइजेशन के अत्यधिक स्तर, टोकन-लेयर अस्पष्टीकरण विकल्पों के साथ, जो PowerShell के स्क्रिप्ट ब्लॉक लॉगिंग में डीओबस्केट नहीं होते हैं, ने रक्षकों को ज्ञात और अज्ञात अस्पष्टीकरण तकनीकों का पता लगाने के लिए एक नए, स्केलेबल साधन की तलाश करने के लिए प्रेरित किया है।
Invoke-Obfuscation के जारी होने के कुछ हफ्तों बाद, Lee Holmes (@Lee_Homes) ने More Detecting Obfuscated PowerShell शीर्षक से एक ब्लॉग पोस्ट लिखा, जिसमें उन्होंने भारी रूप से अस्पष्ट स्क्रिप्ट में पाई जाने वाली असामान्य विशेषताओं का पता लगाने के लिए सांख्यिकीय विश्लेषण तकनीकों पर प्रकाश डाला, विशेष रूप से इन्वोक-ओबफस्केशन द्वारा निर्मित।
इस आदान-प्रदान के बाद से, डैनियल और ली अच्छे दोस्त बन गए और कई सामान्य रुचियों/जुनूनों को साझा किया – अर्थात्, अच्छी कॉफी का प्यार और अस्पष्ट PowerShell का पूरी तरह से पता लगाने के नए तरीके बनाने का प्रयास।
ब्लू टीमर्स ने शोध और POC कोड पर जितना समय बिताया, वह केमेक्स-ब्रूड कॉफी के कई हज़ार कप के बराबर होगा, मान लें कि 4 मिनट का लक्ष्य ब्रू समय हो (यह मानते हुए कि कम से कम एक अन्य कॉफी उत्साही ने इस "पौर ओवर" पन को उठाया)।
Revoke-Obfuscation इन प्रयासों का अंतिम हस्तनिर्मित उत्पाद है।
Revoke-Obfuscation एक ओपन-सोर्स PowerShell v3.0+ ढांचा है जो बड़े पैमाने पर अस्पष्ट PowerShell कमांड और स्क्रिप्ट का पता लगाने के लिए है। यह किसी भी इनपुट PowerShell स्क्रिप्ट से हजारों विशेषताओं को तेजी से निकालने के लिए PowerShell के AST (अमूर्त सिंटैक्स ट्री) पर निर्भर करता है और इस फीचर वेक्टर की तुलना 408K+ PowerShell स्क्रिप्ट के एक कोर्पस के विरुद्ध एक स्वचालित शिक्षण प्रक्रिया के माध्यम से गणना किए गए कई पूर्वनिर्धारित भारित फीचर वैक्टरों में से एक से करता है। इस पूर्ण कोर्पस को (https://aka.ms/PowerShellCorpus) से डाउनलोड किया जा सकता है। आप इस कार्य के डेटा विज्ञान पहलुओं के पीछे का विवरण रिपॉजिटरी के 'DataScience' उपनिर्देशिका में पा सकते हैं।
चूंकि Revoke-Obfuscation शुद्ध IOC या RegEx मिलान के बजाय फीचर निष्कर्षण और तुलना पर निर्भर करता है, यह अज्ञात अस्पष्टीकरण तकनीकों की पहचान करने में अधिक मजबूत है, भले ही हमलावर अपने अस्पष्टीकरण को अनऑबस्केटेड स्क्रिप्ट सामग्री के साथ पैडिंग करके वर्ण आवृत्ति विश्लेषण जैसी बुनियादी जाँचों को उखाड़ फेंकने का प्रयास करें।
Revoke-Obfuscation अधिकांश इनपुट PowerShell स्क्रिप्ट को 100-300 मिलीसेकंड के भीतर आसानी से माप सकता है। प्रदर्शन का यह स्तर किसी संगठन को (सबसे खराब) प्रति घंटे 12K+ PowerShell स्क्रिप्ट के अस्पष्टीकरण को मापने की अनुमति देता है, बिना SIEM में वर्बोज़ PowerShell स्क्रिप्ट ब्लॉक लॉग को इंडेक्स करने की आवश्यकता के।
अंत में, Revoke-Obfuscation आसान व्हाइटलिस्टिंग कार्यक्षमता का समर्थन करता है, साथ ही PowerShell ऑपरेशनल इवेंट लॉग रिकॉर्ड को अंतर्ग्रहण करने और कई स्क्रिप्ट ब्लॉक EID 4104 रिकॉर्ड में दर्ज स्क्रिप्ट ब्लॉकों को पुन: इकट्ठा करने की क्षमता भी रखता है। यह आसानी से एक वन-स्टॉप शॉप बन सकता है जो किसी वातावरण के PowerShell ऑपरेशनल इवेंट लॉग को इनजेस्ट करता है, उन लॉग के भीतर सभी स्क्रिप्ट को पुन: इकट्ठा और अद्वितीय बनाता है, और फिर उन अस्पष्ट PowerShell स्क्रिप्ट की पहचान करता है जो मैन्युअल निरीक्षण के योग्य हैं।
Revoke-Obfuscation का स्रोत कोड Github पर होस्ट किया गया है, और आप इसे इस रिपॉजिटरी (https://github.com/danielbohannon/Revoke-Obfuscation) से डाउनलोड, फोर्क और समीक्षा कर सकते हैं। कृपया इस परियोजना से जुड़े Github के बग ट्रैकर के माध्यम से मुद्दों या सुविधा अनुरोधों की रिपोर्ट करें।
स्थापित करने के लिए (Github से):
Import-Module .\Revoke-Obfuscation.psd1
स्रोत कोड को PowerShell गैलरी से सीधे निम्नलिखित कमांड के माध्यम से भी स्थापित किया जा सकता है:
स्थापित करने के लिए (PowerShell गैलरी से):
Install-Module Revoke-Obfuscation
Import-Module Revoke-Obfuscation
Revoke-Obfuscation एक विस्तृत ट्यूटोरियल के साथ-साथ कुछ अन्य मजेदार आश्चर्य भी प्रदान करेगा। लेकिन अगर आप लुल्ज़ में नहीं हैं तो आप उपयोग सिंटैक्स देखने के लिए बस Get-Help Measure-RvoObfuscation चला सकते हैं या पढ़ना जारी रख सकते हैं।
इस ढांचे में दो प्राथमिक कार्यों का उपयोग किया जाता है:
यदि आपको PowerShell ऑपरेशनल लॉग से स्क्रिप्ट ब्लॉक लॉग को पुन: इकट्ठा और निकालने की आवश्यकता है, तो Get-RvoScriptBlock आपके लिए उपयुक्त कार्य है। यह स्वचालित रूप से केवल अद्वितीय स्क्रिप्ट ब्लॉक लौटाता है और कुछ डिफ़ॉल्ट स्क्रिप्ट ब्लॉक मानों को बाहर करता है जिन्हें दुर्भावनापूर्ण नहीं माना जाता है। इसे -Deep स्विच के साथ ओवरराइड किया जा सकता है।
Get-RvoScriptBlock -Path 'C:\Windows\System32\Winevt\Logs\Microsoft-Windows-PowerShell%4Operational.evtx' -VerboseGet-ChildItem .\Demo\demo.evtx | Get-RvoScriptBlock -VerboseGet-WinEvent -LogName Microsoft-Windows-PowerShell/Operational | Get-RvoScriptBlock -VerboseGet-RvoScriptBlock MIR/HX ऑडिट परिणामों के साथ-साथ Matt Graeber (@mattifestation) के CimSweep प्रोजेक्ट (https://github.com/PowerShellMafia/CimSweep) के माध्यम से प्राप्त PowerShell ऑपरेशनल लॉग का भी समर्थन करता है। CimSweep के लिए WMI को एक गैर-क्लासिक इवेंट लॉग क्वेरी करने के लिए ट्रिक करने हेतु एक छोटे रजिस्ट्री ट्वीक की आवश्यकता है। विवरण Get-RvoScriptBlock के NOTES अनुभाग में पाया जा सकता है।
Get-ChildItem C:\MirOrHxAuditFiles\*_w32eventlogs.xml | Get-RvoScriptBlock -VerboseGet-CSEventLogEntry -LogName Microsoft-Windows-PowerShell/Operational | Get-RvoScriptBlockdemo.evtx में रिकॉर्ड किए गए परीक्षण डेटा के विरुद्ध एक पूर्ण उदाहरण नीचे पाया जा सकता है:
$obfResults = Get-WinEvent -Path .\Demo\demo.evtx | Get-RvoScriptBlock | Measure-RvoObfuscation -OutputToDisk -Verbose
स्थानीय और दूरस्थ रूप से होस्ट की गई परीक्षण स्क्रिप्ट के विरुद्ध एक पूर्ण उदाहरण नीचे पाया जा सकता है:
Measure-RvoObfuscation -Url 'http://bit.ly/DBOdemo1' -Verbose -OutputToDiskGet-Content .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDiskGet-ChildItem .\Demo\DBOdemo*.ps1 | Measure-RvoObfuscation -Verbose -OutputToDisk-OutputToDisk स्विच स्वचालित रूप से सभी अस्पष्ट स्क्रिप्ट को .\Results\Obfuscated\ में आउटपुट करेगा। किसी भी मामले में, सभी परिणाम PSCustomObjects के रूप में लौटाए जाएंगे जिनमें स्क्रिप्ट सामग्री के साथ मेटाडेटा जैसे अस्पष्टीकरण स्कोर, माप समय, व्हाइटलिस्टिंग परिणाम, सभी निकाली गई स्क्रिप्ट विशेषताएँ आदि शामिल होंगे।
Revoke-Obfuscation में दो स्थानों पर तीन व्हाइटलिस्टिंग विकल्प मौजूद हैं:
-WhitelistFile .\files\*.ps1,.\more_files\*.ps1,.\one_more_file.ps1-WhitelistContent 'string 1 to whitelist','string 2 to whitelist'-WhitelistRegex 'regex 1 to whitelist','regex 2 to whitelist'यदि आप अपने स्वयं के प्रशिक्षण डेटा का सेट बनाने और Measure-Vector फ़ंक्शन के लिए एक भारित वेक्टर उत्पन्न करने में रुचि रखते हैं, तो ModelTrainer.cs/ModelTrainer.exe को लेबल किए गए डेटा सेट के विरुद्ध निष्पादित किया जा सकता है। निम्नलिखित कमांड सभी इनपुट स्क्रिप्ट से फीचर वेक्टर निकालेगा और उन्हें इस प्रशिक्षण चरण में उपयोग किए जाने वाले एकल CSV में एकत्रित करेगा:
Get-ChildItem .\*.ps1 | ForEach-Object { [PSCustomObject](Get-RvoFeatureVector -Path $_.FullName) | Export-Csv .\all_features.csv -Append }
अंत में, यदि आप उन संकेतकों (IOC) को बनाने के लिए एक प्लेटफॉर्म की तलाश कर रहे हैं जो PowerShell के AST (एब्सट्रैक्ट सिंटैक्स ट्री) की शक्ति का उपयोग करते हैं – जिसे हम दुर्भावनापूर्ण PowerShell गतिविधि की पहचान करने के लिए अत्यधिक अनुशंसा करेंगे जो अस्पष्ट नहीं है – तो PS Script Analyzer एक उत्कृष्ट ढांचा है जो ऐसे कार्यों को संभालने के लिए डिज़ाइन किया गया है।
Revoke-Obfuscation Apache 2.0 लाइसेंस के तहत जारी किया गया है।
v1.0 – 2017-07-27 Black Hat USA & 2017-07-30 DEF CON: Revoke-Obfuscation का सार्वजनिक रिलीज़।