CrashStealer: новый macOS-стилер с подписанным дроппером и шифрованием данных на стороне клиента

Stealer

Исследователи Jamf Threat Labs обнаружили и проанализировали CrashStealer - информационный стилер для macOS, написанный на C++. Вредоносная программа маскируется под встроенный компонент Apple для сбора отчётов о сбоях и нацелена на кражу учётных данных из браузеров, криптовалютных кошельков, менеджеров паролей и связки ключей (keychain). Собранные файлы шифруются алгоритмом AES-GCM перед отправкой на удалённый сервер управления.

Описание

В начале мая 2026 года образец подозрительного приложения для macOS попал в VirusTotal и привлёк внимание экспертов. На тот момент стилер находился на стадии разработки, но к началу июля сработали сигнатуры, соответствующие этому семейству, что подтвердило переход проекта в активную эксплуатацию. Получив обозначение CrashStealer, угроза отличается от массовых стилеров для macOS, обычно построенных на AppleScript-дропперах или лёгких обёртках Objective-C. Вместо этого CrashStealer реализован на нативном C++ вокруг внутреннего класса MacOSData.

Первоначальный доступ обеспечивает дроппер с действующей подписью разработчика Apple и нотаризацией. Он распространяется в виде образа диска с именем "Werkbit Setup". Внутри находится единственное приложение Werkbit.app, бинарный файл которого подписан Developer ID Emil Grigorov (WWB7JA7AQV). Нотаризационный билет вшит непосредственно в приложение, так что Gatekeeper пропускает его при первом запуске. Сам образ диска тоже подписан. При открытии дроппер обращается к GitHub, получает оттуда скрипт, который затем формирует команду curl для загрузки дополнительного shell-скрипта с сервера endpoint-api-v1[.]com. Этот скрипт, в свою очередь, скачивает и запускает основной модуль стилера.

Скачанная полезная нагрузка поставляется в виде образа диска CrashReporter.dmg. Он содержит приложение CrashReporter.app, которое имитирует системный отчёты о сбоях Apple: идентификатор пакета com.apple.crashreporter, отображаемое имя CrashReporter и соответствующий значок. Дроппер очищает расширенные атрибуты у загруженного пакета, удаляет оригинальную подпись и подписывает его ad-hoc, после чего запускает из скрытой директории /private/tmp/.CrashReporter. Запуск из-под /tmp с ведущей точкой - необычный признак, указывающий на вредоносную активность.

CrashStealer проявляет свой сбор данных уже на уровне Info.plist. В нём открыто присутствуют строки запроса разрешений на доступ к полному диску, рабочему столу, документам, загрузкам и сменным носителям. Фразы вроде "CrashReporter requires Full Disk Access for system administration" являются социальной инженерией, призванной убедить жертву предоставить привилегии. Кроме того, в ранних версиях в Info.plist жёстко прописан IP-адрес сервера управления 179.43.166.242 в виде исключения App Transport Security, разрешающего незащищённые соединения. В более поздних образцах этот элемент отсутствует, что указывает на переход операторов на корректный TLS.

Сразу после запуска бинарник очищает собственные расширенные атрибуты, включая флаг карантина com.apple.quarantine. Затем он выводит поддельное окно авторизации, стилизованное под системный запрос macOS. Введённый пароль проверяется локально через утилиту dscl с опцией -authonly. Только после подтверждения корректности пароля стилер разблокирует связку ключей login.keychain-db, используя легитимную команду security unlock-keychain. Разблокированная связка копируется в область сбора.

Перед сбором данных CrashStealer выполняет рекогносцировку установленных средств безопасности. Для каждого приложения из встроенного списка (преимущественно инструменты анализа вредоносного ПО, EDR-решения) он считывает версию через defaults read и размер через du -sh. Эта информация упаковывается отдельно.

Область сбора чрезвычайно широка. Стилер целенаправленно обрабатывает браузеры на основе Chromium (Chrome, Brave, Edge, Opera, Vivaldi и другие), извлекая через SQLite копии баз данных, включая файлы logins.json для Firefox и папки IndexedDB (суффикс _IDB). Криптовалютные кошелёк представлены примерно 80 расширениями: MetaMask, Phantom, Coinbase, Trust Wallet, Rabby, OKX Wallet, Exodus, Keplr, Solflare, Backpack и длинный хвост из экосистем Solana, Cosmos, TON, Sui, Aptos, NEO. В списке также 14 менеджеров паролей: 1Password, Bitwarden, LastPass, Dashlane, Keeper, KeePassXC, NordPass, Enpass, RoboForm и другие.

Собранные данные не хранятся в открытом виде. Каждый элемент шифруется индивидуально перед записью в скрытые директории под ~/.cache/com.apple.crashreporter/. Используется AES-256-GCM через Apple CommonCrypto. Ключ длиной 32 байта вырабатывается с помощью PBKDF2-HMAC-SHA256 с 10 000 итераций, используя парольную фразу и соль, закодированную в бинарном файле. В отчёте Jamf Threat Labs подтверждает, что зашифрованные файлы имеют энтропию около 8,0 бит на байт, что соответствует сильной криптографии. Перед отправкой стилер упаковывает каждую категорию сбора в ZIP-архивы с префиксом .zx_ и восьмизначным шестнадцатеричным суффиксом (например, .zx_c67e4203.zip). Эти архивы остаются на диске после завершения работы - стилер удаляет только исходные директории, а архивы не трогает. Таким образом, обнаружение таких файлов в ~/.cache/com.apple.crashreporter/ является надёжным индикатором компрометации.

