Рейтинг:1

body_checks: Как фильтровать содержимое, закодированное в base64?

флаг cn

Идиоматический ответ, вероятно, «не надо — используйте фильтр, который сначала декодирует сообщение», но, как видно из второго ответа на этот вопрос, должен также возможно с body_checks что также является BUILTIN_FILTER_README @ postfix.org говорит - и это то, что я хотел бы сделать.

Вот один, который беспокоил меня в течение довольно долгого времени:

--===============6489786132958404869==
Content-Type: текстовый/обычный; кодировка = "utf-8"
Контент-передача-кодирование: base64

SmFnIGhhciByZWRhbiBza3Jpdml0IHRpbGwgZGlnLCBtZW4gZHUgc3ZhcmFyIG1pZyBpbnRlLiBM
w6V0IG1pZyB2ZXRhLCBqYWcgaGFyIG7DpWdyYSBzYWtlciBhdHQgYmVyw6R0dGEuIEtvbnRha3Rh
IG1pZyBpIG1pbiBwcml2YXRhIGUtcG9zdDogaXJlbmUub3NiZXJnNzNAZ21haWwuY29tCg==

--===============6489786132958404869==--

Для этого я добавил body_checks правило:

/SmFnIGhhciByZWRhbiBza3Jpdml0IHRpbGwgZGlnLCBtZW4gZHUgc3ZhcmFyIG1pZyBpbnRl/ ОТКЛОНИТЬ СПАМ

но он просто не поймает его, когда он находится в таком блоке. Он поймал один попытка доставки, когда та же строка была встроена в тело: <div dir="ltr"><pre class="gmail-moz-quote-pre"><pre>SmFnIHZpbGwgcHJhdGEgbWVkIGRpZywgbWVuIGRldCBmaW5ucyBmw7ZyIG3DpW5nYSBtZWRkZWxh</pre> но это единственный раз, когда правило успешно поймало это. Я добавил довольно много из них base64 закодированные правила, но ни один из них ничего не улавливает при внедрении, как указано выше.

base64 кодировка в данном конкретном случае всегда одинакова, поэтому мне не нужно делать base64 тройной, чтобы поймать варианты, которые я сделал для других случаев:

/aHR0cHM6Ly9jbGNrLnJ1|dHRwczovL2NsY2sucnUv|dHBzOi8vY2xjay5y/ REJECT Пожалуйста, удалите ссылку на clck.ru

Вышеупомянутое ничего не улавливает при внедрении в блок, как указано выше.

Я попытался добавить main.cf параметр

disable_mime_input_processing = да

который, кажется, улучшил ситуацию. Сейчас он ловит некоторые из них, но не все, что я могу проверить вручную. должен поймать сообщения, которые проскальзывают сквозь трещины.

Любая идея, почему это не работает и что я могу с этим поделать? я использую 3.6.4-1.fc35.

Ted Lyngmo avatar
флаг cn
@anx На самом деле это так (или было - я просто удалил их). На ней было разбросано несколько «НЕ ЗНАЕТ», которые я не помню, зачем я туда положил. Я удалил их сейчас и посмотрю, будет ли это иметь значение.
Ted Lyngmo avatar
флаг cn
@anx С тех пор, как я удалил `DUNNO`s, не было ни одной попытки доставить какие-либо письма, которые ранее обходили мой фильтр `body_checks`, но у меня все еще есть хорошее предчувствие по этому поводу.Атаки с доставкой обычно происходят пару раз в день, поэтому я уверен, что смогу проверить вашу догадку до истечения срока моей награды, если вы хотите написать ответ на мой вопрос.
Рейтинг:1
флаг fr
anx

Существует встроенная функция для диагностики поиска карт postfix, специально для body_checks также. Передайте ту же конфигурацию карты, которую вы настроили для службы очистки smtpd, в почтовая карта утилиту и добавить один или несколько -v для подробного вывода:

# postconf body_checks
body_checks=pcre:/etc/postfix/body.pcre
# cat known_bad.eml | postmap -v -b -q - pcre:/etc/postfix/body.pcre
...
postmap: dict_pcre_lookup: body.pcre: тестовая строка 1
postmap: dict_pcre_lookup: body.pcre: тестовая строка 2
postmap: dict_pcre_lookup: body.pcre: тестовая строка 3
тестовая строка 3 НЕ ЗНАЮ

Это скажет вам для каждой строки тела, какая (если есть) запись на вашей карте соответствует вашей строке.

Одной из возможных причин, по которой ваша карта может вести себя не так, как вы ожидаете, может быть слишком широкое соответствие с НЕ ЗНАЮ результат, предшествующий вашему предполагаемому ОТКЛОНИТЬ спам результат, поручив уборка сервер, чтобы перейти к следующей строке вместо того, чтобы пробовать дальнейшие выражения.

Рейтинг:0
флаг ru

Однажды попал в ту же ловушку, заблокировав все электронные письма, начинающиеся с "<!DOCTYPE html" :)

Если это динамический контент, вам будет сложно найти что-то позже в электронном письме, но если оно статично, тестовое декодирование одного такого сообщения и повторное кодирование важных частей могут помочь найти подходящую строку соответствия. Ваши главные противники при этом — разрывы строк, которые могут возникать где угодно, в зависимости от положения соответствующего текста.

Обычно я выполняю сопоставление base64 только в заголовках (в основном темы, заголовки UTF-8, как правило, кодируют свои темы в base64), поскольку разделение заголовка на несколько строк довольно необычно (но все же возможно).

Вы можете найти лучшую помощь во внешних утилитах, таких как amavis или dspam (оба используют spamassassin) с включенным байесом. Это также помогло бы с декодированием, поскольку декодеры встроены в эти продукты.

Ted Lyngmo avatar
флаг cn
Спасибо! Обратите внимание, что мои регулярные выражения не соответствуют содержимому в теле сообщения. Если я скопирую источник проскользнувшего сообщения в файл и вручную запущу регулярное выражение `body_checks`, они поймают его каждый раз. Я немного обновил вопрос.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.