base64로 인코딩 된 스팸 전자 메일을 거부하려면 어떻게해야합니까?


11

방금 base64로 인코딩 된 비슷한 내용의 메일을 받았습니다. 이제 본문 확인을 사용하여 이러한 종류의 이메일을 거부하거나 삭제하고 싶습니다.

내 body_checks에 있기 전에 다음과 같이하십시오.

/Quanzhoucooway/ DISCARD

그러나 메시지가 인코딩되므로 해당 키워드가 감지되지 않습니다.

다음은 base64로 인코딩 된 메시지입니다.

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

그렇다면 이러한 종류의 이메일을 차단하는 가장 좋은 방법은 무엇입니까?


3
메시지의 실제 디코딩 된 내용에 작용하는 적절한 스팸 필터링?
ceejayoz

좀 더 구체적으로 설명해 주시겠습니까? 어떤 종류의 메커니즘을 사용해야합니까? 나는 이미 spamassassin을 사용하고 있으며 스팸과의 싸움에서 큰 일을하고 있습니다.
user134969

"base64 인코딩 메시지 본문을 사용하지 마십시오"라는 오류 메시지와 함께 MTA를 거부합니다.
joshudson

답변:


19

후위이 작업을 수행하지 마십시오 body_check하지만 경우 SpamAssassin 규칙 쓰기 대신, 그것을 위해를. Spamassain은 규칙을 적용하기 전에 메시지 본문을 해독합니다. 다음과 같은 것 :

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

이 규칙은 /etc/mail/spamassassin/local.cf(또는 ~/.spamassassin/user_prefs)에 속합니다 .


1
해당 키워드가 base64로 인코딩되어 있어도 작동합니까?
user134969

2
예. 누군가가 이미 이것을 명확하게하기 위해 내 대답을 편집했습니다. 익명의 사람에게 감사합니다! :)
Esa Jokinen

9

기술적 으로 키워드에 대한 base64 인코딩 데이터를 직접 필터링 할 있습니다. 나는 (위 에사의 대답에 설명 된 예와 같은) 더 간단한 대안의 존재 주어진, 그것은 실제 또는 할 수있는 합리적인 일이있어 말하고 있지 않다, 그러나 그것은 이다 가능합니다.

요점은 base64 인코딩 이 3 바이트의 원시 인코딩되지 않은 데이터 블록을 base64 문자의 4 자 블록으로 결정적으로 매핑 한다는 것을 인식하는 것 입니다. 따라서 인코딩되지 않은 데이터에 3 바이트 블록의 특정 시퀀스가 ​​나타날 때마다 동일한 4 문자 블록 시퀀스가 ​​인코딩 된 버전에 나타납니다.

예를 들어, base64 인코더에 문자열 Quanzhoucooway을 입력 하면 출력이 나타납니다 . 입력의 길이가 3 바이트의 배수가 아니기 때문에 출력에는 끝에 약간의 패딩이 포함 되지만 마지막 부호와 마지막 실제 base64 문자를 제거하면 (일부 패딩 비트도 인코딩하므로) 문자열을 얻습니다. 즉 바이트가 삼중마다 base64 인코딩 된 데이터에 표시 보장 , , , 및 상기 부분 삼중 순차 입력에서 나타난다.UXVhbnpob3Vjb293YXk==kUXVhbnpob3Vjb293YXQuanzhoucooway

그러나 물론 문자열 Quanzhoucooway은 삼중 항 경계에서 정확하게 시작되지 않을 수 있습니다. 예를 들어 문자열을 XQuanzhoucooway대신 인코딩 하면 출력이 WFF1YW56aG91Y29vd2F5달라지며 완전히 다릅니다. 이번에는 입력 길이를 3으로 나눌 수 있으므로 끝에서 버릴 패딩 문자는 없지만 WF앞에 붙인 X바이트 에서 비트를 인코딩 하는 처음 두 문자 ( ) 를 버려야합니다. F1YW56aG91Y29vd2F5.

마지막으로 base64 인코딩 XXQuanzhoucooway은 출력을 제공하며 WFhRdWFuemhvdWNvb3dheQ==, 양쪽 끝에 패딩이 있습니다. 처음 세 문자 WFh( XX접두사 를 인코딩 함 )와 마지막 세 문자 Q==(끝에 0 비트 패딩을 인코딩 함)를 제거하면 string이 남습니다 RdWFuemhvdWNvb3dhe. 따라서 다음 세 가지 base64 인코딩 문자열을 얻습니다.

UXVhbnpob3Vjb293YX
F1YW56aG91Y29vd2F5
RdWFuemhvdWNvb3dhe

이 중 (적어도) 하나는 단어를 포함하는 입력 문자열의 base64 인코딩 형식으로 나타나야합니다 Quanzhoucooway.

물론 운이 좋지 않은 경우 base64 인코더는 두 개의 인코딩 된 삼중 항 사이에 줄 바꿈을 삽입 할 수 있습니다. (예를 들어, 메시지 예 F1YW56와 사이에 하나가 aG91Y29vd2F5있습니다.) 따라서 이러한 문자열을 정규 표현식과 안정적으로 일치 시키려면 다음과 같은 것이 필요합니다 (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 인코더를 제공하는 한 선호하는 프로그래밍 언어로 간단한 스크립트를 작성하는 것은 어렵지 않습니다.

정말로 원한다면 키워드의 소문자와 대문자 버전을 모두 base64로 인코딩하고 키워드 조합과 일치하는 정규 표현식으로 결합하여 대소 문자를 구분하지 않는 일치를 구현할 수도 있습니다. 예를 들어, base64 인코딩 quanzhoucoowaycXVhbnpob3Vjb293YXk=while이고 QUANZHOUCOOWAYis UVVBTlpIT1VDT09XQVk=규칙은 다음과 같습니다.

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

는 삼중 항 경계에서 시작되는 경우 base64로 인코딩 된 단어 "Quanzhoucooway"와 일치합니다. 시프트 된 버전에 대해 다른 두 개의 정규 표현식을 생성하는 것은 연습으로 남아 있습니다. ;)

아아, 이와 같이 간단한 하위 문자열 일치보다 복잡한 것을 수행하는 것은 비실용적입니다. 그러나 최소한 깔끔한 트릭입니다. 어떤 이유로 든 SpamAssassin 또는 필터링 전에 base64 인코딩을 디코딩 할 수있는 다른 필터를 사용할 수없는 경우에도 유용 할 수 있습니다. 그러나 그렇게 할 수 있다면 이와 같은 핵을 사용하는 대신 분명히해야합니다.


1
그렇습니다, 가능합니다 ; 실용적이지 않으며 모든 단어에 대해 다시하고 싶은 것이 아닙니다. 설명을 위해 +1 : 이것이 유용하지는 않지만 확실히 교육적입니다!
Esa Jokinen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.