
एक मशीन लर्निंग टूल जो मैलवेयर विश्लेषण के लिए उनकी प्रासंगिकता के आधार पर स्ट्रिंग्स को रैंक करता है।
StringSifter एक मशीन लर्निंग उपकरण है जो मैलवेयर विश्लेषण के लिए उनकी प्रासंगिकता के आधार पर स्ट्रिंग्स को स्वचालित रूप से रैंक करता है।
StringSifter के लिए Python संस्करण 3.9 या नया आवश्यक है। कोड प्राप्त करने, यूनिट परीक्षण चलाने और उपकरण का उपयोग करने के लिए निम्नलिखित कमांड चलाएँ:
pip install stringsifter
विकास के लिए, poetry का उपयोग करें:
git clone https://github.com/mandiant/stringsifter.git
cd stringsifter
poetry install --with dev
StringSifter स्थापना निर्देशिका से यूनिट परीक्षण चलाने के लिए:
poetry run tests -v
pip install कमांड आपके python वातावरण में दो चलाने योग्य स्क्रिप्ट flarestrings और rank_strings स्थापित करता है। स्रोत से विकास करते समय, pipenv run flarestrings और pipenv run rank_strings का उपयोग करें।
flarestrings GNU binutils के strings की सुविधाओं की नकल करता है, और rank_strings पाइप किए गए इनपुट को स्वीकार करता है, उदाहरण के लिए:
flarestrings <my_sample> | rank_strings
rank_strings कई कमांड लाइन तर्कों का समर्थन करता है। स्थितीय तर्क input_strings रैंक करने के लिए स्ट्रिंग्स की एक फ़ाइल निर्दिष्ट करता है। वैकल्पिक तर्क निम्नलिखित हैं:
रैंक की गई स्ट्रिंग्स मानक आउटपुट पर लिखी जाती हैं, जब तक कि --batch विकल्प निर्दिष्ट न किया जाए, जिससे रैंक किए गए आउटपुट <input_file>.ranked_strings नामक फ़ाइलों में लिखे जाते हैं।
flarestrings विकल्प -n (या --min-len) का समर्थन करता है, जो डिफ़ॉल्ट 4 के बजाय कम से कम min-len वर्णों की लंबाई वाले वर्णों के अनुक्रम को प्रिंट करता है। उदाहरण के लिए:
flarestrings -n 8 <my_sample> | rank_strings
केवल लंबाई 8 या उससे अधिक की स्ट्रिंग्स को प्रिंट और रैंक करेगा।
docker build -t stringsifter -f docker/Dockerfile .
flarestrings या rank_strings तर्क के साथ कंटेनर चलाएँ ताकि संबंधित कमांड का उपयोग किया जा सके। कंटेनराइज़्ड कमांड पाइपलाइनों में उपयोग किए जा सकते हैं:cat <my_sample> | docker run -i stringsifter flarestrings | docker run -i stringsifter rank_strings
-v फ्लैग का उपयोग करें:docker run -v <my_malware>:/samples -it stringsifter
जहाँ <my_malware> में विश्लेषण के लिए नमूने होते हैं, उदाहरण के लिए:
docker run -v $HOME/malware/binaries:/samples -it stringsifter
flarestrings /samples/<my_sample> | rank_strings <options>
सभी कमांड लाइन तर्क कंटेनराइज़्ड स्क्रिप्ट में समर्थित हैं।
StringSifter को स्ट्रिंग्स की किसी भी सूची पर लागू किया जा सकता है, जो इसे वैकल्पिक खुफिया-संग्रह स्रोतों जैसे लाइव मेमोरी डंप, सैंडबॉक्स रन, या ऐसे बाइनरीज़ से अंतर्दृष्टि प्राप्त करने के इच्छुक अभ्यासकर्ताओं के लिए उपयोगी बनाता है जिनमें अस्पष्ट (obfuscated) स्ट्रिंग्स होती हैं। उदाहरण के लिए, FireEye Labs Obfuscated Strings Solver (FLOSS) Strings की तरह ही प्रिंट करने योग्य स्ट्रिंग्स निकालता है, लेकिन अतिरिक्त रूप से उन अस्पष्ट स्ट्रिंग्स को भी प्रकट करता है जो एन्कोडेड, पैक्ड, या स्टैक पर मैन्युअल रूप से निर्मित हैं। इसे Strings के इन-लाइन प्रतिस्थापन के रूप में उपयोग किया जा सकता है, जिसका अर्थ है कि StringSifter को निम्नलिखित कमांड का उपयोग करके FLOSS आउटपुट पर समान रूप से लागू किया जा सकता है:
$PY2_VENV/bin/floss –q <options> <my_sample> | rank_strings <options>
नोट्स:
–q तर्क केवल निकाली गई स्ट्रिंग्स दिखाने के लिए हेडर और फ़ॉर्मेटिंग को दबा देता है। अतिरिक्त FLOSS विकल्पों के बारे में अधिक जानने के लिए, कृपया इसके Usage Docs देखें।floss या rank_strings में से कम से कम एक में python वर्चुअल वातावरण का संदर्भ देने वाला एक सापेक्ष पथ शामिल होना चाहिए।strings चलाने पर नोट्सयह वितरण विभिन्न प्लेटफार्मों पर अनुमानित आउटपुट सुनिश्चित करने के लिए flarestrings प्रोग्राम शामिल करता है। यदि आप अपने सिस्टम पर स्थापित strings को चलाना चुनते हैं, तो ध्यान दें कि इसके विकल्प संस्करणों और प्लेटफार्मों के बीच सुसंगत नहीं हैं:
अधिकांश Linux वितरण GNU Binutils से strings प्रोग्राम शामिल करते हैं। "वाइड" और "नैरो" दोनों स्ट्रिंग्स निकालने के लिए प्रोग्राम को दो बार चलाना होगा, आउटपुट फ़ाइल में पाइप करते हुए:
strings <my_sample> > strs.txt # narrow strings
strings -el <my_sample> >> strs.txt # wide strings. note the ">>"
MacOS के साथ पैकेज किए गए BSD strings के कुछ संस्करण वाइड स्ट्रिंग्स का समर्थन नहीं करते हैं। यह भी ध्यान दें कि पूरी फ़ाइल को स्कैन करने के लिए strings का -a विकल्प डिफ़ॉल्ट कॉन्फ़िगरेशन में अक्षम हो सकता है। -a के बिना सूचनात्मक स्ट्रिंग्स खो सकती हैं। हम वाइड वर्णों का समर्थन करने वाला strings संस्करण प्राप्त करने के लिए Homebrew या MacPorts के माध्यम से GNU Binutils स्थापित करने की अनुशंसा करते हैं। strings के सही संस्करण को लागू करने के लिए सावधानी बरतें।
strings Windows पर डिफ़ॉल्ट रूप से स्थापित नहीं है। हम एक कार्यशील strings प्राप्त करने के लिए Windows Sysinternals, Cygwin, या Malcode Analyst Pack स्थापित करने की अनुशंसा करते हैं।
StringSifter का यह संस्करण पहले EMBER डेटासेट से जुड़े नमूना मैलवेयर बाइनरीज़ के Strings आउटपुट का उपयोग करके प्रशिक्षित किया गया था। क्रमिक लेबल कमजोर पर्यवेक्षण प्रक्रियाओं का उपयोग करके उत्पन्न किए गए थे, और पर्यवेक्षित शिक्षण Gradient Boosted Decision Trees द्वारा लर्निंग-टू-रैंक उद्देश्य फ़ंक्शन के साथ किया जाता है। आगे के तकनीकी विवरणों के लिए Quick Links देखें। कृपया ध्यान दें कि न तो लेबल किया गया डेटा और न ही प्रशिक्षण कोड वर्तमान में उपलब्ध है, हालाँकि हम भविष्य के रिलीज़ में इस दृष्टिकोण पर पुनर्विचार कर सकते हैं।
हम बग्स और फीचर अनुरोध पोस्ट करने के लिए GitHub Issues का उपयोग करते हैं।
flarestrings उत्कृष्ट उपकरण FLOSS से व्युत्पन्न है।| विकल्प | अर्थ |
|---|
| --scores (-s) | आउटपुट में रैंक स्कोर शामिल करें |
| --limit (-l) | आउटपुट को शीर्ष limit रैंक की गई स्ट्रिंग्स तक सीमित करें |
| --min-score (-m) | आउटपुट को उन स्ट्रिंग्स तक सीमित करें जिनका स्कोर >= min-score है |
| --batch (-b) | बैच प्रोसेसिंग के लिए strings आउटपुट का एक फ़ोल्डर निर्दिष्ट करें |