Описание вредоносного ПО

Невидимый пассажир вашего автомобиля

В июне 2026 года в ходе мониторинга Android-угроз мы обнаружили новый зловред. Нам показалось странным, что он устанавливался как обычное пользовательское приложение, но при этом никак не маскировался под легитимное ПО — у него отсутствовал интерфейс. Это натолкнуло нас на мысль, что такое приложение может появляться на устройствах пользователей без их ведома. В ходе дальнейшего исследования нам удалось подтвердить эту гипотезу и восстановить всю цепочку заражения.

Наши выводы в двух словах:

  • мы обнаружили новый Android-зловред — многоступенчатый загрузчик, конечная цель которого — рекламное мошенничество и создание прокси-ботнета;
  • зловред распространялся через встроенные механизмы прошивок головных устройств (Head Unit) под управлением ОС Android для обновления ПО. Это первый задокументированный случай обнаружения зловреда в головном устройстве автомобиля c цепочкой заражения, характерной для головных устройств;
  • с высокой степенью уверенности мы относим описанную активность к актору MoYu Group, связанному с ботнетом BADBOX.

Решения «Лаборатории Касперского» детектируют описанные ниже угрозы со следующими вердиктами:

  • HEUR:Trojan-Dropper.AndroidOS.Agent.vu
  • HEUR:Trojan-Downloader.AndroidOS.Agent.ov
  • HEUR:Trojan-Proxy.AndroidOS.Zhima.*
  • HEUR:Trojan.AndroidOS.Vo1d.*

Что такое головное устройство (Head Unit)

Головное устройство (Head Unit) — это система, совмещающая в себе функции мультимедиа и частично функции управления автомобилем. Головные устройства могут быть как частью комплектации автомобиля, так и устанавливаться уже после покупки. Основными векторами атак для таких решений являются компрометация через физический доступ либо уязвимости ОС или компонентов головного устройства, о чем мы рассказывали ранее.

В некоторых случаях головные устройства управляются ОС Android, что продиктовано в первую очередь удобством для производителя — исходный код Android учитывает в том числе сценарии работы внутри головного устройства автомобиля. Также Android в процессе сборки позволяет добавлять свои системные приложения, что может использоваться производителями для решения широкого спектра задач, в частности для кастомизации интерфейса, для добавления системных компонентов под нужды вендора и т. д.

Большую часть приложений, разработанных для Android-устройств, можно запустить и на головном устройстве под управлением этой ОС. Это относится и к вредоносным приложениям. Однако некоторое множество зловредов, нацеленных на смартфоны, трудно представить в атаках на головное устройство. К ним, к примеру, можно отнести банковские троянцы: чаще всего мобильным банкингом пользуются именно на смартфоне, и для злоумышленника заражение головных устройств банкерами будет пустой тратой ресурсов.

Стоит отметить, что нередко головные устройства содержат слоты для SIM-карт и могут подключаться к интернету. Это позволяет, к примеру, пользоваться навигатором, обновлять ПО и т. д. Учитывая, что чаще всего головное устройство не содержит ценной для злоумышленника информации, один из наиболее вероятных сценариев атаки с использованием «классического» вредоносного ПО под Android — это заражение головного устройства для подключения его к ботнетам по аналогии с атаками на IoT-устройства.

В ходе исследования мы нашли такой зловред. Прошивки головных устройств производителя DoFun были устроены таким образом, что позволяло злоумышленникам распространять зловреды. Мы оповестили вендора о схеме распространения вредоносного ПО, после чего производитель сообщил об исправлении проблем безопасности.

Полная схема заражения выглядит следующим образом:

Схема заражения головных устройств

Схема заражения головных устройств

Рассмотрим, как именно головные устройства заражались вредоносным ПО.

Приложение TWCore

Приложение TWCore представляет собой легитимное системное приложение, которое отвечает за сбор аналитических данных, а также за обновление ПО головного устройства. Остановимся подробнее на реализации функции обновления ПО.

