Что касается недавно опубликованной уязвимости Exim CVE-2019-10149, я запускаю предположительно исправленный Exim v. 4.90_1 (построенный 4 июня 2019 года) в Ubuntu 18.04.2 LTS.
Хотя он якобы исправлен, согласно Canonical, я получаю много попыток эксплойта, которые заканчиваются сообщениями Frozen.
Это несколько тревожно.
Есть ли способ отклонить сообщения для получателей, начинающихся с символа «$»?
И как я могу проверить, не работают ли эти эксплойты?
Это то, что мы делаем для людей, которые не обновляли exim. Более конкретное соответствие ${run{...}}
строка. Также здесь есть скрипт для локальной проверки уязвимости вашего сервера, exim-cve-2019-10149
Если acl_smtp_rcpt
еще не установлен на acl_check_rcpt
(возможно через MAIN_ACL_CHECK_RCPT
), изменение
acl_smtp_rcpt = acl_smtp_rcpt
к
acl_smtp_rcpt = acl_check_rcpt
После begin acl
, или в /etc/exim4/conf.d/acl/30_exim4-config_check_rcpt
в раздельной конфигурации добавьте или измените:
acl_check_rcpt:
deny
message = Restricted characters in address
domains = +local_domains
local_parts = ^[.] : ^.*[@%!/|] : ^.*\N\${run{\N.*}}
deny
message = Restricted characters in address
domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./ : ^.*\N\${run{\N.*}}
accept
Быстрая версия:
Чтобы защитить ваш сервер от атак эксплойта CVE-2019-10149 «Return of the WIZard», будь то исправленная или непатченная версия Exim, если вы используете ОС на основе Debian с Exim «split-config», добавьте следующие строки в ваш файл 00_local_macros в папке /etc/exim4/conf.d/main или по любому пути, по которому этот файл находится в вашей системе:
CHECK_RCPT_LOCAL_LOCALPARTS = ^[.] : ^.*[\${}@%!/|`#&?] : ^.*/\\.\\./
CHECK_RCPT_REMOTE_LOCALPARTS = ^[.] : ^.*[\${}@%!/|`#&?] : ^.*/\\.\\./
Кроме того, неплохо добавить:
smtp_banner = $smtp_active_hostname ESMTP $tod_full
Это изменит приветствие вашего сервера Exim, чтобы не указывать его номер версии, а также тот факт, что это Exim, поэтому сервисные сканеры вроде https://shodan.io не будет показывать эту информацию (когда-нибудь позже) как вектор поверхностной атаки, специфичный для этого эксплойта (или любого другого, основанного на Exim).
Другие системы могут немного отличаться, но в основном вы просто запрещаете адреса получателей в своей системе, которые содержат дополнительные символы '$', '{' и '}'. Вы можете просто добавить знак доллара в свою конфигурацию, где обозначены недопустимые символы, но я предпочитаю быть в большей безопасности в случае обнаружения аналогичного эксплойта, поэтому я также добавил фигурные скобки.
Единственное предостережение: если в вашей локальной системе есть адреса, содержащие знаки доллара или фигурные скобки, они не будут получать почту. Но у кого адрес $$bling{me}@whatever.com? Однако он не будет блокировать отправку почты на эти адреса в том маловероятном случае, если вы отправите на адрес my{$$$}@somewhere-else.com
Это имеет дополнительное преимущество, заключающееся в том, что он не только отклоняет почту с уязвимостями, но и отправляет сообщение о недоставке на сервер-нарушитель.
Я поясняю эту тему здесь:
https://www.bleepingcomputer.com/forums/t/699962/mail-remote-code-execution-attempt/#entry4818756
Ранее на этом bat-канале ---
Предыстория: здесь имеется в виду исправленный exim (который может быть <4.92, но скорее всего> 4.91). Во-первых, обновите ваш Exim, sshd и действительно всю вашу систему, насколько это возможно разумно и безопасно.
Запатченная версия 4.90_1 действительно, похоже, предотвратила взлом, так как я не нашел никаких известных доказательств червя Exim «Return of the WIZard», описанных в статьях, которые я прочитал. Кроме того, Exim в Ubuntu (и я думаю, что другие варианты на основе Debian) запускаются под пользователем Debian-exim, а не как root, так что это само по себе могло предотвратить большой ущерб. Каким бы плохим ни был компромисс пользователя Debian-exim, он намного лучше, чем root. В любом случае, я не заметил никаких признаков успешного вмешательства.
Однако это все еще вызывало тревогу. Единственное, что я видел, - это периодические ссылки на замороженные сообщения в моем основном журнале Exim, где все RCPT начинались с $ {run {, за которым следовало кодирование, которое сводилось к таким вещам, как / bin / bash и ряд команд, включая пугающий wget для несколько теневых конечных точек.
В частности, все они, похоже, пришли с 89.248.171.57 - IP-адрес, который разрешается на scanner20.openportstats.com. Если вы видите похожие замороженные сообщения, вы можете перейти на openportstats.com и посмотреть свой IP-адрес, чтобы узнать, есть ли вы там. Сайт немного похож на shodan.io.
Вопрос в том, делают ли они это специально? Или они заражены? Сначала я подумал о первом, но не совсем уверен, поскольку я думал, что будут некоторые упоминания о результатах, касающихся уязвимости Exim, когда я искал свой IP, но там была только основная информация о портах и данных, извлеченных из начальных подключений.
В любом случае, идем дальше.
(Довольно расплывчатая) статья Ubuntu относительно исправленных версий Exim: https://usn.ubuntu.com/4010-1/
Вот более подробная статья, в которой описываются некоторые действующие механизмы: https://hackernews.blog/exim-4-87/#more
Лично я думаю, что многие источники держат язык за зубами по этому поводу, но паранойя приносит больше вреда, чем пользы, люди! Кот из мешка для плохих актеров. Тем, кто пытается с ним бороться и / или просто защитить себя, нужно больше информации по мере поступления.
Это исправление предназначено для к тому же для обновления вашего Exim до исправленной версии.
Я не знаю, защитит ли это версию без исправлений от этого эксплойта и, следовательно, от червя. Но это похоже на то, что я прочитал. Если по какой-то безумной причине вы не можете обновить свой Exim, обязательно попробуйте и дайте нам знать, как это работает.
Я действительно думаю, что уязвимость кроется в маршрутизаторах, а не в ACL, но я просмотрел так много мусора, что моя память сейчас немного поджарена.
Что я могу сказать, поскольку я тестировал, так это то, что это будет отклонять любые письма с адресом RCPT, содержащим знак доллара. Это включает $ {run's.
Я нашел здесь длинный ответ относительно отказа от $ {run's. https://marius.bloggt-in-braunschweig.de
В ретроспективе это кажется очевидным, но тогда я сильно над этим подумал.
ВОТ:
Вы можете протестировать следующее исправление в реальном времени - ПЕРЕД ИСПРАВЛЕНИЕМ - открыв дополнительный терминал и запустив
tail -Fn +0 /var/log/exim4/mainlog | grep "{run"
Затем отправьте с локального почтового аккаунта на адрес ${run{true}}@yourdomain.name
И отправить с удаленного адреса на тот же адрес.
Затем сделайте исправление ниже.
Примечание: замените путь журнала на путь основного журнала, если он отличается.
В любом случае, у меня есть конфигурация разделенного файла Debian, поэтому я просто нашел строки
90 .ifndef CHECK_RCPT_LOCAL_LOCALPARTS
91 CHECK_RCPT_LOCAL_LOCALPARTS = ^[.] : ^.*[@%!/|`#&?]
92 .endif
93
94 .ifndef CHECK_RCPT_REMOTE_LOCALPARTS
95 CHECK_RCPT_REMOTE_LOCALPARTS = ^[./|] : ^.*[@%!`#&?] : ^.*/\\.\\./
96 .endif
и изменил их на:
90 .ifndef CHECK_RCPT_LOCAL_LOCALPARTS
91 CHECK_RCPT_LOCAL_LOCALPARTS = ^[.] : ^.*[\$@%!/|`#&?]
92 .endif
93
94 .ifndef CHECK_RCPT_REMOTE_LOCALPARTS
95 CHECK_RCPT_REMOTE_LOCALPARTS = ^[./|] : ^.*[\$@%!`#&?] : ^.*/\\.\\./
96 .endif
Обратите внимание на добавление "\ $" в обоих.
Затем перезапустите Exim.
Тест на успешное отклонение тем же методом:
Отправить из локальной почты на адрес ${run{true}}@yourdomain.name
И отправить с удаленного адреса на тот же адрес.
В случае успеха и нормальной конфигурации для отказов вы должны немедленно получить отказ для второй пары отправок.
Посмотрите на терминал, который вы открыли хвостом логов. Вы должны увидеть браки по второй паре.
ДРУГИЕ ИДЕИ ПО ТЕСТИРОВАНИЮ
Таким образом, уязвимость просто выполняет команды оболочки, как и в терминале. Вы просто отправляете свои команды на адрес вроде этого: ${run{my_command}}@mytargetdomain.com. Есть небольшая загвоздка: обычно необходимо кодировать недопустимые символы (для адреса электронной почты). Вы можете создать свой сценарий таким образом или поместить сценарий в каталог / bin, который что-то делает, скажем, - сохраняет файл в корневой каталог.
Если вы отправляете его с локального адреса, и он появляется, вам лучше исправить его быстро, потому что это означает, что он запускается от имени пользователя root. Вы также можете попробовать то же самое, но сделайте папку, т.е. / runtest, принадлежащей пользователю, от имени которого запускается ваш Exim (в Ubuntu обычно пользователь Debian-exim). Если он появится, значит, вы по-прежнему находитесь в тени, но для худших вариантов червя, похоже, требуется root (пока что я видел, как это было опубликовано, но это может измениться в любой момент). Все еще исправлю.
Если вам интересно, почему я использовал ${run{true}}@mydomain.com, то это потому, что я хотел проверить отклонение безопасным способом, чтобы не взорвать мой сервер.
Если кто-нибудь может подробнее рассказать об этом, пожалуйста, сделайте это. Миру нужно это услышать.
Я действительно удивлен, что ни один человек не заглянул, хороший, плохой или равнодушный.
Я буду периодически обновлять это, когда у меня будет время, и информация будет поступать.