मैं बेस 64 एनकोडेड स्पैम ईमेल को कैसे अस्वीकार कर सकता हूं?


11

मुझे बस इसी तरह की सामग्री के साथ कुछ मेल प्राप्त हुए जो बेस 64 के साथ एन्कोडेड थे। अब मैं बॉडी चेक का उपयोग करके इस तरह के ईमेल को अस्वीकार या अस्वीकार करना चाहता हूं।

इससे पहले कि मैं अपने शरीर में कुछ ऐसा करता हूं:

/Quanzhoucooway/ DISCARD

लेकिन चूंकि संदेश एन्कोडेड है कि कीवर्ड का पता नहीं लगाया जाएगा।

यहाँ एक base64 एन्कोडेड संदेश है:

DQpIaSBGcmllbmRzLA0KDQpHb29kIGRheSENCg0KVGhpcyBpcyBWaWN0b3JpYSBmcm9tIFF1YW56
aG91Y29vd2F5IHNob2VzIHRyYWRpbmcgY28uLGx0ZCwgYSBwcm9mZXNzaW9uYWxtYW51ZmFjdHVy
ZXIgYW5kIGV4cG9ydGVyIG9mIGFsbCBraW5kcyBvZiBzaG9lcywgbWFpbmx5IGluIGNhc3VhbCBz
aG9lcyBhbmQgc3BvcnRzIHNob2VzICwgd2hpY2ggaGFzIGJlZW4gc3VwcGxpZWQgdG8gdGhlIGZh
bW91cyBmYXNoaW9uIGJyYW5kIHN0b3JlcyBmcm9tIDIwMTAuDQoNCk5vdGljaW5ndGhhdCB5b3Ug
YXJlIGxvb2tpbmcgZm9yIGhpZ2ggcXVhbGl0eSBmYXNoaW9uIHNob2VzLCBzbyBJIGhvcGUgd2Ug
Y2FuIHdvcmsgdG9nZXRoZXIgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IGFyZSBpbnRlcmVzdGVkLCBJ
IHdpbGwgc2VuZCB5b3Ugb3VyIGl0ZW1zIGFjY29yZGluZ2x5Lg0KDQpGWUksIHdlIGNhbiBtYWtl
IGN1c3RvbWl6ZWQgc2FtcGxlcyBmb3IgeW91IGFjY29yZGluZ2x5Lg0KDQpMb29raW5nIGZvciB5
b3VyIHNvb25lc3QgcmVzcG9uc2UuDQoNCkJSIQ0KDQpWaWN0b3JpYSANCg==

तो इस तरह के ईमेल को ब्लॉक करने के लिए सबसे अच्छा अभ्यास क्या है?


3
उचित स्पैम फ़िल्टरिंग जो संदेश की वास्तविक डिकोड की गई सामग्री पर कार्य करता है?
सिजयोज़

क्या आप अधिक विशिष्ट हो सकते हैं, किस तरह के तंत्र का उपयोग किया जाना चाहिए? मैं पहले से ही स्पैमसैसिन का उपयोग कर रहा हूं और जब स्पैम से लड़ने की बात आती है तो यह बहुत अच्छा काम कर रहा है।
user134969

मैं "उन्हें आधारभूत संदेश सांकेतिक शब्दों में बदलना नहीं करते" के एक त्रुटि संदेश के साथ एमटीए-अस्वीकार कर देगा।
जोशसन 15

जवाबों:


19

पोस्टफिक्स साथ ऐसा मत करो body_check, लेकिन एक SpamAssassin के नियम लिखने इसके लिए, बजाय। स्पैमासैन अपने नियमों को लागू करने से पहले संदेश निकाय को डिकोड करता है। कुछ इस तरह:

body     LOCAL_QUANZHOUCOOWAY  /Quanzhoucooway/
score    LOCAL_QUANZHOUCOOWAY  7.0
describe LOCAL_QUANZHOUCOOWAY  Block word Quanzhoucooway

ये नियम /etc/mail/spamassassin/local.cf(या ~/.spamassassin/user_prefs) के हैं।


