Содержание статьи
- Cron
- Janicab
- Агенты и демоны
- RustDoor
- Login Items
- Windtail
- Динамические библиотеки
- DYLD_INSERT_LIBRARIES
- Tiny FUD
- Вывод
MacOS считается наиболее защищенной от вредоносных программ. Тем не менее они не просто существуют, но еще и умеют эффективно закрепляться в системе, используя для этого функциональные возможности самой macOS. В этой статье мы подробно рассмотрим методы persistence-троянов для «маков» и приведем наглядные примеры таких вредоносов.
Проникнув в операционную систему, любой уважающий себя вредонос пытается закрепиться в ней. Как минимум вредоносная программа стремится обеспечить собственный запуск после перезагрузки ОС. Этот процесс называется persistence. В macOS существует немало способов закрепления в системе, и некоторые из них перекочевали в нее еще из BSD, например использование cron. Однако некоторые persistence-методы вполне оригинальные, и о них мы чуть позже поговорим подробнее.
Cron
Cron — это планировщик задач Unix-подобных систем, который позволяет настроить выполнение команд в назначенное время. Все запланированные задачи хранятся в кронтаб‑файле (crontab), а все задачи называют кронджобами (cronjobs). Использование крона для закрепления в системе не так распространено, как остальные методы, но его активно используют некоторые вредоносы, например Janicab.
Janicab
""" add to crontab"""#save the current crontab filesubprocess.call("crontab -l > /tmp/dump",shell=True)#seek file if runner is in itinfile = open("/tmp/dump","r")if not "runner.pyc" in infile.read(): #add the script to crontab subprocess.call("echo "* * * * * python ~/.t/runner.pyc " >>/tmp/dump",shell=True) #import the new crontab subprocess.call("crontab /tmp/dump",shell=True) subprocess.call("rm -f /tmp/dump",shell=True)infile.close()
Это часть Janicab, которая отвечает за сохранение в системе. Скрипт первым делом сохраняет существующий кронтаб во временный файл /tmp/dump и проверяет, присутствует ли команда запуска вредоноса в планировщике задач. Если нет, скрипт добавляет в кронтаб новую запись * * * * * python ~/.t/runner.pyc и удаляет временный файл.
Агенты и демоны
LaunchAgents и LaunchDaemons — механизмы macOS для автозапуска задач через систему инициализации launchd. LaunchAgents запускаются от имени пользователя после логина в систему, а LaunchDaemons — от имени root. Агенты лежат в папках /Library/LaunchAgents или /Library/LaunchAgents, а демоны — в /Library/LaunchDaemons, при этом для их запуска нужны root-права. Хочу также отметить, что существуют и системные LaunchAgents и LaunchDaemons. Они, в свою очередь, хранятся в директориях /System/Library/LaunchAgents и /System/Library/LaunchDaemons. Сами агенты и демоны реализованы в виде PLIST-файла.
Property List — это файл с расширением .plist, который хранит в себе конфигурацию и метаданные для конкретного приложения. Эти файлы бывают представлены в трех форматах: XML, JSON и бинарный. Если конкретно говорить о теме персистенса, то файлы PLIST выступают как инструкции для launchd, указывающие, как и когда программу запустить.
RustDoor
RustDoor (Trojan.MAC.RustDoor) — это написанный на Rust троян, который был обнаружен в феврале 2024 года. RustDoor распространялся под видом обновления для Visual Studio. Основная цель вредоноса — предоставление удаленного доступа к зараженной машине. RustDoor существует в нескольких вариантах: в первом, например, он использует LaunchAgent, чтобы закрепиться в системе.
После того как RustDoor заражает macOS, он создает PLIST в папке /Library/LaunchAgents, чтобы стартовать при каждом логине пользователя:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>Label</key> <string>com.apple.visualstudio</string> <key>Program</key> <string>[путь к вредоносной программе]</string> <key>KeepAlive</key> <dict> <key>SuccessfulExit</key> <false/> </dict> <key>RunAtLoad</key> <true/></dict></plist>
RunAtLoad запускает при входе в систему скрипт, который находится по ключу Program.
<key>RunAtLoad</key>
В случае если процесс будет убит, ключ KeepAlive перезапустит программу.
<key>KeepAlive</key>
Login Items
А вот и еще один метод персистенса, любезно представленный вирусописателям компанией Apple. Главное его отличие от LaunchAgent и LaunchDaemon в том, что Login Items запускаются только для конкретного пользователя. Чтобы увидеть список Login Items, нужно перейти в раздел системных настроек System Preferences → General → Login Items.
Вот скриншот Login Items на моем личном ноутбуке. Каждый раз, когда я авторизуюсь в системе, будет запускаться программа Notion. Я могу нажать +, чтобы добавить новый Login Item, или –, чтобы удалить его.
Щелкнув правой клавишей мыши на любом Login Item, я могу открыть его в Finder и тем самым выяснить полный путь к этой программе.
Windtail
Windtail (OSX.Windtail) — это вредонос, разработанный APT-группировкой WindShift. Трояна обнаружили в 2018 году, и он связан с атаками на правительственные структуры Ближнего Востока. Windtail был создан с целью выгрузки данных на серверы злоумышленников и распространялся в основном с помощью spear-фишинга: атакующие отправляли письма, замаскированные под рабочие материалы.
Когда Windtail попадает в систему, он добавляет себя в список элементов Login Items. Рассмотрим один из фрагментов кода Windtail.
Первым делом Windtail пытается создать объект NSURL, который будет хранить в себе абсолютный путь к файлу вредоноса. Затем троян вызывает функцию LSSharedFileListCreate, чтобы создать объект LSSharedFileList. Потом вызывается функция LSSharedFileListInsertItemURL и ей передается ранее созданный объект в качестве аргумента. Благодаря всем этим махинациям в Login Items добавляется исполняемый файл Windtail.
Динамические библиотеки
Динамические библиотеки — это файлы c расширением .dylib, в них хранится код, который другие программы могут загружать и использовать во время исполнения. Благодаря библиотекам разработчикам различных программ не приходится писать один и тот же код для реализации типичных функций.
Динамические библиотеки могут использоваться вредоносными программами как метод персистенса. Принцип довольно прост: первым делом вредонос находит подходящую для его целей легитимную программу. Эта программа в любом случае будет использовать какую‑нибудь библиотеку, поэтому троян подгружает вредоносную библиотеку к этой легитимной программе. Новый процесс впоследствии не создается, так как вредоносная программа подгружается в уже работающий процесс. Ну а поскольку содержащая вредоносную нагрузку библиотека будет загружена легитимным и доверенным процессом, этот способ персистенса считается более скрытным, чем остальные упомянутые методы.