Перейти к основному содержанию
Kiberbilim.uz
Все уроки

Телевизор с вредоносной программой с завода: бэкдор семейства Triada

Опубликовано 15 мин чтенияАвтор: Kiberbilim.uz

В прошивке Android-телевизора, который продаётся в Узбекистане, найден бэкдор семейства Triada. Он внедряет код в каждое приложение на телевизоре и может превратить ваш домашний интернет в прокси для чужого трафика. Как он работает, как проверить и защитить телевизор.

Схема телевизора: скрытые блоки кода внутри экрана и линия соединения с внешним сервером
На этой странице

Полный технический отчёт будет отправлен в UZCERT и производителям. Образцы вредоносной программы, расшифрованные модули, ключи шифрования и значения, уникальные для одного устройства (идентификаторы, сетевые адреса), здесь не публикуются.

Коротко

  • В прошивке Android-телевизора марки Skyworth/Velar (плата CVTE MT5863, лаунчер Zeasn, Android 7.0), который продаётся в Узбекистане, найден бэкдор, установленный ещё на заводе.
  • Структура, имена файлов, ключи конфигурации и имена классов совпадают с семейством Triada (Kaspersky 2016 и 2025, Dr.Web Android.Triada.231).
  • При загрузке скрытый код запускается, пока процесс Android zygote (родитель всех приложений) предзагружает классы. После этого в папку данных каждого приложения, включая Google Play Services и System UI, записывается и запускается скрытый загрузчик (systemlibarm_10145.jar).
  • Загрузчик получает от операторов дополнительный код (Java dex и нативные библиотеки), запускает его в памяти и может выполнять shell-команды.
  • Мы расшифровали зашифрованные модули из папки Google Play Services. Среди них фреймворк модулей, обратный прокси (IPProxyCore), который превращает телевизор в выходной узел для чужого трафика, и модуль кражи данных аккаунта WhatsApp. На этом телевизоре модуль кражи не был запущен.
  • Зафиксировано активное соединение телевизора с управляющим (C2) сервером в Гонконге (112.121.178.213:10080, Netsec Limited).
  • Вредоносный код находится в разделе системы, доступном только для чтения. Сброс до заводских настроек его не удаляет.
  • Прошивка подписана публичными тестовыми ключами AOSP. Отдельная проблема: сервис самого производителя без спроса устанавливает приложение с рекламным SDK.

Какое устройство затронуто

Поле Значение
Бренд / рынок Skyworth / Velar, широко продаётся в Узбекистане
Плата / SoC CVTE, MediaTek MT5863 (ro.board.platform=mt5863)
Строка модели ro.product.model=SMART_TV
Лаунчер Zeasn (Whale TV)
Build fingerprint Android/cvt_mt5863_eu:7.0/NRD90M/builde09050933:userdebug/release-keys
Сборка cvt_mt5863_eu-userdebug 7.0 NRD90M eng.builde.20190905.093305 release-keys, собрана 2019-09-05
Тип сборки userdebug (ro.debuggable=1), уровень безопасности Android 7.0, без обновлений

Затронуты ли другие сборки CVTE MT5863 (другие бренды, другие регионы), неизвестно. Имя сборки cvt_mt5863_eu и платформа CVTE указывают, что одна и та же прошивка может использоваться несколькими брендами.

Как это обнаружили

Тестовое приложение на телевизоре не могло писать в журнал Android: вывод android.util.Log внутри его процесса подавлялся. Затем журнал загрузки показал две вещи:

  1. zygote и system_server пытались открыть скрытые папки .MLAndroid. SELinux запретил это, поэтому попытки попали в журнал.
  2. При каждом запуске приложения dex2oat компилировал неизвестный systemlibarm_10145.jar в папке данных этого приложения.

Данные собраны через ADB в локальной сети. Анализ был только офлайн и статическим: ни один образец не запускался и никуда не загружался. Для каждого собранного файла записан хеш SHA-256.

Технический анализ

Цепочка заражения: прошивка, файлы инжектора в dalvik-cache, zygote, процесс каждого приложения, загрузчик и управляющий сервер

