
मैलवेयर डेवलपमेंट पर एक कार्यशाला
EDR के युग में, रेड टीम ऑपरेटर अब पूर्व-संकलित पेलोड का उपयोग करके बच नहीं सकते हैं। इस प्रकार, मैलवेयर विकास किसी भी ऑपरेटर के लिए एक महत्वपूर्ण कौशल बनता जा रहा है। maldev से शुरुआत करना कठिन लग सकता है, लेकिन वास्तव में यह बहुत आसान है। यह कार्यशाला आपको शुरुआत करने के लिए आवश्यक सब कुछ दिखाएगी!
इस रिपॉजिटरी में 'MalDev for Dummies' कार्यशाला के लिए स्लाइड्स और संबंधित अभ्यास शामिल हैं, जो Hack in Paris 2022 और X33fcon 2023 में आयोजित की गई/जाएगी। हालाँकि स्लाइड्स को 'व्यक्तिगत रूप से' प्रस्तुत करने के लिए डिज़ाइन किया गया था, सामग्री और अभ्यास यहाँ आपकी अपनी गति से पूरा करने के लिए उपलब्ध रहेंगे - सीखने की प्रक्रिया में कभी जल्दबाजी नहीं करनी चाहिए! इस रिपॉजिटरी में प्रश्नों और/या सुझावों के साथ Issues और pull requests का स्वागत है।
⚠ अस्वीकरण: मैलवेयर विकास एक कौशल है जिसका उपयोग अच्छे के लिए किया जा सकता है और किया जाना चाहिए, ताकि (आक्रामक) सुरक्षा के क्षेत्र को आगे बढ़ाया जा सके और हमारी रक्षा को तेज रखा जा सके। यदि आप कभी इस कौशल का उपयोग उन गतिविधियों को करने के लिए करते हैं जिनके लिए आपके पास अधिकार नहीं है, तो आप इस कार्यशाला के लक्षित दर्शकों से बड़े डमी हैं और आपको यहाँ से भाग जाना चाहिए।
एंटीवायरस (AV) और Enterprise Detection and Response (EDR) टूलिंग के लगातार परिपक्व होने के साथ, रेड टीम को वक्र से आगे रहने के लिए मजबूर किया जा रहा है। execute-assembly और डिस्क पर अपरिवर्तित पेलोड ड्रॉप करने के समय चले गए हैं - यदि आप चाहते हैं कि आपके एंगेजमेंट एक सप्ताह से अधिक समय तक चलें, तो आपको अपने पेलोड निर्माण और मैलवेयर विकास के खेल को बढ़ाना होगा। हालाँकि, इस क्षेत्र में शुरुआत करना कठिन हो सकता है, और सही संसाधन ढूँढना हमेशा आसान नहीं होता।
यह कार्यशाला इस क्षेत्र में शुरुआती लोगों के लिए है और आपको मैलवेयर डेवलपर के रूप में अपने पहले कदमों के माध्यम से मार्गदर्शन करेगी। इसका उद्देश्य मुख्य रूप से आक्रामक अभ्यासकर्ताओं के लिए है, लेकिन रक्षात्मक अभ्यासकर्ताओं का भी स्वागत है कि वे आएँ और अपने कौशल का विस्तार करें।
कार्यशाला के दौरान हम कुछ सिद्धांत पर चर्चा करेंगे, जिसके बाद हम आपको एक लैब वातावरण तैयार करेंगे। आपकी वर्तमान क्षमता और विषय के साथ सहजता के स्तर के आधार पर विभिन्न अभ्यास होंगे जिन्हें आप पूरा कर सकते हैं। हालाँकि, कार्यशाला का उद्देश्य सीखना है, और स्पष्ट रूप से सभी अभ्यासों को पूरा करना नहीं है। मैलवेयर विकास के लिए आप अपनी पसंदीदा प्रोग्रामिंग भाषा चुनने के लिए स्वतंत्र हैं, लेकिन कार्यशाला के दौरान समर्थन मुख्य रूप से C# और Nim प्रोग्रामिंग भाषाओं के लिए प्रदान किया जाता है।
कार्यशाला के दौरान, हम अपना स्वयं का मैलवेयर बनाने के लिए आवश्यक प्रमुख विषयों पर चर्चा करेंगे। इसमें शामिल है (लेकिन इन्हीं तक सीमित नहीं है):
मैलवेयर विकास शुरू करने के लिए, आपको एक डेव मशीन की आवश्यकता होगी ताकि आप अपने होस्ट मशीन पर चलने वाले किसी भी रक्षात्मक टूलिंग से परेशान न हों। मैं विकास के लिए विंडोज पसंद करता हूँ, लेकिन Linux या MacOS भी उतना ही अच्छा काम करेगा। अपनी पसंद का संपादक/IDE स्थापित करें (मैं C# को छोड़कर लगभग हर चीज़ के लिए VS Code का उपयोग करता हूँ, जिसके लिए मैं Visual Studio का उपयोग करता हूँ), और फिर अपनी पसंदीदा MalDev भाषा के लिए आवश्यक टूलचेन स्थापित करें:
Windows Defender को अक्षम करना या उपयुक्त अपवाद जोड़ना न भूलें, ताकि आपकी कड़ी मेहनत संगरोधित न हो! बाद में, हम AV जैसे रक्षात्मक नियंत्रणों के साथ एक अलग मशीन पर परीक्षण कर सकते हैं।
ℹ नोट: अक्सर, पैकेज मैनेजर जैसे apt या सॉफ़्टवेयर प्रबंधन उपकरण जैसे Chocolatey या Winget (अब अंतर्निहित!) का उपयोग निर्भरताओं की स्थापना और प्रबंधन को सुविधाजनक और दोहराने योग्य तरीके से स्वचालित करने के लिए किया जा सकता है। हालाँकि, ध्यान रखें कि पैकेज मैनेजरों में संस्करण वास्तविक चीज़ से कुछ संस्करण पीछे हो सकते हैं! नीचे एक उदाहरण कमांड है जो उल्लिखित सभी टूलिंग को एक साथ स्थापित करने के लिए है।
choco install -y nim choosenim go rust vscode visualstudio2019community dotnetfx
इस कार्यशाला के दौरान हम जिन भाषाओं पर चर्चा करेंगे वे संकलित भाषाएँ हैं, जिसका अर्थ है कि आपके स्रोत कोड को आपके चुने हुए प्रारूप के बाइनरी निष्पादन योग्य में अनुवाद करने के लिए एक कंपाइलर का उपयोग किया जाता है। संकलन की प्रक्रिया प्रति भाषा भिन्न होती है।
C# कोड (.cs फ़ाइलें) को सीधे (csc उपयोगिता के साथ) या Visual Studio के माध्यम से संकलित किया जा सकता है। इस रिपॉजिटरी में अधिकांश स्रोत कोड (बोनस अभ्यास 3 के समाधान को छोड़कर) को निम्नानुसार संकलित किया जा सकता है।
ℹ नोट: सुनिश्चित करें कि आप नीचे दिए गए कमांड को "Visual Studio Developer Command Prompt" में चलाते हैं ताकि यह जान सके कि
cscकहाँ ढूँढना है, यह अनुशंसा की जाती है कि आप अपने Visual Studio संस्करण के लिए "x64 Native Tools Command Prompt" का उपयोग करें।/unsafeफ़्लैग अधिकांश स्क्रिप्ट के लिए आवश्यक होगा जहाँ हम सीधे निम्न-स्तरीय कार्यक्षमता तक पहुँचते हैं।
csc filename.exe
आप /optimize फ़्लैग के साथ संकलन-समय अनुकूलन सक्षम कर सकते हैं। आप /target:winexe जोड़कर कंसोल विंडो छिपा सकते हैं, या /target:library के साथ DLL के रूप में संकलित कर सकते हैं (लेकिन सुनिश्चित करें कि आपकी कोड संरचना इसके लिए उपयुक्त है)।
Nim कोड (.nim फ़ाइलें) को nim c कमांड के साथ संकलित किया जाता है। इस रिपॉजिटरी में स्रोत कोड को निम्नानुसार संकलित किया जा सकता है।
nim c filename.nim
यदि आप अपने बिल्ड को आकार के लिए अनुकूलित करना चाहते हैं और डीबग जानकारी हटाना चाहते हैं (opsec के लिए बहुत बेहतर!), तो आप निम्न फ़्लैग जोड़ सकते हैं।
nim c -d:release -d:strip --opt:size filename.nim
वैकल्पिक रूप से आप --app:gui जोड़कर कंसोल विंडो छिपा सकते हैं।
Golang कोड (.go फ़ाइलें) को go build कमांड के साथ संकलित किया जाता है। इस रिपॉजिटरी में स्रोत कोड को निम्नानुसार संकलित किया जा सकता है।
GOOS=windows go build
यदि आप अपने बिल्ड को आकार के लिए अनुकूलित करना चाहते हैं और डीबग जानकारी हटाना चाहते हैं (opsec के लिए बहुत बेहतर!), तो आप निम्न फ़्लैग जोड़ सकते हैं।
GOOS=windows go build -ldflags "-s -w"
Rust कोड (.rs फ़ाइलें) को cargo कमांड के माध्यम से संकलित किया जाता है। Cargo का उपयोग आपकी निर्भरताओं को प्रबंधित करने और आपकी परियोजना बनाने के लिए किया जा सकता है। इस रिपॉजिटरी में स्रोत कोड को प्रोजेक्ट फ़ोल्डर में नेविगेट करके और निम्न कमांड चलाकर संकलित किया जा सकता है।
cargo build
यदि आप अपने बिल्ड को आकार के लिए अनुकूलित करना चाहते हैं और डीबग जानकारी हटाना चाहते हैं, तो आप निम्न फ़्लैग जोड़ सकते हैं। कुछ संकलन-समय opsec विकल्पों के लिए प्रत्येक Cargo.toml फ़ाइल में [profile.release] अनुभाग भी देखें।
cargo build --release
अधिकांश समाधान बिना निर्भरताओं के संकलित किए जा सकते हैं। यदि निर्भरताओं की आवश्यकता है, तो एक Visual Studio प्रोजेक्ट प्रदान किया जाता है जो उपयुक्त NuGet पैकेजों से लिंक होता है।
अधिकांश Nim प्रोग्राम विंडोज API के साथ इंटरफ़ेस करने के लिए "Winim" नामक लाइब्रेरी पर निर्भर करते हैं। आप लाइब्रेरी को Nimble पैकेज मैनेजर के साथ निम्नानुसार स्थापित कर सकते हैं (Nim स्थापित करने के बाद):
nimble install winim
इस रिपॉजिटरी के स्रोत कोड में कुछ निर्भरताओं का उपयोग किया गया है। आप उन्हें निम्नानुसार स्थापित कर सकते हैं (Go स्थापित करने के बाद):
go mod tidy
कुछ उदाहरण Windows API को कॉल करने के लिए windows-sys क्रेट पर निर्भर करते हैं। चूँकि हम Cargo का उपयोग कर रहे हैं, पैकेज स्वचालित रूप से प्रबंधित होंगे जब आप एक परीक्षण या रिलीज़ बिल्ड संकलित करते हैं।
कार्यशाला स्लाइड्स कुछ संसाधनों का संदर्भ देती हैं जिनका उपयोग आप शुरू करने के लिए कर सकते हैं। अतिरिक्त संसाधन, जैसे प्रासंगिक ब्लॉग या कोड स्निपेट, प्रत्येक अभ्यास के README.md फ़ाइलों में सूचीबद्ध हैं!