Base64 kodlu spam e-postasını nasıl reddedebilirim?


11

Base64 ile kodlanmış benzer içeriklere sahip birkaç posta aldım. Şimdi bu tür e-postaları vücut kontrolünü kullanarak reddetmek veya atmak istiyorum.

Önce body_checks böyle bir şey vardı:

/Quanzhoucooway/ DISCARD

Ancak mesaj kodlandığı için bu anahtar kelime algılanmayacaktır.

İşte base64 kodlu bir mesaj:

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

Peki bu tür e-postaları engellemek için en iyi uygulama hangisidir?


3
İletinin gerçek kodu çözülmüş içeriğine etki eden uygun spam filtreleme?
ceejayoz

Daha spesifik olabilir misiniz, ne tür bir mekanizma kullanılmalıdır? Zaten spamassassin kullanıyorum ve spam ile mücadele söz konusu olduğunda harika bir iş çıkarıyor.
user134969

Ben MTA onları "Base64 kodlamak mesaj gövdeleri kodlama" hata iletisi ile reddetmek istiyorsunuz.
joshudson

Yanıtlar:


19

Postfix ile bunu yapmayın body_checkama bir Spamassassin kural yazma yerine, bunun için. Spamassain, kurallarını uygulamadan önce mesaj gövdesinin kodunu çözer. Gibi bir şey:

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

Bu kurallar /etc/mail/spamassassin/local.cf(veya ~/.spamassassin/user_prefs) ' ya aittir .


1
Bu anahtar kelime, yukarıdaki içerik gibi base64 ile kodlanmış olsa bile çalışır mı?
user134969

2
Evet. Birisi bunu netleştirmek için cevabımı zaten düzenledi. Anonim kişiye teşekkürler! :)
Esa Jokinen

9

Teknik olarak, olabilir doğrudan anahtar kelimeler için base64 kodlanmış verilere filtre. Ben (yukarıda Esa yanıtında açıklandığı gibi) daha iyi ve daha basit alternatiflerinin bulunması dikkate alındığında, pratik veya yapmak için makul bir şey demiyorum, ama bu olduğunu mümkün.

İşin püf noktası, base64 kodlamasının , 3 baytlık ham kodlanmamış verilerin bloklarının 4 karakterli base64 karakter bloklarına deterministik bir eşlemesi olduğunu fark etmektir. Böylece, kodlanmamış verilerde belirli bir 3 baytlık blok dizisi her göründüğünde, kodlanmış versiyonda aynı 4 karakterlik blok dizisi görünecektir.

Örneğin, dizeyi Quanzhoucoowaybir base64 kodlayıcıya girerseniz, çıktı alırsınız UXVhbnpob3Vjb293YXk=. Girişin uzunluğu 3 baytın katı olmadığından, çıktı sonunda bir dolgu içerir , ancak son =işaretleri ve son gerçek base64 karakterini düşürürsek k(bazı dolgu bitlerini de kodladığı için), dizeyi alırız UXVhbnpob3Vjb293YXbyte, üçlüler her base64 kodlanmış veri görünmesi sağlanır Qua, nzh, ouc, oowve kısmi üçlü aybu sırayla giriş görünür.

Ancak, elbette, dize Quanzhoucoowaytam olarak üçlü sınırda başlamayabilir. Örneğin, dizeyi XQuanzhoucoowaykodlarsak, WFF1YW56aG91Y29vd2F5tamamen farklı görünen çıktıyı alırız . Bu kez, giriş uzunluğu üçe bölünebilir, bu nedenle sonunda atılacak dolgu karakteri yoktur, ancak WFher biri, bitlerin Xbaytlarından bazılarını kodlayan ilk iki karakteri ( ) atmamız gerekir. F1YW56aG91Y29vd2F5.

Son olarak, base64 kodlaması , her iki uçta dolguya sahip XXQuanzhoucoowayçıktıyı verir WFhRdWFuemhvdWNvb3dheQ==. İlk üç karakteri WFh( XXöneki kodlayan ) ve son üç karakteri Q==(sonunda sıfır bit dolguyu kodlayan ) kaldırarak, dizede kalırız RdWFuemhvdWNvb3dhe. Böylece, aşağıdaki üç base64 kodlu dizeyi elde ederiz:

UXVhbnpob3Vjb293YX
F1YW56aG91Y29vd2F5
RdWFuemhvdWNvb3dhe

(en azından) kelimesini içeren herhangi bir girdi dizesinin base64 kodlu biçiminde görünmelidir Quanzhoucooway.

Şüphesiz, şanssızsanız, base64 kodlayıcı, kodlanmış herhangi iki üçlünün arasına bir satır sonu ekleyebilir. (Örneğin, örnek iletinizde F1YW56ve arasında bir tane vardır aG91Y29vd2F5.) Bu nedenle, bu dizeleri regexps ile güvenilir bir şekilde eşleştirmek için aşağıdakine benzer bir şeye ihtiyacınız vardır (PCRE sözdizimi kullanarak):

/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

Bu kalıpları elle oluşturmak biraz sıkıcıdır, ancak en azından bir base64 kodlayıcı sağladığı sürece, favori programlama dilinde yapmak için basit bir komut dosyası yazmak zor olmaz.

Gerçekten isterseniz, anahtar kelimenin hem küçük hem de büyük sürümünü kodlayan ve bunları herhangi bir kombinasyonla eşleşen bir normal ifade halinde birleştirerek base64 ile büyük / küçük harfe duyarlı olmayan eşleştirme uygulayabilirsiniz. Örneğin, base64 kodlayan quanzhoucoowayolan cXVhbnpob3Vjb293YXk=bu ise QUANZHOUCOOWAYbir UVVBTlpIT1VDT09XQVk=kural böylece:

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

bir üçlü sınırda başlaması koşuluyla, her durumda base64 kodlu kelimesi "Quanzhoucooway" ile eşleşecektir. Değiştirilen sürümler için karşılık gelen diğer iki normal ifadenin oluşturulması bir alıştırma olarak bırakılmıştır. ;)

Ne yazık ki, böyle basit alt dize eşleşmesinden daha karmaşık bir şey yapmak hızlı bir şekilde pratik olmaz. Ama en azından temiz bir numara. Prensip olarak, herhangi bir nedenle SpamAssassin veya base64 kodlamasını filtrelemeden önce kodunu çözebilecek başka bir filtre kullanamazsanız bile yararlı olabilir. Ancak bunu yapabiliyorsanız, bunun gibi hack'leri kullanmak yerine mutlaka yapmalısınız.


1
Evet, mümkün ; o kadar pratik değil ve her kelime için tekrar yapmak istediğiniz bir şey değil. Açıklama için +1: Bu çok yararlı olmasa da, kesinlikle eğitiyor!
Esa Jokinen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.