
दूरस्थ प्रणालियों को आपस में जोड़ने के लिए एक सुव्यवस्थित FTP-संचालित कमांड और नियंत्रण मार्ग।
SharpFtpC2 एक छोटा, प्रयोगात्मक प्रोजेक्ट है जो दो रिमोट कंप्यूटरों के बीच कमांड और रिस्पॉन्स को रिले करने के लिए FTP(S) का उपयोग करने की संभावना का पता लगाने के उद्देश्य से बनाया गया है। यह FTP प्रोटोकॉल का उपयोग एक अस्थायी टनल के रूप में करता है, जिसके माध्यम से दोनों कंप्यूटर, जो FTP सर्वर से जुड़े क्लाइंट के रूप में कार्य करते हैं, संवाद कर सकते हैं। अनुरोधों और प्रतिक्रियाओं के आदान-प्रदान पर नज़र रखने के लिए एक सरल सत्र प्रबंधन योजना का उपयोग किया जाता है।
SharpFtpC2 एक बुनियादी सत्र प्रबंधन प्रणाली का उपयोग करता है। यद्यपि यह काफी प्रारंभिक है, यह संचार को सिंक्रनाइज़ और संबंधित रखने के उद्देश्य को पूरा करता है, जो रिमोट सिस्टम के बीच आगे-पीछे के लिए आवश्यक है।
यह ध्यान देने योग्य है कि इस प्रोजेक्ट को git, svn या इसी तरह के प्रोटोकॉल जैसे संस्करण नियंत्रण प्रणालियों का उपयोग करके आसानी से पोर्ट किया जा सकता है।
यदि आपको नेटवर्क संचार की बारीकियों में रुचि है, या बस C# और .NET Core के साथ प्रयोग करना चाहते हैं, तो SharpFtpC2 एक दिलचस्प शुरुआती बिंदु हो सकता है। एक पॉलिश किए गए रत्न की उम्मीद न करें, लेकिन हो सकता है, बस हो सकता है, आप इसके साथ छेड़छाड़ करके कुछ दिलचस्प सीख सकें।
SharpFtpC2 एक प्रयोगात्मक प्रोजेक्ट है जो दो रिमोट कंप्यूटरों के बीच संचार चैनल के रूप में FTP(S) का उपयोग करने की शैक्षिक खोज के लिए बनाया गया है। यह समझना महत्वपूर्ण है कि प्रोजेक्ट उन व्यक्तियों के लिए एक सीखने का संसाधन है जो नेटवर्क संचार, C#, एडवर्सरी सिमुलेशन, रेड टीम, मैलवेयर में रुचि रखते हैं। निर्माता के रूप में, मैं उपयोगकर्ताओं से अनुरोध करता हूं कि वे अतिरिक्त कार्यक्षमताओं के लिए अनुरोध न करें या इस प्रोजेक्ट का उपयोग किसी भी प्रकार के हथियारीकरण या दुर्भावनापूर्ण इरादे के लिए न करें। मूल इरादा शैक्षिक है, और उपयोगकर्ताओं से जिम्मेदारी और नैतिक रूप से सामग्री से जुड़ने की अपेक्षा की जाती है।
SharpFtpC2 का जन्म अनप्रोटेक्ट प्रोजेक्ट में योगदान देने की इच्छा से हुआ, विशेष रूप से इसके नेटवर्क एवेज़न श्रेणी में।
FTP को "टनल" के रूप में उपयोग करने का यह विचार गहराई तक फैला हुआ है। वास्तव में, यह 2005 के आसपास की पुरानी यादों को ताजा करता है, जब मैं अभी भी प्रोग्रामिंग की दुनिया में कदम रख रहा था। उस समय, मेरी मुलाकात एक उल्लेखनीय रचनात्मक फ्रांसीसी व्यक्ति से हुई, जो BlasterWar के उपनाम से जाना जाता था। उन्होंने BlasterX नामक एक प्रोजेक्ट की कल्पना की थी, जो समय के साथ खो गया है, लेकिन अपने युग के लिए काफी अग्रणी था।
BlasterWar ने अपने प्रोजेक्ट में पारंपरिक रिवर्स कनेक्शन के विकल्प प्रदान करने के लिए सरलता का उपयोग किया, जहां एजेंट को नियंत्रित या हैकिंग डिवाइस से वापस कनेक्शन स्थापित करने की आवश्यकता होती थी।
इसके बजाय, BlasterWar ने वैकल्पिक माध्यम के रूप में FTP (फ़ाइल ट्रांसफ़र प्रोटोकॉल) का उपयोग करने का विकल्प चुना और इसके चारों ओर एक व्यापक रिमोट एक्सेस टूल का निर्माण किया। टूल में स्क्रीन कैप्चर, कीलॉगिंग और सिस्टम मैनेजमेंट जैसी सुविधाएँ शामिल थीं, जो सभी FTP टनल के माध्यम से प्रेषित होती थीं। उस समय, FTP बहुत लोकप्रिय था और कई वेबसाइटें जनता को मुफ्त FTP सर्वर प्रदान करती थीं। इसने इसे रिवर्स या डायरेक्ट कनेक्शन का एक आदर्श विकल्प बना दिया, जिसमें पोर्ट फ़ॉर्वर्डिंग शामिल थी। इसके अलावा, इसने कमांड और कंट्रोल (C2) के लिए ऑब्फस्केशन की एक अतिरिक्त परत प्रदान की, क्योंकि हैकर की मशीन का IP पता सीधे उजागर नहीं होता था।
आज, FTP को टनल के रूप में उपयोग करना कोई नई अवधारणा नहीं है, क्योंकि कमांड और कंट्रोल (C2) फ्रेमवर्क के एक मुट्ठी भर ने इस प्रोटोकॉल को अपनाया है। हालांकि, FTP का इस तरह उपयोग जोखिमों से भरा हुआ है। विशेष रूप से, FTP का नेटवर्क पर सादे टेक्स्ट में क्रेडेंशियल ट्रांसमिशन, दोनों पक्षों के लिए इन क्रेडेंशियल्स के होने की आवश्यकता के साथ मिलकर, इसे कई हमलों के लिए संवेदनशील बनाता है। हालांकि FTP सर्वरों ने SSL/TLS एन्क्रिप्शन को एकीकृत करते हुए FTPS को तेजी से अपनाकर इन सुरक्षा मुद्दों को संबोधित करने में प्रगति की है, लेकिन यह अनुकूलन सभी अंतर्निहित जोखिमों के लिए रामबाण साबित नहीं हुआ है।
थोड़ी सी सरलता और मौजूदा प्रोटोकॉल से प्रेरणा लेकर, मौजूदा जोखिमों की एक महत्वपूर्ण संख्या से निपटना संभव है।
इस प्रोजेक्ट को कंपाइल करने के लिए, आपको दो घटकों की आवश्यकता है: Visual Studio और कंट्रोलर के लिए एक डिपेंडेंसी जिसका नाम CommandLineUtils है।
चूंकि यह प्रोजेक्ट .NET Core का उपयोग करता है, इसे बिना किसी कोड संशोधन के विभिन्न प्लेटफार्मों के लिए आसानी से कंपाइल किया जा सकता है। हालांकि, लक्ष्य प्लेटफ़ॉर्म के लिए विशिष्ट सुविधाओं को लागू करने की आवश्यकता हो सकती है।
इस प्रोजेक्ट का तुरंत परीक्षण शुरू करने के लिए, मैं stilliard/pure-ftpd इमेज के साथ Docker का उपयोग करने की सलाह देता हूं। यह इमेज कई विकल्पों का समर्थन करती है, जिससे आप आसानी से अपना FTP सर्वर जल्दी से स्थापित कर सकते हैं।
docker pull stilliard/pure-ftpd
docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST: 127.0.0.1" -e "ADDED_FLAGS=-E -A -X -x" -e FTP_USER_NAME=dark -e FTP_USER_PASS=toor -e FTP_USER_HOME=/home/dark stilliard/pure-ftpd
docker run -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST: 127.0.0.1" -e "ADDED_FLAGS=-E -A -X -x --tls=2" -e FTP_USER_NAME=dark -e FTP_USER_PASS=toor -e FTP_USER_HOME=/home/dark -e "TLS_CN=localhost" -e "TLS_ORG=maislaf" -e "TLS_C=FR" stilliard/pure-ftpd
बेझिझक सेटिंग्स को अपनी आवश्यकताओं के अनुसार अनुकूलित करें। हालांकि, मैं दृढ़ता से सलाह देता हूं कि इस टेस्ट FTP सर्वर को स्थानीय या सार्वजनिक नेटवर्क पर उजागर न करें। इस कंटेनर के एक्सपोज़र को केवल आपकी होस्ट मशीन तक सीमित रखना अधिक विवेकपूर्ण होगा।
ADDED_FLAGS विकल्प आपको pure-ftpd सर्वर को ठीक करने की अनुमति देता है। सभी फ्लैग्स के स्पष्टीकरण यहां पाए जा सकते हैं।
कुछ फ्लैग्स को C2 प्रोटोकॉल के काम करने में संशोधन की आवश्यकता हो सकती है। उदाहरण के लिए, यदि आप सभी फ़ाइलों को बनाए रखने के लिए -K विकल्प का उपयोग करते हैं, तो FTP के माध्यम से फ़ाइलों को हटाने की क्षमता अक्षम हो जाएगी। चूंकि वर्तमान C2 प्रोटोकॉल इस सुविधा का उपयोग करता है, आपको फ़ाइल का नाम बदलने या स्थानांतरित करने जैसे वैकल्पिक तरीकों पर विचार करने की आवश्यकता हो सकती है।
एजेंटों और C2 के बीच सभी संचारों की अखंडता और गोपनीयता सुनिश्चित करने के लिए, RSA और AES-GCM 256-बिट एल्गोरिदम दोनों का उपयोग करके संचार प्रोटोकॉल में एन्क्रिप्शन को सहजता से शामिल किया गया है। इस सुविधा का प्राथमिक उद्देश्य एक समझौता किए गए FTP सर्वर द्वारा दुर्भावनापूर्ण कमांड देने की संभावना को विफल करना है। एन्क्रिप्शन का उपयोग करके, एजेंट की सार्वजनिक कुंजी तक पहुंच के बिना कमांड इंजेक्शन असंभव हो जाता है। इसी तरह, C2 की सार्वजनिक कुंजी के बिना नकली एजेंट प्रतिक्रियाओं को इंजेक्ट करना संभव नहीं है।
अपने स्वयं के कुंजी जोड़े (एजेंट के लिए एक कुंजी जोड़ी और C2 के लिए एक) उत्पन्न करने की प्रक्रिया को आसान बनाने के लिए, मैंने RSAKeyHelper नामक एक तृतीय-पक्ष टूल शामिल किया है। हर बार जब आप एप्लिकेशन चलाते हैं, तो यह आपको ताजा जेनरेट किए गए सार्वजनिक और निजी कुंजी की एक जोड़ी प्रस्तुत करेगा, जिसे प्रोग्राम के भीतर उपयोग किया जा सकता है यदि आप एन्क्रिप्शन का उपयोग करने का विकल्प चुनते हैं।

