Месяц назад Kaspersky Lab обнаружили несколько взломанных приложений, распространявшихся на пиратских сайтах и зараженных троянским прокси. Злоумышленники переупаковывали взломанные приложения в PKG-файлы со встроенным троянским прокси и пост-инсталляционным скриптом, инициирующим заражение. Недавно нам удалось обнаружить новое, доселе неизвестное семейство вредоносных программ для macOS, которые использовали взломанное программное обеспечение. Угроза оказалась гораздо более мощной, чем несанкционированная установка прокси-сервера.
Бэкдор
Обнаруженные Kaspersky Lab образцы успешно запускались на macOS Ventura 13.6 и более поздних версиях, что позволяет предположить, что операторы нацелились только на пользователей более новых версий операционной системы как на процессорах Intel, так и на кремниевых машинах Apple. Скомпрометированные образы дисков содержат программу под названием "Activator" и приложение, которое пользователь хочет установить. При открытии/монтировании образа появляется окно с инструкциями по установке.
Инструкция предписывает пользователю скопировать приложение в /Applications/, а затем запустить Activator. Последний выглядит довольно безыскусно: просто кнопка PATCH, при нажатии на которую появляется запрос пароля.
Приложение в папке Resources каким-то образом содержало инсталлятор Python 3.9.6 и дополнительный файл Mach-O с именем tool. Основной файл Fat Mach-O, показательно названный GUI, по сути, реализовывал кнопку PATCH, нажатие на которую запускало два события:
- Программа установки Python копировалась в каталог временных файлов: /tmp/
- Исполняемый файл утилиты в папке resources запускался с правами администратора. Для этого Activator использовал уже устаревшую функцию AuthorizationExecuteWithPrivileges, которая вызывала окно с запросом пароля администратора.
После запуска утилита проверяла систему на наличие установленной копии Python 3, и если не находила ее, то устанавливала ту, которую предварительно скопировала в /tmp/. Далее она "патчила" загруженное приложение: сравнивала первые 16 байт модифицированного исполняемого файла с последовательностью, жестко закодированной в Activator, и удаляла их в случае совпадения
Злоумышленники брали уже взломанные версии приложений и добавляли несколько байт в начало исполняемого файла, тем самым отключая его, чтобы заставить пользователя запустить Activator.
Помимо выполнения команд, скрипт собирал и отправлял на сервер следующую информацию:
- Версия операционной системы
- Список каталогов внутри /Users/
- Пустое поле "av" предположительно будет заполнено информацией о наличии антивирусных программ в последующих версиях.
- Список установленных приложений
- Тип процессора
- Внешний IP-адрес
- Пустое поле "ver", в которое, предположительно, будет отправлена информация о версии полезной нагрузки.
На момент проведения исследования сервер не выдал ни одной команды, а позже и вовсе перестал отвечать. В частности, разработчики изменили "метаданные", хранящиеся в начале программы и содержащие IP-адрес и доменное имя сервера C2, а также GUID и версию программы. По всей видимости, они автоматически обновлялись внутри скрипта, как только менялся IP-адрес сервера, что происходило примерно каждые 10-20 минут. Обновления функционального кода также производились человеком (см. изображения ниже).
Помимо вышеупомянутых возможностей, скрипт содержал еще две примечательные функции: check_exodus_and_hash() и check_btccore_and_hash().
Обе они содержали домен apple-analyser[.]com, который служил хостом для дальнейшей полезной нагрузки. Обе функции имели схожую цель: проверить, содержит ли устройство соответствующее приложение криптокошелька, и если да, то заменить его на загруженное с apple-analyser[.]com. Кроме приложения, на сервере хранилась чистая версия фреймворка Electron для запуска "новой" версии Exodus, а также файл Exodus.scpt, который вы можете видеть на скриншоте выше и который нужен только для выполнения следующей команды
Злоумышленники заразили Exodus, внедрив свое детище в самое начало приложения: в файл main/index.js, который запускался первым при запуске приложения.
Приложение отправило в канал с именем 334b4425988b47a5b67c92518f9815c6 некие данные, которые впоследствии попали на 22[.]imohub[.]workers[.]dev. Оставалось только найти точный фрагмент кода, который отправил данные, и это был... барабанная дробь... wallet/index.js. Поскольку в коде не было ни переносов строк, ни отступов, мы придали ему нужное форматирование и проверили, что там происходит.
Indicators of Compromise
Domains
- 22.imohub.workers.dev
- apple-analyser.com
- apple-health.org
- imohub.net
MD5
- 005fb6dee90eeefa89d6400f7a06d058
- 09ab22fcf21385cc5702ec52ac4eca02
- 18c564a5cc4b7414df8345a8bdce7418
- 29a35e0e65bba727a97747acdf921c09
- 29b1ba90407a93400e062fb65dc9b667
- 2ebfe93a39ce3fcecca883b5f182029e
- 2ed32d3df8b4a2ef891b44a6397cf6ea
- 3422f0cefa0c4612d18643bbf07a4a98
- 352f0d288e612e4f66c50aaf9214a81d
- 38e4ef0d9221b25510cc50bcc8f4b4e8
- 3a89719527d51e7c60854704e9f49a32
- 3af3d6ba3c80b7bf5d67deddb2971c61
- 3b357b8d65537d40e87599c5329d2a3d
- 3f89644dfc394e888a741f6c09638d98
- 4886a687ada61fc7f53b41f6020e76cc
- 4c2ec35d13c5f44000caf658e40e444c
- 5abe156cb33b18a46c7279d9c52b1c64
- 5bab5ba8c509a9baa5db246d932a099f
- 609596d15e684f4a8ea80b7ee4b8c6a8
- 67e1f194c37968bb2edaf469bf40b837
- 71eefe83f836ebceadc9f68ff0e37d3b
- 7fd9a401fd0d7901cf4494333d1896cb
- 9124843fdbf27e7b31d2f883042021a9
- 948a90b43ade9dbc559fd27be404f9f0
- 948c1bdc9edf3e57758b677a0a449f34
- 95c86de53ad9ca116f8c6eb2e6a152f5
- 9c0e8d45cbf5cae428bef90b5824e5b1
- a33b6c5905cefced329fa89f5eebb481
- a386380e03097055c24b0f35263d5492
- a5924fff42d60a732853da167a743182
- a9231044dd45a85a0bf45e01584bf213
- adede572ad9599e331592103f9eea2a2
- b2d519d13125c29832b132e927fd141b
- ba41c9f6d89671b729eafbe6d5f1c85e
- bbe4c19f3b675705073ba3e8a560b768
- be7e6e625d15d30ff47e34ebb1ee4511
- c7178d08c13f3e49a6ebefe23d1fedff
- c88c28149387ccf52ca3869442533fd9
- cad3081fc6174ca4a4c18b8f73b3fe59
- d1177ed07dddb09415c175a205143eb6
- e12566cd9d72a9b56d5e53f00b7d2d53
- e5f12e92b1fa956d02d35d6224abdbc8
- e64773b03ad1eae52180c2b58907f1f6
- f4282d7e32c7e8ab4e075c572ac43803
- fb050f4c29a166480ff2f5a1fa8b9800
- ff608ab027db4d1e076c1d8098e8dc8a