Страница 1 из 1

Проблемы с фильтрацией писем с исполняемыми вложениями в архивах или ссылками на них в Exim.

Добавлено: 2016-02-11 10:45:16
qursar
Доброго здоровья уважаемому обществу.

Имею почтовый домен на 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}}
с последующим deny, если вложенность архива превысит некий разумный предел, но как мне кажется, это :cz2: громоздко. Может кто-то предложить более изящное решение?

2. Вчера в другом удаленном подразделении поймали шифровальщика, на который в письме была дана ссылка. Вопрос к уважаемым коллегам: кто как с такой бедой борется? Антивирус с последними базами на самой машине и связка squid+clamav+blacklists на прокси всё это пропустили, ибо дрвэбы, касперские и прочие не могут своевременно реагировать на каждое творение вирусописателей. Права у пользователя - птичьи, обновления у браузера - последние. :st: Отключить интернет вообще? Разбирать письмо построчно и косить из него все "http://" или "www." Запилить на маршрутизаторе snort и дропать все пакеты, которые он посчитает исполняемым кодом? Так это не спасёт, если вирус в архиве, я правильно понимаю?

3. Пока игрался с фильтром, заметил, что Exim у меня пропускает исполняемые файлы, упакованные в bz2. С остальными - порядок. Озадачился. Вызвал ручками в bash

Код: Выделить всё

"run{/usr/bin/7z l $filename"
для 7z и для bz2. Вывод у команд идентичный. Недоумеваю...

3. Никак не могу приучить пользователей к тому, что почтовик не дает отправлять письма с архивами, в которых есть исполняемые файлы. В каждом отдельном случае приходится подключаться к пользователю, смотреть содержимое его архива и тыкать носом во вложенный sfx-архив, vb-скрипт и т.д. Хотелось бы добиться, чтобы в error-сообщении пользователю указывалось не только имя проблемного архива, но и запрещенного файла внутри архива.
За счет строки конфа

Код: Выделить всё

message = Message contains executible files(s) in attachment $mime_filename
при попытке отправки письма с запрещенным вложением, пользователю выдается error c указанием проблемного архива, но не более.
Попытался хотя бы для начала вывести имя проблемного файла из архива в лог в таким макаром:

Код: Выделить всё

     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
- не отрабатывает, переменная $acl_c_dangerous_file - пуста. Ткните, пожалуйста носом, где я затупил...
4. Аналогично хотелось бы организовать рикошет внешним корреспондентам, типа "Ваше письмо не может быть доставлено, поскольку вложенный архив "$mime_filename" содержит исполняемый файл "$acl_c_dangerous_file"", ибо административные меры воздействия не помогают.
Буду благодарен за любые свежие идеи, поскольку моя фантазия уже иссякла.

Проблемы с фильтрацией писем с исполняемыми вложениями в архивах или ссылками на них в Exim.

Добавлено: 2016-08-11 17:04:30
Ged
"run{/usr/bin/7z l $filename"
для 7z и для bz2. Вывод у команд идентичный. Недоумеваю...
Дело в том, что bz, gz и прочие, похоже, в каких-то случаях отдают имя файла равное имя архиву без расширения.
А так как мы имеем архив для проверки вида: /var/spool/exim/scan/1bXqXS-000KZK-9b/1bXqXS-000KZK-9b-00002
Соответственно и вложение у нас такого же вида:

Код: Выделить всё

 # 7z l /var/spool/antivir/1bXq2A-000H4k-JM-00004

7-Zip [64] 15.09 beta : Copyright (c) 1999-2015 Igor Pavlov : 2015-10-16
p7zip Version 15.09 beta (locale=C,Utf16=off,HugeFiles=on,64 bits,5 CPUs x64)

Scanning the drive for archives:
1 file, 138784 bytes (136 KiB)

Listing archive: /var/spool/antivir/1bXq2A-000H4k-JM-00004

--
Path = /var/spool/antivir/1bXq2A-000H4k-JM-00004
Type = bzip2

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
                    .....                            1bXq2A-000H4k-JM-00004~
------------------- ----- ------------ ------------  ------------------------
                                             138784  1 files

Код: Выделить всё

 # 7z l /var/spool/antivir/1bXq2A-000H4k-JM-00004.src.gz

7-Zip [64] 15.09 beta : Copyright (c) 1999-2015 Igor Pavlov : 2015-10-16
p7zip Version 15.09 beta (locale=C,Utf16=off,HugeFiles=on,64 bits,5 CPUs x64)

Scanning the drive for archives:
1 file, 138784 bytes (136 KiB)

Listing archive: /var/spool/antivir/1bXq2A-000H4k-JM-00004.src.gz

--
Path = /var/spool/antivir/1bXq2A-000H4k-JM-00004.src.gz
Open WARNING: Can not open the file as [gzip] archive
Type = bzip2

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
                    .....                            1bXq2A-000H4k-JM-00004.src
------------------- ----- ------------ ------------  ------------------------
                                             138784  1 files

Вот такая беда. Сам так и не разобрался?

Проблемы с фильтрацией писем с исполняемыми вложениями в архивах или ссылками на них в Exim.

Добавлено: 2016-09-06 16:53:45
qursar
Ged писал(а): Дело в том, что bz, gz и прочие, похоже, в каких-то случаях отдают имя файла равное имя архиву без расширения.
Признаться, не обратил внимания, но, кажется, такого не было... Хотя не знаю. Обошел проблему использованием персонально для bz2 другого архиватора
Ged писал(а): Вот такая беда. Сам так и не разобрался?
Разобрался. но не сам :oops: . Мой коллега предложил использовать вызов deepfind в кондишине:

Код: Выделить всё

condition = ${if match{${run{/usr/bin/deepfind $mime_decoded_filename}}}{\N(?i)\.(exe|com|vb|vbs|vbe|vba|wsf|bat|cmd|pif|scr|hta|js|jse|jsp|chm|cpl|reg|ocx|dll|sys|msi|msu|mst|apk|cgi|ps1)\n\N}}
Сейчас многократно упакованные вложения корректно проверяются, своим при попытке отправки такого добра вылетает error в почтовом клиенте, чужим уходит рикошет с именем файла. Секция конфа, отвечающая за проверку архивов, теперь самая громоздкая во всем конфе.
Причем уже приходили вирусы в файлах docm, xlsx, в виде бинарных частей, форматы офиса тоже пришлось добавить в список проверяемых.
В результате, режется довольно много - за сутки по несколько сотен писем.

Лог читаю, умиляюсь, вот же творческие люди:

Код: Выделить всё

<письмо бла-бла-бла> rejected during MIME ACL checks: check.sh forbidden attachment: recipients=<бла-бла-бла>, content-type=application/x-zip-compressed, attach_filename=Скан-копия документов.zip, mime_content_description=, contain_dangerous_file=Скан-кoпия - 6 сентября 2016. Срочно сверяемся. Подписано главным бухгалтерoм. Экспортировано из 1С.js

Проблемы с фильтрацией писем с исполняемыми вложениями в архивах или ссылками на них в Exim.

Добавлено: 2016-12-21 23:10:20
lintech
qursar писал(а): Лог читаю, умиляюсь, вот же творческие люди:

Код: Выделить всё

<письмо бла-бла-бла> rejected during MIME ACL checks: check.sh forbidden attachment: recipients=<бла-бла-бла>, content-type=application/x-zip-compressed, attach_filename=Скан-копия документов.zip, mime_content_description=, contain_dangerous_file=Скан-кoпия - 6 сентября 2016. Срочно сверяемся. Подписано главным бухгалтерoм. Экспортировано из 1С.js
Подскажите как добились чтоб contain_dangerous_file выдавал в лог обнаруженный файл с запрещённым расширением ?

Проблемы с фильтрацией писем с исполняемыми вложениями в архивах или ссылками на них в Exim.

Добавлено: 2016-12-22 13:49:17
xM
См. дискуссию в списке рассылки.
http://mailground.net/pipermail/exim-us ... 01997.html

Проблемы с фильтрацией писем с исполняемыми вложениями в архивах или ссылками на них в Exim.

Добавлено: 2016-12-25 13:56:52
doker
чтобы не плодить темы я сюда напишу ,если не возражаете.
Exim version 4.80

проблема - фильтр не срабатывает для запакованного в zip файла с именем в кириллице когда exim в режиме демона
есть механизм фильтрации по вложениям

Код: Выделить всё

acl_check_mime:

  warn
       condition = ${if match{$mime_filename}{\N(?i)\.(zip|rar|tgz|tar|7z)$\N}}
       condition = ${if def:sender_host_address}
       decode = default
       condition = ${if or{{match{${run{/usr/bin/unzip -l $mime_decoded_filename}}}{\N(?i)\.(jse|wsf|zip|rar|tgz|tar|7z|exe|com|vbs|bat|pif|scr|hta|js|cmd|chm|cpl|jsp|reg|vbe|lnk|dll|sys|jar)\n\N}}\
                           {match{${run{/usr/bin/unrar l $mime_decoded_filename}}}{\N(?i)\.(jse|wsf|zip|rar|tgz|tar|7z|exe|com|vbs|bat|pif|scr|hta|js|cmd|chm|cpl|jsp|reg|vbe|lnk|dll|sys|jar)\n\N}}\
                           {match{${run{/bin/tar -tf $mime_decoded_filename}}}{\N(?i)\.(jse|wsf|zip|rar|tgz|tar|7z|exe|com|vbs|bat|pif|scr|hta|js|cmd|chm|cpl|jsp|reg|vbe|lnk|dll|sys|jar)\n\N}}\
                           {match{${run{/usr/bin/7z l $mime_decoded_filename}}}{\N(?i)\.(jse|wsf|zip|rar|tgz|tar|7z|exe|com|vbs|bat|pif|scr|hta|js|cmd|chm|cpl|jsp|reg|vbe|lnk|dll|sys|jar)\n\N}}\
                            }}
        set acl_m0 = 33
         set acl_m1 =  A arhive attachment contains a Windows-executable file - blocked because we are afraid of new viruses not recognized [yet] by antiviruses.
        set acl_m2= $sender_address
        set acl_m3 = 1 #не посылаь в архив

  warn
       condition = ${if def:sender_host_address}
       log_message = forbidden attachment: filename=$mime_filename, content-type=$mime_content_type, recipients=$recipients
       condition = ${if or{{match{$mime_content_type}{(?i)executable}}{match{$mime_filename}{\N(?i)\.(jse|wsf|exe|com|vbs|bat|pif|scr|hta|js|cmd|chm|cpl|jsp|reg|vbe|lnk|dll|sys|jar)$\N}}}}
        set acl_m0 = 33
         set acl_m1 =  A arhive attachment contains a Windows-executable file - blocked because we are afraid of new viruses not recognized [yet] by antiviruses.
        set acl_m2= $sender_address
        set acl_m3 = 1 #не посылаь в архив


  accept
вроде работает , пользователям отлупы приходят . но сегодня фильтром пропускается письмо с архивом. в архиве 2 файла, pdf и js. имена кириллицей в win 1251 (вместе с точкой, вельми подозрительно ) . А вот теперь самое интересное - в отладочном режиме exim -d+all -bd (и от рута и sudo -u Debian-exim) всё ок и письмо фильтруется , а в штатном режиме - демоном, пропускает.
вложенные файлы :
Акт сверки от 14 марта 2016 года. Реестр первичной документации. Составлено в 1С Бухгалтерия.8c04_tхt .js
Структурная схема.pdf

cat /etc/default/locale
# File generated by update-locale
LANG="ru_RU.UTF-8"

латинскими и в режиме демона всё ок

сталкивался кто нибудь с подобным ? или может мысли какие появятся , буду благодарен.
есть возможность такой же поток отладочной информации в режиме демона получить ?

Отправлено спустя 7 минут 50 секунд:
sudo -u Debian-exim unzip -l /var/spool/exim4/scan/1.zip
Archive: /var/spool/exim4/scan/1.zip
Length Date Time Name
--------- ---------- ----- ----
57580 2015-05-28 10:29 Акт сверки от 14 марта 2016 года. Реестр первичной документации. Составлено в 1С Бухгалтерия.8c04_tхt .js
53817 2014-10-07 13:17 Структурная схема.pdf
--------- -------
111397 2 files

Проблемы с фильтрацией писем с исполняемыми вложениями в архивах или ссылками на них в Exim.

Добавлено: 2016-12-26 10:04:15
doker
удалил unzip распаковку и передвинул на первое место 7z, заработал... шайтан

Проблемы с фильтрацией писем с исполняемыми вложениями в архивах или ссылками на них в Exim.

Добавлено: 2017-01-10 15:10:51
doker
не, нифига не заработало, если в архиве файл с кири лицей он его пропускает.. продолжаю копать

Отправлено спустя 46 секунд:
накопал ,
{match{${run{/usr/bin/unzip -v -O WIN-1251 $mime_decoded_filename}}}{\N(?i)\.(APP)\n\N}}
ай эм хаппи ))

Проблемы с фильтрацией писем с исполняемыми вложениями в архивах или ссылками на них в Exim.

Добавлено: 2017-01-10 15:42:59
xM
А если там будет не Win ?

Проблемы с фильтрацией писем с исполняемыми вложениями в архивах или ссылками на них в Exim.

Добавлено: 2017-01-10 15:56:41
doker
7z замечательно отрабатывает

Проблемы с фильтрацией писем с исполняемыми вложениями в архивах или ссылками на них в Exim.

Добавлено: 2017-01-11 23:02:20
xM
doker писал(а): 7z замечательно отрабатывает
У вас в строкe unzip с прямым указанием кодировки, а не 7z

Проблемы с фильтрацией писем с исполняемыми вложениями в архивах или ссылками на них в Exim.

Добавлено: 2017-01-12 9:37:35
doker
xM писал(а): У вас в строкe unzip с прямым указанием кодировки, а не 7z
именно )))

Проблемы с фильтрацией писем с исполняемыми вложениями в архивах или ссылками на них в Exim.

Добавлено: 2017-04-04 17:49:00
Alex Keda
я чего-то недогоняю - всех прёт чтоли одни и те же шаблоны по сто раз копировать?

сегодня обновил один из серверов, отлетела часть старого конфига =)
приятной неожиданностью оказалось что все ссылки гуглов/яндексов ведут сюда, на форум =)

в первом приближении вышло так, пока тестирую, наверное чегнить выкину и допишу.
deepfind - это из пакета deskutils/strigiutils

Код: Выделить всё

mx# grep -A 3 макросы /usr/local/etc/exim/configure
# макросы
EXE_PATTERNS = apk|cgi|js|jse|jsp|wsf|exe|com|vb|vba|vbs|vbe|bat|pif|ps1|scr|hta|cmd|chm|cpl|reg|lnk|dll|sys|jar|ocx|msi|msu|mst
ARCH_PATTERNS = 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

Код: Выделить всё

mx# cat  /usr/local/etc/exim/includes/450.acl_check_mime.conf
#

# Проверка вложений на исполняемые файлы
deny    message                 = We do not accept attachments like: $mime_filename
        condition               = ${if or{{match{$mime_content_type}{(?i)executable}}{match{$mime_filename}{\N(?i)\.(EXE_PATTERNS)$\N}}}}
        log_message             = Rejected mail with executable attachement: filename=$mime_filename, content-type=$mime_content_type, recipients=$recipients

deny    message                 = We do not accept attachments/deepfind like: $mime_filename
        condition               = ${if match{$mime_filename}{\N(?i)\.(ARCH_PATTERNS)$\N}}
        decode                  = default
        condition               = ${if match{${run{/usr/local/bin/deepfind $mime_decoded_filename}}}{\N(?i)\.(EXE_PATTERNS)\n\N}}
        log_message             = Rejected mail with executable/deepfind attachement: filename=$mime_filename, content-type=$mime_content_type, recipients=$recipients


deny    message                 = A arhive attachment contains a Windows-executable file - blocked because we are afraid of new viruses not recognized [yet] by antiviruses.
        condition               = ${if match{$mime_filename}{\N(?i)\.(zip|rar|tgz|tar|gz|7z)$\N}}
        condition               = ${if def:sender_host_address}
        decode                  = default
        condition               = ${if or{\
                                        {match{${run{/usr/local/bin/unzip -l $mime_decoded_filename}}}{\N(?i)\.(EXE_PATTERNS)\n\N}}\
                                        {match{${run{/usr/local/bin/unrar l $mime_decoded_filename}}}{\N(?i)\.(EXE_PATTERNS)\n\N}}\
                                        {match{${run{/usr/bin/tar -tf $mime_decoded_filename}}}{\N(?i)\.(EXE_PATTERNS)\n\N}}\
                                        {match{${run{/usr/local/bin/7z l $mime_decoded_filename}}}{\N(?i)\.(EXE_PATTERNS)\n\N}}}}
        log_message             = forbidden arhive attachment: filename=$mime_filename, content-type=$mime_content_type, recipients=$recipients


accept