1
क्या यह काम तब भी होगा जब वह कीवर्ड बेस 64 के साथ एनकोडेड हो, जैसे कि वहाँ की सामग्री?
user134969

2
हाँ। इसे स्पष्ट करने के लिए किसी ने पहले ही मेरे उत्तर को संपादित कर दिया। उस गुमनाम व्यक्ति को धन्यवाद! :)
एसा जोकिनेन

9

तकनीकी रूप से, आप कीवर्ड के लिए सीधे आधार 64 एन्कोडेड डेटा को फ़िल्टर कर सकते हैं। मैं यह नहीं कह रहा हूँ कि यह एक व्यावहारिक या ऐसा करने के लिए एक उचित बात है, (ऊपर ईएसए के जवाब में वर्णित जैसे) के रूप में बेहतर और सरल विकल्प के अस्तित्व दिया है, लेकिन यह है संभव।

चाल का एहसास है कि base64 एन्कोडिंग base64 वर्णों के 4-वर्ण ब्लॉक में कच्चे अनएकेडेड डेटा के 3-बाइट ब्लॉक का एक नियतात्मक मानचित्रण है। इस प्रकार, किसी भी समय 3-बाइट ब्लॉक का एक निश्चित अनुक्रम अनएन्कोडेड डेटा में दिखाई देता है, 4-वर्ण ब्लॉक का एक ही क्रम एन्कोडेड संस्करण में दिखाई देगा।

उदाहरण के लिए, यदि आप स्ट्रिंग Quanzhoucoowayको बेस 64 एनकोडर में दर्ज करते हैं , तो आपको आउटपुट मिलेगा UXVhbnpob3Vjb293YXk=। चूंकि इनपुट की लंबाई 3 बाइट्स से अधिक नहीं है, इसलिए आउटपुट में अंत में कुछ पैडिंग होती है, लेकिन अगर हम अंतिम =संकेतों और अंतिम वास्तविक बेस 64 कैरेक्टर को छोड़ देते हैं k(क्योंकि यह कुछ पैडिंग बिट्स को एन्कोड करता है), तो हमें स्ट्रिंग मिलती है UXVhbnpob3Vjb293YXकि बेस 64 एन्कोडेड डेटा में प्रदर्शित करने के लिए जब भी बाइट तीनो की गारंटी है Qua, nzh, ouc, oowऔर आंशिक त्रिक ayइसी क्रम में इनपुट में दिखाई देते हैं।

