
मेल सुरक्षा और फ़िल्टरिंग समाधानों के लिए एक परीक्षण ढाँचा।
मेल सुरक्षा और फ़िल्टरिंग समाधानों के लिए एक परीक्षण ढाँचा।
महत्वपूर्ण: इसके साथ कुछ भी बुरा न करें! क्लाउड या अन्य होस्ट किए गए समाधानों के परीक्षण हमेशा परीक्षण किए गए प्रदाता द्वारा अनुमोदित होने चाहिए। केवल अपने स्वयं के परीक्षण खातों का उपयोग करें और परीक्षण मेलों के भार से किसी को परेशान न करें।
मेल सुरक्षा परीक्षण ढाँचा Python >=3.5 के साथ काम करता है। बस इस रिपॉजिटरी को खींचें और आगे बढ़ें। कोई अतिरिक्त निर्भरता की आवश्यकता नहीं है।
स्क्रिप्ट mail-tester.py परीक्षण चलाती है। सहायता संदेश ./mail-tester.py --help से पढ़ें और स्क्रिप्ट की क्षमताओं और उपयोग का अवलोकन प्राप्त करने के लिए ./mail-tester.py -l से परीक्षण और एवेज़न मॉड्यूल की सूची देखें। कुछ संकेत:
--smtp-server और --to दिए जाने चाहिए।-- के कॉन्फ़िगरेशन फ़ाइलों में भी संग्रहीत किए जा सकते हैं। इन कॉन्फ़िगरेशन फ़ाइलों का उपयोग ./mail-tester.py @tester.conf (कॉन्फ़िगरेशन tester.conf में निहित) को कॉल करके किया जा सकता है।--to के साथ कई प्राप्तकर्ताओं को कॉन्फ़िगर किया जा सकता है।--auto-delay का उपयोग करें। इसे --delay-step, --delay-max और --delay से ठीक-ठीक समायोजित किया जा सकता है।--spam-folder और --malware-folder पैरामीटर से कॉन्फ़िगर करें। नमूने इस रिपॉजिटरी में शामिल नहीं हैं (और नहीं होंगे)। मैलवेयर प्राप्त करने के अच्छे स्थान हैं theZoo, Das Malwerk या अन्य संग्रह। स्पैम को सीधे आपके स्पैम फ़ोल्डर से निर्यात किया जा सकता है, लेकिन यह EML प्रारूप में होना चाहिए।--blacklist पैरामीटर से आपूर्ति की जा सकती है और प्रेषक पतों के रूप में उपयोग किया जाता है।--evasion content-disposition से सक्षम किया जा सकता है। इनका उपयोग अतीत में AV/सैंडबॉक्सिंग समाधानों को भ्रमित करने और उन्हें दुर्भावनापूर्ण मेल पास करने देने के लिए किया जाता था।--log के साथ परीक्षण परिणामों को लॉग करना न भूलें। मेल फ़िल्टरिंग प्रदाता अक्सर SMTP संवाद में मेल अस्वीकार करते हैं, जो उत्पन्न लॉग में दिखाई देता है।--output के साथ एक निर्देशिका में सादे फ़ाइलों के रूप में, MBox (--mbox) या MailDir (--maildir) प्रारूप में डंप किया जा सकता है। यह बिना कोई मेल भेजे मेल उपयोगकर्ता एजेंटों का परीक्षण करने, उत्पन्न परीक्षण मामलों का दस्तावेजीकरण या समीक्षा करने के लिए उपयोगी है।अपने स्वयं के परीक्षणों को tests/ निर्देशिका में मौजूदा या नवनिर्मित Python फ़ाइलों में से किसी एक में एक वर्ग के साथ कार्यान्वित किया जा सकता है। वर्ग इस प्रोजेक्ट के मॉड्यूल tests.base में स्थित MailTestBase का उपवर्ग होना चाहिए। नवनिर्मित परीक्षण स्वचालित रूप से खोजे जाते हैं जब क्लास वेरिएबल active को True पर सेट किया जाता है। इसके अलावा (यदि आप परीक्षणों को मुख्य रिपॉजिटरी में योगदान देने की योजना बनाते हैं), तो क्लास वेरिएबल्स identifier, name और description को उपयुक्त रूप से सेट किया जाना चाहिए।
अधिरोहित करने के लिए अभिप्रेत विधियों या क्लास वेरिएबल्स के साथ निम्नलिखित आधार वर्ग मौजूद हैं:
MailTestBase: जेनेरिक परीक्षणों के लिए परीक्षण वर्ग।
generateTestCases(): परीक्षण संदेश प्रस्तुत करता है। इन्हें मान्य मेल संदेश सुनिश्चित करने के लिए Python email.mime.* पैकेजों से MIME* वर्गों या email.message से Message वर्ग के साथ उत्पन्न किया जाना चाहिए।active: बूलियन मान कि परीक्षण सक्रिय होना चाहिए या नहीं।identifier: परीक्षण का लघु पहचानकर्ता। इसका उपयोग पैरामीटर में परीक्षणों को सक्षम या अक्षम करने के लिए किया जाता है।name: परीक्षण का लघु शीर्षक।description: लंबा परीक्षण विवरण, लगभग 100 वर्णों में फिट होना चाहिए।delivery_sender और delivery_recipient: बूलियन मान, डिफ़ॉल्ट False। सामान्यतः, प्रेषक और प्राप्तकर्ता संदेश में सेट किए जाते हैं और Python SMTP मॉड्यूल उन्हें वहाँ से ले लेता है। कभी-कभी उन्हें SMTP लाइब्रेरी में स्पष्ट रूप से सेट करना वांछनीय होता है, जिसे इन मानों को पर सेट करके कॉन्फ़िगर किया जा सकता है।प्राप्त इनबॉक्स में परीक्षणों को पहचानने में सक्षम होने के लिए उत्पन्न संदेशों के विषय निर्धारित करने की अत्यधिक अनुशंसा की जाती है।
एवेज़न वर्ग मेल सुरक्षा समाधानों द्वारा विशेष मेल गुणों की पहचान से बचने की तकनीकों को लागू करते हैं। वर्तमान में, एक एवेज़न तकनीक लागू की गई है जो जानबूझकर टूटे हुए Content-Disposition हेडर के माध्यम से ऐसे समाधानों से अटैचमेंट छिपाने का प्रयास करती है।
एवेज़न एक फैक्ट्री क्लास पैटर्न द्वारा कार्यान्वित किए जाते हैं। DeliveryBase वर्ग BaseEvasionFactory वर्ग से व्युत्पन्न एक फैक्ट्री वर्ग को तुरंत (instantiate) करता है। फैक्ट्री कंस्ट्रक्टर को एक फ़्लैग प्राप्त होता है जो इंगित करता है कि एवेज़न सक्रिय है या नहीं। फिर एवेज़न फैक्ट्री इंस्टेंस परीक्षण वर्ग को पास किया जाता है और इसके evasions विशेषता में संग्रहीत किया जाता है जिसमें एवेज़न पहचानकर्ताओं को कुंजी के रूप में रखने वाला एक डिक्ट होता है। परीक्षण के अंदर, एक एवेज़न वर्ग (EvasionBase पर आधारित) को getEvasionGenerator() से तुरंत किया जाता है। कंस्ट्रक्टर पैरामीटर प्रति एवेज़न तकनीक व्यक्तिगत रूप से परिभाषित होते हैं।
एवेज़न लागू करने के लिए निम्नलिखित आधार वर्गों का उपयोग किया जाता है:
BaseEvasionFactory: एवेज़न फैक्ट्रीज़ इस वर्ग पर आधारित होनी चाहिए। सामान्यतः, केवल निम्नलिखित क्लास वेरिएबल्स सेट किए जाने चाहिए:
active: यदि एवेज़न सक्रिय होना चाहिए तो True पर सेट करें।identifier: परीक्षण कॉन्फ़िगरेशन में इसे सक्षम करने के लिए उपयोग किए जाने वाले एवेज़न मॉड्यूल का लघु पहचानकर्ता।name: एवेज़न तकनीक का लघु शीर्षक।description: एवेज़न तकनीक का लंबा विवरण। लगभग 100 वर्णों में फिट होना चाहिए।generator_evasion: एवेज़न वर्ग जो तुरंत किया जाता है यदि एवेज़न सक्षम है।generator_default: एवेज़न वर्ग जो तुरंत किया जाता है यदि एवेज़न अक्षम है।BaseEvasion: एवेज़न के कार्यान्वयन इस आधार वर्ग का उपवर्ग होना चाहिए। निम्नलिखित विधि को अधिरोहित किया जाना चाहिए:
__init__(): वर्ग को आधार संदेश या अटैचमेंट के साथ तुरंत करना चाहिए जिसे एवेज़न तकनीकों से हेरफेर किया जाना चाहिए।generate(): कंस्ट्रक्टर को पारित वस्तु पर एवेज़न तकनीक लागू करें और इसे (विवरण, एवेज़न लागू वस्तु) टुपल के रूप में कॉलर को प्रस्तुत करें।सामान्यतः, एवेज़न वर्ग को सभी एवेज़न वेरिएंट प्रस्तुत करने चाहिए और डिफ़ॉल्ट को समर्पित परीक्षण मामले के रूप में पारित करना चाहिए, जबकि डिफ़ॉल्ट एवेज़न वर्ग केवल दी गई वस्तु को पारित करते हैं या आवश्यक डेटा संरचनाएं, जैसे हेडर, बनाते हैं।
एवेज़न तकनीकों का उपयोग परीक्षण मामलों में किया जाता है जहाँ वे लागू होती हैं। उदाहरण के लिए, यदि कोई एवेज़न तकनीक मेल या अटैचमेंट के हेडर में हेरफेर करती है, तो निम्नलिखित चरणों को लागू किया जाना चाहिए:
self.evasions से एवेज़न फैक्ट्री इंस्टेंस का उपयोग करके उपयुक्त एवेज़न वर्ग को तुरंत करें, उदा.: evasion_items = self.evasions["evasion_identifier"].getEvasionGenerator(message)for evasion_item in evasion_items:
yield evasion_item
कंटेंट डिस्पोज़िशन एवेज़न तकनीक पहले से ही ढाँचे में लागू है और इसका उपयोग सभी परीक्षण मामलों के लिए किया जाना चाहिए जो दुर्भावनापूर्ण अटैचमेंट की पहचान को लक्षित करते हैं। कंस्ट्रक्टर को एक अटैचमेंट और इच्छित फ़ाइल नाम प्राप्त होता है। फिर एवेज़न वर्ग (एवेज़न नाम, लागू एवेज़न तकनीक के साथ अटैचमेंट) टुपल्स प्रस्तुत करता है जिसे सीधे परीक्षणों की generateAttachments() विधि द्वारा प्रस्तुत किया जा सकता है।
finalizeMessage(msg): डिफ़ॉल्ट रूप से, आधार परीक्षण वर्ग From और To हेडर को तदनुसार सेट करता है। यदि परीक्षण मामले के लिए आवश्यक हो तो इस व्यवहार को अधिरोहित किया जा सकता है।MailAttachmentTestBase: अटैचमेंट परीक्षण मामलों के लिए परीक्षण वर्ग। यह एक विषय और एक टेक्स्ट भाग के साथ एक पूर्ण मान्य मेल उत्पन्न करता है और उसमें परीक्षण मामला संलग्न करता है। MailTestBase से व्युत्पन्न, इसलिए इसके तरीके/चर यहाँ भी अधिरोहित किए जा सकते हैं।
generateAttachments(): परीक्षण मामलों को (विवरण, अटैचमेंट) टुपल्स के रूप में प्रस्तुत करता है।subject: विषय सेट करता है। प्लेसहोल्डर {} को generateAttachments() द्वारा प्रस्तुत विवरण से बदल दिया जाता है।generateTestCases(): पहले से ही ऊपर वर्णित संदेश निर्माण के कार्यान्वयन के साथ अधिरोहित है, लेकिन यदि आवश्यक हो तो और अनुकूलित किया जा सकता है।