Процесс обновления устроен относительно просто. Расположенный на поддомене cardoor[.]cn брокер сообщений по протоколу MQTT присылает сообщение, содержащее информацию об APK-файлах, которые необходимо скачать и установить на головное устройство. Примечательно, что в объекте, описывающем такое сообщение, предусмотрено поле installNotExists — флаг, принимающий значение true или false. Он разрешает TWCore устанавливать приложения, которые не присутствуют на устройстве изначально.

TWCore проверяет наличие приложения на устройстве только при installNotExists = false

TWCore проверяет наличие приложения на устройстве только при installNotExists = false

APK-файл для дальнейшей установки скачивается в директорию <TWCore external cache dir>/push/apk/.

Путь, используемый TWCore для скачивания APK

Путь, используемый TWCore для скачивания APK

Данные нашей телеметрии свидетельствуют о том, что по таким путям располагалось вредоносное ПО, ранее неизвестное. Более того, наши данные показывают, что во всех случаях зловред устанавливался приложением с именем пакета com.tw.core, что совпадает с именем пакета TWCore.

Перейдем к разбору зловреда, устанавливаемого TWCore, — дроппера JarService.

Стадия 1: дроппер JarService

Как уже упоминалось, JarService представляет из себя небольшое приложение-дроппер без какого-либо интерфейса. Оно расшифровывает данные, которые хранятся в коде троянца в виде зашифрованных блоков. Для каждого блока применяется XOR-шифрование с однобайтовым ключом, линейно изменяющимся от блока к блоку. Расшифрованные данные содержат сериализованную информацию о версии полезной нагрузки, ее точке входа, а также сам код зловреда для дальнейшей загрузки.

Расшифровка и десериализация информации о полезной нагрузке второго этапа

Расшифровка и десериализация информации о полезной нагрузке второго этапа

В рассмотренной нами версии JarService точкой входа полезной нагрузки следующего этапа являлся метод wa класса com.c.j.qbh.

Стадия 2: загрузчик

Нагрузка этой стадии представляет собой вредоносный загрузчик. В его коде содержатся зашифрованные строки, используемые в дальнейшем в качестве имен классов для выполнения полезной нагрузки третьего этапа с помощью рефлексии. Загрузчик отправляет информацию об импланте POST-запросом на один из серверов злоумышленников. Пример запроса к С2:

В ответ на POST-запрос командный сервер возвращает ссылку для скачивания полезной нагрузки третьего этапа. Пример ответа С2 приведен ниже.

По ссылке из поля dexUrl в объекте data троянец скачивает сериализованные данные для загрузки следующей стадии. В начале этих данных содержится однобайтовое целое число — ключ для расшифровки строк в коде загрузчика. Сразу за этим числом располагается четырехбайтовое число с плавающей точкой, которое используется для XOR-расшифровки полезной нагрузки третьего этапа. Она, в свою очередь, располагается после перечисленных ключей.

Расшифровка полезной нагрузки третьего этапа

Расшифровка полезной нагрузки третьего этапа

В расшифрованной полезной нагрузке точкой входа является метод init класса com.ast.sdk.BillingMain, приведенный на скриншоте ниже.

Точка входа полезной нагрузки третьего этапа

Точка входа полезной нагрузки третьего этапа

При анализе этого этапа мы обратили внимание, что в ссылке на скачивание полезной нагрузки следующего этапа содержится номер ее версии. Мы решили перебрать другие версии, чтобы получить разные версии полезных нагрузок — в итоге нам удалось получить семь разных вариантов (их список приведен в разделе «Индикаторы компрометации»). Самая ранняя версия имела номер 3.57, однако она предназначена для декодирования по алгоритму, отличному от описанного выше. Это может свидетельствовать о том, что раньше между JarService и нагрузкой третьего этапа располагался другой загрузчик.

Стадия 3: кликер/загрузчик реверс-прокси

