• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Исследуем методы закрепления в macOS

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,179
Розыгрыши
0
Реакции
510
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
MacOS считается наиболее защищенной от вредоносных программ. Тем не менее они не просто существуют, но еще и умеют эффективно закрепляться в системе, используя для этого функциональные возможности самой macOS. В этой статье мы подробно рассмотрим методы persistence-троянов для «маков» и приведем наглядные примеры таких вредоносов.
Проникнув в операционную систему, любой уважающий себя вредонос пытается закрепиться в ней. Как минимум вредоносная программа стремится обеспечить собственный запуск после перезагрузки ОС. Этот процесс называется persistence. В macOS существует немало способов закрепления в системе, и некоторые из них перекочевали в нее еще из BSD, например использование cron. Однако некоторые persistence-методы вполне оригинальные, и о них мы чуть позже поговорим подробнее.


Cron​

Cron — это планировщик задач Unix-подобных систем, который позволяет настроить выполнение команд в назначенное время. Все запланированные задачи хранятся в кронтаб‑файле (crontab), а все задачи называют кронджобами (cronjobs). Использование крона для закрепления в системе не так распространено, как остальные методы, но его активно используют некоторые вредоносы, например Janicab.



Janicab​

Janicab (Python/Janicab.A) — это вредоносная программа, созданная APT-группировкой DeathStalker. Этот трой был впервые обнаружен в 2013 году. Основная функция этой вредоносной программы — шпионаж за зараженными системами и передача собранных данных на управляющий сервер. Троян распространялся через рассылку вредоносных документов по email. Janicab — один из немногих вредоносов, использующих cron для персистенса. Рассмотрим фрагмент этой программы:

Код:
""" add to crontab"""
#save the current crontab file
subprocess.call("crontab -l > /tmp/dump",shell=True)
#seek file if runner is in it
infile = 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-файла.

info​

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.

info​

Почему в коде использовался объект NSURL? Функции вроде LSSharedFileListInsertItemURL ожидают на вход объект NSURL, так как это часть Core Foundation и Launch Services API. Передача пути в виде строки потребовала бы дополнительного преобразования, а NSURL уже готов к использованию.

Динамические библиотеки​

Динамические библиотеки — это файлы c расширением .dylib, в них хранится код, который другие программы могут загружать и использовать во время исполнения. Благодаря библиотекам разработчикам различных программ не приходится писать один и тот же код для реализации типичных функций.

Динамические библиотеки могут использоваться вредоносными программами как метод персистенса. Принцип довольно прост: первым делом вредонос находит подходящую для его целей легитимную программу. Эта программа в любом случае будет использовать какую‑нибудь библиотеку, поэтому троян подгружает вредоносную библиотеку к этой легитимной программе. Новый процесс впоследствии не создается, так как вредоносная программа подгружается в уже работающий процесс. Ну а поскольку содержащая вредоносную нагрузку библиотека будет загружена легитимным и доверенным процессом, этот способ персистенса считается более скрытным, чем остальные упомянутые методы.

Чтобы посмотреть, какие динамические библиотеки программа вызывает при своем выполнении, можно использовать следующую команду:

otool -L [путь к программе]
Один из способов внедрения динамической библиотеки, которые вредоносные программы применяют чаще всего, — использование переменной DYLD_INSERT_LIBRARIES.


DYLD_INSERT_LIBRARIES​

DYLD_INSERT_LIBRARIES — это переменная среды, которая используется, чтобы подгружать динамические библиотеки во время запуска программ. Рассмотрим принцип ее действия на наглядном примере.

Первым делом создадим программу на C — возьмем хотя бы базовую Hello, World:

Код:
#include <stdio.h>
#include <stdlib.h>


__attribute__((constructor)) void hello() {
    printf("Hello, World!\n");
}
Здесь создана функция hello, которая будет запускаться каждый раз, когда вызывается динамическая библиотека. Сохраним эту программу у себя в системе под названием testlib.c и скомпилируем ее:

gcc -dynamiclib testlib.c -o testlib.dylib
Мы используем параметр -dynamiclib, чтобы заставить компилятор компилировать нашу программу не как стандартный бинарь, а как динамическую библиотеку.

Далее нам нужно объявить переменную DYLD_INSERT_LIBRARIES. Мы можем сделать это двумя способами.

Глобальная инъекция​

export DYLD_INSERT_LIBRARIES=[путь к вредоносной dylib]
При глобальной инъекции наша вредоносная библиотека будет инжектироваться во все новые процессы.

Инъекция в конкретную программу​

export DYLD_INSERT_LIBRARIES=[путь к вредоносной dylib] [путь к целевой программе]
Тут мы указываем конкретную программу, при запуске которой будет выполнен инжект нашей библиотеки. В остальные процессы библиотека встраиваться не будет.

Я использую глобальную инъекцию, указывая только путь к созданной нами динамической библиотеке.

export DYLD_INSERT_LIBRARIES=~/testlib.dylib
Все готово, давай тестить! Запустим любую программу, я, например, использую ncat.

Для просмотра ссылки Войди или Зарегистрируйся
Как ты можешь наблюдать, наша только что написанная библиотека подгрузилась и запустилась вместе с программой.

Этот метод очень прост в использовании. Однако хочу отметить, что такой способ персистенса будет работать не на всех бинарниках, в особенности эппловских. Это связано с Hardened Runtime, который включает флаг disable-dyld-injection, предотвращающий загрузку сторонних .dylib с использованием DYLD_INSERT_LIBRARIES.

info​

Hardened Runtime — это механизм безопасности в macOS, который защищает исполняемые файлы и процессы от атак, включая подмену динамических библиотек (.dylib), модификацию кода и отладку.
Теперь перейдем к реальной малвари, использующей такой метод закрепления в системе, — Tiny FUD.


Tiny FUD​

Совсем недавно, в январе 2025 года, появился новый троян, получивший название Tiny FUD. Аббревиатура FUD (Fully Undetectable) подчеркивает его главную фишку — способность оставаться незамеченным для антивирусов и встроенных защит macOS вроде Gatekeeper или System Integrity Protection (SIP). Это не просто очередной бэкдор, а пример того, как злоумышленники используют современные техники уклонения и встроенные механизмы macOS против самой системы.

Для просмотра ссылки Войди или Зарегистрируйся
Функция setenv устанавливает переменную окружения DYLD_INSERT_LIBRARIES, указывая путь к динамической библиотеке ShoveService. Это заставляет динамический загрузчик dyld подгружать библиотеку ShoveService в любой процесс, запущенный в текущем окружении. Этот метод эксплуатирует уязвимость CVE-2022-26712, которая позволяет обойти SIP через XPC-сервис.

info​

CVE-2022-26712 — уязвимость в macOS, которая позволяла вредоносу обойти System Integrity Protection и изменять защищенные части файловой системы c использованием PackageKit.framework. Проблема была связана с XPC-сервисом в /System/Library/PrivateFrameworks/ShoveService.framework, который имел право com.apple.rootless.install, дающее возможность обходить SIP для перемещения файлов.
В итоге Tiny FUD превращается в неуловимого призрака внутри системы. Внедряясь в macOS с помощью DYLD_INSERT_LIBRARIES, троян цепляется к существующим доверенным процессам и работает под их PID’ами, не порождая новых подозрительных процессов. Пока родительский процесс жив (а системные службы вроде WebKit или Safari Helper редко завершаются), малварь тихо будет выполнять свои деструктивные действия.

Вывод​

Вредоносы для macOS обеспечивают себе закрепление в системе при помощи как старых трюков, так и относительно свежих эксплоитов. Эти примеры показывают, как вредоносные программы используют совершенно обычные на первый взгляд функции macOS — от планировщика задач до системных фреймворков — в своих целях, чтобы сохранить себя на зараженном компьютере.
 
Activity
So far there's no one here
Сверху Снизу