Как PamStealer привязал расшифровку к живому серверу?

Jamf Threat Labs обнаружила новую версию вредоносной программы PamStealer для macOS. Разработчики сохранили загрузчик на JavaScript for Automation (JXA), но заменили приманку, приложение-пустышку, порядок доставки и шифрования полезной нагрузки, способы закрепления в системе и язык финального стилера. Главное техническое изменение касается расшифровки: нужного ключа больше нет в исходном JXA-коде, а получить исполняемый модуль без действующего командно-управляющего сервера C2 нельзя.
Как PamStealer привязал расшифровку к живому серверу?
Изображение носит иллюстративный характер

Варианты PamStealer, замеченные в июле и августе 2026 года, распространялись через поддельные сайты Maccy, Scoppr и Nancy Clipboard. JXA-код сам загружал и подготавливал полезную нагрузку, расшифровывал встроенные данные алгоритмом RC4 и через мост JXA обращался к Objective-C-фреймворкам Foundation и NSData. Конечный стилер был написан на Rust. Исследователь Jamf Threat Labs Тейс Хафлер (Thijs Xhaflaire) пояснил, что в прежних сборках материал для получения ключа находился прямо в JXA: «Без содействия сервера полезную нагрузку нельзя восстановить с помощью статического анализа».
Новая кампания ведёт жертв на поддельный сайт wavel[.]app, где рекламируется несуществующий криптовалютный кошелёк Wavel. Кнопка Download for macOS загружает образ диска Wavel.dmg с компилированным файлом AppleScript. После его открытия запускается штатный редактор Apple Script Editor. Показанные в нём инструкции убеждают пользователя самостоятельно активировать JXA-загрузчик, поэтому начало заражения выглядит как обычное выполнение предложенной сайтом процедуры установки.
В версии Wavel слой JXA заметно урезан. В нём больше нет RC4, вызовов Foundation и NSData, реализации расшифровки и полного сценария загрузки с подготовкой файлов. JXA теперь работает как переносчик: декодирует строку Base64, передаёт полученные байты на стандартный ввод команды /bin/zsh -s и сразу завершает работу. Запущенный таким способом zsh-загрузчик остаётся в фоне и продолжает заражение. С этой стадией связана инфраструктура на домене apple03cloudstore[.]com, хотя его точная функция в опубликованном описании не указана.
Следующий этап обслуживает специально созданная утилита pkgunpack. При каждом запуске она генерирует новую эфемерную пару ключей, проводит обмен X25519 с C2 и получает результат, необходимый для разблокировки Data Encryption Key, то есть DEK. Сервер хранит закрытый ключ, без которого DEK не восстановить, а зашифрованный комплект полезной нагрузки остаётся бесполезным набором данных. Перехваченный ключ одной сессии нельзя применить повторно: при следующем выполнении создаётся другая эфемерная пара. Оператор сервера тем самым решает, какому заражённому компьютеру и в какой момент разрешить расшифровку второй стадии.
После установки PamStealer отключает уведомления macOS, которые обычно предупреждают о добавлении нового фонового объекта входа. Для закрепления используются четыре дублирующих механизма: LaunchAgent, восстанавливающий zsh-скрипт, команда в ~/.zshrc и Git-хуки. LaunchAgent поддерживает запуск вредоносной программы, а ремонтный скрипт проверяет наличие комплекта полезной нагрузки и самого LaunchAgent. Если один из них удалён, скрипт возвращает недостающий компонент.
Запись в ~/.zshrc запускает ремонтный скрипт при каждом открытии интерактивной сессии zsh. Ещё одна копия помещается в хуки post-checkout и pre-commit внутри каталога ~/Library/Application Support/System/.githooks/. Командой git config --global core.hooksPath вредоносная программа назначает этот каталог глобальным хранилищем Git-хуков. В результате checkout в любом репозитории вызывает post-checkout, а commit запускает pre-commit. Для разработчика обычная работа с Git незаметно превращается в механизм самовосстановления PamStealer.
Финальный модуль теперь написан на Swift, а не на Rust, но назначение осталось прежним. Для кражи системного пароля он показывает поддельное сообщение о сбое и проверяет введённые данные через PAM, системный подключаемый механизм аутентификации. Затем стилер перечисляет элементы связки ключей macOS и извлекает доступное содержимое. Такой сценарий позволяет проверить пароль на самом компьютере жертвы, не полагаясь на случайно введённую строку.
В перечень браузеров входят Google Chrome, Microsoft Edge, Mozilla Firefox, Brave, Vivaldi, Opera, Opera GX, Arc, Zen, Waterfox, LibreWolf, Yandex Browser и Cốc Cốc. Тейс Хафлер отдельно обратил внимание на Arc, Zen, региональные и ориентированные на конфиденциальность браузеры: у массовых стилеров для macOS такой широкий охват встречается реже. PamStealer также собирает сведения о системе, фотографию профиля пользователя, список процессов и установленных приложений, а среди файлов ищет .zsh_history, .zshrc, .bash_history и .gitconfig.
Украденные пароли, браузерные данные, содержимое связки ключей, конфигурационные файлы и результаты разведки складываются в промежуточный каталог. PamStealer регулярно проверяет его состояние, упаковывает содержимое в ZIP-архив и отправляет архив на инфраструктуру злоумышленников. Пока C2 недоступен или отказывается участвовать в обмене X25519, вторая стадия не расшифровывается; после разрешённой сервером сессии pkgunpack подготавливает комплект, а несколько точек закрепления возвращают его даже после удаления LaunchAgent либо самой полезной нагрузки.


Новое на сайте

Ссылка