लेकिन, निश्चित रूप से, स्ट्रिंग Quanzhoucoowayट्रिपल सीमा पर बिल्कुल शुरू नहीं हो सकती है। उदाहरण के लिए, यदि हम XQuanzhoucoowayइसके बजाय स्ट्रिंग को एन्कोड करते हैं, तो हमें आउटपुट मिलता है WFF1YW56aG91Y29vd2F5, जो पूरी तरह से अलग दिखता है। इस बार, इनपुट लंबाई तीन से विभाज्य है, इसलिए अंत में छोड़ने के लिए कोई पेडिंग वर्ण नहीं हैं, लेकिन हमें पहले दो वर्णों को त्यागने की आवश्यकता है ( WFजो प्रत्येक पूर्वनिर्मित Xबाइट से कुछ बिट्स को एन्कोड करते हैं , हमें छोड़ कर F1YW56aG91Y29vd2F5

अंत में, बेस 64 एन्कोडिंग XXQuanzhoucoowayआउटपुट देता है WFhRdWFuemhvdWNvb3dheQ==, जिसमें दोनों सिरों पर पैडिंग होती है। पहले तीन वर्ण WFh(जो कि XXउपसर्ग को कूटबद्ध करते हैं ) और अंतिम तीन वर्ण Q==(जो अंत में शून्य बिट पैडिंग को सांकेतिक शब्दों में बदलना) को हटाते हैं, हम स्ट्रिंग के साथ छोड़ दिए जाते हैं RdWFuemhvdWNvb3dhe। इस प्रकार, हम निम्नलिखित तीन बेस 64-एन्कोडेड स्ट्रिंग्स प्राप्त करते हैं:

UXVhbnpob3Vjb293YX
F1YW56aG91Y29vd2F5
RdWFuemhvdWNvb3dhe

जिनमें से (कम से कम) एक को किसी भी इनपुट स्ट्रिंग के बेस 64 एन्कोडेड रूप में दिखाई देना चाहिए जिसमें शब्द हो Quanzhoucooway

बेशक, यदि आप अशुभ हैं, तो बेस 64 एनकोडर किसी भी दो एन्कोडेड ट्रिपल के बीच में एक लाइन ब्रेक डाल सकता है। (आपका उदाहरण संदेश, उदाहरण के लिए, के बीच एक है F1YW56और aG91Y29vd2F5मज़बूती से regexps के साथ इन तार मिलान करने के लिए, आप निम्न (PCRE सिंटैक्स का उपयोग) की तरह कुछ देख सकते हैं।) इस प्रकार,:

/UXVh\s*bnpo\s*b3Vj\s*b293\s*YX/ DISCARD
/F1\s*YW56\s*aG91\s*Y29v\s*d2F5/ DISCARD
/R\s*dWFu\s*emhv\s*dWNv\s*b3dh\s*e/ DISCARD

हाथ से इन पैटर्नों को उत्पन्न करना थकाऊ है, लेकिन इसे अपनी पसंदीदा प्रोग्रामिंग भाषा में करने के लिए एक सरल स्क्रिप्ट लिखना मुश्किल नहीं होगा, कम से कम जब तक यह एक base64 एनकोडर प्रदान करता है।

यदि आप वास्तव में चाहते थे, तो आप बेस -64 एन्कोडिंग द्वारा कीवर्ड के अपरकेस और अपरकेस संस्करण दोनों के केस-असंवेदनशील मिलान को लागू कर सकते हैं और उन्हें किसी भी संयोजन से मेल खाने वाले regexp में जोड़ सकते हैं। उदाहरण के लिए, का बेस 64 एन्कोडिंग quanzhoucoowayहै cXVhbnpob3Vjb293YXk=, जबकि इस बात का QUANZHOUCOOWAYहै UVVBTlpIT1VDT09XQVk=, नियम तो:

/[cU][XV]V[hB]\s*[bT][nl]p[oI]\s*[bT][31]V[jD]\s*[bT][20]9[3X]\s*[YQ][XV]/ DISCARD

बेस 64 एनकोडेड शब्द "Quanzhouकोवे" से किसी भी मामले में मेल खाएगा, बशर्ते कि यह एक ट्रिपल सीमा पर शुरू हो। शिफ्ट किए गए संस्करणों के लिए अन्य दो संबंधित रेगीक्स उत्पन्न करना एक अभ्यास के रूप में छोड़ दिया गया है। ;)

काश, साधारण प्रतिस्थापन की तुलना में अधिक जटिल कुछ भी करना इस तरह जल्दी से अव्यवहारिक हो जाता है। लेकिन कम से कम यह एक साफ-सुथरी चाल है। सिद्धांत रूप में, यह उपयोगी भी हो सकता है, यदि आप किसी कारण से स्पैमासिस या किसी अन्य फ़िल्टर का उपयोग नहीं कर सकते हैं जो फ़िल्टर करने से पहले बेस 64 एन्कोडिंग को डिकोड कर सकता है। लेकिन अगर आप ऐसा कर सकते हैं, तो इस तरह के हैक का उपयोग करने के बजाय, आपको निश्चित रूप से करना चाहिए।


1
हाँ, यह संभव है ; इतना व्यावहारिक नहीं है, और न ही ऐसा कुछ जिसे आप हर शब्द के लिए फिर से करना चाहते हैं। स्पष्टीकरण के लिए +1: जबकि यह बहुत उपयोगी नहीं हो सकता है, यह निश्चित रूप से शिक्षित कर रहा है!
ईसा जोकिनेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.