Рисунок 1. Цепочка заражения. Первая стадия инжектора пока не найдена.

1. Внедрение в каждый процесс

  • При загрузке zygote (SELinux u:r:zygote:s0) пытается открыть каталоги .MLAndroid в /data и в общем хранилище. SELinux запрещает это, и отказы записываются в журнал.
  • Это происходит во время предзагрузки классов zygote, примерно через 100 мс после инициализации libmedia_jni.so и медиафреймворка stagefright, до запуска любого приложения и system_server. Поэтому код наследует каждый процесс на устройстве.
  • system_server, shared_relro и процессы платформенных, привилегированных и обычных приложений обращаются к .MLAndroid так же.
  • При каждом запуске приложения dex2oat компилирует /data/data/<package>/systemlibarm_10145.jar. Это наблюдалось для com.android.systemui, com.google.android.gms, com.android.inputmethod.latin, системных приложений CVTE и MediaTek, заводских приложений, приложений конфигурации Google и только что установленного стороннего приложения.
  • com.android.systemui и com.google.android.gms дополнительно получают mms-core.jar.
  • Копии удаляются после загрузки. Одна осталась в com.android.externalstorage и была сохранена.

2. Загрузчик systemlibarm_10145.jar

  • Классы com.android.core.info.config.LDMCore и com.android.ml.bt.dymc.*. Временная метка dex 2018-11-14, тег журнала EXPML.
  • LDMCore.loadDexMem(String, String, byte[]), loadDexFinish(String, ClassLoader) и loadSoFinish(String) — нативные методы без реализации в jar. Их предоставляет нативный код, уже присутствующий в процессе, то есть инжектор на уровне прошивки.
  • DymcService.onCreate(int) запускает рабочий поток. ContexHunter получает Android Context через рефлексию по ActivityThread / RuntimeInit, как в system_server, так и в процессах приложений.
  • DymcReceiver / DymcHandler регистрируют broadcast-действия com.dymc.<md5(package)>.lddex и .ldso. Broadcast несёт байтовый буфер (buf), имя класса (clazz) и путь к модулю (jmd). Обработчик загружает этот код в процесс в памяти или загружает нативную библиотеку и сообщает результат ответным broadcast. Значит, любое приложение можно заставить выполнить код оператора.
  • makeShCmd выполняет команды через sh и возвращает их вывод.

3. Зашифрованные модули и конфигурация

Расположение: /data/data/com.google.android.gms/files/.data/ и /data/data/com.android.browser/files/.data/ (Google Play Services и системный браузер).

Файл Содержимое
ylmd_1003.md (164 917 байт) Зашифрованный модуль, расшифрован
ss_1027.md (785 байт) Зашифрованный модуль, расшифрован
.ylc/.rtresext/.oc_1_2004_1_Y29tLmFuZHJvaWQub2FkLmlwcHJveHkuSVBQcm94eUNvcmU= (26 084 байт; имя файла заканчивается переводом строки) Зашифрованный модуль обратного прокси, расшифрован. Имя из Base64 декодируется в com.android.oad.ipproxy.IPProxyCore
btdoinfo.db Java-сериализованный com.android.ml.bt.core.OPBDomainInfo = список доменов C2
phone.db ophead_regtime, cd, sericode, ppglcd, interval
.ss_log Строки, похожие на heartbeat, каждые 30 секунд

Скрытое хранилище идентификатора устройства находится в /data/system/.MLAndroid/, /data/misc/.MLAndroid/ (оба с режимом 0777) и /sdcard/.MLAndroid/: com.android.btcore.db, timeStampMask.db.

Расшифровка. Модули .md и .oc — это ZIP-архивы, зашифрованные XOR, что соответствует схеме «двойного XOR», которую Kaspersky описал для Triada. Расшифрованные файлы — корректные ZIP, проходящие проверку CRC-32 (хеши в разделе IOC ниже). Внутри модулей каждая строковая константа тоже зашифрована XOR со встроенным ключом. Все строки восстановлены. Ключи и детали расшифровки не публикуются.