Эксфильтрация выполняется через libcurl с использованием многокомпонентного интерфейса отправки форм (curl_mime). Сервер управления расположен по адресу 179.43.166.242, который в более старых образцах был жёстко прописан в Info.plist. В момент анализа ресурс нёс 11 вредоносных детектов в публичных базах угроз. Полный URL C2 собирается из зашифрованных строк, дешифруемых во время выполнения.

Для закрепления в системе CrashStealer копирует себя в ~/Library/Caches/com.apple.crashreporter/CrashReporter.app, подписывает копию ad-hoc и регистрирует пользовательский LaunchAgent с меткой com.apple.crashreporter.helper. Параметры RunAtLoad и KeepAlive с условием SuccessfulExit=false гарантируют перезапуск при каждом завершении. Имитация имён Apple продолжается и в этой цепочке.

Стилер применяет несколько слоёв защиты от анализа. Функции подвергнуты flattening-запутыванию, что затрудняет построение графа потока управления. Критические строки (URL, пути, названия) хранятся в зашифрованном виде в секции __const и дешифруются подстановкой байтов. Присутствует двойная проверка отладчика: первая выполняется до main через sysctl с P_TRACED, вторая - в процессе инициализации. При обнаружении отладчика процесс завершается с кодом 45, и вредоносное поведение не инициируется.

На домене endpoint-api-v1[.]com обнаружена веб-панель управления оператора, оформленная в тёмных тонах с формой входа "Command Panel". Аналогичные панели найдены на cohezo[.]io, cohezo[.]com, cordinex[.]io. Это указывает на многоцелевую инфраструктуру, частью которой является CrashStealer.

Последствия атаки включают полную компрометацию хранимых учётных данных, доступ к криптовалютным кошелькам и паролям, а также потенциальную возможность перехвата корпоративных аккаунтов через связку ключей. Применение AES-GCM не позволяет восстановить данные без знания ключа, что усложняет расследование. Сочетание подписанного дроппера, нативного кода и внутреннего шифрования выделяет CrashStealer из массы массовых стилеров, делая его инструментом с явным акцентом на скрытность и защиту от анализа.

Специалистам по безопасности рекомендуется обращать внимание на запуск приложений из /private/tmp/.CrashReporter, появление hidden-директорий ~/.cache/com.apple.crashreporter/ с ZIP-архивами с префиксом .zx_, а также на вызовы dscl -authonly и security unlock-keychain с последующим копированием login.keychain-db. Мониторинг сетевых соединений к 179.43.166[.]242 и доменам endpoint-api-v1[.]com, cohezo[.]io, cohezo[.]com и cordinex[.]io также является релевантной мерой.

Индикаторы компрометации

IPv4

  • 179.43.166.242

Domain

  • cohezo.com
  • cohezo.io
  • collabox.uk
  • cordinex.io
  • endpoint-api-v1.com
  • icky-lyrical.com
  • synerix.app
  • werkbit.io
  • werknova.co

URL

  • http://endpoint-api-v1.com/d/f1b24e/download
  • https://cohezo.com/calendar/0f4df3a7-5914-4245-a616-311ca554ee0c
  • https://cohezo.io/download?invite=OX-3SEY-64KI
  • https://collabox.uk/calendar/1cdf0e32-9ba0-4be5-8823-39a2e6364a20
  • https://cordinex.io/download?invite=MZ-AB95-QD50
  • https://endpoint-api-v1.com/d/f1b24e
  • https://github.com/mgothiclove/pkeys/blob/main/sys.cache
  • https://icky-lyrical.com
  • https://icky-lyrical.com/storage/secure/Cohezo/windows/small/69cf7d0ea7cfd/cohezo_setup.msi
  • https://icky-lyrical.com/storage/secure/werkbit/mac
  • https://raw.githubusercontent.com/mgothiclove/pkeys/main/sys.cache
  • https://synerix.app/calendar/144f20fc-c7fb-4e58-9544-75fe9099b61c
  • https://synerix.app/calendar/a711f30b-b9bc-4f31-9c8e-869e7c1b2c1f
  • https://werknova.co/calendar/90f99c64-9fcc-451c-bae1-0b095c04e5c8

SHA256

  • 08801f81960cd8c1077b4aa2e8124840d56a272842fdcc73263c9968e787e0bd
  • 09bd60ce11ee4324e2052a439a08676e31aac787edda3f9bd02325390b5db2d2
  • 3a9d703ba7f7564399365db7ab8b04238806ef7a53df0b6822f32b80bf0f5a80
  • 4ed199e27a4dc193468569b221b19180e5ae95cab8df84d92e082b68d33672f5
  • 5bb675af9c403896d5f31611cf42304cf482d16f6f3ab6a868a9aa853aa5c179
  • 81ef05cc4d07cd22cd7cd7099f278dd9b9a3ae8ad4770b3d387892e1c6cfb7d7
  • 88334ea00ff94a366cd2a9283a508b97c269839894fddfe91913f3d92e95b6ab
  • a1966a6d6f54a025f30d55571d21d6537977ca73ffa734c13494b9c806cd7007
  • f3857c0b84a24b7fc912d55f8b14c67c23d5837b1a6932164d5d62273d4affeb
  • fba5bbe87fa351eedf2f3c16653cc9e4196d73604529bb50a609e2d3ebf1828b

Комментарии: 0