
बिना स्थानीय एडमिन विशेषाधिकारों का उपयोग किए, यह पता लगाएं कि किसी रिमोट मशीन पर कोई सेवा स्थापित है (बिना प्रत्यक्ष दृश्यता के) और/या चल रही है (यदि वह named pipes उजागर करती है)।
किसी दूरस्थ मशीन पर कोई सेवा स्थापित है (आँख बंद करके) और/या चल रही है (यदि named pipes उजागर कर रही हो) का पता लगाएं, बिना स्थानीय व्यवस्थापक विशेषाधिकारों का उपयोग किए।
अधिक विस्तार में, यह स्क्रिप्ट चलाने पर लक्षित SMB सेवा (445/tcp) से दूरस्थ रूप से कनेक्ट होती है और निम्नलिखित कार्य करती है:
[MS-LSAT] RPC कॉल LsarLookupNames() के माध्यम से जाँच करती है कि निर्दिष्ट सेवा स्थापित है या नहीं। विशेषाधिकार प्राप्त खाते का उपयोग करने की कोई आवश्यकता नहीं है, लेकिन केवल "ब्लाइंड" क्वेरी ही संभव है (सेवाओं की सूची नहीं दे सकते, हम केवल किसी विशिष्ट सेवा की स्थिति पूछ सकते हैं)।
जाँच करती है कि लक्षित पर निर्दिष्ट Named Pipe मौजूद है या नहीं। सेवाएँ (प्रक्रियाएँ) सेवा के लिए विशिष्ट एक named pipe उजागर कर सकती हैं, जिसे एक अन-प्रिविलेज्ड उपयोगकर्ता देख सकता है। इसलिए सेवाओं के लिए विशिष्ट named pipes की जाँच करने से हम यह अनुमान लगा सकते हैं कि विशिष्ट सेवा चल रही है या नहीं।
यह एक स्टैंडअलोन Python स्क्रिप्ट है जो Impacket का उपयोग करती है, कुछ भी स्थापित करने की आवश्यकता नहीं है। नवीनतम आधिकारिक Impacket (0.10.0 और 0.9.24) और Python (3.9 और 3.10) का उपयोग करके इसे अद्यतित Kali और Arch Linux पर परीक्षण किया है।
सेवाओं, जिन सेवा नामों की जाँच करनी है, और सेवा के लिए विशिष्ट named pipes को conf फ़ोल्डर में JSON कॉन्फ़िग फ़ाइलों (या CSV फ़ाइलों में यदि यह अधिक सुविधाजनक हो, जो मुझे बाद में एहसास हुआ :), इसलिए एक कस्टम csv2json कनवर्टर भी उपलब्ध है) में निर्दिष्ट किया गया है। प्रारूप को समझने के लिए, शामिल उदाहरण देखें।
शामिल कॉन्फ़िग फ़ाइलें:
उपयोग के मामलों को अधिक सेवाओं / named pipes द्वारा बढ़ाया जा सकता है, EDR कॉन्फ़िग काफी अधूरा है, बेझिझक और जोड़ें।
स्क्रिप्ट JSON कॉन्फ़िग प्रारूप का उपयोग करती है, लेकिन बाद में मुझे एहसास हुआ कि CSV लिखना ज्यादा सुविधाजनक है, इसलिए CSV को JSON में बदलने के लिए csv2json.py स्क्रिप्ट शामिल की।
एकल लक्ष्य के विरुद्ध AV/EDR सेवाओं (या कुछ और) की गणना करने के लिए चलाना सीधा है:
./serviceDetector.py -conf conf/edr.json evil.corp/johndoe:[email protected]
केर्बेरोस प्रमाणीकरण भी समर्थित है (KRB5CCNAME env var ccache फ़ाइल की ओर इशारा कर रहा है):
./serviceDetector.py -conf conf/edr.json -k -no-pass server.ecorp.local
कई लक्ष्यों के विरुद्ध प्रभावी ढंग से चलाने के लिए GNU parallel अत्यंत उपयोगी है:
cat targets.txt | parallel -j 50 ./serviceDetector.py evil.corp/johndoe:Passw0rd1@{}
ध्यान दें कि ढेर सारे लक्ष्यों पर चलाने से पहले एक के विरुद्ध परीक्षण करें ताकि खाता लॉकआउट को रोका जा सके (उदा. गलत वर्तनी वाले पासवर्ड के मामले में)।
Opsec नोट: सावधान रहें कि विभिन्न लक्ष्यों पर एक साथ बड़े पैमाने पर लॉगिन SOC अलर्ट ट्रिगर कर सकता है।
यहाँ उपयोग की गई दोनों तकनीकें नई नहीं हैं।
[MS-LSAT] RPC कॉल LsarLookupNames() का उपयोग पहले Vincent Le Toux (@mysmartlogon) द्वारा किया गया था शानदार PingCastle टूल के Antivirusscanner मॉड्यूल में।
चल रही सेवाओं का पता लगाने के लिए named pipe विचार इस ट्वीट से प्रेरित था Lee Christensen (@tifkin_) के द्वारा, जब उन्होंने इसका उपयोग WebClient सेवा का पता लगाने के लिए किया। AV/EDR पहचान के लिए यह तकनीक NSA के NamedPipeTouch टूल द्वारा भी उपयोग की गई थी (जिसे The Shadow Brokers समूह द्वारा लीक किया गया था)।