4. Что делают расшифрованные модули

ylmd_1003, фреймворк задач и модулей. Работает внутри Google Play Services и системного браузера.

  • Читает идентификаторы устройства (sericode, cd) из скрытых хранилищ .MLAndroid / phone.db.
  • Опрашивает https://hcnk.uedfd.com/OadCtrl/if примерно раз в 20 часов (интервал, заданный сервером, 1 200 минут).
  • Скачивает дополнительные модули «OAD», которые называет сервер, проверяет их по MD5 от сервера, выполняет назначенные сервером задачи и отправляет результаты на /OadCtrl/bt.
  • При каждом опросе отправляет профиль устройства: рекламный идентификатор, Android ID, MAC, серийный номер, модель, язык и страну.
  • Все HTTPS-клиенты в этих модулях принимают любой сертификат сервера.

Обратный прокси: оператор подключается к телевизору через сервер-ретранслятор, и трафик выходит с IP-адреса владельца

Рисунок 2. Обратный прокси IPProxyCore: трафик оператора проходит через телевизор и выглядит так, будто идёт с домашнего IP-адреса.

IPProxyCore, обратный прокси (OAD-модуль 2004, доставляется через фреймворк).

  • Работает в процессе Google Play Services.
  • Запрашивает у шлюза dv1wi3buwqfbb.cloudfront.net/ProxyGateway/... адрес ретранслятора и держит с ним постоянное соединение.
  • Через это соединение оператор открывает TCP-соединения и UDP-обмены с произвольными адресатами. Трафик несёт телевизор, и он выглядит как идущий с IP-адреса владельца.
  • Сервер также может приостановить модуль, задать интервал переподключения и собрать его журнал.
  • Журнал на телевизоре показывает, что более ранняя версия подключалась к ретранслятору 148.66.17.4:11080 в ноябре 2024 года.
  • Это поведение «резидентного прокси», описанное для Triada (Kaspersky 2025) и BADBOX 2.0.

Встроенный модуль кражи данных WhatsApp (com.dl.tk.TKEntry, внутри ylmd_1003). Он рассчитан на работу внутри WhatsApp и отправку ключей и идентификаторов аккаунта WhatsApp на bk79n.uedfd.com. Фреймворк разворачивает его только на устройствах другого типа. На этом телевизоре он не был запущен, и WhatsApp не установлен. Но его наличие показывает, для чего платформа предназначена на других устройствах.

ss_1027 — пустая заглушка плагина.

5. Сравнение с Triada

  • Совпадает с Kaspersky 2025: обратный прокси в Google Play Services, модуль кражи ключей WhatsApp, двойное XOR-шифрование, имена ppgl / sericode / cd.
  • Отличается: нумерация команд, хеши модулей и вся инфраструктура C2. Инфраструктура C2 этой сборки (*.1g5k5w.com, *.o96p.com, *.aaodp.com) и ряд файловых артефактов (.MLAndroid, ylmd_1003, ss_1027, IPProxyCore) в публичных отчётах не встречаются. Это родственная, но неопубликованная сборка.

6. Где находится инжектор

Что исключено в системном разделе. Статический офлайн-анализ системных файлов исключил как инжектор:

  • android.util.Log.println_native в libandroid_runtime.so. По логике он идентичен AOSP 7.0. Именно об этой точке перехвата писал Kaspersky в 2025 году, эта сборка её не использует.
  • Java-код фреймворка (dex в boot-framework.oat и всех остальных boot image, включая boot jar CVTE и MediaTek). Нет чужих пакетов, загрузки dex в память и скрытых строк.
  • app_process32, libnativehelper.so, liblog.so и libandroid.so — по импортам и значимым вызовам.
  • 14 плагинов MediaTek media-extractor, которые zygote загружает из /etc/VendorExtractor.cfg, и их зависимости. В них нет конструкторов, выполняемых при загрузке, и нет импортов для работы с файлами, процессами или сетью.
  • Каждый прямой вызов RegisterNatives / jniRegisterNativeMethods среди 117 библиотек, загруженных в zygote. Всё это стандартный код регистрации AOSP.

Зашифрованный загрузчик и его ключевые строки (JNI-сигнатура loadDexMem, dalvik/system/DexClassLoader, имена классов LDMCore / DymcService, .MLAndroid, systemlibarm_) искали в каждом системном файле тремя способами: в открытом виде, под любым повторяющимся XOR- или аддитивным ключом длиной до 29 байт и как строки, собираемые на стеке в коде. Совпадений нет. Значит, инжектор защищает свои строки нетривиальным шифром или сжатием.

Что нашли позже. Второй сбор данных только для чтения (с временным adb root) обнаружил в /data/dalvik-cache две нативные библиотеки, замаскированные под файлы boot image ART:

Файл на телевизоре Примечание
/data/dalvik-cache/arm/system@framework@boot-acco.oat ARM ELF32 shared object, stripped, 218 540 байт
/data/dalvik-cache/arm/system@framework@boot-bridacco.oat ARM ELF32 shared object, stripped
  • Ни одного из файлов нет в BOOTCLASSPATH, и ни у одного нет соответствующего jar в /system/framework. Это не настоящие OAT boot image.
  • Даты файлов совпадают с первой загрузкой устройства, то есть с датой самых ранних вредоносных файлов.
  • На обоих файлах стояли атрибуты ext4 immutable + append-only. Но легитимный system@framework@boot.oat в той же папке имеет те же атрибуты и ту же метку SELinux (u:object_r:zygote_exec:s0). Похоже, так эта сборка помечает boot image, а не признак вредоносной программы.
  • Вывод: это стадии инжектора, которые не удалось найти в /system. Что записало их при первой загрузке (стадия 1), пока не найдено.

Карантин и результат. 9 элементов были перемещены, а не удалены в папку карантина: два указанных .oat-файла, три папки .MLAndroid (/data/system, /data/misc, /data/media/0), а также files/.data и files/.rtmark Google Play Services и системного браузера. После одной перезагрузки проверка сразу и примерно через 3 минуты показала:

  • в картах памяти zygote больше нет acco / bridacco;
  • ни в одной папке данных приложений не появляется systemlibarm* или mms-core*;
  • ни один путь из карантина не был создан заново;
  • в logcat нет совпадений для systemlibarm, MLAndroid, mms-core, boot-acco или bridacco;
  • карты памяти Google Play Services и System UI чистые;
  • все установленные TCP-соединения идут к Google или в локальную сеть.

Обычные функции телевизора (лаунчер, видеостриминг, меню источника сигнала) работают.

Что это значит. Удаление двух файлов из dalvik-cache остановило внедрение в приложения, по крайней мере в этой загрузке. Код первой стадии, создавший их, может оставаться в системном образе, доступном только для чтения. Он может записать их снова после сброса до заводских настроек или при условии, которое в этой загрузке не выполнилось. Поэтому сброс до заводских настроек не следует считать исправлением, он может вернуть инжектор. Чтобы найти стадию 1, нужно сравнение с чистой копией той же сборки; у производителя (CVTE) будет запрошен чистый образ.

7. Отдельная проблема: тестовые ключи и рекламный канал производителя

  • Тестовые ключи. Платформенный сертификат прошивки — публичный тестовый ключ AOSP (SHA-1 27196e386b875e76adf700e7ea84e4c6eee33dfa), хотя сборка помечена release-keys. Любой может подписать приложение, которое этот телевизор примет как платформенное.
  • Скрытый установщик. com.zeasn.services.general (Zeasn, v2.1.13) каждый час проверяет https://saas.zeasn.tv/sp/api/device/v1/app/silent. По команде сервера он скачивает com.android.media.module.services и устанавливает, обновляет или переустанавливает его без запроса пользователю и без проверки целостности, затем запускает с правилами от сервера. Флаг согласия жёстко задан как "true". Это встроенная функция производителя, а не изменённое приложение.
  • Рекламный APK. com.android.media.module.services (пакет кода com.ad.service, v1.1.18). Подписан посторонним ключом (CN=socket, O=China) и упакован Qihoo 360 Jiagu 1.4.0.6 2026-08-25. Код зашифрован и не распакован. Видимая конфигурация: три экспортированных сторонних SDK-сервиса ("Meta", "Pluzed", "ZeroOne"); закреплённый (pinned) частный корневой CA для meta365.frostbytesize.com (AWS, Ирландия); проект Firebase mac-ad-9f1ee; разрешения на местоположение, состояние телефона, полный список приложений, доступ ко всем файлам и рекламный идентификатор. Установлен и обновлён без каких-либо действий пользователя.
  • Оценка. Это нераскрытое приложение с рекламным SDK или SDK монетизации трафика (средняя уверенность). Работает ли оно как прокси или показывает скрытую рекламу, не доказано. Пересечений по коду, ключам или инфраструктуре с имплантом Triada не найдено.
  • Отключение обоих приложений не остановило внедрение на уровне прошивки.

Чем это опасно

  • Удалённое выполнение кода в каждом приложении, включая Google Play Services, System UI и приложения с аккаунтами пользователя. Оператор может в любой момент отправить произвольный Java- или нативный код и выполнить shell-команды с правами каждого приложения. Это позволяет красть токены аккаунтов, заниматься рекламным мошенничеством, устанавливать приложения и позже менять поведение.
  • Обратный / резидентный прокси. IPProxyCore пропускает выбранный оператором TCP- и UDP-трафик через интернет-подключение владельца. Его журнал показывает подключение к ретранслятору в ноябре 2024 года. Мошенничество, сканирование и другие злоупотребления, пропущенные таким путём, выглядят как идущие с IP-адреса владельца.
  • Сбор данных и возможность кражи аккаунтов. Фреймворк передаёт идентификаторы устройства (рекламный ID, Android ID, MAC, серийный номер). В нём есть модуль кражи ключей аккаунта WhatsApp (на этом телевизоре не запущен). Его TLS-клиенты принимают любой сертификат.
  • Отслеживание устройства. Постоянный идентификатор устройства (sericode / cd) хранится в скрытых папках и сохраняется после очистки данных приложений.
  • Слабое доверие к платформе. Прошивка подписана публичными тестовыми ключами AOSP, а сервис производителя скрытно устанавливает сторонний код.
  • Устойчивость. Инжектор активен с первой загрузки устройства. Его первая стадия может находиться в системном разделе только для чтения, и сброс до заводских настроек её не удаляет.
  • Масштаб. Прошивка собрана для платформы, которая массово продаётся в Узбекистане, поэтому затронуты могут быть многие семьи.

Как проверить свой телевизор

Включите на телевизоре отладку по сети (ADB), подключитесь с компьютера в той же сети и выполните каждую команду отдельно. Ни одна из них не изменяет устройство. Root не нужен.

adb connect <TV-IP>:5555
adb shell getprop ro.build.fingerprint
adb shell getprop ro.build.tags
adb shell ls -la /sdcard/.MLAndroid
adb shell cat /proc/net/tcp
adb shell cat /proc/net/tcp6
adb shell pm list packages -u
adb shell dumpsys package com.android.media.module.services
adb logcat -b all -d
adb pull /system/framework/framework-res.apk
# Проверка Заражён / затронут, если
1 ro.build.fingerprint содержит cvt_mt5863_eu и 20190905 (эта сборка; другие сборки тоже могут быть затронуты)
2 /sdcard/.MLAndroid каталог существует (внутри com.android.btcore.db)
3 logcat сразу после перезагрузки avc: denied … name=".MLAndroid" от zygote или system_server, или строки dex2oat с systemlibarm_*.jar, mms-core.jar или .rtresext/.jar_
4 Удалённые адреса в /proc/net/tcp (little-endian hex) D5B27970 (112.121.178.213, порты 2760 = 10080 и 28CB = 10443) или 04114294 (148.66.17.4, порт 2B48 = 11080)
5 Список пакетов есть com.android.media.module.services; dumpsys package показывает installerPackageName=com.zeasn.services.general
6 apksigner verify --print-certs framework-res.apk на компьютере SHA-1 сертификата 27196e386b875e76adf700e7ea84e4c6eee33dfa (публичный тестовый ключ AOSP)
7 Журналы роутера / DNS запросы к 1g5k5w.com, o96p.com, aaodp.com, uedfd.com, lvditoys.com, 3ko1.com, dv1wi3buwqfbb.cloudfront.net, frostbytesize.com или трафик к IP-адресам из раздела IOC
8 adb shell ls -la /data/dalvik-cache/arm/ (на некоторых сборках может понадобиться root) есть файлы system@framework@boot-acco.oat или system@framework@boot-bridacco.oat

Для просмотра хранилища нагрузки в приложениях (/data/data/<app>/files/.data/) и /data/system/.MLAndroid/ нужен root. Проверка без root опирается на пункты 1–8.

После проверки снова выключите отладку ADB.

Как защититься

  1. Отключите телевизор от интернета (Ethernet и Wi-Fi) или перенесите его в изолированную гостевую сеть или VLAN без доступа к другим домашним устройствам.
  2. Если отключить нельзя, заблокируйте на роутере или в DNS домены и IP-адреса из раздела IOC. Адрес ретранслятора прокси выдаётся во время работы, поэтому блокировка только известных IP неполная.
    • Индикаторы на Cloudflare, CloudFront и BunnyCDN блокируйте по домену, а не по IP: их IP-адреса общие с посторонними сайтами.
    • Фильтрация портов TCP/UDP 10080–11080 для телевизора закрывает наблюдавшиеся порты C2 и ретранслятора.
    • При проверке после блокировки этих индикаторов на роутере активное соединение с C2 исчезло, домены C2 перестали разрешаться, соединения с IP-адресами C2 и ретранслятора завершались по таймауту, а обычные стриминговые сервисы продолжали работать.
  3. Не входите в Google и другие аккаунты на телевизоре. Если аккаунты использовались на нём, выйдите из них с другого устройства и смените пароли.
  4. Сброс до заводских настроек не удаляет это заражение. Исправить его может только чистая прошивка от производителя. До тех пор используйте внешнюю стриминговую приставку и держите телевизор без интернета.

Для производителя (CVTE / Skyworth / Velar / Zeasn): изучить сборку cvt_mt5863_eu от 2019-09-05 и её цепочку поставок, особенно нативные библиотеки, загружаемые zygote (медиастек JNI, среда ART); выпустить чистую прошивку и обновление по воздуху; переподписать прошивку частными release-ключами; объяснить, почему com.zeasn.services.general без согласия пользователя устанавливает упакованное стороннее приложение с рекламным SDK и кто настроил это серверное правило.

Для CERT и Google: заблокировать или перенаправить в sinkhole инфраструктуру C2 (Cloudflare, Amazon CloudFront/AWS, BunnyCDN и Netsec HK могут реагировать на abuse-жалобы по своим индикаторам); уведомить затронутых интернет-провайдеров; проверить статус сертификации Play Protect для этой сборки; координироваться с HUMAN Security (отслеживание BADBOX) и антивирусными компаниями. Правила YARA можно передать им.

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

Все хеши — SHA-256. Образцы хранятся офлайн и передаются только по запросу.

Файлы с телевизора

Файл SHA-256
systemlibarm_10145.jar (загрузчик) c62ed6ed18509ed02165e1a812acda2705e42bd8cf090bb18601750561217059
classes.dex загрузчика a99c9c099ffaf1d6b0224f9482ae20e9ce083948444d29c870d5c92c0f81e4a9
systemlibarm_10145.dex (вывод dex2oat; первые 6 238 байт обнулены) 410ef622801b8264a683f93afa8a976fdaa9da47a0b15881eee6d8066bd19ef8
ylmd_1003.md (зашифрован) 4866a5eb2c7155aff8164185aa62e0b53b03179a0e3d8f0a982a4a15824def4b
ss_1027.md (зашифрован) c1fd9eb701cdb67f783a84d1c8cccb060f379ddeff59394b325082fb25503bca
.oc_1_2004_1_…IPProxyCore (зашифрован; MD5 7fdfcb86a58d2af3572c90fc48a09a32) a526a5fbb1621804b351645c4975b085ed06ffce52bbf49efd4e5e6ee6d243f5
APK com.android.media.module.services v1.1.18 c97195aff98d094ba8b4ddba2c7fc8f26328312ebf5b06e1ecbaab96a90f2c0e
APK com.zeasn.services.general v2.1.13 322a0fd5a601b3c7d096f31992265bf26c6cea8b737e8937b8e434b00af8e6a9
Прошивка libandroid_runtime.so 385f357bee0dd1326d71e24fe776d7ba4279d527bb182ef231a2005ce14896f9
Прошивка libart.so 15c3548b3e87a4a8435c4c78e47eedf83151365fc51029d2abd7f881ffaaa261
Прошивка libmedia_jni.so 55dfa57ced72b19340bc6b84a79c03ccad89dd54b9255e4849bd02f549fe7ea0
Прошивка boot-framework.oat 65ac4b1db475a54c8f892860946addabb541e5a891e80e0a533b85bc4ed7a85e

Расшифрованные модули (получены из файлов выше)

Модуль Расшифрованный ZIP classes.dex
ylmd_1003 (фреймворк) 987955308c3c1e4ebc0c1e0261a3ff08a2d82582e2a88bde733ec8fb806c472f 2b72aa1040ad64f881244c5438a3933c1ad718d815b8b6cbd08e264084c2ca5c
ss_1027 (заглушка) 48db499a439560ae7f3f32bd21859dc5f7ba0ca80ee64061449607a9042d7393 aa2cac622785ec0e71ec07bf4b361bac71cc73276564c778845985d18b809e0b
IPProxyCore (обратный прокси) b2ee5685e81e3a5c148954cf7d1d10e96caea8090e62fb5644f58d919e41eab4 53264eca4a42f41b3931df73dffd894a7ca6de0dc2c60c56386296eed4923566
TKEntry (кража данных WhatsApp, не запущен) bfbd2be05a24adb5fb2845762bd99309fc8c7b8ea5cf07822fbc8949a71b66d7 7302f3ac6cf4442cc44f5f19bb173df2efe8a87dc4ec70a2261e3cb83f35f32b

Сетевые индикаторы (по состоянию на 2026-10-21; могут меняться)

Индикатор Адрес Роль
XA1847.1g5k5w.com, 77o6S5.1g5k5w.com, 2TX120.1g5k5w.com, 7y3luK.1g5k5w.com (:10080); sXSplO.1g5k5w.com, hrqchb.1g5k5w.com (:10443) 112.121.178.213 (Netsec Limited HK, 112.121.160.0/19) Список доменов в btdoinfo.db. Активное соединение от uid GMS
i4njg2.o96p.com, qobtwp.o96p.com CloudFront C2 за CDN (btdoinfo.db)
https://vdy8jd.aaodp.com:10430/PhDomainf/recdot 216.118.232.45 Восстановление списка доменов
https://216.118.228.253:10430/PhRecoverf/recip — Восстановление IP
https://hcnk.uedfd.com/OadCtrl/if, /OadCtrl/bt 188.114.96.11, 188.114.97.11 (Cloudflare) Опрос задач и отчёты фреймворка (использовался на этом телевизоре)
https://bk79n.uedfd.com/DLLogic/if, /DLLogic/bt, /DLLogic/app/token Cloudflare Опрос задач для других устройств; вывод данных WhatsApp
https://n6x5.uedfd.com/AdLogic/if, /AdLogic/bt Cloudflare База OAD-модулей (IPProxyCore)
https://dv1wi3buwqfbb.cloudfront.net/ProxyGateway/apply/service CloudFront Шлюз прокси: выдаёт хост/порт ретранслятора
148.66.17.4:11080 — Ретранслятор прокси (ноябрь 2024, .ss_log)
http://p8ydfra.lvditoys.com/DLBehavior/bt CloudFront Отчёты варианта загрузчика
https://ivwbczv.3ko1.com/zvqmks/patch BunnyCDN, 138.199.24.219 Выдача ID устройства (вариант)
https://saas.zeasn.tv/sp/api/device/v1/app/silent, …/app/download, …/auth-api/api/v1/auth/deviceSign, http://saas.zeasn.tv/log/open/report 108.128.156.113 (AWS eu-west-1) Канал скрытой установки производителя
meta365.frostbytesize.com 52.17.197.71, 108.132.135.213 (AWS eu-west-1) Управляющий хост рекламного SDK (закреплённый частный CA)
Проект Firebase mac-ad-9f1ee (sender 565791277901) Google Телеметрия рекламного APK

Пути к файлам, имена и другие артефакты

  • Загрузчик: /data/data/<любой пакет>/systemlibarm_<N>.jar / .dex (здесь N = 10145); /data/data/{com.android.systemui,com.google.android.gms}/mms-core.jar.
  • Стадии инжектора: /data/dalvik-cache/arm/system@framework@boot-acco.oat, /data/dalvik-cache/arm/system@framework@boot-bridacco.oat.
  • Хранилища ID устройства: /data/system/.MLAndroid/, /data/misc/.MLAndroid/, /sdcard/.MLAndroid/ с com.android.btcore.db и timeStampMask.db; /system/etc/com.android.btcore.db (путь, который читает фреймворк).
  • Хранилище нагрузки (в GMS, браузере и, возможно, любом приложении): <app>/files/.data/, где лежат
    • ylmd_1003.md, ss_1027.md, btdoinfo.db, phone.db, timeStampMask.db, bt_mark_recover.db, .ss_log, .tkupdata.db;
    • .ylc/.rtresext/, .ylc/.rtmarkext/, .ylc/.rtinfosext/info.db;
    • .oc_<status>_<id>_<status>_<Base64(class)>\n (имя заканчивается переводом строки);
    • временные файлы .jar_<…>.
  • Состояние IPProxyCore: <app>/files/.rtmark/.oci/.data_<id>/ с .odi_<id>.db, .ss_log, .ss_fp, .ss_ll, .ss_id; тег wake-lock PhoneWakelockTag.
  • Классы: com.android.core.info.config.LDMCore, com.android.ml.bt.dymc.*, com.android.ml.bt.core.OPBDomainInfo, com.android.xb.ylmd_1003.*, com.android.xb.ss_1027.*, com.ds.server.DSCore, com.android.oad.ipproxy.IPProxyCore, com.dl.tk.TKEntry.
  • Broadcast-действия: com.dymc.<md5(package)>.lddex, com.dymc.<md5(package)>.ldso, LTF3OGYILC57K903ZDR4L8TBN1IYHJV4. Тег журнала: EXPML. Локальный сервис: порт 45884 на самом устройстве (вариант).
  • Сертификаты: тестовый платформенный ключ AOSP, SHA-256 c8a2e9bccf597c2fb6dc66bee293fc13f2fc47ec77bc6b2b0d52c11f51192ab8 (прошивка и APK Zeasn); подписант рекламного APK CN=socket, O=China, SHA-256 b0a71babf3c7cb18ba80df3c7bffd3a5ba89da32e5d37a31c63504133fcc5c74.
  • Артефакты канала производителя: /data/data/com.zeasn.services.general/shared_prefs/ad_service_sdk.xml (ad_rule_data), /data/data/com.zeasn.services.general/files/ad_service_<ver>.apk.

Правила YARA (8 для импланта Triada, 4 для рекламного APK) срабатывают на всех локальных образцах. На 60 чистых dex-файлах фреймворка и при сканировании 533 системных файлов ложных срабатываний не было. На широком наборе чистых файлов они не проверялись. Правила будут переданы CERT и антивирусным компаниям.

Доказательства

Журналы, копии вредоносных файлов, копии системного раздела, расшифрованные модули и скрипты анализа хранятся с хешами SHA-256. Образцы вредоносной программы передаются только по запросу, получателям, которых выбирает владелец.

Источники