На третьем этапе зловред с полуторачасовым интервалом по умолчанию отправляет POST-запрос по пути /cpc/api/task с информацией о зараженном устройстве (разрешение дисплея, модель устройства, SSID подключенной Wi-Fi сети, MAC-адрес и т. д.), а также версию конфигурации троянца. Если конфигурация устарела, то командный сервер вернет обновленную конфигурацию с новыми C2-адресами, а также новые пути для отправки HTTP-запросов. Пример такого ответа приведен ниже. Отметим, что на момент исследования угрозы версия 3.82 конфигурации была самой актуальной.

В случае если версия конфигурации не нуждается в обновлении, командный сервер возвращает целочисленные идентификаторы команд, которые злоумышленники назвали productId. Каждому идентификатору троянец сопоставляет информацию о команде, сохраняемую с помощью механизма SharedPreferences в формате сериализованного JSON-объекта. Более того, каждый идентификатор имеет свою версию — время в формате Unix time. В случае если в ответе C2 встретился неизвестный productId либо его версия устарела, зловред отправит GET-запрос на сервер злоумышленников по пути /cpc/api/xml для получения содержимого команды для всех таких идентификаторов. В ответ C2 возвращает информацию о команде для каждого неизвестного идентификатора. Пример такого ответа приведен ниже.

В информации о команде содержится поле tagName — это ее название. Каждому названию в коде сопоставлены соответствующие классы для выполнения.

Список команд для выполнения

Список команд для выполнения

На момент исследования атакующие реализовали девять команд. Названия команд, их краткое описание и аргументы приведены в таблице ниже. Судя по функциональности реализованных команд, зловред может использоваться для показа рекламы, рекламного мошенничества (функциональность кликера), а также загрузки дополнительного вредоносного кода.

Название команды Описание Аргументы
return Вернуть значение из SharedPreferences key — ключ, значение которого нужно вернуть
copy Установить содержимое буфера обмена text — ключ, по значению которого из SharedPreferences возвращается содержимое буфера обмена
url — ссылка, по которой скачиваются данные, сжатые с помощью gzip (опционально). Эти данные затем конкатенируются со значением ключа text с использованием      (5 пробелов) в качестве разделителя
http Совершить POST/GET HTTP-запрос на заданный ресурс и, если это указано, сохранить ответ в SharedPreferences по заданному ключу url — адрес ресурса
method – название HTTP-метода (опционально)
startLabel — маркер начала данных на ресурсе для сохранения (опционально)
endLabel — маркер конца данных на ресурсе для сохранения (опционально)
valueLabel — ключ, по которому нужно сохранить значение (опционально)
header — словарь с заголовками для HTTP-запроса (опционально)
content — содержимое POST-запроса (опционально)
web Открыть ссылку в WebView и выполнить в нем произвольный JavaScript-код url — ссылка, которую необходимо открыть с помощью WebView
js — закодированный с помощью base64 JavaScript-код, который необходимо выполнить в WebView; используется, если параметр url пустой или отсутствует
corejs — JavaScript-код, который необходимо выполнить при загрузке ресурса в WebView (опционально)
param — строковый словарь с параметрами для запуска WebView
client — если ключ присутствует, будет использоваться WebViewClient для ручного разрешения перенаправления
time — тайм-аут задачи
loadlib На момент публикации отчета команда реализована не до конца
loadlib2 Загрузить и выполнить произвольный код url — адрес для скачивания полезной нагрузки
name — название загружаемого модуля
md5 — хэш MD5 полезной нагрузки
clear — список имен полезных нагрузок для удаления, разделенных запятой (опционально)
params — массив параметров, с которыми необходимо запустить полезную нагрузку
className — имя класса точки входа полезной нагрузки
method — имя виртуального метода точки входа полезной нагрузки
cmethod — имя статического метода для создания экземпляра класса точки входа (опционально)
thread — флаг: если не выставлен, полезная нагрузка запускается в отдельном потоке
reload — флаг: при выставлении перезапускает уже загруженные модули
loadlib3 На момент публикации отчета команда реализована не до конца
deeplink Открыть ресурс с помощью браузера url — ссылка на ресурс
traceroute Проверить доступность ресурса с помощью ICMP ping host — ресурсы для проверки, разделенные запятой

Однако далеко не все команды используются злоумышленниками в реальных атаках. Как можно видеть на примере ответа C2, приведенного выше, на момент публикации отчета атакующие пользовались командами loadlib2 и http. Полезная нагрузка, скачиваемая командой loadlib2, представляет собой реверс-прокси-модуль zhima, который обнаружили параллельно с нами в ТВ-приставках и описали исследователи из Nokia Deepfield Emergency Response Team. Таким образом, конечная цель злоумышленников — создание прокси-ботнета.

В ходе исследования этого этапа цепочки атаки мы обратили внимание, что ссылка на скачивание zhima также имеет номер версии. По аналогии с предыдущим этапом мы перебрали другие возможные версии и обнаружили восемь вариантов модуля zhima, самый ранний из которых имел версию 57. Полный список обнаруженных модулей zhima приведен в разделе «Индикаторы компрометации».

Атрибуция

В ходе анализа полной цепочки заражения мы обратили внимание, что загрузчик второй стадии создавал поток с осмысленным названием mosdk-host-loader. Мы решили выяснить, что означает mosdk в этом названии. В результате исследования мы обнаружили вредоносное приложение с именем пакета com.abc.nexus (3AD4BF5A86D26FFBF09CAE42AF330A98), установленное на различных ТВ-приставках. Оно состоит из нескольких компонентов (включая похожий на JarService дроппер), каждый из которых используется злоумышленниками для скрытой монетизации вычислительной мощности устройства. Каждому вредоносному компоненту в приложении соответствует свой сервис. Сервис, содержащий код запуска похожего на JarService дроппера, называется AdmoyuService. Учитывая это, а также название вредоносного потока в коде полезной нагрузки, мы предположили, что moyu в названии сервиса отсылает к MoYu Group — одному из акторов, связанных с вредоносной платформой BADBOX, которая была описана исследователями из HUMAN. Наша догадка также подтверждается наличием большого количества пересечений сетевой инфраструктуры зловреда с сетевой инфраструктурой MoYu Group, которую параллельно с нами обнаружили исследователи из Nokia Deepfield Emergency Response Team. На основании схожих шаблонов именования и аналогичного пересечения инфраструктур между MoYu Group и описанной в этом отчете активностью мы с высокой степенью уверенности относим ее к этому же актору.

В ходе исследования зловреда, загружаемого TWCore, мы обратили внимание, что домен admin.uipoxy[.]com разрешался в IP-адрес 128.14.210[.]58 — один из командных серверов реверс-прокси-модуля zhima. Судя по всему, по ссылке hxxp://admin.uipoxy[.]com/proxy/u/login расположена панель администрирования zhima. При этом панель позволяет регистрироваться произвольным пользователям при наличии пригласительного кода.

Страница для регистрации оператора зловреда

Страница для регистрации оператора зловреда

При регистрации пользователю также предлагают ознакомиться с правилами использования сервиса и политикой приватности. Оба документа расположены на ссылках с доменом pxyedge[.]com. Это домен вендора PXYEDGE, который специализируется на продаже резидентных прокси (residential proxy).

Также на странице регистрации, расположенной на домене admin.uipoxy[.]com, мы обнаружили строку copyright © 2020 proxyforu[.]com all rights reserved, которая вела на сайт hxxps://proxyforu[.]com. Это сайт вендора ProxyForU, также предлагающий услуги резидентных прокси.

Мы обнаружили некоторые сходства в API-авторизации всех этих сайтов:

  • страница авторизации располагалась на поддомене admin.*;
  • страница авторизации располагалась по пути /proxy/u/login;
  • страница регистрации располагалась по пути /proxy/register?channelKey=<invitation code>.

Исходя из этого, мы полагаем, что перечисленные сервисы связаны с MoYu Group.

Заключение