यह सत्यापित करने के लिए कि सब कुछ उम्मीद के अनुसार काम करता है, मैंने उसी टूल में एक सुविधा भी शामिल की है जो आपको स्ट्रिंग एन्क्रिप्शन का परीक्षण करने की अनुमति देती है।

संस्करण "3.0 अंतिम" का रिलीज़ इस प्रोजेक्ट की परिणति को चिह्नित करता है। मैं कोई और सुविधाएँ नहीं जोड़ूंगा; इस PoC का उद्देश्य FTP(S) का उपयोग करके एक विश्वसनीय और सुरक्षित C2 बनाने का प्रदर्शन करना था। आपको अनुरूप कार्यक्षमताओं के साथ अपना स्वयं का संस्करण विकसित करने के लिए प्रोत्साहित किया जाता है। एक अभ्यास के रूप में, आप लंबी अवधि के कार्यों के दौरान एप्लिकेशन को हैंग होने से रोकने के लिए मल्टी-थ्रेडिंग टास्किंग को लागू करने पर विचार कर सकते हैं।
हालांकि, मैं संभावित बग या ऑप्टिमाइज़ेशन के अवसरों को संबोधित करने के संदर्भ में प्रोजेक्ट के लिए समर्थन प्रदान करना जारी रखूंगा।
(एजेंटों की सूची)

(सक्रिय(संदर्भ) एजेंट को कमांड निष्पादित करें)

(खतरनाक कार्रवाई उपयोगकर्ता-पुष्टि के साथ एजेंट कंसोल डीबग विंडो)
