Эксперты «Лаборатории Касперского» обнаружили ранее неизвестное семейство малвари для macOS, распространяющееся с пиратским ПО. Полезная нагрузка представляет собой бэкдор с возможностью выполнять любые скрипты с правами администратора, а также подменять установленные на устройстве приложения криптокошельков Exodus и Bitcoin на зараженные версии.
Замеченная исследователями вредоносная кампания ориентирована на macOS 13.6 и выше, то есть как на устройства под управлением процессоров Intel, так и на устройствах с Apple Silicon. Скомпрометированные образы содержат не только пиратскую версию какого-либо софта, но и активатор для него, который пользователю предлагается запустить, чтобы «пропатчить» приложение.
Внешне активатор выглядит довольно просто: в нем есть только одна кнопка «PATCH», после нажатия которой система запрашивает у пользователя пароль.
Исследователи пишут, что быстро выяснилось, что на самом деле активатор не так прост. Он хранит в папке Resources установочный пакет Python 3.9.6 и дополнительный Mach-O-файл с именем tool. Основной файл типа Fat Mach-O, носящий говорящее имя GUI, фактически реализует ту самую кнопку «PATСH», по нажатии которой происходят два события:
- установочный пакет Python копируется в директорию /tmp/ с временными файлами;
- исполняемый файл tool из папки с ресурсами запускается с правами администратора, для чего используется устаревшая функция AuthorizationExecuteWithPrivileges, вызывающая окно для ввода пароля администратора.
Причем «патчинг» пиратского приложения действительно происходит: tool сравнивает первые 16 байт модифицируемого исполняемого файла с последовательностью, зашитой в коде «Активатора», и убирает их, если они совпали.
«Забавно, что после этого приложение становится рабочим и, более того, оно действительно оказывается “взломано”. Дело в том, что злоумышленники использовали уже взломанные версии приложений, а чтобы вынудить пользователя запустить “Активатор”, добавляли несколько байт в начало исполняемого файла, делая его таким образом нерабочим», — объясняют специалисты.
После завершения «патчинга» выполняется основная вредоносная нагрузка: малварь связывается с управляющим сервером и загружает оттуда зашифрованный скрипт. Для этого используется интересный и необычный способ связи с командным центром и сокрытия активности в трафике, практически полностью гарантирующий, что вредоносная нагрузка будет загружена.
Чтобы получить адрес сервера, программа собирает URL из двух списков слов, зашитых в ее коде, добавляя в качестве домена третьего уровня случайную последовательность из пяти букв. Получив адрес, образец выполняет запрос к DNS-серверу в попытке получить TXT-запись этого домена. TXT-записи могут содержать различную информацию о домене, необходимую приложению, поэтому сам по себе запрос на получение такой записи выглядит абсолютно нормальным.
Перебрав возможные комбинации зашитых в коде слов (для всех изученных образцов они были одинаковы), эксперты установили, что из всех доменов второго уровня рабочим оказался только один: imohub[.]net. Какой при этом используется домен третьего уровня неважно, главное — чтобы он присутствовал в запросе.
Полученный ответ от DNS-сервера содержит три TXT-записи, которые программа впоследствии обрабатывает и собирает в полное сообщение. Каждая запись представляет собой закодированную в Base64 часть шифротекста, где первый байт содержит порядковый номер, который при сборке удаляется. Полученный шифротекст зашифрован алгоритмом AES в режиме CBC. Расшифрованное сообщение представляет собой Python-скрипт.
Скрипт раз в 30 секунд обращается по адресу apple-health[.]org и пытается загрузить и выполнить следующий скрипт. На его выполнение отводится 14 400 секунд, после чего процесс завершится и будет загружена новая версия скрипта.
Этот Python-скрипт наконец раскрыл цели, которые преследуют злоумышленники стоящие за этой кампанией. Основное его назначение — выполнение произвольных команд, получаемых с сервера. Судя по коду, отвечающему за обработку команд, они также будут представлять собой Python-скрипты, закодированные в Base64.
Помимо выполнения команд скрипт собирает и отправляет на сервер следующую информацию:
- версию операционной системы;
- список директорий в /Users/;
- пустое поле av, предположительно, будет заполняться информацией о наличии антивирусного ПО в следующих версиях;
- список установленных приложений;
- тип процессора;
- внешний IP-адрес устройства;
- пустое поле ver, которое, предположительно, может использоваться для отправки информации о версии вредоносной нагрузки.
Интересно, что на момент проведения исследования сервер не возвращал никаких команд, а через некоторое время вообще переставал отвечать. Поэтому эксперты скачали Python-скрипт третьего этапа заново и обнаружили, что в новой версии есть изменения.
Так, поменялись так метаданные, которые хранятся в начале программы и в которых указаны IP-адрес и домен управляющего сервера, GUID и версия программы. Исследователи считают, что данные обновляются в скрипте автоматически, как только IP-адрес сервера меняется (приблизительно раз в 10–20 минут). Однако были и изменения непосредственно в функциональной части кода, которые не могли возникнуть без участия человека. То есть, судя по всему, вредоносная кампания все еще находится на стадии разработки.
Также, помимо вышеперечисленных возможностей в коде скрипта есть еще две интересные функции: check_exodus_and_hash() и check_btccore_and_hash(). В обеих функциях фигурирует домен apple-analyser[.]com, который служит хостом для дополнительных загрузок.
Задачи функций похожи: проверить, есть ли на устройстве приложение соответствующего криптокошелька, и, если оно есть, заменить его на загружаемое с apple-analyser[.]com приложение. В итоге оно приложение крадет пароль, используемый для разблокировки кошелька, а заодно и сам кошелек, его имя и баланс.