
Web shell स्कैनर और एनालाइज़र।
वेब शेल विश्लेषक एक क्रॉस-प्लेटफॉर्म स्टैंड-अलोन बाइनरी है जो विशेष रूप से वेब शेल होने के संदेह वाली फ़ाइलों की पहचान, डिकोडिंग और टैगिंग के उद्देश्य से बनाई गई है। वेब शेल विश्लेषक, वेब शेल स्कैनर प्रोजेक्ट (http://github.com/tstillz/webshell-scan) का बड़ा भाई है, जो केवल रेगेक्स के माध्यम से फ़ाइलों को स्कैन करता है, बिना किसी डिकोडिंग या विशेषता विश्लेषण के।
स्कैनर के साथ प्रदान किए गए रेगेक्स और इसके अंतर्निहित डिकोडिंग रूटीन डिस्क पर प्रत्येक वेब शेल को खोजने की गारंटी नहीं देते हैं और कुछ गलत सकारात्मक परिणामों की पहचान कर सकते हैं। यह भी अनुशंसा की जाती है कि आप प्रोडक्शन सिस्टम पर चलाने से पहले विश्लेषक का परीक्षण करें और इसके प्रभाव का आकलन करें। विश्लेषक की कोई वारंटी नहीं है, अपने जोखिम पर उपयोग करें।
PHP, ASP/X वेब शेल को सपोर्ट करता है। JSP/X, CFM और अन्य प्रकारों पर काम चल रहा है।स्कैन की गई प्रत्येक फ़ाइल को PRE और/या POST क्रिया के माध्यम से चलाया जा सकता है:
PreDecodeActions फ़ंक्शन के पीछे का विचार किसी मिलान स्ट्रिंग या पैटर्न की पहचान करने, उसकी रॉ मैच सामग्री प्राप्त करने, परिभाषित डिकोडिंग/क्लीनअप चरणों को निष्पादित करने और अंतिम आउटपुट को पुनः-स्कैनिंग/प्रसंस्करण के लिए विश्लेषण इंजन को वापस भेजने के लिए रेगेक्स का उपयोग करना था। इसका एक बहुत ही सरल उदाहरण Base64 डिकोडिंग है। बेस64 एनकोडेड वेब शेल के विरुद्ध किसी भी डिटेक्शन लॉजिक की जांच करने के लिए, हमें पहले base64 की सभी परतों को हटाना होगा। ऐसा करने के लिए, हम निम्नलिखित PreDecodeAction का उपयोग कर सकते हैं:
{
Name: "PHP_Base64Decode",
Regex: *regexp.MustCompile(`(?i)(?:=|\s+)(base64_decode\('('?\"?[A-Za-z0-9+\/=]+'?\"?))`),
DataCapture: *regexp.MustCompile(`(?i)((?:'|")[A-Za-z0-9+\/=]+(?:'|"))`),
PreDecodeActions: []cm.Action{
{Function: cm.StringReplace, Arguments: []interface{}{"\"", "", -1}},
{Function: cm.StringReplace, Arguments: []interface{}{"'", "", -1}},
},
Functions: []cm.Base_Func{cm.DecodeBase64},
},
उपरोक्त ब्लॉक को देखते हुए, पहले हमारे पास फ़ंक्शन का नाम, मिलान के लिए उपयोग किया जाने वाला रेगेक्स, डेटा कैप्चर रेगेक्स (कभी-कभी आप कैप्चर करने बनाम मिलान करने के लिए समायोजित करना चाह सकते हैं) और PreDecodeActions हैं। इस मामले में, मिलान टेक्स्ट पर फ़ंक्शन cm.DecodeBase64 लागू करने से पहले, सिस्टम पहले निम्नलिखित आइटम " और ' को हटा देगा। PostDecodeActions इसके विपरीत काम करता है, जहां आउटपुट की जांच डिकोडिंग करने के बाद की जाती है। इस मॉडल का उपयोग करके, हम कई कस्टम डिकोडर बना सकते हैं जिनमें अनंत PRE/POST और डिकोडिंग फ़ंक्शन हों जो अधिकांश वेब शेल विश्लेषण आवश्यकताओं को संभाल सकें।
डिटेक्शन एक रेगेक्स है जिसके साथ एक नाम और विवरण होता है। इस मॉडल के पीछे का विचार डिटेक्शन को मॉड्यूलर और स्केलेबल बनाना था और वास्तविक डिटेक्शन के संदर्भ में रखना था। डिटेक्शन विशेषताओं के समान प्रारूप साझा करते हैं, सिवाय इसके कि विशेषताएं कोई डिटेक्शन उत्पन्न नहीं कर सकतीं, वे केवल एक मौजूदा डिटेक्शन में संदर्भ जोड़ सकती हैं। आइए नीचे दिए गए उदाहरण डिटेक्ट लॉजिक ब्लॉक को देखें:
{
Name: "Generic_Embedded_Executable",
Description: "Looks for magic bytes associated with a PE file",
Regex: *regexp.MustCompile(`(?i)(?:(?:0x)?4d5a)`),
},
रेगेक्स के आधार पर, हम देख सकते हैं कि यह मैजिक हेडर बाइट्स 4D 5A के आधार पर एक एम्बेडेड विंडोज PE फ़ाइल की तलाश कर रहा है। यदि मिल जाता है, तो इससे एक डिटेक्शन होगा और फ़ाइल के लिए एक JSON रिपोर्ट उत्पन्न होगी। वर्तमान में, डिटेक्शन फ़ाइल एक्सटेंशन के आधार पर या सभी फ़ाइल प्रकारों के लिए सामान्य रूप से लागू होते हैं। उदाहरण के लिए, PHP के लिए डिकोडिंग रूटीन cm.GlobalMap.Function_Php के अंतर्गत परिभाषित होते हैं और विशेषताओं के लिए टैग cm.GlobalMap.Tags_Php के अंतर्गत परिभाषित होते हैं। फ़ंक्शन cm.GlobalMap.Function_Generics और cm.GlobalMap.Tags_Generics के अंतर्गत टैग सभी वेब शेल एक्सटेंशन पर कैच-ऑल के रूप में लागू होते हैं।
विशेषता टैगिंग एक नई अवधारणा है जिसे मैंने बनाया है जो मौजूदा वेब शेल डिटेक्शन में "संदर्भ" जोड़ता है। विशेषताएं अकेले वर्तमान में अपने आप कोई डिटेक्शन उत्पन्न नहीं कर सकती हैं। पारंपरिक स्कैन इंजन में, एक स्कैनर केवल तभी अलर्ट करेगा जब कोई वेब शेल डिटेक्ट होता है, लेकिन वेब शेल की संभावित क्षमताओं (विशेषताओं) में बहुत कम या कोई अतिरिक्त संदर्भ प्रदान नहीं करेगा। विशेषता टैग डिटेक्शन लॉजिक के समान काम करते हैं, हालांकि वे केवल एक डिटेक्शन की पहचान होने के बाद दिखाई देते हैं और अपने आप डिटेक्शन उत्पन्न नहीं कर सकते। नीचे दिए गए उदाहरण लॉजिक को देखें:
cm.GlobalMap.Tags_Php = []cm.TagDef{
{
Name: "PHP_Database_Operations",
Description: "Looks for common PHP functions used for interacting with a database.",
Regex: *regexp.MustCompile(`(?i)(?:'mssql_connect\|mysql_exec\()`),
Attribute: true,
},
}
हम देखते हैं कि स्ट्रक्ट Tags_Php के अंतर्गत, हमने एक नया PHP टैग बनाया है। स्कैनिंग के दौरान जब कोई मिलान मिलता है, तो Attribute फ्लैग की जाँच की जाती है और यदि True पर सेट है, तो डिटेक्ट किए गए वेब शेल में टैग PHP_Database_Operations को उसकी JSON रिपोर्ट में आवृत्ति और मिलान टेक्स्ट ब्लॉक के साथ जोड़ा जाएगा, जैसा कि नीचे दिए गए उदाहरण आउटपुट में दिखाया गया है:
{
"filePath": "/testers/1.php",
"size": 66109,
"md5": "6793d8ebab93e5a0f91e5a331221f331",
"timestamps": {
"birth": "2019-02-03 02:02:22",
"created": "2020-07-29 02:50:15",
"modified": "2019-02-03 02:02:22",
"accessed": "2020-07-29 02:51:07"
},
"matches": {
"FilesMAn": 5,
"FilesMan": 29,
"cmd": 20,
"eval(": 4,
"exec(": 2,
"ipconfig": 1,
"netstat": 2,
"passthru(": 1,
"shell_exec(": 1
},
"decodes": {
"Generic_Base64Decode": 40,
"Generic_Multiline_Base64Decode": 165
},
"tags": {
"Generic_Embedding_Code_C": {
"bind(": 2,
"listen(": 2
},
"PHP_Banned_Function": {
"exec(": 3,
"get_current_user(": 1,
"getmyuid(": 1,
"link(": 7,
"listen(": 2,
"passthru(": 1,
"realpath(": 1,
"set_time_limit(": 1
},
"PHP_Database_Operations": {
"mysql_query(": 1
},
"PHP_Disk_Operations": {
"@chmod(": 1,
"@filegroup(": 4,
"@fileowner(": 4,
"@rename(": 2,
"fopen(": 7,
"fwrite(": 6
}
}
}
ये टैग न केवल यह परिभाषित करने में मदद करते हैं कि एक वेब शेल क्या कर सकता है, बल्कि यह IR सलाहकारों जैसी टीमों को लाइव रिस्पांस एंगेजमेंट करते समय एक पिवट पॉइंट प्रदान करते हैं कि आगे कहाँ देखना है।
कोई नहीं! बस अपने OS के लिए बाइनरी डाउनलोड करें, वह निर्देशिका प्रदान करें जिसे आप स्कैन करना चाहते हैं (अन्य तर्क वैकल्पिक हैं) और इसे चलने दें।
बिना किसी तर्क के wsa चलाने पर निम्नलिखित विकल्प दिखाई देते हैं: