
Async PICO Hub is a work-in-progress framework to extend Cobalt Strike with custom event monitoring and in-process Asynchronous BOFs
Async PICOs एक फ्रेमवर्क है जो Cobalt Strike Beacon प्रक्रिया के अंदर लंबे समय तक चलने वाले, इवेंट-संचालित Beacon Object Files को चलाने के लिए है। यह Crystal Palace PICOs को Beacon-पक्ष निष्पादन मॉडल के साथ जोड़कर asynchronous निष्पादन, कार्य ट्रैकिंग, सुचारू शटडाउन, और सुरक्षित asynchronous आउटपुट प्रदान करता है।
Cobalt Strike के native asynchronous BOFs के विपरीत, Async PICOs Beacon की प्रक्रिया में निष्पादित होते हैं और इवेंट होने पर आउटपुट सतह पर लाने के लिए Beacon को जगा सकते हैं।
Cobalt Strike के native asynchronous BOFs एक अलग समस्या हल करते हैं। Async PICOs लंबे समय तक चलने वाले, इवेंट-संचालित कार्यों के लिए हैं जो Beacon के अंदर निष्पादित होते हैं और परिणामों को तुरंत ऑपरेटर तक सुरक्षित रूप से वापस संचार कर सकते हैं।
कार्यान्वयन विवरण और डिज़ाइन तर्क के लिए, साथ वाली ब्लॉग पोस्ट देखें:
https://www.nccgroup.com/research/async-picos-and-custom-beacon-wakeups-in-cobalt-strike/
बिल्डिंग से पहले, निम्नलिखित घटक आवश्यक हैं:
इस रिपॉजिटरी की एक स्थानीय चेकआउट
Crystal Palace का एक निर्मित (built) संस्करण
MSVC और CMake समर्थन के साथ Visual Studio
Tradecraft Garden
रिपॉजिटरी क्लोन करें
git clone <repo-url>
cd async-pico-hub
Async PICOs PICO निर्माण के लिए Crystal Palace पर निर्भर हैं।
Crystal Palace का नवीनतम संपीड़ित रिलीज़ डाउनलोड करें और उसके निर्देशों के अनुसार इसे बिल्ड करें। बिल्ड होने के बाद, Crystal Palace बाइनरी को इसके अंदर रखें:
pico-tools/crystal-palace/
अपेक्षित लेआउट कुछ इस प्रकार दिखना चाहिए:
pico-tools/
└── crystal-palace/
├── src/
├── lib/
└── ...
Tradecraft Garden का नवीनतम रिलीज़ डाउनलोड करें और इसे इसमें रखें:
pico-tools/tradecraftgarden
अपेक्षित लेआउट कुछ इस प्रकार दिखना चाहिए:
pico-tools/
└── tradecraftgarden/
├── libtcg/
├── simple_pic/
└── ...
Async PICOs को बिल्ड करने में सक्षम होने के लिए libtcg और simple_pic उदाहरण को बिल्ड करना सुनिश्चित करें।
प्रोजेक्ट MSVC के साथ बिल्डिंग को सरल बनाने के लिए CMake का उपयोग करता है।
रिपॉजिटरी रूट से, फ़ोल्डर पर राइट क्लिक करें और चुनें:
Open with Visual Studio
यह CMake प्रोजेक्ट को लोड करता है और उपलब्ध बिल्ड कॉन्फ़िगरेशन को उजागर करता है।
निम्नलिखित बिल्ड कॉन्फ़िगरेशन उपलब्ध हैं:
x64 Debug
डिबगिंग के लिए PICOs और BOFs के स्थानीय निष्पादन योग्य संस्करण बनाता है।
इस कॉन्फ़िगरेशन का उपयोग करें जब व्यवहार को स्थानीय रूप से डिबग कर रहे हों या Visual Studio में कोड के माध्यम से कदम बढ़ा रहे हों।
x64 Release
PICOs और BOFs के अनुकूलित स्थानीय निष्पादन योग्य संस्करण बनाता है।
Beacon के बाहर रिलीज़ व्यवहार का परीक्षण करने के लिए इस कॉन्फ़िगरेशन का उपयोग करें।
x64 Release Objects
डिप्लॉयमेंट आर्टिफैक्ट बनाता है:
यह कॉन्फ़िगरेशन Cobalt Strike के लिए ऑब्जेक्ट तैयार करने हेतु उपयोग किया जाता है।
बिल्ड पूरा होने पर, उत्पन्न आर्टिफैक्ट यहाँ मिल सकते हैं:
build/x64-ReleaseObject/obj/
इस निर्देशिका में उपयोग के लिए तैयार संकलित PICOs और BOFs शामिल हैं।
Async PICOs के लिए आवश्यक है कि Beacon एक कस्टम sleepmask का उपयोग करे।
Async PICOs का उपयोग करने का प्रयास करने से पहले अपने malleable प्रोफ़ाइल में कस्टम sleepmask के लिए समर्थन सक्षम करें।
picos-cna/sleepmask.cnaस्क्रिप्टasync-sleepmaskलोड करती है, जो asynchronous आउटपुट और Beacon वेक समन्वय का समर्थन करने के लिए एक न्यूनतम संदर्भ कार्यान्वयन है।यह sleepmask जानबूझकर सरल है और इसमें सीमाएँ अनुभाग में वर्णित सीमाएँ शामिल हैं। इसे फ्रेमवर्क प्रदर्शित करने और परीक्षण को सरल बनाने के लिए प्रदान किया गया है, न कि एक पूर्ण उत्पादन-तैयार घटक के रूप में।
यदि आपके पास पहले से OPSEC तकनीकों, जैसे स्टैक हेरफेर या अन्य, के साथ एक कस्टम sleepmask है, तो अपने मौजूदा कार्यान्वयन में Async PICO समर्थन को एकीकृत करने के लिए अपने मौजूदा sleepmask को Async sleepmask बनाना देखें।
x64 Release Objects कॉन्फ़िगरेशन के साथ प्रोजेक्ट बिल्ड करने के बाद, picos.cna और sleepmask.cna Aggressor स्क्रिप्ट को Cobalt Strike में लोड करें:
Script Manager → Load → picos-cna/picos.cna
Script Manager → Load → picos-cna/sleepmask.cna
लोड होने के बाद, Async PICOs को picos कमांड के माध्यम से प्रबंधित किया जा सकता है।
PICO प्रारंभ करने के लिए:
picos start [path to pico] [arguments]
उदाहरण के लिए:
picos start C:\temp\MonitorTGT.pico
या तर्कों के साथ:
picos start C:\temp\MonitorTGT.pico DOMAIN\serviceaccount
चल रहे Async PICOs देखने के लिए:
picos
यह वर्तमान में चल रहे कार्यों और उनके पहचानकर्ताओं को प्रदर्शित करता है।
Async PICO रोकने के लिए:
picos stop [pico id]
उदाहरण के लिए:
picos stop 3
PICO को एक रोकने का संकेत मिलता है और सफाई करने के बाद सुचारू रूप से बाहर निकलता है।
अतिरिक्त उपयोग जानकारी Cobalt Strike के अंदर ही picos कमांड के लिए अंतर्निहित सहायता मेनू के माध्यम से उपलब्ध है।
विवरण के लिए docs/writing_custom_async_pico.md देखें।
विवरण के लिए docs/modifying_existing_sleepmask.md देखें।
सार्वजनिक कार्यान्वयन को जानबूझकर सरल रखा गया है, बिना उन्नत evasive तकनीकों के। इसे बिना बदलाव के तैनात करने के बजाय अनुकूलित करने के लिए एक आधार के रूप में अभिप्रेत है।
Async PICOs को CreateThread का उपयोग करके लॉन्च किया जाता है। यह निष्पादन मॉडल को सरल और तर्क करने में आसान रखता है, लेकिन यह एक डिटेक्शन सतह भी पेश करता है। सार्वजनिक कार्यान्वयन में, थ्रेड उस मेमोरी से निष्पादन शुरू करता है जो मॉड्यूल इमेज द्वारा समर्थित नहीं है, जो थ्रेड प्रारंभ पते का निरीक्षण करने वाले उत्पादों या ह्यूरिस्टिक्स द्वारा पता लगाने योग्य हो सकता है।
उपयोगकर्ताओं को मूल्यांकन करना चाहिए कि क्या वैकल्पिक थ्रेड निर्माण या निष्पादन रणनीतियाँ उनके वातावरण के लिए अधिक उपयुक्त हैं।
फ्रेमवर्क asynchronous आउटपुट को Beacon तक वापस पहुँचाने और वेक इवेंट्स का समन्वय करने के लिए एक संशोधित sleepmask पर निर्भर करता है। यहाँ शामिल कार्यान्वयन जानबूझकर न्यूनतम है और परिचालन उपयोग से पहले इसकी समीक्षा की जानी चाहिए।
Sleepmask निष्पादन मॉडल का हिस्सा है, न कि केवल एक सुविधा परत। आउटपुट को कतारबद्ध, निकालने, या संकेत देने के तरीके में किसी भी बदलाव का सावधानीपूर्वक मूल्यांकन किया जाना चाहिए ताकि concurrency समस्याएँ या Beacon आंतरिक के साथ असमर्थित इंटरैक्शन पेश न हों।
सार्वजनिक कार्यान्वयन के साथ कई व्यावहारिक सीमाएँ आती हैं जिन्हें इसके उपयोग से पहले समझा जाना चाहिए।
Crystal Palace PICOs के लिए global variables का उपयोग करना संभव बनाता है, लेकिन सार्वजनिक कार्यान्वयन global state संग्रहीत करने के लिए एक सरल साझा भंडारण मॉडल का उपयोग करता है। परिणामस्वरूप, global variables प्रति थ्रेड पृथक नहीं हैं।
व्यवहार में, इसका मतलब है कि कई Async PICOs को एक साथ चलाने पर अतिरिक्त सावधानी की आवश्यकता हो सकती है जब वे globals पर निर्भर हों।
Async PICOs asynchronous आउटपुट और Beacon वेक समन्वय के लिए एक संशोधित sleepmask पर निर्भर हैं। इसलिए फ्रेमवर्क पूरी तरह से स्व-निहित नहीं है और इसे drop-in BOF के रूप में नहीं माना जा सकता।
रिपॉजिटरी एक तैयार उत्पादन-तैयार घटक प्रदान करने के बजाय एक फ्रेमवर्क और कार्यान्वयन दृष्टिकोण प्रदर्शित करने के लिए डिज़ाइन की गई है। शामिल उदाहरणों को विस्तारित, संशोधित और व्यक्तिगत उपयोग मामलों के अनुसार अनुकूलित करने का अभिप्रेत है।