Ботнеты из зараженных серверов под управлением ОС на базе *nix становятся все более популярными у злоумышленников. Широкий канал, отличный uptime и мощное железо делают сервера привлекательной целью для заражения. Принято считать, что для полноценного заражения *nix-системы нужно обладать правами root. Однако злоумышленники придумывают все новые и новые способы извлечения из зараженного сервера максимума пользы, довольствуясь при этом маленькими привилегиями. В этом посте мы расскажем о довольно нестандартном ботнете под названием MAYHEM, состоящем из зараженных серверов.
Изначально MAYHEM представляет собой php-скрипт, который после запуска определяет архитектуру системы (x86 или x64) и наличие прав на запись в текущую директорию. Эти привилегии в подавляющем большинстве случаев есть у пользователя, под которым запущен веб-сервер, и в данном случае их достаточно для работы бота.
После php-скрипт убивает все запущенные под текущим пользователем процессы “/usr/bin/host”, извлекает из себя shared object для нужной архитектуры (x86 или x64) и запускает процесс “/usr/bin/host” с подгрузкой в него shared object при помощи техники LD_PRELOAD.
Техника LD_PRELOAD довольно хорошо описана. Она позволяет загрузить shared object в адресное пространство процесса раньше оригинального исполняемого файла. Также эта техника позволяет осуществлять подмену функций, например, стандартной библиотеки. Вкратце, если подгружаемый через LD_PRELOAD объект экспортирует какую-то функцию, которая совпадает с функциями из других shared objects, то будет использоваться именно эта функция.
Таким образом, техника LD_PRELOAD позволяет с легкостью перехватывать функции, чем и пользуются злоумышленники. В данном случае вредоносный объект перехватывает функцию “exit”.
После старта и получения управления вредоносный shared object удаляет переменную окружения LD_PRELOAD и свое тело с диска, а затем производит еще несколько антиотладочных приемов. В результате на диске не остается практически никаких следов его присутствия.
Далее, если все в порядке, происходит расшифрование конфигурации, которая находится в сегменте данных этого объекта. Конфигурация шифруется при помощи алгоритма XTEA (32 раунда) в режиме ECB.
В конфигурации содержится всего три параметра: URL командного сервера (С&C), имя файла со скрытой файловой системой и размер скрытой файловой системы.
После первоначальной настройки бот определяет, создана ли уже скрытая файловая система. Если нет, он создает ее. Скрытая файловая система представляет собой образ диска с файловой системой FAT, каждый блок которой шифруется алгоритмом XTEA (32 раунда, режим ECB). Работа с FAT происходит при помощи open source библиотеки FAT 16/32 File System Library, а ключи шифрования вырабатываются из номера блока в файловой системе и зависят только от этого номера. Данная файловая система используется для хранения служебных файлов и плагинов бота.
Если файловая система успешно инициализирована или была создана ранее, бот переходит к своим основным функциям. Сначала он оповещает командный сервер (C&C) о начале работы и далее получает и выполняет его команды: скачивает нужный плагин и задания к нему, создает некоторое количество рабочих потоков и приступает к исполнению задания.
Как уже было сказано ранее, бот расширяет свою функциональность при помощи плагинов. В ходе исследования нам удалось обнаружить и проанализировать некоторые из них. Набор плагинов позволяет ботнету выполнять следующие задачи:
- Поиск сайтов, уязвимых к Remote File Inclusion (RFI). На скриншоте показан кусочек списка, который используется для тестирования сайта.
- Определение имен пользователей для сайтов на базе WordPress CMS. Бот получает от командного сервера список сайтов под управлением WordPress и в процессе работы получает для каждого такого сайта список зарегистрированных пользователей. Делается это при помощи запроса следующего вида:
<адрес сайта>/?author=<ID пользователя>
. ID пользователей перебираются в диапазоне от 1 до 5. В дальнейшем собранные данные используются для подбора паролей. - Поиск страниц авторизации для сайтов на Joomla и WordPress. Бот получает от C&C список сайтов и в процессе работы пытается получить страницы /wp-login.php или /administration/. В случае успеха он возвращает командному серверу список сайтов, на которых данные страницы были найдены.
- Перебор паролей к страницам авторизации CMS и ISP-панелей. Этот плагин настраивается при помощи гибкой системы правил и позволяет перебирать пароли для практически любых страниц авторизации. Пример настройки этого плагина можно увидеть на скриншоте ниже.
Для перебора злоумышленники используют словарь, состоящий из 17911 паролей с длинами от 1 до 32 символов. Облако из этих паролей служит заглавной картинкой к этому посту.
- Поиск страниц с заданной тематикой. Плагин получает список сайтов, обходит их рекурсивно (глубина обхода задается в конфигурации) и собирает адреса страниц, которые удовлетворяют определенному набору правил. Пример такого набора правил представлен на скриншоте ниже.
- Плагины для перебора паролей FTP-аккаунтов, плагины для обхода диапазонов IP-адресов, поиска phpMyAdmin и так далее.
- Отдельно стоит остановиться на плагине для эксплуатации уязвимости HeartBleed. Несмотря на то, что многие системные администраторы уже обновили OpenSSL, в интернете все еще остается довольно большое количество уязвимых серверов.
Таким образом, модульная структура позволяет использовать ботнет для самых различных задач. Отдельно остановимся на C&C. В ходе исследований нам удалось обнаружить три различных командных сервера. Один из них уже не функционировал, а оставшиеся два использовались для управления более чем 1400 ботами.
Мы проанализировали наиболее крупный из двух командных серверов. Общий вид системы управления ботнетом выглядит так:
Под управлением этого сервера работало около 1100 ботов. Распределение зараженных серверов по странам можно посмотреть на карте ниже. Более темный тон означает большее количество зараженных серверов.
Таким образом, основную часть ботнета составляли сервера, расположенные в России, США, Германии и Канаде.
А вот так выглядит интерфейс, позволяющий дать задание всему ботнету или отдельным группам ботов:
В момент исследования данный ботнет занимался перебором паролей для административной части сайтов на базе WordPress CMS. На картинках ниже показан прогресс выполнения задания и часть файла с подобранными паролями — отчета о проделанной работе.
Как видно, пользователи использовали слабые пароли неустойчивые к перебору.
Таким образом, для создания ботнета из зараженных серверов отнюдь не обязательно получать доступ к серверу с правами root. Злоумышленники постоянно выдумывают новые способы эффективного использования уязвимых сайтов и серверов. На сегодняшний день они уже готовы довольствоваться даже малыми привилегиями в системе. Учитывайте это при администрировании своих серверов и разработке веб-приложений, используйте стойкие к перебору пароли, регулярно обновляйте OpenSSL и следите за безопасностью своих веб-приложений.
Берегите своих пользователей и свои веб-серверы.
Автор: alextheraven