Телевизор с вредоносной программой с завода: бэкдор семейства Triada
В прошивке 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 внутри его процесса подавлялся. Затем журнал загрузки показал две вещи:
- zygote и system_server пытались открыть скрытые папки
.MLAndroid. SELinux запретил это, поэтому попытки попали в журнал. - При каждом запуске приложения
dex2oatкомпилировал неизвестныйsystemlibarm_10145.jarв папке данных этого приложения.
Данные собраны через ADB в локальной сети. Анализ был только офлайн и статическим: ни один образец не запускался и никуда не загружался. Для каждого собранного файла записан хеш SHA-256.
Технический анализ
Рисунок 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получает AndroidContextчерез рефлексию по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-клиенты в этих модулях принимают любой сертификат сервера.
Рисунок 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, Ирландия); проект Firebasemac-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.
Как защититься
- Отключите телевизор от интернета (Ethernet и Wi-Fi) или перенесите его в изолированную гостевую сеть или VLAN без доступа к другим домашним устройствам.
- Если отключить нельзя, заблокируйте на роутере или в DNS домены и IP-адреса из раздела IOC. Адрес ретранслятора прокси выдаётся во время работы, поэтому блокировка только известных IP неполная.
- Индикаторы на Cloudflare, CloudFront и BunnyCDN блокируйте по домену, а не по IP: их IP-адреса общие с посторонними сайтами.
- Фильтрация портов TCP/UDP 10080–11080 для телевизора закрывает наблюдавшиеся порты C2 и ретранслятора.
- При проверке после блокировки этих индикаторов на роутере активное соединение с C2 исчезло, домены C2 перестали разрешаться, соединения с IP-адресами C2 и ретранслятора завершались по таймауту, а обычные стриминговые сервисы продолжали работать.
- Не входите в Google и другие аккаунты на телевизоре. Если аккаунты использовались на нём, выйдите из них с другого устройства и смените пароли.
- Сброс до заводских настроек не удаляет это заражение. Исправить его может только чистая прошивка от производителя. До тех пор используйте внешнюю стриминговую приставку и держите телевизор без интернета.
Для производителя (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) |
Телеметрия рекламного 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-lockPhoneWakelockTag. - Классы:
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); подписант рекламного APKCN=socket, O=China, SHA-256b0a71babf3c7cb18ba80df3c7bffd3a5ba89da32e5d37a31c63504133fcc5c74. - Артефакты канала производителя:
/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. Образцы вредоносной программы передаются только по запросу, получателям, которых выбирает владелец.
Источники
- Kaspersky, "Triada strikes back" (2025-04-25): https://securelist.com/triada-trojan-modules-analogy/116380/
- Kaspersky, "Attack on Zygote" (2016): https://securelist.com/attack-on-zygote-a-new-twist-in-the-evolution-of-mobile-threats/74032/
- Dr.Web, Android.Triada.231 (2017): https://news.drweb.com/show/?i=11390
- FBI PSA I-060525, BADBOX 2.0 (2025): https://www.ic3.gov/psa/2025/psa250605