Несмотря на усилия специалистов по кибербезопасности и правоохранительных органов по остановке деятельности ботнета BADBOX, отдельные акторы, связанные с ним, продолжают свою вредоносную деятельность, заражая устройства по всему миру. При этом схемы доставки такого вредоносного ПО на систему могут быть самыми разнообразными — от скачивания предустановленными в систему бэкдорами до установки зараженных сборок IPTV-приложений. В исследованном случае был продемонстрирован еще более изощренный способ доставки зловреда через легитимную функциональность обновления ПО в системном приложении. При этом злоумышленники активно осваивают новые платформы. Так, этот зловред стал первым вредоносным приложением для головных устройств, что означает, что отныне подобные платформы тоже нуждаются в защите от вредоносного ПО.

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

Стадия 1 — JarService

ba27951b4ee1c341f4415d033369ecd3
d63bacd6d6709dd68a10ef9d374c7835
6c2e34b30da42085240ede53ab6107d4
8b5e513144a6138a966ea59e68bf9da2
e119845877089d6f4b0a70dc7388f316

Стадия 2 — загрузчик

e9f3a0dab6949ce2cddab9e0aa80ae1a

Стадия 3 — загрузчик/кликер

0fbaa7092204f4b1494e0b840b014774
1dcf031c40ce456b6a36a00b0acf3d11
44b6b213a6a3f299eaf88e078de95ecb
67dc78e544ebce16b85dc7c195dfbc58
9642ae619b3165d23c6349002d1abe24
b067d5b0dbecbd6498bcdfba45dba77e
f0e3f7eba2cde91e2dedb921bab47422

Модуль zhima

412e9243f2981bbea3894254d105b3b8
71ab5517f71866279d0d87d37f2ae320
89ef78f716a75964539f2db6520be362
a4223ce4288a230d1e6c3ff2c7639045
bd4d81cd27125ad3d9a114922d468499
c6bfb1643ac7474ed8a7b4f96a187fdb
de77c3303e93c9450424759f1741441c
f8cf8c23ff597700d471fb7767df8bac

Домены и IP-адреса

xmsae[.]sbs
ishano456[.]sbs
xshaon123[.]sbs
kshahnd[.]sbs
mdsjhd[.]sbs
nmnsny[.]sbs
kookjar[.]com
ty54fgd435[.]my
ue886578433[.]online
ty4523[.]space
144.217.243[.]201
107.151.248[.]132
128.14.210[.]58

Адреса, с которых скачивался JarService

hxxp://ovcloudcontrol.cdn.cardoor[.]cn/upgrade/2026-06-08/bd80bd3c3d0e4bf6b5b4a825650d01f5.apk
hxxp://ovcloudcontrol.cdn.cardoor[.]cn/upgrade/2025-06-10/fe71af9ecf174de48d2b2ccc2c15fb04.apk
hxxp://ovcloudcontrol.cdn.cardoor[.]cn/upgrade/2024-11-07/fa831c3c23824b99871163387bcda7ad.apk

Хэши TWCore — легитимного ПО, использующегося для распространения JarService

2a64c3efc11bf224aa54f24e876446c9
7a4d3ba2dacccfdda55859a5dfee2671
ea24487996eb70c1780922fb3063bcc5

Невидимый пассажир вашего автомобиля

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Отчеты

Благотворительность как приманка: Armored Likho расширяет арсенал инструментов для кибершпионажа

Эксперты «Лаборатории Касперского» разбирают новую кампанию Armored Likho, маскирующуюся под благотворительность и доставляющую новый Still Toolkit, нацеленный на кражу данных из Telegram и прослушку.

ToddyCat — ваш скрытый почтовый ассистент. Часть 2

Разбираем Umbrij — новый инструмент APT-группы ToddyCat для компрометации корпоративной переписки в сервисе Gmail. Целью атак стал токен авторизации OAuth, при помощи которого злоумышленники получали доступ к сервисам Google.

Подпишитесь на еженедельную рассылку

Самая актуальная аналитика – в вашем почтовом ящике