
Beacon द्वारा उत्पन्न फ़ाइलों को डिस्क के बजाय मेमोरी में लिखने के लिए एक CobaltStrike टूलकिट
MemFiles CobaltStrike के लिए एक टूलकिट है जो Operators को Beacon प्रक्रिया द्वारा निर्मित फ़ाइलों को लक्षित सिस्टम पर डिस्क पर लिखने के बजाय मेमोरी में लिखने में सक्षम बनाता है। इसका सफलतापूर्वक Windows 7, 10, और 11 पर परीक्षण किया गया है; संबंधित सर्वर संस्करण बिना किसी समस्या के काम करने चाहिए। MemFiles केवल x64 Beacons तक सीमित है।
यह NTDLL.dll के भीतर कई अलग-अलग NtAPI's को hook करके और उन API के कॉल्स को उन फ़ंक्शनों पर पुनर्निर्देशित करके ऐसा करता है जिन्हें Beacon प्रक्रिया मेमोरी स्पेस में इंजेक्ट किया गया है।
MemFiles मानता है कि Beacon प्रक्रिया में NTDLL की एक साफ़/बिना hook वाली प्रति मौजूद है। ऐसे Beacon प्रक्रिया में MemFiles की व्यवहार्यता के बारे में कोई गारंटी नहीं दी जाती है जहाँ EDR hooks अभी भी सक्रिय हैं। MemFiles का उपयोग करने से पहले NTDLL को repair/refresh करें!
MemFiles टूलकिट में एक "विशेष", गैर-मौजूद निर्देशिका परिभाषित की गई है; इस विशेष निर्देशिका में लिखी गई कोई भी फ़ाइल MemFiles द्वारा कैप्चर की जाएगी और मेमोरी में लिखी जाएगी, जहाँ से उन्हें बाद में Teamserver पर डाउनलोड किया जा सकता है।
MemFiles उन अधिकांश (सभी नहीं) टूल्स के साथ संगत है जो Beacon प्रक्रिया के भीतर चलते हैं और जिन्हें अपना आउटपुट किसी विशिष्ट निर्देशिका में लिखने का निर्देश दिया जा सकता है। इसे काम करने के लिए उन्नत विशेषाधिकारों की आवश्यकता नहीं होती है।
इसमें शामिल हैं:
-BOF's
-.NET assemblies इनलाइन चलाई गईं, जैसे inline-executeAssembly का उपयोग करके
-PE's इनलाइन चलाए गए, जैसे Inline-Execute-PE का उपयोग करके
ये सभी संगत हैं क्योंकि ये Beacon प्रक्रिया के अंदर चलते हैं, जहाँ प्रासंगिक NtAPI's hook किए गए हैं।
MemFiles निम्नलिखित जैसी चीज़ों के साथ काम नहीं करता है:
-execute-assembly
-shell
-run
इनमें से कोई भी संगत नहीं है क्योंकि ये सभी अन्य प्रक्रियाओं को स्पॉन करते हैं जिनके NtAPI's hook नहीं किए गए हैं।
MemFiles का परीक्षण Rubeus, SharpHound, Procdump, और Powershell जैसे टूल्स के साथ सफलतापूर्वक किया गया है जब उन्हें Beacon प्रक्रिया के भीतर चलाया जाता है।

रिपॉजिटरी को clone करें और वैकल्पिक रूप से hookdir वेरिएबल को बदलें, जो /PIC/Source/NtCreateFile.c और /PIC/Source/NtOpenFile.c दोनों में लाइन 56 पर परिभाषित है। यह वेरिएबल वह "विशेष" निर्देशिका है जो MemFiles को संकेत देती है कि उसे बनाई जा रही फ़ाइल को इंटरसेप्ट करना चाहिए। hookdir वेरिएबल डिफ़ॉल्ट रूप से "redteam" पर सेट है। सुनिश्चित करें कि यह वेरिएबल लक्षित सिस्टम पर कोई वास्तविक निर्देशिका नहीं है, और यह दोनों फ़ाइलों में समान है!

