
The Web Exploit Detector एक Node.js अनुप्रयोग है जिसका उपयोग वेब होस्टिंग वातावरणों में संभावित संक्रमणों, दुर्भावनापूर्ण कोड और संदिग्ध फाइलों का पता लगाने के लिए किया जाता है।

वेब एक्सप्लॉइट डिटेक्टर एक Node.js एप्लिकेशन (और NPM मॉड्यूल) है जिसका उपयोग वेब होस्टिंग वातावरण में संभावित संक्रमण, दुर्भावनापूर्ण कोड और संदिग्ध फ़ाइलों का पता लगाने के लिए किया जाता है। यह एप्लिकेशन एक या अधिक वेबसाइटों की मेजबानी करने वाले वेब सर्वर पर चलाने के लिए है। एप्लिकेशन चलाने से संभावित रूप से संक्रमित फ़ाइलों की एक सूची उत्पन्न होगी, साथ ही संक्रमण का विवरण और उससे संबंधित ऑनलाइन संसाधनों के संदर्भ भी होंगे।
संस्करण 1.1.0 के अनुसार, एप्लिकेशन में निर्देशिका संरचना के स्नैपशॉट उत्पन्न करने और तुलना करने के लिए उपयोगिताएँ भी शामिल हैं, जिससे उपयोगकर्ता यह देख सकते हैं कि कोई फ़ाइल संशोधित, जोड़ी या हटाई गई है या नहीं।
एप्लिकेशन यहाँ GitHub पर होस्ट किया गया है ताकि दूसरे इससे लाभ उठा सकें, साथ ही दूसरों को अपने स्वयं के डिटेक्शन नियमों का योगदान करने की अनुमति मिल सके।
वेब एक्सप्लॉइट डिटेक्टर को स्थापित करने का सबसे सरल तरीका एक वैश्विक NPM मॉड्यूल के रूप में है: -
npm install -g web_exploit_detector
यदि आप Linux या किसी अन्य Unix-आधारित OS पर चला रहे हैं, तो आपको इस कमांड को रूट के रूप में चलाने की आवश्यकता हो सकती है (जैसे sudo npm install -g web_exploit_detector)।
मॉड्यूल को नियमित रूप से अपडेट किया जाना चाहिए ताकि यह सुनिश्चित हो सके कि सभी नवीनतम डिटेक्शन नियम मौजूद हैं। उपरोक्त कमांड चलाने से हमेशा नवीनतम स्थिर (परीक्षित) संस्करण डाउनलोड होगा। पहले से स्थापित संस्करण को अपडेट करने के लिए, बस निम्नलिखित चलाएँ: -
npm update -g web_exploit_detector
फिर से, आपको ऊपर बताए अनुसार sudo कमांड का उपयोग करना पड़ सकता है।
आप Git रिपॉजिटरी को क्लोन भी कर सकते हैं और सीधे स्क्रिप्ट चला सकते हैं: -
git clone https://github.com/polaris64/web_exploit_detectorcd web_exploit_detectornpm installयदि आपने वेब एक्सप्लॉइट डिटेक्टर को NPM मॉड्यूल के रूप में स्थापित किया है (ऊपर देखें), तो स्कैनर चलाना उतना ही सरल है जितना कि निम्नलिखित कमांड चलाना, जिसमें आपके वेबरूट (आपकी वेबसाइट फ़ाइलों का स्थान) का पथ पास करना होगा: -
wed-scanner --webroot=/var/www/html
अन्य कमांड-लाइन विकल्प उपलब्ध हैं, बस उनका वर्णन करने वाला सहायता संदेश देखने के लिए wed-scanner --help चलाएँ।
इस तरह स्क्रिप्ट चलाने से कंसोल पर मानव-पठनीय आउटपुट उत्पन्न होगा। यह बहुत उपयोगी है, उदाहरण के लिए cron के साथ स्क्रिप्ट चलाते समय, क्योंकि आउटपुट को स्क्रिप्ट चलने पर ई-मेल के रूप में भेजा जा सकता है।
स्क्रिप्ट बाद में प्रसंस्करण के लिए परिणामों को अधिक कंप्यूटर-अनुकूल JSON प्रारूप में लिखने का भी समर्थन करती है। इस आउटपुट को सक्षम करने के लिए, --output कमांड लाइन तर्क देखें।
बस node के माध्यम से स्क्रिप्ट को कॉल करें और अपने वेबरूट का पथ इस प्रकार पास करें: -
node index.js --webroot=/var/www/html
वेब एक्सप्लॉइट डिटेक्टर उन फ़ाइलों की पहचान करने में मदद करने के लिए दो उपयोगिताओं के साथ आता है जो अप्रत्याशित रूप से बदल सकती हैं। किसी साइट पर सफल हमले में आमतौर पर फ़ाइलों को हटाना, नई फ़ाइलें जोड़ना या मौजूदा फ़ाइलों को किसी तरह से बदलना शामिल होता है।
एक स्नैपशॉट (जैसा कि इन उपयोगिताओं द्वारा उपयोग किया जाता है) एक JSON फ़ाइल है जो स्नैपशॉट बनाए जाने के समय सभी फ़ाइलों के साथ-साथ उनकी सामग्री का विवरण सूचीबद्ध करती है। यदि, उदाहरण के लिए, सोमवार को एक स्नैपशॉट उत्पन्न किया गया था, और फिर मंगलवार को साइट पर हमला किया गया, तो बाद में इस स्नैपशॉट और वर्तमान साइट फ़ाइलों के बीच तुलना चलाने से पता चलेगा कि एक या अधिक फ़ाइलें जोड़ी गईं, हटाई गईं या बदलीं। इसलिए इन उपयोगिताओं का लक्ष्य इन स्नैपशॉट को बनाने और आवश्यकता होने पर तुलना करने की अनुमति देना है।
स्नैपशॉट प्रत्येक फ़ाइल पथ को फ़ाइल सामग्री के SHA-256 हैश के साथ संग्रहीत करता है। एक हैश, या डाइजेस्ट, एक संदेश का एक छोटा सारांश है, जो इस मामले में फ़ाइल की सामग्री है। यदि फ़ाइल सामग्री बदलती है, भले ही बहुत छोटे तरीके से, हैश पूरी तरह से अलग हो जाएगा। यह फ़ाइल सामग्री में किसी भी बदलाव का पता लगाने का एक अच्छा तरीका प्रदान करता है।
निम्नलिखित दो उपयोगिताएँ भी वेब एक्सप्लॉइट डिटेक्टर के भाग के रूप में स्थापित की गई हैं: -
wed-generate-snapshot: यह उपयोगिता "--webroot" द्वारा निर्दिष्ट निर्देशिका में सभी फ़ाइलों (पुनरावर्ती) के लिए एक स्नैपशॉट उत्पन्न करने की अनुमति देती है। स्नैपशॉट को "--output" विकल्प में निर्दिष्ट फ़ाइल में सहेजा जाएगा।wed-compare-snapshot: एक बार स्नैपशॉट उत्पन्न हो जाने के बाद, इसकी तुलना उसी निर्देशिका की वर्तमान सामग्री से की जा सकती है। जाँच करने के लिए स्नैपशॉट "--snapshot" विकल्प का उपयोग करके निर्दिष्ट किया जाता है। जाँच करने के लिए आधार निर्देशिका स्नैपशॉट के अंदर संग्रहीत होती है, लेकिन यदि स्नैपशॉट उत्पन्न होने के बाद से आधार निर्देशिका बदल गई है, तो --webroot विकल्प का उपयोग किया जा सकता है।स्नैपशॉट को आवश्यकतानुसार बार-बार उत्पन्न किया जा सकता है, लेकिन सामान्य नियम के रूप में, उन्हें तब उत्पन्न किया जाना चाहिए जब कोई साइट साफ़ (गैर-संक्रमित) स्थिति में हो और जब कोई वैध परिवर्तन किया गया हो। WordPress जैसी CMS-आधारित साइटों के लिए, नियमित रूप से स्नैपशॉट बनाए जाने चाहिए क्योंकि नए अपलोड के कारण नई स्थिति संग्रहीत स्नैपशॉट से बदल जाएगी। उन साइटों के लिए जिनकी फ़ाइलें कभी नहीं बदलनी चाहिए, एक एकल स्नैपशॉट उत्पन्न किया जा सकता है और फिर यह सुनिश्चित करने के लिए अनिश्चित काल तक उपयोग किया जा सकता है कि वास्तव में कुछ भी न बदले।
src/web-exploit-detector.js स्क्रिप्ट एक ES6 मॉड्यूल है जो नियमों के सेट को rules के रूप में निर्यात करता है, साथ ही कई फ़ंक्शन भी: -
executeTests(settings): पारित settings ऑब्जेक्ट के आधार पर एक्सप्लॉइट चेकर चलाता है। उपयोग के लिए, कृपया index.js स्क्रिप्ट देखें।formatResult(result): executeTests() से लौटाए गए सरणी से एक एकल परीक्षण result लेता है और उस परीक्षण के लिए आउटपुट के लिए तैयार परिणामों की एक स्ट्रिंग उत्पन्न करता है।getFileList(path): readDirRecursive() का उपयोग करके आधार path से फ़ाइलों की एक सरणी लौटाता है।processRulesOnFile(file, rules): सरणी rules के सभी नियमों को एक एकल file (स्ट्रिंग पथ) पर संसाधित करता है।readDirRecursive(path): पुनरावर्ती फ़ंक्शन जो एक वादा (Promise) लौटाता है जो path और उप-निर्देशिकाओं में सभी फ़ाइलों की एक सरणी के साथ हल किया जाएगा।src/cli.js स्क्रिप्ट इस मॉड्यूल के लिए एक सरल कमांड-लाइन इंटरफ़ेस (CLI) है जैसा कि wed-scanner स्क्रिप्ट द्वारा उपयोग किया जाता है, इसलिए इस स्क्रिप्ट को पढ़ने से यह पता चलता है कि इस मॉड्यूल का उपयोग कैसे किया जा सकता है।
प्रोजेक्ट "src" में ES6 मॉड्यूल को "lib" में सादे जावास्क्रिप्ट मॉड्यूल में संकलित करने के लिए Babel का उपयोग करता है। यदि आप Node.js का पुराना संस्करण चला रहे हैं, तो मॉड्यूल को इसके बजाय "lib" निर्देशिका से require() किया जा सकता है।
पैकेज में dev-निर्भरता के रूप में Babel और "build" और "watch:build" स्क्रिप्ट शामिल हैं। "build" स्क्रिप्ट (npm run build) चलाने पर, "./src" में ES6 मॉड्यूल संकलित हो जाएंगे और "./lib" में सहेजे जाएंगे, जहां वे CLI स्क्रिप्ट द्वारा शामिल किए जाते हैं।
"./lib" निर्देशिका रिपॉजिटरी में शामिल है ताकि कोई भी उपयोगकर्ता रिपॉजिटरी को क्लोन कर सके और dev-निर्भरताएँ स्थापित किए बिना और एप्लिकेशन बनाए बिना सीधे एप्लिकेशन चला सके।
कभी-कभी नियम, विशेष रूप से वे जो suspicion टैग से चिह्नित होते हैं, एक स्वच्छ फ़ाइल को संभावित एक्सप्लॉइट के रूप में पहचान लेंगे। इस वजह से, फ़ाइलों को किसी नियम के लिए जाँचे जाने से बाहर करने की अनुमति देने के लिए एक प्रणाली भी शामिल है।
wed-results-to-exceptions स्क्रिप्ट मुख्य डिटेक्टर स्क्रिप्ट ( --output विकल्प देखें) से एक आउटपुट फ़ाइल लेती है और आपको प्रत्येक विशिष्ट नियम के लिए बारी-बारी से प्रत्येक फ़ाइल को बाहर करने का विकल्प देती है। सभी बहिष्कृत फ़ाइलें wed-exceptions.json नामक फ़ाइल (उपयोगकर्ता की होम निर्देशिका में) में संग्रहीत की जाती हैं, जिसे मुख्य स्क्रिप्ट स्कैन चलाने से पहले पढ़ती है। यदि कोई फ़ाइल इस फ़ाइल में सूचीबद्ध है, तो इस फ़ाइल की जाँच करते समय सभी संलग्न नियम (आईडी द्वारा) छोड़ दिए जाएंगे।
उपयोग निर्देशों के लिए, बस wed-results-to-exceptions चलाएँ। आपके पास पहले --output विकल्प का उपयोग करके मुख्य डिटेक्टर के पिछले रन से एक मान्य आउटपुट JSON होना चाहिए।
सीधे Git रिपॉजिटरी के साथ काम करने वाले उपयोगकर्ताओं के लिए, प्रोजेक्ट रूट निर्देशिका में node results_to_exceptions.js चलाएँ।
एप्लिकेशन "नियमों" के संग्रह का उपयोग करके संचालित होता है जो एप्लिकेशन चलने पर लोड होते हैं। प्रत्येक नियम में एक आईडी, नाम, विवरण, URL की सूची, टैग, अप्रचलन ध्वज और सबसे महत्वपूर्ण परीक्षणों का एक सेट होता है।
प्रत्येक व्यक्तिगत परीक्षण निम्नलिखित में से एक होना चाहिए: -
निम्नलिखित परीक्षण प्रकार समर्थित हैं: -
जैसे-जैसे वेब-आधारित एक्सप्लॉइट लगातार विकसित हो रहे हैं और नए एक्सप्लॉइट बनाए जा रहे हैं, नियमों के सेट को भी अपडेट करने की आवश्यकता है। चूंकि मैं कई वेबसाइटों की मेजबानी करता हूं, मैं लगातार नए प्रकार के एक्सप्लॉइट देख रहा हूं, इसलिए जब भी संभव होगा, मैं नियमों के सेट में जोड़ता रहूंगा। मैं इस टूल को अपने सर्वर पर चलाता हूं, इसलिए निश्चित रूप से मैं चाहता हूं कि यह जितना संभव हो उतना कार्यात्मक हो!
यह मुझे उन कारणों तक लाता है जिनकी वजह से मैंने इस एप्लिकेशन को एक ओपन-सोर्स प्रोजेक्ट के रूप में उपलब्ध कराया है: पहला ताकि आप और अन्य लोग इससे लाभ उठा सकें, और दूसरा ताकि हम सभी डिटेक्शन नियमों का योगदान करने के लिए सहयोग कर सकें ताकि एप्लिकेशन हमेशा अद्यतित रहे।
यदि आपने कोई ऐसा एक्सप्लॉइट खोजा है जो इस टूल द्वारा पता नहीं लगाया गया है, तो कृपया या तो मुझसे संपर्क करके बताएं या इससे भी बेहतर, अपना स्वयं का नियम लिखें और इसे तीसरे पक्ष के नियम-सेट (rules/third-party/index.js) में जोड़ें, फिर मुझे एक पुल रिक्वेस्ट भेजें।
यदि आप नहीं जानते कि अपने स्वयं के नियम कैसे लिखें, तो चिंता न करें; सबसे महत्वपूर्ण बात यह है कि नियम जोड़ा जाए, इसलिए बेझिझक मुझे एक्सप्लॉइट के बारे में जितनी भी जानकारी दे सकते हैं, भेजें और मैं इसके लिए अपना स्वयं का नियम बनाने का प्रयास करूंगा।
नियमों को वर्गीकृत किया गया है, लेकिन अपना स्वयं का नियम जोड़ने का सबसे सरल तरीका इसे ऊपर बताए गए तीसरे पक्ष के नियम-सेट में जोड़ना है। नियम आईडी निम्नलिखित प्रारूप में लिखी जाती हैं: "author:type:sub-type(s):rule-id"। उदाहरण के लिए, मेरा अपना एक नियम "P64:php:cms:wordpress:wso_webshell" है। "P64" मैं हूं (लेखक), "php:cms:wordpress" समूहन है (WordPress नामक सामग्री प्रबंधन प्रणाली (CMS) के लिए एक PHP-विशिष्ट नियम) और "wso_webshell" विशिष्ट नियम आईडी है। अपने स्वयं के नियम लिखते समय, इस प्रारूप का पालन करने का प्रयास करें, और "P64" को अपने स्वयं के GitHub उपयोगकर्ता नाम या अन्य अद्वितीय आईडी से बदलें।
प्रोजेक्ट में जैस्मीन परीक्षणों का एक सेट है जिसे npm test का उपयोग करके चलाया जा सकता है। इसमें एक ESLint कॉन्फ़िगरेशन भी शामिल है, और ESLint को npm run lint का उपयोग करके चलाया जा सकता है।
डेवलप करते समय, npm run watch:test चलाकर स्रोत फ़ाइल बदलने पर भी परीक्षण चलाए जा सकते हैं। परीक्षण और ESLint चलाने के लिए, npm run watch:all स्क्रिप्ट का उपयोग किया जा सकता है।
कृपया ध्यान दें कि जब तक आपके पास पहले से जैस्मीन और/या nodemon स्थापित नहीं है, तब तक आपको यह सुनिश्चित करने के लिए गैर-उत्पादन मोड में npm install चलाना चाहिए कि dev-निर्भरताएँ स्थापित हैं।
1.1.0 में जोड़ी गई निर्देशिका स्नैपशॉट कार्यक्षमता का सुझाव देने और जल्द ही जोड़े जाने वाले नए नियमों का सुझाव देने के लिए Reddit उपयोगकर्ता mayupvoterandomly का धन्यवाद।
ISC लाइसेंस
कॉपीराइट (c) 2017, साइमन पुगनेट
इस सॉफ्टवेयर और संबंधित दस्तावेज़ फ़ाइलों (इसके बाद "सॉफ्टवेयर") की एक प्रति प्राप्त करने वाले किसी भी व्यक्ति को बिना किसी शुल्क के, बिना किसी प्रतिबंध के सॉफ्टवेयर का उपयोग, कॉपी, संशोधन, मर्ज, प्रकाशन, वितरण, उप-लाइसेंस और/या बेचने की अनुमति दी जाती है, बशर्ते कि उपरोक्त कॉपीराइट नोटिस और यह अनुमति नोटिस सॉफ्टवेयर की सभी प्रतियों या महत्वपूर्ण भागों में शामिल हों।
सॉफ्टवेयर "जैसा है" प्रदान किया जाता है, बिना किसी प्रकार की वारंटी के, स्पष्ट या निहित, जिसमें व्यापारिकता, किसी विशेष उद्देश्य के लिए उपयुक्तता और उल्लंघन की वारंटी शामिल हैं, लेकिन इन्हीं तक सीमित नहीं है। किसी भी स्थिति में लेखक या कॉपीराइट धारक किसी भी दावे, क्षति या अन्य दायित्व के लिए उत्तरदायी नहीं होंगे, चाहे वह अनुबंध के कार्य, अपकृत्य या अन्यथा से उत्पन्न हो, सॉफ्टवेयर के उपयोग या अन्य लेन-देन से संबंधित हो या उससे उत्पन्न हो।