Làm cách nào tôi có thể từ chối email spam được mã hóa base64?


12

Tôi vừa nhận được một vài thư có nội dung tương tự được mã hóa với base64. Bây giờ tôi muốn từ chối hoặc loại bỏ các loại email này bằng cách sử dụng kiểm tra cơ thể.

Trước khi tôi có trong body_check của tôi một cái gì đó như thế này:

/Quanzhoucooway/ DISCARD

Nhưng vì tin nhắn được mã hóa nên từ khóa sẽ không được phát hiện.

Đây là một tin nhắn được mã hóa base64:

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

Vì vậy, cách tốt nhất để chặn các loại email này là gì?


3
Lọc thư rác đúng cách có tác động đến nội dung được giải mã thực sự của tin nhắn?
ceejayoz

Bạn có thể cụ thể hơn, loại cơ chế nào nên được sử dụng? Tôi đã sử dụng spamassassin và nó đang làm rất tốt khi chiến đấu chống lại thư rác.
dùng134969

Tôi sẽ từ chối MTA với thông báo lỗi "Đừng mã hóa cơ thể tin nhắn cơ sở64".
joshudson

Câu trả lời:


20

Đừng làm điều này với Postfix body_checkmà thay vào đó hãy viết quy tắc Spamassassin cho nó. Spamassain giải mã nội dung thư trước khi áp dụng quy tắc của nó. Cái gì đó như:

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

Các quy tắc này thuộc về /etc/mail/spamassassin/local.cf(hoặc ~/.spamassassin/user_prefs).


1
Điều này có hoạt động ngay cả khi từ khóa đó được mã hóa với base64, giống như nội dung đó không?
dùng134969

2
Đúng. Ai đó đã chỉnh sửa câu trả lời của tôi để làm rõ điều này. Nhờ người vô danh đó! :)
Esa Jokinen

9

Về mặt kỹ thuật, bạn có thể trực tiếp lọc dữ liệu được mã hóa base64 cho các từ khóa. Tôi không nói rằng đó là một thực tế hoặc là một điều hợp lý để làm, vì sự tồn tại của giải pháp thay thế tốt hơn và đơn giản hơn (như ví dụ được mô tả trong câu trả lời của Esa trên), nhưng nó có thể.

Bí quyết là nhận ra rằng mã hóa base64 là ánh xạ xác định của các khối 3 byte dữ liệu chưa được mã hóa thành các khối 4 ký tự của các ký tự cơ sở64. Do đó, bất cứ khi nào một chuỗi các khối 3 byte nhất định xuất hiện trong dữ liệu chưa được mã hóa, cùng một chuỗi các khối 4 ký tự sẽ xuất hiện trong phiên bản được mã hóa.

Ví dụ: nếu bạn nhập chuỗi Quanzhoucoowayvào bộ mã hóa base64 , bạn sẽ nhận được đầu ra UXVhbnpob3Vjb293YXk=. Vì độ dài của đầu vào không phải là bội của 3 byte, đầu ra chứa một số phần đệm ở cuối, nhưng nếu chúng ta bỏ các =dấu cuối cùng và ký tự base64 thực tế cuối cùng k(vì nó cũng mã hóa một số bit đệm), chúng ta sẽ nhận được chuỗi UXVhbnpob3Vjb293YXđó là bảo đảm để xuất hiện trong các dữ liệu base64 mã hóa bất cứ khi nào ba byte Qua, nzh, ouc, oowvà bộ ba phần ayxuất hiện trong đầu vào theo thứ tự đó.

Nhưng, tất nhiên, chuỗi Quanzhoucoowaycó thể không bắt đầu chính xác trên ranh giới bộ ba. Ví dụ, nếu chúng ta mã hóa chuỗi XQuanzhoucoowaythay vào đó, chúng ta sẽ nhận được đầu ra WFF1YW56aG91Y29vd2F5, trông hoàn toàn khác nhau. Lần này, độ dài đầu vào chia hết cho ba, vì vậy không có ký tự đệm nào để loại bỏ ở cuối, nhưng chúng ta cần loại bỏ hai ký tự đầu tiên ( WF) mà mỗi ký tự mã hóa một số bit từ Xbyte được thêm vào trước , để lại cho chúng ta F1YW56aG91Y29vd2F5.

Cuối cùng, mã hóa base64 XXQuanzhoucoowaycho đầu ra WFhRdWFuemhvdWNvb3dheQ==, có phần đệm ở cả hai đầu. Xóa ba ký tự đầu tiên WFh(mã hóa XXtiền tố) và ba ký tự cuối cùng Q==(mã hóa phần đệm bit 0 ở cuối), chúng ta còn lại chuỗi RdWFuemhvdWNvb3dhe. Do đó, chúng tôi có được ba chuỗi được mã hóa base64 sau đây:

UXVhbnpob3Vjb293YX
F1YW56aG91Y29vd2F5
RdWFuemhvdWNvb3dhe

trong đó (ít nhất) một cái phải xuất hiện ở dạng mã hóa base64 của bất kỳ chuỗi đầu vào nào có chứa từ đó Quanzhoucooway.

Tất nhiên, nếu bạn không may mắn, bộ mã hóa base64 có thể chèn một ngắt dòng ở giữa chúng, giữa bất kỳ hai bộ ba được mã hóa. (Ví dụ, thông báo ví dụ của bạn có một giữa F1YW56aG91Y29vd2F5.) Vì vậy, để kết hợp các chuỗi này với regexps một cách đáng tin cậy, bạn cần một cái gì đó như sau (sử dụng cú pháp 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

Tạo các mẫu này bằng tay là khá tẻ nhạt, nhưng sẽ không khó để viết một tập lệnh đơn giản để thực hiện nó bằng ngôn ngữ lập trình yêu thích của bạn, ít nhất là nó cung cấp bộ mã hóa base64.

Nếu bạn thực sự muốn, bạn thậm chí có thể thực hiện kết hợp không phân biệt chữ hoa chữ thường bằng cách mã hóa base64 cả phiên bản chữ thường và chữ hoa của từ khóa và kết hợp chúng thành một biểu thức chính quy phù hợp với bất kỳ kết hợp nào của chúng. Ví dụ, mã hóa base64 quanzhoucoowaycXVhbnpob3Vjb293YXk=trong khi đó QUANZHOUCOOWAYUVVBTlpIT1VDT09XQVk=quy tắc:

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

sẽ khớp với từ được mã hóa base64 "Quanzhoucooway" trong mọi trường hợp, với điều kiện là nó bắt đầu trên một ranh giới bộ ba. Việc tạo hai biểu thức chính tương ứng khác cho các phiên bản đã thay đổi được để lại như một bài tập. ;)

Than ôi, làm bất cứ điều gì phức tạp hơn so với kết hợp chuỗi con đơn giản như thế này nhanh chóng trở nên không thực tế. Nhưng ít nhất đó là một mánh khóe gọn gàng. Về nguyên tắc, nó thậm chí có thể hữu ích, nếu bạn vì một số lý do không thể sử dụng SpamAssassin hoặc bất kỳ bộ lọc nào khác có thể giải mã mã hóa base64 trước khi lọc. Nhưng nếu bạn có thể làm điều đó, thay vì sử dụng các bản hack như thế này, bạn chắc chắn nên làm.


1
Vâng, nó có thể ; không thực tế và không phải là thứ bạn muốn làm lại cho mỗi từ. +1 cho lời giải thích: mặc dù điều này có thể không hữu ích lắm, nhưng nó chắc chắn là giáo dục!
Esa Jokinen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.