Имею почтовый домен на Exim`e 4.80, кол-во ящиков 500+. Поднимал его когда-то по мануалу http://www.lissyara.su/articles/freebsd ... tfixadmin/
Столкнулся с лютым потоком спама, содержащего во вложениях вредоносный код. Оппоненты коварно пакуют в архив какой-нибудь милый шифровальщик в формате, например .scr или .exe, придают письму вид сообщения из Ростелекома "о смене тарифа", уведомления из налоговой, ПФ, службы судебных приставов ... etc.
По классическому сценарию, далее всё происходит примерно так:
Пожилая (или молодая) дама (или господин) бухгалтер, сидящий за ПК в глубокой провинции видит "письмо из налоговой", пугается до мокрых штанишек, открывает вложение. После появления предложения заплатить 100500 денег за код расшифровки, следует звонок в нам в центральный офис с просьбой расшифровать всё, что было наработано непосильным трудом.
Почитал форум, добавил в exim проверку acl_check_mime, добавив чуть больше форматов по сравнению с оригиналом:
Код: Выделить всё
# ACL на блокировку исполняемых вложений а архивах
acl_smtp_mime = acl_check_mime
Код: Выделить всё
acl_check_mime:
# Проверка вложений на исполняемые файлы
deny
message = Error! Your message contains executible attachment(s) like: $mime_filename
condition = ${if match{$mime_filename}{\N\.(exe|com|vb|vbs|vbe|vba|wsf|bat|cmd|pif|scr|hta|js|jse|jsp|chm|cpl|reg|lnk|ocx|dll|sys|msi|msu|mst|apk|bin|cgi|ps1)$\N}}
###Проверка вложений-архивов zip-rar###
deny
message = Message contains executible files(s) in attachment $mime_filename
condition = ${if match{$mime_filename}{\N(?i)\.(bz2|zip|rar|7z|cab|ace|7za|lah|lzo|lzx|gz|arj|bin|msi|cbr|deb|rpm|gzip|jar|pak|pkg|tar-gz|tgz|xar|zipx|wim|tb2|tar|paq|xz|iso|jar|lzh|lzma|pak|pk3|pk4|smzip|u3p|xpi|zipx|cpio|xar|lz|rk|zoo|img|ha)$\N}}
decode = default
condition = ${if match{${run{/usr/bin/7z l $mime_decoded_filename}}}{\N(?i)\.(exe|com|vb|vbs|vbe|vba|wsf|bat|cmd|pif|scr|hta|js|jse|jsp|chm|cpl|reg|lnk|ocx|dll|sys|msi|msu|mst|apk|bin|cgi|ps1)\n\N}}
log_message = forbidden attachment: recipients=$recipients, content-type=$mime_content_type, attach_filename=$mime_filename
Но появились новые проблемы:
1. На днях в удаленном подразделении поймали шифровальщика, который имел расширение scr, и был упакован сначала в rar, затем в cab.
Фильтр mime, естественно, его пропустил. Попытался заблочить архивы, содержащие другие архивы - за пару дней пропустили несколько важных писем, пришлось отключить. Не вкурю, как проверять архивы с вложенностью. Напрашивается мысль об организации многоярусной конструкции из нескольких
Код: Выделить всё
${run{/usr/bin/7z l $mime_decoded_filename}}
2. Вчера в другом удаленном подразделении поймали шифровальщика, на который в письме была дана ссылка. Вопрос к уважаемым коллегам: кто как с такой бедой борется? Антивирус с последними базами на самой машине и связка squid+clamav+blacklists на прокси всё это пропустили, ибо дрвэбы, касперские и прочие не могут своевременно реагировать на каждое творение вирусописателей. Права у пользователя - птичьи, обновления у браузера - последние. Отключить интернет вообще? Разбирать письмо построчно и косить из него все "http://" или "www." Запилить на маршрутизаторе snort и дропать все пакеты, которые он посчитает исполняемым кодом? Так это не спасёт, если вирус в архиве, я правильно понимаю?
3. Пока игрался с фильтром, заметил, что Exim у меня пропускает исполняемые файлы, упакованные в bz2. С остальными - порядок. Озадачился. Вызвал ручками в bash
Код: Выделить всё
"run{/usr/bin/7z l $filename"
3. Никак не могу приучить пользователей к тому, что почтовик не дает отправлять письма с архивами, в которых есть исполняемые файлы. В каждом отдельном случае приходится подключаться к пользователю, смотреть содержимое его архива и тыкать носом во вложенный sfx-архив, vb-скрипт и т.д. Хотелось бы добиться, чтобы в error-сообщении пользователю указывалось не только имя проблемного архива, но и запрещенного файла внутри архива.
За счет строки конфа
Код: Выделить всё
message = Message contains executible files(s) in attachment $mime_filename
Попытался хотя бы для начала вывести имя проблемного файла из архива в лог в таким макаром:
Код: Выделить всё
set acl_c_dangerous_file = ${run{/usr/bin/7z l $mime_decoded_filename}}
condition = ${if match{${run{/usr/bin/7z l $mime_decoded_filename}}}{\N(?i)\.(exe|com|vb|vbs|vbe|vba|wsf|bat|cmd|pif|scr|hta|js|jse|jsp|chm|cpl|reg|lnk|ocx|dll|sys|msi|msu|mst|apk|bin|cgi|ps1)\n\N}}
log_message = forbidden attachment: recipients=$recipients, content-type=$mime_content_type, attach_filename=$mime_filename, mime_content_description=$mime_content_description, contain_dangerous_file=$acl_c_dangerous_file
4. Аналогично хотелось бы организовать рикошет внешним корреспондентам, типа "Ваше письмо не может быть доставлено, поскольку вложенный архив "$mime_filename" содержит исполняемый файл "$acl_c_dangerous_file"", ибо административные меры воздействия не помогают.
Буду благодарен за любые свежие идеи, поскольку моя фантазия уже иссякла.