Семейство вредоносных программ Linux/Mumblehard представляет из себя специальный инструмент злоумышленников, с использованием которого они компрометировали серверы под управлением различных модификаций ОС Linux и BSD. Основное назначение этой вредоносной программы заключается в предоставлении полного доступа к скомпрометированной системе для злоумышленников (бэкдор) и рассылка спама. После получения такого доступа, злоумышленники могут запускать на удаленной системе другие вредоносные программы. Mumblehard также имеет в своем составе модули для организации прокси и рассылки спама.



Компоненты этой вредоносной программы представляют из себя скрипты на языке Perl, которые зашифрованы и упакованы внутри исполняемого ELF-файла. В некоторых случаях эти скрипты могут содержать в себе еще один исполняемый ELF-файл.

Аналитики ESET смогли выполнить операцию sinkhole для получения статистики о зараженных системах, что позволило нам подсчитать их количество и уведомить их владельцев. Наш анализ привел нас к следующим ключевым находкам:

  • Модули вредоносной программы Linux/Mumblehard представляют из себя скрипты на языке Perl, они располагаются в исполняемых ELF-файлах Mumblehard, которая написана с использованием ассемблера.
  • С использованием sinkhole удалось выявить 8,867 уникальных IP-адреса зараженных систем за семимесячный период.
  • Наибольшее количество таких уникальных IP-адресов в день составляло 3,292.
  • Вредоносная программа была активна как минимум с 2009 г.
  • Веб-серверы доминировали среди всех зараженных компьютеров.
  • Существует тесная связь между Mumblehard и Yellsoft. Последняя представляет из себя компанию, распространяющую ПО для массовой отправки почтовых электронных писем.

Введение

Наши аналитики столкнулись с Linux/Mumblehard, когда системный администратор одной из компаний связался с нашими специалистами для получения консультации по поводу своего сервера, который был занесен в «черный список» провайдера за рассылку спама. На этом сервере мы зафиксировали подозрительный процесс и сделали дамп его памяти. Процесс представлял из себя запущенный интерпретатор Perl. Этот процесс исполнял вредоносный скрипт. Мы также обнаружили подозрительный ELF-файл в директории /tmp. В процессе анализа стало ясно, что этот файл принадлежит Linux/Mumblehard.

Внимание наших аналитиков привлек тот факт, что сами вредоносные скрипты Perl располагались внутри исполняемого ELF-файла, что является довольно необычным случаем их хранения. Наше расследование показало, что группа киберпреступников, которая стоит за этой вредоносной программой, имела тесные связи с IT-компанией под названием Yellsoft. Первый образец компонента Mumblehard, отвечающий за рассылку спама, был загружен на сервис VirusTotal еще в 2009 г. В то же время, компания Yellsoft работает с 2004 г. Нам не ясно, имела ли связи эта компания со злоумышленниками в период с 2004 по 2009 гг.


Рис. Домашняя веб-страница Yellsoft, как она выглядела в 2004 г.

С использованием нашего специального сервера и списка тех систем, которые были инфицированы, мы установили два основных вектора распространения этого вредоносного ПО. Одним из таких векторов было использование злоумышленниками эксплойтов для популярных систем управления содержимым сайтов Joomla и Wordpress. Другой вектор заключался в распространении злоумышленниками пиратских backdoored версий программы DirectMailer для Linux & BSD. Эта программа продается компанией Yellsoft за $240. Пиратские копии программы специализируются на установке бэкдора Mumblehard. Бэкдор позволяет злоумышленникам устанавливать на скомпрометированный сервер другие вредоносные программы.

Анализ вредоносной программы

Мы проанализировали два различных компонента вредоносной программы, которые использовались группой злоумышленников. Первый представляет из себя бэкдор, который будет запрашивать команды с управляющего C&C-сервера. Данные команд содержат URL-адреса. Они должны быть загружены и исполнены на скомпрометированном сервере. Второй компонент представляет из себя спам-компонент, т. н. spammer daemon. Оба компонента написаны на Perl и обфусцированы с использованием одного упаковщика, который написан на ассемблере и располагается в ELF-файле. Ниже показана диаграмма, на которой видны связи между компонентами Mumblehard и их управляющими серверами.


Рис. Взаимодействие между компонентами Mumblehard и их управляющими серверами.

Одной из первых интересных особенностей, на которую мы обратили внимание, является упаковщик Perl скриптов, расположенный внутри ELF-файла. Он написан на ассемблере и состоит из двухсот инструкций. Этот код сам вызывает системные сервисы Linux путем использования инструкции int 80h. Программные функции упаковщика также лишены обычного пролога, ответственного за обслуживание стека.