आवश्यक BOF's और PIC फ़ंक्शन दोनों को compile करने के लिए 'make all' चलाएँ।
MemFiles.cna को CobaltStrike Client में load करें। सुनिश्चित करें कि जिस निर्देशिका से CobaltStrike चल रहा है वह आपके उपयोगकर्ता द्वारा writable है; MemFiles वहाँ एक text फ़ाइल (memfiles.txt) बनाता है ताकि MemFiles के कार्य करने के लिए आवश्यक डेटा की उपलब्धता सुनिश्चित हो सके।
MemFiles को प्रत्येक नए Beacon में इंस्टॉल करने के लिए कॉन्फ़िगर किया जा सकता है जो Teamserver में कॉल करता है; यह MemFiles->Config मेनू आइटम का उपयोग करके किया जाता है। डिफ़ॉल्ट रूप से, MemFiles नए Beacons में ऑटो-इंस्टॉल नहीं होता है। ध्यान दें कि यह एक वैश्विक सेटिंग है; यदि दो Clients Teamserver से जुड़े हैं और दोनों में MemFiles.cna लोड है, यदि Client A "Install on beacon initial" सेटिंग को टॉगल करता है, तो यह परिवर्तन Client B पर भी प्रभावी होगा!

MemFiles में 4 लक्ष्य-उन्मुख कमांड्स हैं जो BOF's चलाते हैं और 1 आंतरिक कमांड है जो प्रोजेक्ट डेटा संरचना को संचालित करता है।
लक्ष्य-उन्मुख:
आंतरिक डेटा संरचना:
meminit Beacon प्रक्रिया में MemFiles इंस्टॉल करने के लिए ज़िम्मेदार है।
MemFiles द्वारा hook किए गए NtAPI's की सूची निम्नलिखित है:
meminit निम्नलिखित प्रमुख क्रियाएँ करता है:
memlist का उपयोग किसी दिए गए Beacon के लिए MemFiles द्वारा वर्तमान में मेमोरी में संग्रहीत सभी फ़ाइलों को प्रदर्शित करने के लिए किया जाता है।

कई फ़ील्ड प्रदर्शित की जाती हैं, जिनमें से उपयोगकर्ता के लिए सबसे प्रासंगिक और रुचिकर फ़ील्ड फ़ाइल का नाम और संग्रहीत डेटा की लंबाई है।
memfetch का उपयोग किसी दिए गए Beacon के लिए MemFiles द्वारा मेमोरी में संग्रहीत फ़ाइलों को वास्तव में प्राप्त करने के लिए किया जाता है।
डिफ़ॉल्ट रूप से, memfetch उन सभी फ़ाइलों को प्राप्त करेगा जो MemFiles द्वारा संग्रहीत हैं और जिनका "handle" बंद कर दिया गया है। यह डिज़ाइन विकल्प उस फ़ाइल को डाउनलोड करने के प्रयास से संबंधित किसी भी समस्या से बचने के लिए बनाया गया था जिसे कोई प्रोग्राम/एप्लिकेशन अभी तक लिखना समाप्त नहीं किया है।
इसका मतलब है कि यदि कोई प्रोग्राम/एप्लिकेशन फ़ाइल के लिए खोले गए handle को बंद करने में विफल रहता है, तो फ़ाइल memfetch द्वारा डाउनलोड नहीं की जाएगी।
इसे memfetch के साथ "force" तर्क का उपयोग करके कम किया जा सकता है, अर्थात 'memfetch force' का उपयोग करके handle की स्थिति की परवाह किए बिना सभी फ़ाइलों को मेमोरी से प्राप्त किया जा सकता है।
memfetch द्वारा मेमोरी से प्राप्त की गई फ़ाइलें डाउनलोड के रूप में Teamserver को वापस भेजी जाती हैं और CobaltStrike में Downloads टैब के माध्यम से Teamserver से Client पर synced की जा सकती हैं।
एक बार जब कोई फ़ाइल Teamserver द्वारा डाउनलोड हो जाती है, तो उसे Beacon प्रक्रिया की मेमोरी से मिटा दिया जाता है और उसकी प्रविष्टि, जैसा कि memlist के माध्यम से दिखाई जाती है, हटा दी जाती है।
memclean Beacon प्रक्रिया से MemFiles को साफ़ करने और हटाने के लिए ज़िम्मेदार है।
MemFiles के लिए मानक उपयोग केस में इसे इंस्टॉल करना और Beacon के जीवनकाल के दौरान इसे इंस्टॉल छोड़ देना शामिल है; हालाँकि यदि कोई MemFiles का उपयोग किसी टूल के साथ मिलकर फ़ाइल आउटपुट को कैप्चर और प्राप्त करने के लिए करना चाहता है, और फिर MemFiles को अनइंस्टॉल करना चाहता है ताकि उसके आर्टिफैक्ट मेमोरी में न रहें, तो memclean का उपयोग Beacon प्रक्रिया को meminit चलाने से पहले की मूल स्थिति में वापस लाने के लिए किया जा सकता है।
इसमें शामिल हैं: