Как защитить мой сервер от CVE-2019-10149 - Exim - исправлен или не исправлен - Как отклонить почту на RCPT $ {run

Что касается недавно обнародованной уязвимости Exim CVE-2019-10149, я запускаю предположительно исправленный Exim v. 4.90_1 (построенный 4 июня 2019 года) на Ubuntu 18.04.2 LTS.

Несмотря на то, что он якобы исправлен, согласно Canonical, я получаю много попыток эксплойта, которые заканчиваются как замороженные сообщения.

Это несколько тревожно.

Есть ли способ отклонить сообщения для получателей, начинающихся с символа «$»?

И как я могу проверить, не работают ли эти эксплойты?

2
задан 29 June 2019 в 14:15
2 ответа

Быстрая версия:

Для защиты вашего сервера от атак со стороны 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).

Другие системы могут немного отличаться, но в основном вы просто запрещаете адреса получателей в вашей системе, которые содержат дополнительные символы '$', '{' и '}'. Вы можете просто добавить знак доллара в свою конфигурацию, где обозначены недопустимые символы, но я предпочитаю быть в большей безопасности в случае обнаружения аналогичного эксплойта, поэтому я также добавил фигурные скобки.

Единственное предостережение - если в вашей локальной системе есть адреса, содержащие знаки доллара или фигурные скобки, они не будут получать почту. Но у кого есть (скрытый) адрес? Он не будет блокировать отправку почты на эти адреса, однако в том маловероятном случае, если вы отправляете на (скрытый), есть дополнительное преимущество, заключающееся в том, что он не только отклоняет вредоносную почту, но и отправляет сообщение о недоставке на сервер-нарушитель. 128] Я разъясняю эту тему здесь:

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 до исправленной версии.

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

Я действительно думаю, что уязвимость кроется в маршрутизаторах, а не в ACL, но я просканировал столько мусора на этом моя память сейчас немного поджарена.

Что я могу сказать, потому что я тестировал, так это то, что это будет отклонять любые письма с адресом RCPT, содержащим знак доллара. Это включает $ {run's.

Я нашел здесь длинный ответ относительно отказа от $ {run's. https://marius.bloggt-in-braunschweig.de

В ретроспективе это кажется очевидным, но тогда я сильно над этим подумал.

ЗДЕСЬ:

Вы можете протестировать следующее исправление вживую - ПЕРЕД ИСПРАВЛЕНИЕМ - открыв дополнительный терминал и запустив

tail -Fn +0 /var/log/exim4/mainlog | grep "{run"

Затем отправьте с локальной почтовой учетной записи на (скрытую) отправку с удаленного адреса на тот же адрес.

Затем выполните исправление ниже.

Примечание: замените путь журнала на путь основного журнала, если он другой.

В любом случае, у меня есть конфигурация разделенного файла 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.

Проверьте успешное отклонение тем же методом:

Отправить с локальной учетной записи электронной почты на (скрытую) отправить с удаленного адреса на этот тот же адрес.

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

Посмотрите на терминал, который вы открыли, с хвостом журналов. Вы должны увидеть отказы от второй пары.

ДРУГИЕ ИДЕИ ПО ТЕСТИРОВАНИЮ

Таким образом, уязвимость просто выполняет команды оболочки, как если бы вы выполняли их на терминале. Вы просто отправляете свои команды по адресу, подобному этому: (скрыто). Есть небольшая загвоздка: обычно необходимо кодировать недопустимые символы (для адреса электронной почты). Вы можете сформировать свой сценарий таким образом или поместить сценарий в каталог / bin, который что-то делает, скажем - сохраняет файл в корневом каталоге.

Если вы отправляете его с локального адреса, и он появляется, вы Лучше бы исправить это быстро, потому что это означает, что он запускается от имени root. Вы также можете попробовать то же самое, но сделайте папку, т.е. / runtest, принадлежащей пользователю, от имени которого работает ваш Exim (в Ubuntu обычно пользователь Debian-exim). Если он появится, значит, вы по-прежнему находитесь в тени, но для худших вариантов червя, похоже, требуется root-доступ (пока что я видел обнародованные, но это может измениться в любой момент). Тем не менее исправьте это.

Если вам интересно, почему я использовал (скрыто), это потому, что я хотел проверить отклонение безопасным способом, который не взорвет мой сервер.

Если кто-нибудь может уточнить что-либо из этого, пожалуйста, сделайте пожалуйста. Миру нужно это услышать.

Я действительно удивлен, что ни один человек не пискнул, хороший, плохой или равнодушный.

Я буду периодически обновлять это, когда у меня будет время, и информация будет поступать.

1
ответ дан 3 December 2019 в 09:56

Это то, что мы имеем на работе для людей, которые не обновили 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

После начать 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
3
ответ дан 3 December 2019 в 09:56

Теги

Похожие вопросы