Использование системного вызова int 80h дает коду упаковщика одно существенное преимущество, лишая его любых внешних зависимостей от библиотек ОС. Кроме этого, сам упаковщик может нормально работать как на Linux, так и на BSD. Тип системы определяется в начале кода вредоносной программы путем системного вызова номер 13 с аргументом 0. Для Linux это соответствует вызову API функции time(NULL), а на BSD вызову fchdir(stdin). В случае с BSD вызов функции с таким аргументом завершится неудачей и возвращаемое значение будет представлять из себя отрицательное число, а в случае с Linux, возвращаемое значение соответствующего вызова будет положительным, и оно соответствует количеству секунд, прошедших с 1-го января 1970 г.


Рис. Точка входа в исполняемый ELF-файл (начало кода упаковщика). Виден вызов сервиса с идентификатором 13 (SYS_TIME).

Далее вредоносный код вызовет функцию fork() и запустит интерпретатор Perl вызовом execve("/usr/bin/perl", ...). Тело самого скрипта будет отправлено процессу интерпретатора через канал STDIN. С использованием системного вызова dup2 родительский процесс сможет передать расшифрованный скрипт процессу интерпретатора через продублированный файловый дескриптор.

Сам бэкдор выполняет простую работу, он запрашивает команды с управляющего C&C-сервера и сообщает ему результаты их исполнения. Бэкдор не запускается в системе в виде сервиса (демона), вместо этого он использует планировщик задач crontab, который обеспечивает ему исполнение каждые 15 мин.



Он также маскирует себя под сервис httpd.



При каждом своем запуске бэкдор опрашивает все C&C-серверы из списка для получения команд. На самом деле он поддерживает только одну команду с идентификатором 0x10, которая инструктирует бэкдор на загрузку с URL-адреса указанного файла и его последующее исполнение в системе. Как правило, список C&C-серверов состоит из десяти адресов. Обнаруженный нами список был идентичен для всех образцов Linux/Mumblehard, которые мы наблюдали. Мы были свидетелями активности только одного C&C-сервера с IP-адресом 194.54.81.163. Один из серверов с доменом behance.net в 2005 г. принадлежал компании Adobe.

  • 184.106.208.157
  • 194.54.81.163
  • advseedpromoan.com
  • 50.28.24.79
  • 67.221.183.105
  • seoratingonlyup.net
  • advertise.com
  • 195.242.70.4
  • pratioupstudios.org
  • behance.net

Когда сервер с адресом 194.54.81.163 содержит команду для отправки, он может ответить только в фиксированный промежуток времени.

Бэкдор формирует свой HTTP GET запрос для каждого C&C-сервера из списка. Сервер отвечает командой, которая замаскирована в поле Set-Cookie HTTP-заголовка. Такая техника может быть оправдана, поскольку при захвате такого сетевого пакета его анализ не вызовет подозрений.


Рис. Пример ответа C&C-сервера.

Параметр cookie под названием PHPSESSID закодирован в шестнадцатеричном представлении. Строки внутри самих команд также зашифрованы с использованием специального алгоритма. Этот алгоритм идентичен тому, который использовался в упаковщике Perl-скриптов. Можно предположить, что за разработкой обоих частей кода вредоносной программы стояла одна и та же группа или человек.


Рис. Функция расшифровки данных команды, полученной с C&C-сервера.


Рис. Та же функция расшифровки на Perl.

Как только строка будет расшифрована, следующая информация будет извлечена из «cookie».


Табл. Список параметров внутри PHPSESSID cookie.


Табл. Пример значений параметров внутри PHPSESSID.

При запросе команды с C&C-сервера, бэкдор использует жестко зашитую (hardcoded) строку user agent. Строка указана ниже и соответствует той, которая используется браузером Mozilla Firefox 7.0.1 на Windows 7.



После того как загрузка файла по URL-адресу и его исполнение завершены, бэкдор сообщает статус выполнения операции на каждый из C&C-серверов, с которого была принята команда. Эта информация замаскирована внутри строки user agent и имеет следующий вид.



На следующем рисунке показан пример строки user agent, которую отправляет бэкдор при успешном (HTTP 200 OK) выполнении операции (download-and-execute) с кодом 0x18 (24) на исполнение файла размером 56,013 байт.

Комментарии (1)


  1. ComodoHacker
    01.05.2015 21:58

    Вывод о связи злоумышленников с Yellsoft довольно натянутый.
    По этой логике вся нечисть, засаженная в разные пиратские сборки Windows, имеет связь с Microsoft?